<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Unknown</title>
    <description>Best wishes to you</description>
    <link>https://Zeusro.github.io/</link>
    <atom:link href="https://Zeusro.github.io/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Tue, 03 Mar 2026 14:32:19 +0000</pubDate>
    <lastBuildDate>Tue, 03 Mar 2026 14:32:19 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>信息技术的熵减定律</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    
&lt;p&gt;我提出过信息技术的第一悖论：&lt;strong&gt;信息技术是一种反人类的技术&lt;/strong&gt;。而在《&lt;a href=&quot;https://www.zeusro.com/2026/02/04/fimbulwinter/?lang=zh&quot;&gt;公有云的诸神黄昏&lt;/a&gt;》文章中，我总结了信息技术行业的熵增定律以及“0号规律”——&lt;strong&gt;边际收益为0的代码重构没人愿意做&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;今天我要反驳0号规律，并提出一个新“熵减定律”——在后现代编程中，&lt;strong&gt;人类存在的意义在于降低代码的时间序列复杂度（n&amp;lt;n-1），确保代码的确定性&lt;/strong&gt;。&lt;/p&gt;

&lt;h2 id=&quot;屎山代码存在的合理性以及重构的必要性&quot;&gt;屎山代码存在的合理性以及重构的必要性&lt;/h2&gt;

&lt;p&gt;如果你反编译过一些游戏的安卓apk文件，就会发现里面存在大量冗余的美术资源，这些美术资源跟当前版本没半毛钱关系。它们是一种历史遗留的垃圾代码。&lt;/p&gt;

&lt;p&gt;而由于0号规律的存在，没有任何程序员愿意去重构以及删除相关的美术资源。这也解释了“王者荣耀”的安装包一再膨胀，直至后来提出了“清理历史道具”和“模块化按需下载资源”的解题思路，当然有一部分人吐槽更新完之后“粽子”变成一堆堆人机一样的图标。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/a5ea41ff2d7691e097a223d17031c6a3_720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;至于为什么这么做，其实涉及到博弈论的一个基本论述：&lt;strong&gt;局部最优解未必全局最优&lt;/strong&gt;。对于游戏开发者而言，为了增加新的收入，必定需要构造新的叙事。而清理历史债务不会在游戏的财务上有所体现。&lt;/p&gt;

&lt;p&gt;但对于游戏用户和运营公司而言，日渐膨胀的安装包推高了CDN的流量成本，垃圾代码的堆积也延长了用户下载打开游戏所需要的时间，甚至有可能引起操作卡顿。&lt;/p&gt;

&lt;p&gt;如果用熵增定律去衡量软件开发的流程，就会发现程序设计的屎山是一种必然，从某种程度上是软件开发工程师的一种“防御性编程”。&lt;/p&gt;

&lt;h2 id=&quot;防御性编程还是过度设计&quot;&gt;防御性编程还是过度设计？&lt;/h2&gt;

&lt;p&gt;从政治经济学角度出发，软件开发工程师本质上依旧是不掌握生产资料的“进城农民工”。从入职公司的那一刻起，所思所写都是公司的“数字资产”。这在美剧《硅谷》中亦有所体现：Richard在Hooli工作时，利用业余时间（但部分使用了公司电脑进行测试）开发了革命性的无损数据压缩算法，并以此为基础创立了Pied Piper公司。&lt;/p&gt;

&lt;p&gt;当Pied Piper开始崭露头角后，Hooli（由Gavin Belson领导）在第二季中正式起诉Pied Piper，指控Richard“窃取”了属于Hooli的知识产权（copyright infringement），声称根据Richard与Hooli签订的雇佣合同（包含发明转让条款），他在职期间开发的代码及其相关技术归Hooli所有。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/GT5mot-XYAAI9Z3.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;与公司抗衡是不明智的。因此为了规避被裁员的风险，软件开发工程师除了不写文档之外，滥用设计模式、使用反射隐式调用方法、过度设计，也都是常见手法。&lt;/p&gt;

&lt;p&gt;我有时真的搞不懂，用人单位为了压低薪资而询问我各种“单机高并发”，“秒杀”问题。最夸张的莫过于问我“数百万用户同时在线”这种荒诞的问题。
而在平行世界的另一边，我看了一下那份岗位对应的薪资对应的职责。&lt;/p&gt;

&lt;p&gt;在有AI帮助的情况下，我当然可以设计一个流程去适配这些场景。问题在于，在使用了Redis分布式锁，Redis集群，kubernetes HPA动态扩缩容，微服务、消息中间件解耦之后，代码产生的实际收益在于哪里？我们做出来的产品是否真的有那么多付费的用户？把一个重要的系统交给一个边缘的外部服务商员工是否合适？&lt;/p&gt;

&lt;p&gt;回到那个面试场景，最终我没有跟他们浪费时间，我建议他们通过新浪微博发起抽奖解决商品秒杀的场景问题，然后我&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Command+Q&lt;/code&gt;结束了整个远程会话。&lt;/p&gt;

&lt;h2 id=&quot;科学熵减大家都轻松&quot;&gt;科学熵减大家都轻松&lt;/h2&gt;

&lt;p&gt;回望第二次世界大战之后的世界，我们在一片废墟之上，又重新构建了新的高楼大厦。信息技术到现在未到百年，终末的号角便已吹响。如果说这个行业也会随着人工智能技术而逐渐式微，那么少用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C++&lt;/code&gt;避免猝死，多用GC语言，做好AI coding的最后QA。&lt;/p&gt;

&lt;p&gt;这样每天下班还能看到尚未暗淡的天空，不好吗？&lt;/p&gt;

&lt;h2 id=&quot;nn-1&quot;&gt;n&amp;lt;n-1&lt;/h2&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    
&lt;p&gt;I once proposed the first paradox of information technology: &lt;strong&gt;information technology is an anti-human technology&lt;/strong&gt;. In my article &lt;a href=&quot;https://www.zeusro.com/2026/02/04/fimbulwinter/?lang=en&quot;&gt;The Twilight of the Public Cloud&lt;/a&gt;, I summarized the law of entropy increase in the IT industry and “Rule Zero” — &lt;strong&gt;nobody wants to do code refactoring whose marginal benefit is zero&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Today I want to refute Rule Zero and propose a new “The Second Law of Information Technology” — in post-modern programming, &lt;strong&gt;the human purpose is to reduce the time-series complexity of code (n&amp;lt;n-1) and ensure code determinism&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-rationality-of-legacy-code-and-the-necessity-of-refactoring&quot;&gt;The Rationality of Legacy Code and the Necessity of Refactoring&lt;/h2&gt;

&lt;p&gt;If you have ever decompiled the Android APK of a game, you will find a large number of redundant art assets inside — assets completely unrelated to the current version. They are historically inherited garbage code.&lt;/p&gt;

&lt;p&gt;Due to Rule Zero, no programmer is willing to refactor or delete these art assets. This also explains why the installation package of &lt;em&gt;Honor of Kings&lt;/em&gt; kept growing, until solutions like “clear historical props” and “modular on-demand resource downloads” were finally proposed — though some players complained that after the update, the “Zongzi” skin turned into a pile of bot-like icons.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/a5ea41ff2d7691e097a223d17031c6a3_720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Why does this happen? It comes down to a basic principle of game theory: &lt;strong&gt;a local optimum is not necessarily a global optimum&lt;/strong&gt;. For game developers, constructing new narratives is essential for generating new revenue. Clearing historical technical debt has no direct reflection on the game’s financials.&lt;/p&gt;

&lt;p&gt;But for players and operators, bloated installation packages drive up CDN traffic costs, and the accumulation of garbage code prolongs the time users need to download and open the game — and may even cause lag.&lt;/p&gt;

&lt;p&gt;If you use the law of entropy increase to evaluate the software development process, you will find that a “shit mountain” codebase is inevitable — to some extent, it is a form of “defensive programming” by software engineers.&lt;/p&gt;

&lt;h2 id=&quot;defensive-programming-or-over-engineering&quot;&gt;Defensive Programming or Over-Engineering?&lt;/h2&gt;

&lt;p&gt;From a political-economic perspective, software engineers are fundamentally still “migrant workers” who do not own the means of production. From the moment they join a company, everything they think and write becomes the company’s “digital assets.” This is reflected in the US TV series &lt;em&gt;Silicon Valley&lt;/em&gt;: while working at Hooli, Richard used his personal time (though partially on company computers for testing) to develop a revolutionary lossless data compression algorithm, and founded Pied Piper on that basis.&lt;/p&gt;

&lt;p&gt;As Pied Piper began to gain traction, Hooli (led by Gavin Belson) formally sued Pied Piper in season two, accusing Richard of “stealing” Hooli’s intellectual property (copyright infringement), claiming that under Richard’s employment contract with Hooli (which included an invention assignment clause), all code and related technology he developed during his employment belonged to Hooli.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/GT5mot-XYAAI9Z3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Fighting the company is unwise. To guard against the risk of being laid off, software engineers resort to more than just avoiding documentation — abusing design patterns, using reflection for implicit method calls, and over-engineering are all common tactics.&lt;/p&gt;

&lt;p&gt;I sometimes genuinely don’t understand: employers ask me about “single-machine high concurrency” and “flash sale” scenarios just to negotiate salaries down. The most absurd was being asked about “millions of users online simultaneously.”
On the other side of a parallel world, I took a look at the salary and responsibilities for that position.&lt;/p&gt;

&lt;p&gt;With AI assistance, I could certainly design a workflow to handle these scenarios. The real question is: after deploying Redis distributed locks, Redis clusters, Kubernetes HPA auto-scaling, microservices, and message broker decoupling — where is the actual return on that code? Does our product truly have that many paying users? Is it appropriate to hand a critical system over to an employee of a marginal third-party vendor?&lt;/p&gt;

&lt;p&gt;Back to that interview: I didn’t bother wasting my time with them. I suggested they run a Sina Weibo lottery to solve the flash sale scenario problem, then hit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Command+Q&lt;/code&gt; to end the entire remote session.&lt;/p&gt;

&lt;h2 id=&quot;scientific-entropy-reduction-makes-everyones-life-easier&quot;&gt;Scientific Entropy Reduction Makes Everyone’s Life Easier&lt;/h2&gt;

&lt;p&gt;Looking back at the world after World War II, we rebuilt towering structures from ruins. Information technology has not yet reached a hundred years, and already the final horn is sounding. If this industry is destined to gradually fade with the rise of artificial intelligence, then use less &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C++&lt;/code&gt; to avoid sudden death, use more GC languages, and serve as the final QA for AI coding.&lt;/p&gt;

&lt;p&gt;That way you can still see a sky that hasn’t faded when you leave work each day — isn’t that a better thing?&lt;/p&gt;

&lt;h2 id=&quot;nn-1&quot;&gt;n&amp;lt;n-1&lt;/h2&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    
&lt;p&gt;私はかつて情報技術の第一逆説を提唱した：&lt;strong&gt;情報技術は反人間的な技術である&lt;/strong&gt;。&lt;a href=&quot;https://www.zeusro.com/2026/02/04/fimbulwinter/?lang=jp&quot;&gt;パブリッククラウドの黄昏&lt;/a&gt;という記事で、私はIT業界のエントロピー増大の法則と「ゼロ号規則」——&lt;strong&gt;限界利益ゼロのコードリファクタリングは誰もやりたがらない&lt;/strong&gt;——をまとめた。&lt;/p&gt;

&lt;p&gt;今日、私はゼロ号規則を否定し、新たな「情報技術の第二法則」を提唱する——ポストモダンプログラミングにおいて、&lt;strong&gt;人間の使命はコードの時系列複雑度を低下させ（n&amp;lt;n-1）、コードの確定性を確保すること&lt;/strong&gt;である。&lt;/p&gt;

&lt;h2 id=&quot;レガシーコードが存在する合理性とリファクタリングの必要性&quot;&gt;レガシーコードが存在する合理性とリファクタリングの必要性&lt;/h2&gt;

&lt;p&gt;ゲームのAndroid APKを逆コンパイルしたことがあれば、現在のバージョンとは無関係な大量の冗長な美術リソースが含まれていることに気づくだろう。それらは歴史的に受け継がれたガベージコードだ。&lt;/p&gt;

&lt;p&gt;ゼロ号規則の存在により、誰もこれらの美術リソースをリファクタリングしたり削除したりしたがらない。これは「王者栄耀（Honor of Kings）」のインストールパッケージが膨れ上がり続けた理由を説明する。最終的に「過去のアイテムの整理」と「モジュール式オンデマンドリソースダウンロード」という解決策が提案されたが、アップデート後に「ちまき」スキンがボットのようなアイコンの山に変わったと批判する人もいた。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/a5ea41ff2d7691e097a223d17031c6a3_720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;なぜこうなるのか？ゲーム理論の基本的な命題に行き着く：&lt;strong&gt;局所最適は必ずしも大域最適ではない&lt;/strong&gt;。ゲーム開発者にとって、新しい収益を生み出すには新しい物語を構築しなければならない。歴史的技術負債の解消はゲームの財務には反映されない。&lt;/p&gt;

&lt;p&gt;しかしゲームユーザーと運営会社にとって、膨張するインストールパッケージはCDNのトラフィックコストを押し上げ、ガベージコードの蓄積はユーザーがゲームをダウンロードして起動するのに必要な時間を延ばし、操作のラグを引き起こす可能性すらある。&lt;/p&gt;

&lt;p&gt;エントロピー増大の法則でソフトウェア開発プロセスを評価するなら、コードの「ゴミ山」は必然であり、ある意味ではソフトウェアエンジニアによる「防御的プログラミング」の一形態だと気づくだろう。&lt;/p&gt;

&lt;h2 id=&quot;防御的プログラミングか過剰設計か&quot;&gt;防御的プログラミングか過剰設計か？&lt;/h2&gt;

&lt;p&gt;政治経済学の観点から見れば、ソフトウェアエンジニアは本質的に生産手段を持たない「出稼ぎ労働者」だ。会社に入社した瞬間から、考えることや書くことはすべて会社の「デジタル資産」になる。これは米ドラマ『シリコンバレー』にも描かれている：RichardはHooliで働きながら、個人の時間（一部は会社のパソコンを使ってテスト）を使って革命的なロスレスデータ圧縮アルゴリズムを開発し、それを基にPied Piperを創立した。&lt;/p&gt;

&lt;p&gt;Pied Piperが頭角を現し始めると、Hooli（Gavin Belson率いる）はシーズン2でPied Piperを正式に提訴し、Richardが同社の知的財産（著作権）を「盗んだ」と訴えた。RichardとHooliの雇用契約（発明譲渡条項を含む）に基づき、在職中に開発したすべてのコードと関連技術はHooliの所有物だと主張した。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/GT5mot-XYAAI9Z3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;会社と対立するのは得策ではない。解雇リスクを避けるため、ソフトウェアエンジニアは文書を書かないだけでなく、デザインパターンの乱用、リフレクションによる暗黙的なメソッド呼び出し、過剰設計なども常套手段だ。&lt;/p&gt;

&lt;p&gt;採用担当者が「シングルマシン高並行」や「フラッシュセール」の問題を私に聞くのは、単に給与を下げるためだと時々本当に理解できない。最も極端だったのは「数百万人が同時オンライン」というような馬鹿げた質問だった。
そして並行世界の反対側では、そのポジションの給与と対応する職責を見てみると……。&lt;/p&gt;

&lt;p&gt;AIの助けがあれば、これらのシナリオに対応するワークフローを設計することは当然できる。問題は、Redisの分散ロック、Redisクラスター、Kubernetes HPAの自動スケーリング、マイクロサービス、メッセージブローカーのデカップリングを使った後、コードの実際のリターンはどこにあるのかということだ。私たちの製品に本当にそれほど多くの有料ユーザーはいるのか？重要なシステムを周辺的な外部ベンダーの社員に任せることは適切なのか？&lt;/p&gt;

&lt;p&gt;あの面接に戻ると、最終的に彼らと時間を無駄にしなかった。新浪微博でくじ引き抽選を行って商品のフラッシュセールシナリオ問題を解決するよう提案し、それから&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Command+Q&lt;/code&gt;でリモートセッション全体を終了した。&lt;/p&gt;

&lt;h2 id=&quot;科学的なエントロピー削減で皆が楽になる&quot;&gt;科学的なエントロピー削減で皆が楽になる&lt;/h2&gt;

&lt;p&gt;第二次世界大戦後の世界を振り返れば、廃墟の上から新しい高層ビルを再建した。情報技術はまだ百年も経っておらず、すでに終末のラッパが鳴り響いている。もしこの業界が人工知能の台頭とともに徐々に衰退していくとしたら、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C++&lt;/code&gt;の使用を減らして突然死を避け、GC言語を多く使い、AIコーディングの最後のQAを担おう。&lt;/p&gt;

&lt;p&gt;そうすれば毎日仕事終わりに、まだ色あせていない空を見ることができる——それでいいじゃないか？&lt;/p&gt;

&lt;h2 id=&quot;nn-1&quot;&gt;n&amp;lt;n-1&lt;/h2&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    
&lt;p&gt;Я однажды предложил первый парадокс информационных технологий: &lt;strong&gt;информационные технологии — это антигуманная технология&lt;/strong&gt;. В статье &lt;a href=&quot;https://www.zeusro.com/2026/02/04/fimbulwinter/?lang=ru&quot;&gt;Сумерки публичного облака&lt;/a&gt; я сформулировал закон возрастания энтропии в IT-отрасли и «Правило ноль» — &lt;strong&gt;никто не хочет делать рефакторинг кода с нулевой предельной выгодой&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Сегодня я хочу опровергнуть Правило ноль и предложить новый «Второй закон информационных технологий» — в постмодернистском программировании &lt;strong&gt;роль человека состоит в снижении временно́й последовательной сложности кода (n&amp;lt;n-1) и обеспечении детерминированности кода&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;обоснованность-существования-горы-мусора-и-необходимость-рефакторинга&quot;&gt;Обоснованность существования «горы мусора» и необходимость рефакторинга&lt;/h2&gt;

&lt;p&gt;Если вы когда-либо декомпилировали Android APK игры, то обнаружили бы огромное количество избыточных художественных ресурсов, не имеющих никакого отношения к текущей версии. Это исторически унаследованный мусорный код.&lt;/p&gt;

&lt;p&gt;Из-за Правила ноль ни один программист не хочет рефакторить или удалять эти художественные ресурсы. Это объясняет, почему установочный пакет &lt;em&gt;Honor of Kings&lt;/em&gt; постоянно разрастался, пока наконец не были предложены решения в виде «очистки исторических предметов» и «модульной загрузки ресурсов по запросу» — хотя некоторые игроки жаловались, что после обновления скин «цзунцзы» превратился в груду иконок, похожих на ботов.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/a5ea41ff2d7691e097a223d17031c6a3_720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Почему так происходит? Это связано с фундаментальным тезисом теории игр: &lt;strong&gt;локальный оптимум не обязательно является глобальным оптимумом&lt;/strong&gt;. Для разработчиков игр новые нарративы необходимы для получения нового дохода. Устранение исторического технического долга никак не отражается в финансовых показателях игры.&lt;/p&gt;

&lt;p&gt;Однако для пользователей и операторов разрастающийся установочный пакет увеличивает затраты на CDN-трафик, а накопление мусорного кода удлиняет время загрузки и запуска игры — и может даже привести к зависаниям.&lt;/p&gt;

&lt;p&gt;Если оценивать процесс разработки программного обеспечения через призму закона возрастания энтропии, становится ясно, что «гора мусора» в коде неизбежна — в определённой мере это «защитное программирование» со стороны разработчиков.&lt;/p&gt;

&lt;h2 id=&quot;защитное-программирование-или-чрезмерное-проектирование&quot;&gt;Защитное программирование или чрезмерное проектирование?&lt;/h2&gt;

&lt;p&gt;С точки зрения политической экономии, разработчики программного обеспечения по-прежнему остаются «приезжими рабочими», не владеющими средствами производства. С момента прихода в компанию всё, о чём они думают и что пишут, становится «цифровым активом» компании. Это нашло отражение в американском сериале «Кремниевая долина»: работая в Hooli, Ричард в свободное время (хотя частично использовал рабочий компьютер для тестирования) разработал революционный алгоритм сжатия данных без потерь и основал на его базе компанию Pied Piper.&lt;/p&gt;

&lt;p&gt;Когда Pied Piper начала набирать обороты, Hooli (во главе с Гэвином Белсоном) во втором сезоне официально подала на Pied Piper в суд, обвинив Ричарда в «краже» интеллектуальной собственности Hooli (нарушении авторских прав), утверждая, что согласно трудовому договору Ричарда с Hooli (включавшему пункт о передаче изобретений), весь написанный им код и связанные технологии принадлежат Hooli.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/entropy-reduction-law/GT5mot-XYAAI9Z3.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Противостоять компании неразумно. Поэтому, чтобы снизить риск увольнения, разработчики прибегают не только к отказу от документирования — злоупотребление шаблонами проектирования, неявный вызов методов через рефлексию и чрезмерное проектирование тоже относятся к распространённым тактикам.&lt;/p&gt;

&lt;p&gt;Иногда я действительно не понимаю: работодатели спрашивают меня о «высоком параллелизме на одной машине» и задачах «flash sale» лишь для того, чтобы сбить зарплату. Самое абсурдное — вопрос о «миллионах пользователей одновременно онлайн».
А в параллельном мире я посмотрел на предлагаемую зарплату и обязанности для этой вакансии.&lt;/p&gt;

&lt;p&gt;При помощи ИИ я, конечно, могу разработать процесс для этих сценариев. Вопрос в другом: после применения распределённых блокировок Redis, кластеров Redis, автомасштабирования Kubernetes HPA, микросервисов и развязки через брокер сообщений — в чём реальная отдача от такого кода? Действительно ли у нашего продукта столько платящих пользователей? Уместно ли доверять важную систему сотруднику сторонней периферийной компании?&lt;/p&gt;

&lt;p&gt;Возвращаясь к тому собеседованию: я не стал тратить с ними время. Предложил им провести лотерею в Sina Weibo для решения сценария с flash sale товаров, а затем нажал &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Command+Q&lt;/code&gt; и завершил весь удалённый сеанс.&lt;/p&gt;

&lt;h2 id=&quot;научное-снижение-энтропии-облегчает-жизнь-всем&quot;&gt;Научное снижение энтропии облегчает жизнь всем&lt;/h2&gt;

&lt;p&gt;Оглядываясь на мир после Второй мировой войны: мы возвели новые небоскрёбы из руин. Информационным технологиям ещё нет ста лет, а финальный горн уже трубит. Если эта отрасль всё же будет постепенно угасать с развитием искусственного интеллекта — используйте меньше &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C++&lt;/code&gt;, чтобы избежать внезапной смерти, больше GC-языков и станьте последним QA для AI-кодинга.&lt;/p&gt;

&lt;p&gt;Так вы сможете каждый вечер, возвращаясь домой, видеть небо, которое ещё не потускнело — разве это плохо?&lt;/p&gt;

&lt;h2 id=&quot;nn-1&quot;&gt;n&amp;lt;n-1&lt;/h2&gt;

&lt;/div&gt;
</description>
        <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/03/01/entropy-reduction-law/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/03/01/entropy-reduction-law/</guid>
        
        <category>code</category>
        
        
      </item>
    
      <item>
        <title>时间序列元编程</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    
&lt;p&gt;由于时间序列库原始的论文&lt;a href=&quot;http://github.com/zeusro/data&quot;&gt;http://github.com/zeusro/data&lt;/a&gt;已经丢失了，我只能按照有限的回忆一点点拼凑起时间序列那部分的内容。&lt;/p&gt;

&lt;p&gt;只有经过时间的实践，才能验证程序的正确性。因此我提出时间序列元编程模型。这是一种对现实世界提出建模的新程序范式，是编程语言无关的设计哲学。&lt;/p&gt;

&lt;p&gt;在此基础上引入&lt;strong&gt;时间序列复杂度&lt;/strong&gt;：在满足传统时间/空间复杂度前提下，用二维图（t 与内存利用率等）乃至三维图（加入 CPU/GPU 负载）刻画算法实际耗时与资源利用。&lt;/p&gt;

&lt;h2 id=&quot;时间序列&quot;&gt;时间序列&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;时间序列&lt;/strong&gt;：按时间顺序排列、记录同一对象状态随时间变化的一组数据。
时间序列只有&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt;作为唯一API。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt;可以按照顺序分化为&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt;和&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Write&lt;/code&gt;接口。&lt;/p&gt;

&lt;h2 id=&quot;时间序列对象&quot;&gt;时间序列对象&lt;/h2&gt;

&lt;p&gt;时间序列对象，时间必须是第一成员，并且在初始化函数中体现。
基于时间而生成的数据都是时序数据。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;GoldenStaff&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NLine&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;//金箍棒 参数化线段（Parametric Segment）&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;//消费者规模&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;//算法规模&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;时间序列函数&quot;&gt;时间序列函数&lt;/h2&gt;

&lt;p&gt;时间序列函数，时间必须是第一成员。返回参数第一成员必须是时间序列对象。
传入的时间与传出的时间，表示函数的时间上下界。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;// NewDeadMonkey&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// m 作战对象&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// n 唯一资源数/算法规模&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;c&quot;&gt;//只要不跟前面的点重复就行，全局重复也忽略了&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Compare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// SleepAndReturnNewTime 接收一个时间参数，随机 sleep 一段时间后返回最新时间&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SleepAndReturnNewTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inputTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// 设置随机种子&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Seed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UnixNano&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// 生成随机的 sleep 时间，范围为 1 到 5 秒&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Intn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Second&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Sleep 随机时间&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sleep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// 返回当前时间&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;时间序列距离&quot;&gt;时间序列距离&lt;/h2&gt;

&lt;p&gt;使用时间+其他条件的复合判断（比如在4维球面中，可以只使用距离作为换算；也可以使用时间+Haversine公式换算）。&lt;/p&gt;

&lt;h2 id=&quot;时间序列日志&quot;&gt;时间序列日志&lt;/h2&gt;

&lt;p&gt;打印内容必须是“时间+内容”的格式。&lt;/p&gt;

&lt;h2 id=&quot;时间序列复杂度&quot;&gt;时间序列复杂度&lt;/h2&gt;

&lt;p&gt;时间序列复杂度（Time Series Complexity）：在满足时间复杂度以及空间复杂度的前置性论述下，算法执行的实际时间以及内存资源的利用效率。&lt;/p&gt;

&lt;p&gt;时间序列复杂度是一个二维图表。X轴是t，Y轴是&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(used - buff/cache) / total&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;Y轴可以按照实际需要，使用其他的标准，比如CPU/GPU的整体利用率。&lt;/p&gt;

&lt;p&gt;单位时间序列复杂度是一个三维图表。 不过三维图表过于抽象，可以降维成2个2维图表。或者合并Y轴，变成一个二维图表的两条曲线。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;单位CPU时间序列复杂度&lt;/strong&gt;是一个三维图表。 X轴是t， Y轴是(used - buff/cache) / total， Z轴是cpu_load1。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;单位GPU时间序列复杂度&lt;/strong&gt;是一个三维图表。 X轴是t， Y轴是(used - buff/cache) / total， Z轴是gpu_utilization。&lt;/p&gt;

&lt;p&gt;时间序列复杂度需要对程序进行可观测性分析。&lt;/p&gt;

&lt;h2 id=&quot;时间序列空间&quot;&gt;时间序列空间&lt;/h2&gt;

&lt;p&gt;由时间序列组成的2维以上空间。&lt;/p&gt;

&lt;p&gt;在OOOS&lt;a href=&quot;https://github.com/zeusro/system&quot;&gt;https://github.com/zeusro/system&lt;/a&gt;中，我将会尽可能地使用这种编程范式。&lt;/p&gt;

&lt;p&gt;比如&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;无锁并发访问受限资源的平行时空算法（&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&lt;/a&gt;）&lt;/li&gt;
  &lt;li&gt;Y函数（&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;p&gt;The original paper for the time-series library &lt;a href=&quot;http://github.com/zeusro/data&quot;&gt;http://github.com/zeusro/data&lt;/a&gt; has been lost, so I can only piece together the time-series part from limited memory.&lt;/p&gt;

&lt;p&gt;Only through practice over time can the correctness of a program be verified. I therefore propose the time-series meta-programming model—a new programming paradigm for modeling the real world, a design philosophy independent of programming language.&lt;/p&gt;

&lt;p&gt;On this basis, &lt;strong&gt;time-series complexity&lt;/strong&gt; is introduced: under the premise of satisfying traditional time and space complexity, two-dimensional plots (e.g. t vs. memory utilization) and even three-dimensional plots (adding CPU/GPU load) are used to characterize the actual execution time and resource utilization of algorithms.&lt;/p&gt;

&lt;h2 id=&quot;time-series&quot;&gt;Time Series&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Time series&lt;/strong&gt;: A set of data arranged in chronological order that records how the state of the same object changes over time.&lt;br /&gt;
A time series has only &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt; as its sole API. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt; can be split in order into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Write&lt;/code&gt; interfaces.&lt;/p&gt;

&lt;h2 id=&quot;time-series-objects&quot;&gt;Time-Series Objects&lt;/h2&gt;

&lt;p&gt;For a time-series object, time must be the first member and must be reflected in the initialization function.&lt;br /&gt;
Any data generated based on time is time-series data.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;GoldenStaff&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NLine&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// Golden Cudgel – Parametric Segment&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// consumer scale&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// algorithm scale&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;time-series-functions&quot;&gt;Time-Series Functions&lt;/h2&gt;

&lt;p&gt;For a time-series function, time must be the first parameter. The first member of the return value must be a time-series object.&lt;br /&gt;
The input time and output time represent the lower and upper time bounds of the function.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;// NewDeadMonkey&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// m combat objects&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// n unique resource count / algorithm scale&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;c&quot;&gt;// As long as it doesn&apos;t duplicate the previous point; global duplicates are ignored&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Compare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// SleepAndReturnNewTime accepts a time argument, sleeps randomly, then returns the latest time&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SleepAndReturnNewTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inputTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// Set random seed&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Seed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UnixNano&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Generate random sleep duration, 1 to 5 seconds&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Intn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Second&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Sleep for random duration&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sleep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Return current time&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;time-series-distance&quot;&gt;Time-Series Distance&lt;/h2&gt;

&lt;p&gt;Use composite criteria of time plus other conditions (e.g. on a 4-dimensional sphere, distance alone may be used for conversion; or time plus the Haversine formula).&lt;/p&gt;

&lt;h2 id=&quot;time-series-logging&quot;&gt;Time-Series Logging&lt;/h2&gt;

&lt;p&gt;Log output must follow the format “time + content”.&lt;/p&gt;

&lt;h2 id=&quot;time-series-complexity&quot;&gt;Time-Series Complexity&lt;/h2&gt;

&lt;p&gt;Time-series complexity: Under the prerequisite of time complexity and space complexity, the actual execution time of an algorithm and the utilization efficiency of memory resources.&lt;/p&gt;

&lt;p&gt;Time-series complexity is represented as a two-dimensional plot. The X-axis is t, the Y-axis is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(used - buff/cache) / total&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The Y-axis can use other metrics as needed, such as overall CPU/GPU utilization.&lt;/p&gt;

&lt;p&gt;Unit time-series complexity is a three-dimensional plot. Three-dimensional plots are rather abstract; they can be reduced to two 2D plots, or the Y-axes can be merged into two curves on a single 2D plot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unit CPU time-series complexity&lt;/strong&gt; is a three-dimensional plot: X-axis t, Y-axis (used - buff/cache) / total, Z-axis cpu_load1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unit GPU time-series complexity&lt;/strong&gt; is a three-dimensional plot: X-axis t, Y-axis (used - buff/cache) / total, Z-axis gpu_utilization.&lt;/p&gt;

&lt;p&gt;Time-series complexity requires observability analysis of the program.&lt;/p&gt;

&lt;h2 id=&quot;time-series-space&quot;&gt;Time-Series Space&lt;/h2&gt;

&lt;p&gt;A space of two or more dimensions composed of time series.&lt;/p&gt;

&lt;p&gt;In OOOS &lt;a href=&quot;https://github.com/zeusro/system&quot;&gt;https://github.com/zeusro/system&lt;/a&gt;, I will use this programming paradigm as much as possible.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Lock-free parallel spacetime algorithm for concurrent access to constrained resources (&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Y function (&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;p&gt;時間序列ライブラリの元論文（&lt;a href=&quot;http://github.com/zeusro/data&quot;&gt;http://github.com/zeusro/data&lt;/a&gt;）は失われており、限られた記憶から時間序列の部分を少しずつ再構成するしかない。&lt;/p&gt;

&lt;p&gt;時間をかけた実践によってのみ、プログラムの正しさは検証できる。そこで時間序列メタプログラミングモデルを提唱する。現実世界をモデル化するための新しいプログラムのパラダイムであり、プログラミング言語に依存しない設計哲学である。&lt;/p&gt;

&lt;p&gt;この上に&lt;strong&gt;時間序列複雑度&lt;/strong&gt;を導入する：従来の時間・空間複雑度を満たすことを前提に、二次元グラフ（t とメモリ利用率など）や三次元グラフ（CPU/GPU 負荷を加える）で、アルゴリズムの実際の実行時間とリソース利用を表現する。&lt;/p&gt;

&lt;h2 id=&quot;時間序列&quot;&gt;時間序列&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;時間序列&lt;/strong&gt;：時間順に並べられた、同一対象の状態の時間変化を記録したデータの集合。&lt;br /&gt;
時間序列の API は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt; のみである。&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt; は順序に従って &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt; と &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Write&lt;/code&gt; インターフェースに分化できる。&lt;/p&gt;

&lt;h2 id=&quot;時間序列オブジェクト&quot;&gt;時間序列オブジェクト&lt;/h2&gt;

&lt;p&gt;時間序列オブジェクトでは、時間を第一メンバーとし、初期化関数に反映させる必要がある。&lt;br /&gt;
時間に基づいて生成されるデータはすべて時系列データである。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;GoldenStaff&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NLine&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 金箍棒 パラメトリック線分（Parametric Segment）&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// 消費者規模&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// アルゴリズム規模&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;時間序列関数&quot;&gt;時間序列関数&lt;/h2&gt;

&lt;p&gt;時間序列関数では、時間を第一引数とする。戻り値の第一メンバーは時間序列オブジェクトでなければならない。&lt;br /&gt;
入力される時間と出力される時間は、関数の時間の下界と上界を表す。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;// NewDeadMonkey&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// m 戦闘対象&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// n 唯一リソース数 / アルゴリズム規模&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;c&quot;&gt;// 前の点と重複しなければよい。全体での重複は無視する&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Compare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// SleepAndReturnNewTime 時間引数を受け取り、ランダムに sleep してから最新の時間を返す&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SleepAndReturnNewTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inputTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// 乱数シードを設定&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Seed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UnixNano&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// 1〜5秒のランダムな sleep 時間を生成&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Intn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Second&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// ランダム時間だけ Sleep&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sleep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// 現在時刻を返す&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;時間序列距離&quot;&gt;時間序列距離&lt;/h2&gt;

&lt;p&gt;時間＋その他の条件による複合判定を用いる（例：4次元球面上では距離のみで換算してもよいし、時間＋Haversine 公式で換算してもよい）。&lt;/p&gt;

&lt;h2 id=&quot;時間序列ログ&quot;&gt;時間序列ログ&lt;/h2&gt;

&lt;p&gt;出力内容は「時間＋内容」の形式でなければならない。&lt;/p&gt;

&lt;h2 id=&quot;時間序列複雑度&quot;&gt;時間序列複雑度&lt;/h2&gt;

&lt;p&gt;時間序列複雑度（Time Series Complexity）：時間複雑度および空間複雑度の前提を満たした上で、アルゴリズムの実際の実行時間とメモリリソースの利用効率。&lt;/p&gt;

&lt;p&gt;時間序列複雑度は二次元グラフで表す。X 軸は t、Y 軸は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(used - buff/cache) / total&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;Y 軸は必要に応じて、CPU/GPU の全体利用率など別の指標を用いてよい。&lt;/p&gt;

&lt;p&gt;単位時間序列複雑度は三次元グラフである。三次元は抽象的すぎるため、2 つの二次元グラフに次元削減するか、Y 軸を統合して二次元グラフ上の 2 本の曲線にしてもよい。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;単位 CPU 時間序列複雑度&lt;/strong&gt;は三次元グラフである。X 軸は t、Y 軸は (used - buff/cache) / total、Z 軸は cpu_load1。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;単位 GPU 時間序列複雑度&lt;/strong&gt;は三次元グラフである。X 軸は t、Y 軸は (used - buff/cache) / total、Z 軸は gpu_utilization。&lt;/p&gt;

&lt;p&gt;時間序列複雑度にはプログラムの可観測性解析が必要である。&lt;/p&gt;

&lt;h2 id=&quot;時間序列空間&quot;&gt;時間序列空間&lt;/h2&gt;

&lt;p&gt;時間序列からなる 2 次元以上の空間。&lt;/p&gt;

&lt;p&gt;OOOS（&lt;a href=&quot;https://github.com/zeusro/system&quot;&gt;https://github.com/zeusro/system&lt;/a&gt;）では、このプログラミングパラダイムを可能な限り用いる。&lt;/p&gt;

&lt;p&gt;例：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;制約付きリソースへの無ロック並行アクセスの並行時空アルゴリズム（&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&lt;/a&gt;）&lt;/li&gt;
  &lt;li&gt;Y 関数（&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;p&gt;Оригинальная статья по библиотеке временных рядов &lt;a href=&quot;http://github.com/zeusro/data&quot;&gt;http://github.com/zeusro/data&lt;/a&gt; утрачена, поэтому я могу лишь по обрывочным воспоминаниям восстановить часть, касающуюся временных рядов.&lt;/p&gt;

&lt;p&gt;Только практика во времени способна проверить корректность программы. Поэтому я предлагаю модель метапрограммирования временных рядов — новую программную парадигму для моделирования реального мира, философию проектирования, не привязанную к языку программирования.&lt;/p&gt;

&lt;p&gt;На этой основе вводится &lt;strong&gt;сложность временных рядов&lt;/strong&gt;: при соблюдении традиционной временной и пространственной сложности двумерные графики (например, t и утилизация памяти) и даже трёхмерные (с учётом нагрузки CPU/GPU) описывают фактическое время выполнения алгоритма и использование ресурсов.&lt;/p&gt;

&lt;h2 id=&quot;временной-ряд&quot;&gt;Временной ряд&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Временной ряд&lt;/strong&gt;: упорядоченный по времени набор данных, фиксирующий изменение состояния одного и того же объекта во времени.&lt;br /&gt;
У временного ряда единственный API — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt;. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Watch&lt;/code&gt; по порядку разбивается на интерфейсы &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Read&lt;/code&gt; и &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Write&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;объект-временного-ряда&quot;&gt;Объект временного ряда&lt;/h2&gt;

&lt;p&gt;У объекта временного ряда время должно быть первым полем и отражаться в функции инициализации.&lt;br /&gt;
Любые данные, порождённые на основе времени, являются данными временного ряда.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;GoldenStaff&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NLine&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// Золотая дубинка – параметрический отрезок&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// масштаб потребителей&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;           &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;c&quot;&gt;// масштаб алгоритма&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;cost&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;функция-временного-ряда&quot;&gt;Функция временного ряда&lt;/h2&gt;

&lt;p&gt;У функции временного ряда первым аргументом должно быть время. Первое поле возвращаемого значения должно быть объектом временного ряда.&lt;br /&gt;
Входное и выходное время задают нижнюю и верхнюю временные границы функции.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;// NewDeadMonkey&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// m боевые объекты&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// n число уникальных ресурсов / масштаб алгоритма&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DeadMonkey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;Birth&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;birth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;make&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;c&quot;&gt;// Достаточно не совпадать с предыдущей точкой; глобальные повторы игнорируются&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Compare&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RandonPoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p1&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ZeroPoints&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;zeroPoints&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dead&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// SleepAndReturnNewTime принимает аргумент времени, случайно «засыпает», затем возвращает актуальное время&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SleepAndReturnNewTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inputTime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// Установить зерно случайности&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Seed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UnixNano&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Случайная длительность сна от 1 до 5 секунд&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Intn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Second&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Сон на случайное время&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sleep&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sleepDuration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;// Вернуть текущее время&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;расстояние-во-временном-ряде&quot;&gt;Расстояние во временном ряде&lt;/h2&gt;

&lt;p&gt;Используется составной критерий: время плюс другие условия (например, на 4-мерной сфере можно опираться только на расстояние или на время и формулу Haversine).&lt;/p&gt;

&lt;h2 id=&quot;логирование-временного-ряда&quot;&gt;Логирование временного ряда&lt;/h2&gt;

&lt;p&gt;Содержимое вывода должно быть в формате «время + содержание».&lt;/p&gt;

&lt;h2 id=&quot;сложность-временного-ряда&quot;&gt;Сложность временного ряда&lt;/h2&gt;

&lt;p&gt;Сложность временного ряда (Time Series Complexity): при заданных временной и пространственной сложности — фактическое время выполнения алгоритма и эффективность использования памяти.&lt;/p&gt;

&lt;p&gt;Сложность временного ряда изображается двумерным графиком. По оси X — t, по оси Y — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(used - buff/cache) / total&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;По оси Y при необходимости можно использовать другие метрики, например общую загрузку CPU/GPU.&lt;/p&gt;

&lt;p&gt;Единичная сложность временного ряда — трёхмерный график. Трёхмерный график слишком абстрактен; его можно свести к двум двумерным или объединить оси Y в две кривые на одном двумерном графике.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Единичная CPU-сложность временного ряда&lt;/strong&gt; — трёхмерный график: ось X — t, ось Y — (used - buff/cache) / total, ось Z — cpu_load1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Единичная GPU-сложность временного ряда&lt;/strong&gt; — трёхмерный график: ось X — t, ось Y — (used - buff/cache) / total, ось Z — gpu_utilization.&lt;/p&gt;

&lt;p&gt;Для сложности временного ряда требуется анализ наблюдаемости программы.&lt;/p&gt;

&lt;h2 id=&quot;пространство-временных-рядов&quot;&gt;Пространство временных рядов&lt;/h2&gt;

&lt;p&gt;Пространство размерности два и выше, состоящее из временных рядов.&lt;/p&gt;

&lt;p&gt;В OOOS &lt;a href=&quot;https://github.com/zeusro/system&quot;&gt;https://github.com/zeusro/system&lt;/a&gt; я буду по возможности применять эту программную парадигму.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Алгоритм параллельного пространства-времени с неблокирующим доступом к ограниченным ресурсам (&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shenzhen/szx/readme.md&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;Функция Y (&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&quot;&gt;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go#L73&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
</description>
        <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/02/06/Time-Series-Coding/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/02/06/Time-Series-Coding/</guid>
        
        <category>n</category>
        
        <category>time</category>
        
        
      </item>
    
      <item>
        <title>公有云的诸神黄昏</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    &lt;h2 id=&quot;摘要&quot;&gt;摘要&lt;/h2&gt;

&lt;p&gt;本文从形式逻辑与定义出发（网络效应、熵增定律、反依赖性、边际收益为零的「0」哲学），系统梳理了 2014–2025 年间阿里云、谷歌云、Azure、Cloudflare、腾讯云等主流公有云与基础设施的重大故障记录，并比较了各家的故障透明度。在此基础上，文章分析了公有云「死因」：软件熵增与边际收益为零导致旧代码与架构难以治理，网络效应在故障时放大连锁反应，而 SLA 赔付与政企实际损失严重不对等。作者建议大型政企将对公有云的「反依赖」提上日程，并提出「小并发高可用系统」的设想——通过存储冗余与流量分摊（如多区域、多集群 DNS 解析）降低单点风险与问题扩散半径。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/fimbulwinter/fimbulwinter.jpeg&quot; alt=&quot;芬布尔之冬&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;形式逻辑和定义&quot;&gt;形式逻辑和定义&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;网络效应&lt;/strong&gt;：一个产品/服务/平台的使用者（或参与者）越多，它对每一个使用者的价值就越大。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;熵增定律&lt;/strong&gt;：项目代码库会随着时间推移而变成一座屎山。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;反依赖性&lt;/strong&gt;：对单一编程语言/技术栈/云平台的反向依赖。比如多语言混合编程，多技术栈选型，多云策略。反依赖性让业务可以脱离语言/开源项目/公有云平稳运行。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;0&lt;/strong&gt;：边际收益为0的代码重构没人愿意做。&lt;/p&gt;

&lt;h2 id=&quot;aws的故障&quot;&gt;AWS的故障&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;地域/范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;官方/主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;未指定&lt;/td&gt;
      &lt;td&gt;影响 Amazon SimpleDB 服务部分关键组件，导致部分用户无法访问或操作数据库。&lt;/td&gt;
      &lt;td&gt;电源问题引发系统中断。&lt;/td&gt;
      &lt;td&gt;较小规模事件，AWS 快速恢复；行业评价为基础设施电源冗余不足的典型案例。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-08-07&lt;/td&gt;
      &lt;td&gt;EU West (爱尔兰)&lt;/td&gt;
      &lt;td&gt;未指定&lt;/td&gt;
      &lt;td&gt;影响 EC2、EBS 和 RDS 服务，导致部分欧洲用户实例、存储和数据库不可用。&lt;/td&gt;
      &lt;td&gt;内部系统事件，未公布详细根因。&lt;/td&gt;
      &lt;td&gt;区域性事件，影响欧洲客户；评价为 AWS 早期区域隔离不完善的体现。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-11-26&lt;/td&gt;
      &lt;td&gt;全球 (CloudFront DNS)&lt;/td&gt;
      &lt;td&gt;约 2 小时&lt;/td&gt;
      &lt;td&gt;DNS 服务器宕机，影响 CDN 服务，导致部分网站和云服务离线，无法解析请求。&lt;/td&gt;
      &lt;td&gt;DNS 服务器故障。&lt;/td&gt;
      &lt;td&gt;短暂但广泛影响；行业称其为“世界上最大云的 DNS 脆弱性暴露”。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2015-09-20&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;DynamoDB 故障导致内部服务通信中断，波及 Netflix、Reddit、IMDb 和 Amazon 自身站点，用户无法访问视频、社交和电商服务。&lt;/td&gt;
      &lt;td&gt;内部多个服务通信中断，引发连锁反应。&lt;/td&gt;
      &lt;td&gt;严重事件，影响数百万用户；评价为 AWS 内部依赖性过高的警示。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2017-02-28&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;4-5 小时&lt;/td&gt;
      &lt;td&gt;S3 控制平面瘫痪，影响 Slack、Trello、GitHub Pages、Quora 等大量网站，无法加载图像和文件。&lt;/td&gt;
      &lt;td&gt;工程师误删关键配置（打字错误）。&lt;/td&gt;
      &lt;td&gt;历史上最著名故障之一，称为“最贵的一次 typo”；行业评价强调人为错误风险。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020-11-25&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;Kinesis 和 Cognito 故障，影响 Roku、Adobe、Flickr 等企业客户，流媒体和认证服务中断。&lt;/td&gt;
      &lt;td&gt;容量更新问题引发中断。&lt;/td&gt;
      &lt;td&gt;疫情期间事件，影响远程工作；评价为容量管理挑战。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-12-05&lt;/td&gt;
      &lt;td&gt;us-east-2 (俄亥俄)&lt;/td&gt;
      &lt;td&gt;约 40 分钟&lt;/td&gt;
      &lt;td&gt;可用区中断，影响区域内多项服务，导致部分客户资源不可用。&lt;/td&gt;
      &lt;td&gt;未公布详细根因，可能是网络或电源问题。&lt;/td&gt;
      &lt;td&gt;短暂事件，但凸显可用区依赖；行业建议多 AZ 架构。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;未指定&lt;/td&gt;
      &lt;td&gt;Lambda 服务事件，广泛影响大型组织如 Boston Globe、纽约地铁和 Associated Press，无法执行无服务器函数。&lt;/td&gt;
      &lt;td&gt;未公布详细根因。&lt;/td&gt;
      &lt;td&gt;区域性大范围中断；评价为无服务器计算脆弱性暴露。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024-07-30&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;未指定&lt;/td&gt;
      &lt;td&gt;Kinesis Data Streams 故障，导致依赖服务连锁中断，影响实时数据处理应用。&lt;/td&gt;
      &lt;td&gt;未公布详细根因，可能是内部系统问题。&lt;/td&gt;
      &lt;td&gt;影响数据流服务；行业评价为流处理依赖风险。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-02&lt;/td&gt;
      &lt;td&gt;eu-north-1 (斯德哥尔摩)&lt;/td&gt;
      &lt;td&gt;未指定&lt;/td&gt;
      &lt;td&gt;网络故障影响一个 AZ 内多项核心服务，导致欧洲部分用户中断。&lt;/td&gt;
      &lt;td&gt;重大网络故障。&lt;/td&gt;
      &lt;td&gt;区域性事件；评价为欧洲基础设施扩展挑战。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-10-19/20&lt;/td&gt;
      &lt;td&gt;us-east-1 (北弗吉尼亚)&lt;/td&gt;
      &lt;td&gt;约 15 小时以上&lt;/td&gt;
      &lt;td&gt;DynamoDB API 端点中断，影响 Slack、Atlassian、Snapchat、Reddit、Roblox、Fortnite、Coinbase、Venmo、Duolingo、Canva、PlayStation Network、银行、航空公司（如 Delta、United 航班延误）和 Amazon 服务；超 3500 家公司、60+ 国家受影响，用户报告超 1700 万次。&lt;/td&gt;
      &lt;td&gt;DNS 解析故障引发连锁反应。&lt;/td&gt;
      &lt;td&gt;2025 年最大故障，称为“云脆弱性大暴露”；行业评价为 DNS 和控制平面依赖的重大教训，强调多云策略。&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;分析比较严重的事故&quot;&gt;分析比较严重的事故&lt;/h3&gt;
&lt;p&gt;在 2014-2025 年间，AWS 经历了多次故障，其中最严重的几起包括 2015-09-20 的 DynamoDB 故障、2017-02-28 的 S3 故障，以及 2025-10-19/20 的 DynamoDB DNS 故障。这些事件均发生在 us-east-1 区域，该区域作为 AWS 最古老和最繁忙的中心，常因内部依赖和规模效应成为故障高发地。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;严重程度比较&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;2015 DynamoDB 故障&lt;/strong&gt;：持续数小时，影响 Netflix、Reddit 等娱乐和社交平台，导致用户无法访问内容。后果主要是娱乐中断，但未波及金融或交通。根因是内部通信失败，暴露了服务间连锁风险。行业评价为 AWS 早期架构依赖的典型问题，推动了后续的多区域冗余改进。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2017 S3 故障&lt;/strong&gt;：持续 4-5 小时，由人为错误（打字错误）引发，影响 Slack、Trello 等生产力工具和数百万网站的文件托管。经济损失巨大，估计数亿美元。相比 2015 年，此次更强调人为因素，促使 AWS 加强自动化和错误检查机制。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2025 DynamoDB DNS 故障&lt;/strong&gt;：持续 15+ 小时，是三者中最长，影响范围最广，波及 3500+ 公司，包括金融（Coinbase、Venmo）、游戏（Fortnite、Roblox）、教育（Duolingo）和交通（航空延误）。用户报告超 1700 万次，全球 60+ 国家中断。根因是 DNS 解析问题，凸显控制平面脆弱性。相比前两次，此次后果更严重，涉及关键基础设施，行业评价为“云时代最大中断”，呼吁企业采用多云或混合云策略以分散风险。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;总体而言，这些严重故障的共同点是 us-east-1 的中心化问题和连锁反应，严重度随时间推移而增加（从数小时到 15+ 小时，从娱乐到关键服务），反映了互联网对云依赖的加深。AWS 通过 PES 报告持续改进，但行业建议企业避免单区域依赖，实现真正的高可用架构。&lt;/p&gt;

&lt;h2 id=&quot;阿里云的故障&quot;&gt;阿里云的故障&lt;/h2&gt;

&lt;p&gt;阿里云自2014年至2025年期间，公开报道和官方披露的&lt;strong&gt;真正影响面广、持续时间长、被广泛称为“重大事故”&lt;/strong&gt;的故障并不算特别多（相比体量来说，整体SLA表现仍属行业前列），但其中几次确实造成了较大社会影响和行业讨论。下面按时间顺序列出公认的几次&lt;strong&gt;重大级别故障&lt;/strong&gt;（主要基于公开信息、官方公告、媒体和社区复盘）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;地域/范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;官方/主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年6月&lt;/td&gt;
      &lt;td&gt;部分地域（具体未公开细节）&lt;/td&gt;
      &lt;td&gt;约30分钟&lt;/td&gt;
      &lt;td&gt;部分云产品出现异常，影响范围相对有限&lt;/td&gt;
      &lt;td&gt;未详细公开&lt;/td&gt;
      &lt;td&gt;当时被部分媒体称为“重大技术故障”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2019年3月3日&lt;/td&gt;
      &lt;td&gt;华北2（北京）可用区C&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;大量ECS实例磁盘故障，众多网站/App瘫痪&lt;/td&gt;
      &lt;td&gt;磁盘故障&lt;/td&gt;
      &lt;td&gt;当时影响较大，阿里云按SLA赔付&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年12月18日&lt;/td&gt;
      &lt;td&gt;香港Region 可用区C&lt;/td&gt;
      &lt;td&gt;约15.5小时&lt;/td&gt;
      &lt;td&gt;香港区几乎全地域服务中断，澳门多家关键机构网站（金融管理局、银河、莲花卫视等）不可用，OKX交易受影响&lt;/td&gt;
      &lt;td&gt;制冷设备故障 → 连锁反应导致大面积宕机&lt;/td&gt;
      &lt;td&gt;被广泛称为“阿里云发展史上最严重丑闻之一”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年11月12日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球所有地域、所有服务&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约3小时16分钟&lt;/td&gt;
      &lt;td&gt;控制台、API、MQ、微服务、监控、机器学习等几乎全线产品异常；淘宝、钉钉、闲鱼、饿了么、阿里云盘等集体“崩”&lt;/td&gt;
      &lt;td&gt;底层核心组件（鉴权/元数据/控制面组件）故障&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;公认阿里云史上最严重、影响范围最广的一次&lt;/strong&gt;，被称为“史诗级”“行业闻所未闻”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年11月27日&lt;/td&gt;
      &lt;td&gt;部分服务器&lt;/td&gt;
      &lt;td&gt;近2小时&lt;/td&gt;
      &lt;td&gt;服务器访问异常&lt;/td&gt;
      &lt;td&gt;未详细披露&lt;/td&gt;
      &lt;td&gt;距离11·12事故仅半个月，再次引发信任质疑&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年7月2日&lt;/td&gt;
      &lt;td&gt;部分地域/服务&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;控制台及部分服务异常&lt;/td&gt;
      &lt;td&gt;未见详细复盘&lt;/td&gt;
      &lt;td&gt;属于中型故障，影响面小于前几次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年（具体日期不详）&lt;/td&gt;
      &lt;td&gt;全球范围（疑似域名相关）&lt;/td&gt;
      &lt;td&gt;约6小时&lt;/td&gt;
      &lt;td&gt;域名劫持导致全球服务异常&lt;/td&gt;
      &lt;td&gt;域名劫持相关&lt;/td&gt;
      &lt;td&gt;来自2025年公有云故障汇总报告，细节待确认&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;重要说明与趋势观察&quot;&gt;重要说明与趋势观察&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2014–2018早期&lt;/strong&gt;：这个阶段阿里云对外公开的重大P0级故障记录极少，更多是局部、小范围问题。那时体量远小于现在，故障影响面也较小。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;最严重的两次&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;2022.12香港区15.5小时&lt;/strong&gt; → 单地域最长时间故障，对港澳地区关键基础设施影响恶劣。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2023.11.12全球3小时+&lt;/strong&gt; → 控制面/全局服务全部瘫痪，被公认为云计算历史上罕见的“全地域×全服务”同时故障，打破了阿里云长期标榜的“多活、多中心、N个9”神话。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：从已知信息看，故障频次和严重程度相比2022–2023有所下降，但仍然偶有中大型事件（尤其是2025年的域名劫持类事件影响面较广）。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;阿里云的处理特点&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;大部分重大故障后都会发详细复盘说明（尤其是2022香港、2023全球两次）&lt;/li&gt;
      &lt;li&gt;按SLA赔付（通常是故障时长对应倍数的代金券）&lt;/li&gt;
      &lt;li&gt;高管/官方会公开致歉&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;总体而言，阿里云在2014–2025这十二年间真正称得上“重大事故”的次数大约在&lt;strong&gt;5–7次&lt;/strong&gt;左右，其中&lt;strong&gt;2023年11月12日&lt;/strong&gt;和&lt;strong&gt;2022年12月香港&lt;/strong&gt;是公认的影响力和严重程度最高的两起。&lt;/p&gt;

&lt;h2 id=&quot;谷歌云的故障&quot;&gt;谷歌云的故障&lt;/h2&gt;

&lt;p&gt;谷歌云（Google Cloud Platform，简称GCP）从2014年到2025年这段时间内，整体SLA表现相对较好，真正影响&lt;strong&gt;全球范围&lt;/strong&gt;或&lt;strong&gt;多个核心服务&lt;/strong&gt;的&lt;strong&gt;重大事故&lt;/strong&gt;并不算特别频繁（比AWS和Azure略少一些全局性灾难级事件）。但一旦出问题，通常会波及大量第三方应用（如Snapchat、Spotify、Discord、Cloudflare依赖的服务等），社会影响较大。&lt;/p&gt;

&lt;p&gt;下面按时间顺序列出公认的&lt;strong&gt;比较严重的、影响面广&lt;/strong&gt;的GCP重大故障（基于公开Status Dashboard、媒体报道、Wikipedia、行业复盘等信息）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;地域/范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2015年8月&lt;/td&gt;
      &lt;td&gt;欧洲（比利时Ghlin）&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;Compute Engine 读写错误率极高，少量数据丢失&lt;/td&gt;
      &lt;td&gt;雷击导致数据中心部分设备损坏&lt;/td&gt;
      &lt;td&gt;谷歌罕见承认&lt;strong&gt;数据丢失&lt;/strong&gt;，影响较小客户群&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年7月&lt;/td&gt;
      &lt;td&gt;全球（多地域）&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;GCP多服务异常，Snapchat、Spotify等第三方应用大面积无法登录/使用&lt;/td&gt;
      &lt;td&gt;网络拥塞 + 内部路由问题&lt;/td&gt;
      &lt;td&gt;当时被广泛报道，第三方影响很明显&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2019年6月2日&lt;/td&gt;
      &lt;td&gt;美国东部 + 全球波及&lt;/td&gt;
      &lt;td&gt;约4–5小时&lt;/td&gt;
      &lt;td&gt;YouTube、Gmail、G Suite大面积不可用，Snapchat、Discord、Vimeo等登录失败&lt;/td&gt;
      &lt;td&gt;美国东部网络拥塞 + 级联故障&lt;/td&gt;
      &lt;td&gt;影响范围广，社交媒体热议&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020年12月14日&lt;/td&gt;
      &lt;td&gt;全球&lt;/td&gt;
      &lt;td&gt;约1小时&lt;/td&gt;
      &lt;td&gt;Gmail、YouTube、Google Home、Nest、Pokémon GO等几乎所有依赖身份验证的服务瘫痪&lt;/td&gt;
      &lt;td&gt;身份认证系统（类似IAM）全局故障&lt;/td&gt;
      &lt;td&gt;谷歌消费级服务集体“崩”，影响最大的一次之一&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年8月&lt;/td&gt;
      &lt;td&gt;美国爱荷华州数据中心&lt;/td&gt;
      &lt;td&gt;局部影响&lt;/td&gt;
      &lt;td&gt;电气火灾（3人受伤），部分服务受波及，但非全局&lt;/td&gt;
      &lt;td&gt;数据中心电气事故引发火灾&lt;/td&gt;
      &lt;td&gt;更多是物理设施事故，非纯软件/架构问题&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年4月&lt;/td&gt;
      &lt;td&gt;欧洲（巴黎等）&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;多地域网络 + 服务中断，部分客户受影响&lt;/td&gt;
      &lt;td&gt;洪水 + 数据中心问题 + 网络故障组合&lt;/td&gt;
      &lt;td&gt;天气因素导致，影响面中等&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年10月23日&lt;/td&gt;
      &lt;td&gt;欧洲（德国法兰克福 europe-west3）&lt;/td&gt;
      &lt;td&gt;约半天（12+小时）&lt;/td&gt;
      &lt;td&gt;该地域几乎全服务不可用，影响大量欧洲客户&lt;/td&gt;
      &lt;td&gt;未详细公开（疑似控制面/网络问题）&lt;/td&gt;
      &lt;td&gt;单地域最长时长故障之一&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年6月12日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;（多地域，40+个）&lt;/td&gt;
      &lt;td&gt;约2.5–3小时&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;70+项GCP服务&lt;/strong&gt;异常，IAM身份授权系统崩溃，导致API请求全面失败；Spotify、Discord、Twitch、Cloudflare、Fitbit、Gmail、Drive、YouTube等大面积瘫痪&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Service Control&lt;/strong&gt;（API鉴权核心组件）自动化更新引入严重bug → 崩溃循环 → 全局过载&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;公认2020年后GCP最严重的一次全局故障&lt;/strong&gt;，影响互联网大片区域&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年7月18日&lt;/td&gt;
      &lt;td&gt;us-east1&lt;/td&gt;
      &lt;td&gt;约2小时&lt;/td&gt;
      &lt;td&gt;多产品错误率升高&lt;/td&gt;
      &lt;td&gt;未详细披露&lt;/td&gt;
      &lt;td&gt;中型故障，恢复较快&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;azure的故障&quot;&gt;Azure的故障&lt;/h2&gt;

&lt;p&gt;Microsoft Azure（微软云平台）从2014年到2025年这段时间内，&lt;strong&gt;真正影响面广、持续时间长、社会关注度高的重大事故&lt;/strong&gt;数量不算特别多（相比早期体量较小时的频繁小故障已显著减少），但几次事件确实造成了全球性或多服务级别的严重影响，尤其涉及&lt;strong&gt;Microsoft 365、Teams、Xbox、Outlook&lt;/strong&gt;等消费级/企业级产品时，传播效应非常明显。&lt;/p&gt;

&lt;p&gt;下面按时间顺序列出公认的&lt;strong&gt;重大级别故障&lt;/strong&gt;（基于Azure官方Status History、Post Incident Reviews、媒体报道、Wikipedia和行业复盘等公开信息）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;地域/范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014年8月14–18日&lt;/td&gt;
      &lt;td&gt;US Central、US East、US East 2、Europe North&lt;/td&gt;
      &lt;td&gt;多日多次，单次数小时&lt;/td&gt;
      &lt;td&gt;Cloud Services、SQL Database、VM、Websites、HDInsight、Mobile Services、Service Bus等大面积不可用&lt;/td&gt;
      &lt;td&gt;多起网络/存储问题叠加&lt;/td&gt;
      &lt;td&gt;2014年最集中的一波故障，当时Azure还较年轻&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014年11月18–19日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;多地域&lt;/strong&gt;（美、欧、亚部分）&lt;/td&gt;
      &lt;td&gt;约11小时&lt;/td&gt;
      &lt;td&gt;Azure Storage为核心，引发VM、Websites、Visual Studio Online、Xbox Live、MSN、Search等20+服务中断&lt;/td&gt;
      &lt;td&gt;存储性能优化配置变更导致Blob前端无限循环&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure早期最严重的一次&lt;/strong&gt;，官方详细RCA，赔付客户&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2016年9月15日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;DNS解析大面积故障，影响大量依赖Azure DNS的服务&lt;/td&gt;
      &lt;td&gt;全球DNS问题&lt;/td&gt;
      &lt;td&gt;暴露DNS单点风险&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年6月20日&lt;/td&gt;
      &lt;td&gt;北美多个数据中心&lt;/td&gt;
      &lt;td&gt;数小时–1天+&lt;/td&gt;
      &lt;td&gt;冷却系统故障（雷击+浪涌保护不足）导致多服务中断&lt;/td&gt;
      &lt;td&gt;物理设施问题（雷击引发连锁反应）&lt;/td&gt;
      &lt;td&gt;罕见的硬件+基础设施类大故障&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年9月4日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;多地域&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;超过25小时（部分服务3天）&lt;/td&gt;
      &lt;td&gt;多项核心服务长时间不可用&lt;/td&gt;
      &lt;td&gt;冷却系统故障（雷击+浪涌保护不足）&lt;/td&gt;
      &lt;td&gt;恢复时间最长的一次之一&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年1月23日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;（核心网络受影响）&lt;/td&gt;
      &lt;td&gt;约3小时&lt;/td&gt;
      &lt;td&gt;Microsoft 365（Teams、Outlook、Exchange）、部分Azure服务中断&lt;/td&gt;
      &lt;td&gt;广域网（WAN）问题&lt;/td&gt;
      &lt;td&gt;M365集体“崩”，影响巨大&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年7月18日&lt;/td&gt;
      &lt;td&gt;US Central&lt;/td&gt;
      &lt;td&gt;约半天&lt;/td&gt;
      &lt;td&gt;Virtual Machines等服务管理操作失败，客户无法访问托管服务&lt;/td&gt;
      &lt;td&gt;访问控制错误 + 基础设施故障&lt;/td&gt;
      &lt;td&gt;与次日CrowdStrike全球蓝屏事件时间接近，但独立&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年1月8–9日&lt;/td&gt;
      &lt;td&gt;East US 2 等&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;Azure Databricks、Synapse、Functions、App Service、VM等网络中断&lt;/td&gt;
      &lt;td&gt;网络组件问题&lt;/td&gt;
      &lt;td&gt;2025年初较显著的一次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月29日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约8小时&lt;/td&gt;
      &lt;td&gt;Azure Front Door为核心，引发Microsoft 365、Outlook、Teams、Xbox Live、Minecraft、Copilot大面积瘫痪；第三方如Alaska Airlines、Heathrow机场、Costco、Starbucks等受波及&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure Front Door配置变更&lt;/strong&gt; + 防护机制bug导致配置不一致全局传播&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025年Azure最严重的一次&lt;/strong&gt;，Downdetector超3万报告，类似AWS同月故障&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年11月5–6日&lt;/td&gt;
      &lt;td&gt;West Europe (AZ01)&lt;/td&gt;
      &lt;td&gt;约9–10小时&lt;/td&gt;
      &lt;td&gt;VM、PostgreSQL/MySQL Flexible Server、AKS、Storage、Service Bus等多服务降级/中断&lt;/td&gt;
      &lt;td&gt;数据中心热事件（Thermal event）&lt;/td&gt;
      &lt;td&gt;区域级较严重故障&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;重要观察与趋势20142025&quot;&gt;重要观察与趋势（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014年&lt;/strong&gt;：Azure还处于快速扩张期，&lt;strong&gt;配置变更&lt;/strong&gt;和&lt;strong&gt;存储层&lt;/strong&gt;问题频发，是故障最集中的一年（尤其是11月那次被视为经典案例）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2015–2019&lt;/strong&gt;：故障频率下降，但仍以&lt;strong&gt;单地域&lt;/strong&gt;或&lt;strong&gt;基础设施&lt;/strong&gt;（冷却、雷击、DNS）为主，影响面相对可控。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2020–2023&lt;/strong&gt;：重大全局故障较少，更多是&lt;strong&gt;网络&lt;/strong&gt;或&lt;strong&gt;M365依赖Azure&lt;/strong&gt;导致的间接影响（如2023年1月）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：控制面/边缘服务（如&lt;strong&gt;Azure Front Door&lt;/strong&gt;）成为新痛点，2025年10月29日事件被公认为近几年Azure最严重的&lt;strong&gt;全球性中断&lt;/strong&gt;，影响范围堪比阿里云2023年11月或谷歌云2025年6月的事件。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型特点&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;微软每次重大事故后都会发布详细&lt;strong&gt;Post Incident Review (PIR)&lt;/strong&gt;（官方复盘），透明度较高。&lt;/li&gt;
      &lt;li&gt;经常因&lt;strong&gt;配置变更&lt;/strong&gt;、&lt;strong&gt;控制平面组件&lt;/strong&gt;、&lt;strong&gt;网络&lt;/strong&gt;问题引发（而非底层硬件故障）。&lt;/li&gt;
      &lt;li&gt;第三方传播效应极强：一旦M365、Xbox、Teams出问题，社会关注度瞬间拉满。&lt;/li&gt;
      &lt;li&gt;按SLA赔付（信用额度形式），但客户更在意业务连续性。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;总体而言，Azure在2014–2025这12年间真正达到&lt;strong&gt;重大级别（全球/多服务长时间中断）&lt;/strong&gt;的故障大约&lt;strong&gt;8–10次&lt;/strong&gt;，严重程度和频率与AWS、GCP处于同一量级，但&lt;strong&gt;配置错误导致的级联故障&lt;/strong&gt;是Azure历史上反复出现的模式。&lt;/p&gt;

&lt;h2 id=&quot;cloudflare的故障&quot;&gt;Cloudflare的故障&lt;/h2&gt;

&lt;p&gt;Cloudflare（Cloudflare）作为全球最大的CDN、安全、DNS和边缘计算提供商之一，从2014年到2025年期间，&lt;strong&gt;真正影响面广、造成互联网大面积瘫痪的重大事故&lt;/strong&gt;并不算特别多，但一旦发生，通常会波及&lt;strong&gt;数百万到数亿用户&lt;/strong&gt;，影响范围极广（因为Cloudflare承载了全球约20–25%的网页流量）。&lt;/p&gt;

&lt;p&gt;Cloudflare的故障特点是：&lt;strong&gt;恢复速度通常较快&lt;/strong&gt;（大部分在1–4小时内缓解），但&lt;strong&gt;传播效应极强&lt;/strong&gt;——一旦核心代理层、DNS或安全组件出问题，很多顶级网站（X、ChatGPT、Shopify、Discord、Spotify、AWS部分服务等）会同时出现5xx错误或无法访问。&lt;/p&gt;

&lt;p&gt;下面按时间顺序列出公认的&lt;strong&gt;重大级别故障&lt;/strong&gt;（基于Cloudflare官方博客、status.cloudflare.com历史、媒体报道、Wikipedia和行业复盘，重点筛选全球/核心流量中断事件）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2019年7月2日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约1–2小时&lt;/td&gt;
      &lt;td&gt;大量网站出现502/503/504错误，互联网大片区域无法访问&lt;/td&gt;
      &lt;td&gt;软件部署引入严重bug，导致代理层崩溃&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Cloudflare公认史上最严重的一次&lt;/strong&gt;，官方详细复盘&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020年多次&lt;/td&gt;
      &lt;td&gt;部分地域/控制面&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;仪表盘、分析、部分API不可用；核心代理层基本稳定&lt;/td&gt;
      &lt;td&gt;控制平面组件问题&lt;/td&gt;
      &lt;td&gt;影响开发者较多，普通用户感知较小&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年6月&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;多数据中心&lt;/strong&gt;（19个）&lt;/td&gt;
      &lt;td&gt;约1.5小时&lt;/td&gt;
      &lt;td&gt;核心代理层中断，多个网站无法访问&lt;/td&gt;
      &lt;td&gt;网络配置错误&lt;/td&gt;
      &lt;td&gt;中等规模，恢复较快&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年3月21日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约1小时7分钟&lt;/td&gt;
      &lt;td&gt;存储读写严重故障，影响大量依赖Cloudflare存储/缓存的服务&lt;/td&gt;
      &lt;td&gt;KV/存储层写失败 + 部分读异常&lt;/td&gt;
      &lt;td&gt;2025年早期较显著的一次&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年6月12日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;（部分新功能）&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;部分新功能/服务不可用，核心流量基本正常&lt;/td&gt;
      &lt;td&gt;特定模块部署问题&lt;/td&gt;
      &lt;td&gt;非核心流量中断，影响有限&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年7月14日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;（1.1.1.1 DNS）&lt;/td&gt;
      &lt;td&gt;约62分钟&lt;/td&gt;
      &lt;td&gt;公共DNS解析器（1.1.1.1）完全不可用，大量用户无法上网&lt;/td&gt;
      &lt;td&gt;配置错误导致BGP路由撤回，DNS前缀从全球路由表消失&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;对依赖1.1.1.1的用户影响极大&lt;/strong&gt;，堪称“断网级”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月左右&lt;/td&gt;
      &lt;td&gt;部分服务&lt;/td&gt;
      &lt;td&gt;数十到几十分钟&lt;/td&gt;
      &lt;td&gt;DNS解析短暂中断&lt;/td&gt;
      &lt;td&gt;DNS相关配置问题&lt;/td&gt;
      &lt;td&gt;中型故障&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年11月18日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约4–5小时（高峰期更长）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;大规模互联网中断&lt;/strong&gt;：X（Twitter）、ChatGPT、Shopify、Spotify、Letterboxd、Indeed、Canva、Uber、DoorDash、Truth Social、League of Legends等大量顶级服务瘫痪；约20%网页流量受影响，1/3 Alexa前1万网站受波及&lt;/td&gt;
      &lt;td&gt;Bot Management特征文件异常膨胀（数据库权限变更导致文件大小翻倍）→ 全网传播 → 代理层崩溃&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025年最严重的一次&lt;/strong&gt;，也是2019年后Cloudflare最严重的全局流量中断&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年12月5日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;数小时&lt;/td&gt;
      &lt;td&gt;再次出现大范围5xx错误，Shopify、Zoom、Vinted、Fortnite、Square、Just Eat、Canva、Vimeo、AWS部分服务、Deliveroo等受影响&lt;/td&gt;
      &lt;td&gt;未见完整官方根因（疑似配置/传播类问题）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;距离11月18日仅17天&lt;/strong&gt;，连续两次重大事故引发强烈质疑&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;重要观察与趋势20142025-1&quot;&gt;重要观察与趋势（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014–2018早期&lt;/strong&gt;：Cloudflare体量快速增长，但公开的&lt;strong&gt;全局重大故障&lt;/strong&gt;记录很少，主要是一些局部、地域性或功能性问题。那时互联网对Cloudflare的依赖度远低于现在。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019年7月&lt;/strong&gt;：成为Cloudflare历史上最经典的“黑天鹅”事件，此后6年多时间里再未出现同等规模的&lt;strong&gt;核心代理层全局中断&lt;/strong&gt;。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2025年成为异常年份&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;出现了至少&lt;strong&gt;3–4次&lt;/strong&gt;影响面较大的全球/近全球事件（尤其是11月18日和12月5日连续两次）。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;11月18日&lt;/strong&gt; 被公认为&lt;strong&gt;2019年后最严重的一次&lt;/strong&gt;，影响范围和深度都极高。&lt;/li&gt;
      &lt;li&gt;12月5日再次中断，让很多人质疑Cloudflare的变更控制、回滚机制和“fail small”原则执行情况。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型特点&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;大部分严重故障都与&lt;strong&gt;配置变更&lt;/strong&gt;、&lt;strong&gt;特征文件/规则传播&lt;/strong&gt;、&lt;strong&gt;控制面组件&lt;/strong&gt;或&lt;strong&gt;DNS/BGP&lt;/strong&gt;相关。&lt;/li&gt;
      &lt;li&gt;官方复盘非常透明：每次重大事故后都会在blog.cloudflare.com发布详细post-mortem（根因、时间线、改进措施）。&lt;/li&gt;
      &lt;li&gt;恢复速度通常较快（回滚 + 停止传播），但影响传播极广（因为Cloudflare的Anycast网络和安全挑战机制）。&lt;/li&gt;
      &lt;li&gt;不像AWS/Azure/Google那样有明确的SLA信用赔付，但会提供详细解释和改进承诺。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;总体而言，Cloudflare在2014–2025这12年间真正达到&lt;strong&gt;重大级别（全球核心流量长时间中断）&lt;/strong&gt;的故障大约&lt;strong&gt;5–7次&lt;/strong&gt;，其中&lt;strong&gt;2019年7月&lt;/strong&gt;和&lt;strong&gt;2025年11月18日&lt;/strong&gt;是公认的两个峰值事件。2025年故障频次明显上升，引发了行业对“互联网基础设施集中化风险”的新一轮讨论。&lt;/p&gt;

&lt;h2 id=&quot;腾讯云的故障&quot;&gt;腾讯云的故障&lt;/h2&gt;

&lt;p&gt;腾讯云（Tencent Cloud）从2014年到2025年期间，作为中国第二大公有云厂商（仅次于阿里云），整体稳定性在国内云厂商中属于中上水平，真正&lt;strong&gt;影响面极广、持续时间长、社会关注度高的全局/多地域重大事故&lt;/strong&gt;数量相对较少，但一旦出现控制面（管控台/API）或核心存储问题，影响会迅速放大到大量企业和开发者。&lt;/p&gt;

&lt;p&gt;腾讯云的&lt;strong&gt;status页面&lt;/strong&gt;（https://status.cloud.tencent.com/history）公开透明度相对较低，历史事件列表通常只展示最近1年，且很多中大型故障不会出现在公开列表中，主要靠官方微信公众号、技术博客、媒体报道和社区讨论拼凑完整图景。&lt;/p&gt;

&lt;p&gt;下面按时间顺序列出公认的&lt;strong&gt;比较严重的、影响面较广&lt;/strong&gt;的腾讯云故障事件（基于官方复盘、媒体报道、知乎/微博/开发者社区讨论等公开信息）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;时间&lt;/th&gt;
      &lt;th&gt;地域/范围&lt;/th&gt;
      &lt;th&gt;持续时长&lt;/th&gt;
      &lt;th&gt;主要影响范围与后果&lt;/th&gt;
      &lt;th&gt;主流原因说明&lt;/th&gt;
      &lt;th&gt;备注 / 行业评价&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014年11月2日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全国&lt;/strong&gt;（管控面+部分服务）&lt;/td&gt;
      &lt;td&gt;约6分钟&lt;/td&gt;
      &lt;td&gt;腾讯云官网访问慢、图片加载失败、控制台异常，部分用户无法正常使用&lt;/td&gt;
      &lt;td&gt;未详细公开（疑似网络/负载问题）&lt;/td&gt;
      &lt;td&gt;早期小体量时期，影响有限，但被当时媒体广泛报道&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年8月&lt;/td&gt;
      &lt;td&gt;部分用户/云硬盘&lt;/td&gt;
      &lt;td&gt;不确定（单用户影响数小时至永久）&lt;/td&gt;
      &lt;td&gt;多位用户云服务器磁盘数据&lt;strong&gt;清零/丢失&lt;/strong&gt;，涉及千万元级别损失&lt;/td&gt;
      &lt;td&gt;磁盘静默错误 + 数据迁移过程中校验/副本机制失效&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;腾讯云历史上最严重的“丢数据”事件&lt;/strong&gt;，引发云安全信任危机，官方发详细复盘&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年（零星报道）&lt;/td&gt;
      &lt;td&gt;部分地域/服务&lt;/td&gt;
      &lt;td&gt;数十分钟–数小时&lt;/td&gt;
      &lt;td&gt;零星控制台/API异常、存储访问抖动&lt;/td&gt;
      &lt;td&gt;未见公开详细复盘&lt;/td&gt;
      &lt;td&gt;相比阿里云同年11月全球事故，腾讯云这一年相对平稳&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年4月8日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球17个地域&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;约74–87分钟&lt;/td&gt;
      &lt;td&gt;控制台完全无法登录、云API全面报错（504 Gateway Timeout）、CVM/RDS等实例正常运行但无法管理/续费/扩容等操作；1957个客户报障&lt;/td&gt;
      &lt;td&gt;云API新版本向前兼容性不足 + 配置数据灰度机制缺失 → 全量发布导致全局传播&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;腾讯云近年来最严重的一次&lt;/strong&gt;，被广泛称为“全球大故障”“管控面崩盘”，类似阿里云2023年11月风格&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月15日&lt;/td&gt;
      &lt;td&gt;多地域&lt;/td&gt;
      &lt;td&gt;约数十分钟–1小时&lt;/td&gt;
      &lt;td&gt;弹性伸缩（Auto Scaling）等服务异常&lt;/td&gt;
      &lt;td&gt;未详细公开&lt;/td&gt;
      &lt;td&gt;来自status页面，属于中型故障&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月17日&lt;/td&gt;
      &lt;td&gt;广州地域&lt;/td&gt;
      &lt;td&gt;约1小时多&lt;/td&gt;
      &lt;td&gt;智能数智人相关服务异常&lt;/td&gt;
      &lt;td&gt;未详细公开&lt;/td&gt;
      &lt;td&gt;区域级，影响特定AI/数字人产品&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;重要观察与趋势20142025-2&quot;&gt;重要观察与趋势（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;早期（2014–2018）&lt;/strong&gt;：故障多为&lt;strong&gt;存储层数据丢失&lt;/strong&gt;或&lt;strong&gt;短时访问异常&lt;/strong&gt;，典型如2018年“丢数据”事件对企业信任打击最大。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019–2023&lt;/strong&gt;：腾讯云故障频次和严重度明显下降，鲜有全国/全球级事件，稳定性优于阿里云同期（尤其是2023年阿里云11·12史诗级故障时腾讯云表现平稳）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：2024年4月8日成为转折点，这次&lt;strong&gt;管控面全局故障&lt;/strong&gt;让很多人重新审视腾讯云的“变更安全”和“灰度发布”能力。2025年出现几次中型事件，但未见类似2024年4月或阿里云/谷歌云那种“全服务瘫痪”级别。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型特点&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;控制面/API问题&lt;/strong&gt;是近年最主要痛点（2024年4月事件典型代表）。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;存储/数据丢失&lt;/strong&gt;类事故对企业杀伤力最大（2018年案例）。&lt;/li&gt;
      &lt;li&gt;腾讯云官方复盘相对及时（尤其是重大事件会在公众号、技术社区发详细说明）。&lt;/li&gt;
      &lt;li&gt;没有像AWS/Azure/Google那样严格的SLA信用赔付机制，但会提供代金券/补偿。&lt;/li&gt;
      &lt;li&gt;故障传播效应不如阿里云、Cloudflare那么剧烈（因为腾讯云客户结构更偏企业/游戏/视频，对消费互联网依赖相对低）。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;总体而言，腾讯云在2014–2025这12年间真正称得上&lt;strong&gt;重大级别（全国/全球管控面长时间不可用或严重数据丢失）&lt;/strong&gt;的故障大约&lt;strong&gt;3–5次&lt;/strong&gt;，其中&lt;strong&gt;2018年丢数据&lt;/strong&gt;和&lt;strong&gt;2024年4月8日全球管控面故障&lt;/strong&gt;是公认影响力和讨论度最高的两起。&lt;/p&gt;

&lt;h2 id=&quot;故障透明度&quot;&gt;故障透明度&lt;/h2&gt;

&lt;p&gt;就故障透明度而言，阿里云和腾讯云是比较薄弱的。
阿里云的健康看板（https://status.aliyun.com/#/?region=cn-shanghai）和腾讯云的健康看板（https://status.cloud.tencent.com/history）只显示了过去1年发生过的历史事件。&lt;/p&gt;

&lt;p&gt;Azure（https://azure.status.microsoft/en-us/status/history/）保留了5年，cloudflare（https://www.cloudflarestatus.com/history?page=17）最详细透明，可以使用page一直翻页到前面几年的事故。&lt;/p&gt;

&lt;h2 id=&quot;公有云死因&quot;&gt;公有云“死因”&lt;/h2&gt;

&lt;p&gt;在我年轻的时候，我热衷于查阅并重构别人的代码。直到Java Boy给了我上了一课：
即便我帮他修复了内存泄露的问题，他感受到的是一种来自内心深处的存在主义危机。他以愤怒作为掩盖自己无能的藉口，把“维持kubernetes平台稳定”的罪责推到我身上。&lt;/p&gt;

&lt;p&gt;其实我也不是很乐意帮他擦屁股。我只是觉得频繁出现的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OOM kill&lt;/code&gt; event 报警让我很烦躁而已。从这个故事中，我领悟了0的哲学：&lt;strong&gt;边际收益为0的重构没人愿意做&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;因此便能推导得出软件行业的&lt;strong&gt;熵增定律&lt;/strong&gt;：项目代码库会随着时间推移而变成一座屎山。&lt;/p&gt;

&lt;p&gt;有人问，这跟公有云的死因有什么关系呢？&lt;/p&gt;

&lt;p&gt;实际上是非常有关系的。因为“工业克苏鲁”要求企业贡献随时间递增的利润。因此对于公有云厂商，对于他们的基层员工而言，就必须“讲一种新的增长故事”，比如现在是2026年，就以AI作为新的增长极。&lt;/p&gt;

&lt;p&gt;而旧的的代码就一直烂在那里。因为修改他们没有任何边际收益。&lt;/p&gt;

&lt;p&gt;于是大家就逐渐形成这种共识：不修改别人的代码，任由它成为一座屎山。代码如此，架构亦如此。即便网络拓扑成为纯粹的相互依赖的网状结构，反正出事的时候大家都用不了，当宕机责任被平等分摊，自己便没有责任。&lt;/p&gt;

&lt;p&gt;讽刺的是，一个在职期间0故障发生，天天上班睡觉的运维工程师，会被认为是一个不称职的人。因为他看起来啥事都没做。然而反直觉的是，这种人其实应该当成企业的吉祥物供起来，因为你根本不知道他之前为了公司的业务稳定付出了多少努力。或者说他纯粹是命好，配享大庙。&lt;/p&gt;

&lt;p&gt;实际上，最好的运维在于不运维。因为&lt;strong&gt;运维收入与职业风险完全不对等&lt;/strong&gt;。上级不会因为你删除了一个看起来没用的配置，而在这个月多给你发一笔补贴；但你会因为删除了一个有用的数据库配置，而遭到客户的辱骂。&lt;/p&gt;

&lt;p&gt;公有云企业忘了，网络效应可以把他们扶起来，也可以把他们重重地摔下去。当他们的客户越多，单次宕机而产生的网络连锁反应就会越大。就好比2025年12月4日晚约21:00–23:37的支付宝故障，这已经是阿里系在2025年的第六次大故障。&lt;/p&gt;

&lt;p&gt;当用户规模以亿作为计算单位，每一秒都有人在支付。然而业务又要求往软件上继续加新的功能，最后整个系统不堪重负。&lt;/p&gt;

&lt;p&gt;而且公有云服务厂商赔付完全不对等。像支付宝这种最多就是多退少补，少收用户的钱当做福利。但政企的损失则完全无法估算。如果业务寄宿在公有云上，而公有云宕机了，那么作为业务方的你，要怎么向公有云介绍自己的损失呢？&lt;/p&gt;

&lt;p&gt;“我的系统每天交易几百个亿，你赔我几个亿？”&lt;/p&gt;

&lt;p&gt;客户的损失无法量化，因此阿里云通常都是赔点代金券。但这完全是杯水车薪。损失的时间，谁也无法说清楚实际的业务影响和时间价值。&lt;/p&gt;

&lt;p&gt;网络效应带来了公有云指数级别的收入增长。但作为大型政企用户而言，对公有云反依赖应该提上日程。把自己的命运跟单一的云厂商绑定，无法应对突发的风险。&lt;/p&gt;

&lt;h2 id=&quot;小并发高可用系统&quot;&gt;小并发高可用系统&lt;/h2&gt;

&lt;p&gt;在此基础上，我提出我的“小并发高可用系统”概念。我的初步设想是通过存储的冗余，实现业务的高可用。
当流量平稳分摊到设计冗余的信息系统，既规避了集中式流量带来的单集群流量洪峰，又减少了问题扩散的半径。&lt;/p&gt;

&lt;p&gt;举个最简单的例子。在DNS解析的时候，把广东的DNS解析设置在一个华南区域的阿里云、腾讯云kubernetes集群。每一个集群互不依赖，运行内部完整的信息业务系统。
这样最坏情况，公有云自身出问题，只会出现50%的不可用。&lt;/p&gt;

&lt;p&gt;同时不可用，概率极小。&lt;/p&gt;

&lt;h2 id=&quot;孤帆远影碧山尽唯见长江天际流&quot;&gt;孤帆远影碧山尽，唯见长江天际流&lt;/h2&gt;

&lt;h2 id=&quot;参考链接&quot;&gt;参考链接&lt;/h2&gt;

&lt;p&gt;【1】
2025 年 11 月 18 日 Cloudflare 服务中断
https://blog.cloudflare.com/zh-cn/18-november-2025-outage/&lt;/p&gt;

&lt;p&gt;【2】
从 AWS 故障看 DNS 的隐形杀伤力：DeepFlow 如何在混乱中快速锁定根因
https://my.oschina.net/u/3681970/blog/18697034&lt;/p&gt;

&lt;p&gt;【3】
2023-11-12阿里云故障复盘与分析
https://github.tiankonguse.com/blog/2023/11/29/aliyun-break.html&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;This article starts from formal logic and definitions (network effect, law of entropy increase, anti-dependency, and the “zero” philosophy of zero marginal benefit), systematically reviews major outages of mainstream public clouds and infrastructure—Alibaba Cloud, Google Cloud, Azure, Cloudflare, Tencent Cloud—from 2014 to 2025, and compares their fault transparency. On this basis, it analyzes the “causes of death” of public cloud: software entropy and zero marginal benefit make legacy code and architecture hard to govern; network effects amplify cascading failures; and SLA compensation is severely misaligned with actual losses for enterprises and government. The author recommends that large enterprises and government agencies prioritize “anti-dependency” on any single public cloud and proposes a “small-concurrency high-availability system”—reducing single-point risk and blast radius through storage redundancy and traffic distribution (e.g., multi-region, multi-cluster DNS resolution).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/fimbulwinter/fimbulwinter.jpeg&quot; alt=&quot;Fimbulwinter&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;formal-logic-and-definitions&quot;&gt;Formal Logic and Definitions&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Network effect&lt;/strong&gt;: The more users (or participants) a product/service/platform has, the more valuable it becomes to each user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Law of entropy increase&lt;/strong&gt;: A project’s codebase will, over time, turn into a mess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-dependency&lt;/strong&gt;: The reverse of depending on a single programming language, tech stack, or cloud platform. Examples: polyglot programming, multi-stack choices, multi-cloud strategy. Anti-dependency lets the business run smoothly without being tied to one language, open-source project, or public cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero&lt;/strong&gt;: Nobody wants to do refactoring whose marginal benefit is zero.&lt;/p&gt;

&lt;h2 id=&quot;aws-outages&quot;&gt;AWS Outages&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Region / Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact &amp;amp; Consequences&lt;/th&gt;
      &lt;th&gt;Official / Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry Evaluation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1 (Northern Virginia)&lt;/td&gt;
      &lt;td&gt;Not specified&lt;/td&gt;
      &lt;td&gt;Affected key components of Amazon SimpleDB, some users unable to access or operate databases.&lt;/td&gt;
      &lt;td&gt;Power-related system interruption.&lt;/td&gt;
      &lt;td&gt;Relatively small-scale; quick recovery; highlighted power redundancy issues.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-08-07&lt;/td&gt;
      &lt;td&gt;EU West (Ireland)&lt;/td&gt;
      &lt;td&gt;Not specified&lt;/td&gt;
      &lt;td&gt;Impacted EC2, EBS, and RDS; some European users lost access to instances, storage, and databases.&lt;/td&gt;
      &lt;td&gt;Internal system event (root cause not detailed).&lt;/td&gt;
      &lt;td&gt;Regional impact; showed early limitations in regional isolation.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-11-26&lt;/td&gt;
      &lt;td&gt;Global (CloudFront DNS)&lt;/td&gt;
      &lt;td&gt;~2 hours&lt;/td&gt;
      &lt;td&gt;DNS servers down, affected CDN; many websites and cloud services failed to resolve requests.&lt;/td&gt;
      &lt;td&gt;DNS server failure.&lt;/td&gt;
      &lt;td&gt;Short but broad impact; exposed DNS fragility of the world’s largest cloud.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2015-09-20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Several hours&lt;/td&gt;
      &lt;td&gt;DynamoDB outage caused internal service communication failure; affected Netflix, Reddit, IMDb, Amazon properties.&lt;/td&gt;
      &lt;td&gt;Internal service communication chain reaction.&lt;/td&gt;
      &lt;td&gt;Serious incident; millions impacted; warned about tight internal dependencies.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2017-02-28&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;4–5 hours&lt;/td&gt;
      &lt;td&gt;S3 control plane outage; Slack, Trello, GitHub Pages, Quora, many sites lost images/files.&lt;/td&gt;
      &lt;td&gt;Engineer typo deleted critical configuration.&lt;/td&gt;
      &lt;td&gt;One of the most famous outages ever; “most expensive typo in history”.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020-11-25&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Several hours&lt;/td&gt;
      &lt;td&gt;Kinesis and Cognito disruption; affected Roku, Adobe, Flickr; streaming &amp;amp; auth services down.&lt;/td&gt;
      &lt;td&gt;Capacity update issue.&lt;/td&gt;
      &lt;td&gt;Happened during pandemic; highlighted capacity planning challenges.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-12-05&lt;/td&gt;
      &lt;td&gt;us-east-2 (Ohio)&lt;/td&gt;
      &lt;td&gt;~40 minutes&lt;/td&gt;
      &lt;td&gt;Availability Zone outage; impacted multiple services in the region.&lt;/td&gt;
      &lt;td&gt;Not publicly detailed (likely network/power).&lt;/td&gt;
      &lt;td&gt;Short but emphasized importance of multi-AZ architecture.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Not specified&lt;/td&gt;
      &lt;td&gt;Lambda service disruption; affected large organizations (Boston Globe, NYC subway, AP, etc.).&lt;/td&gt;
      &lt;td&gt;Not publicly detailed.&lt;/td&gt;
      &lt;td&gt;Exposed fragility of serverless computing at scale.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024-07-30&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Not specified&lt;/td&gt;
      &lt;td&gt;Kinesis Data Streams outage; impacted real-time data processing applications.&lt;/td&gt;
      &lt;td&gt;Not publicly detailed.&lt;/td&gt;
      &lt;td&gt;Highlighted risks in stream-processing dependencies.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-02&lt;/td&gt;
      &lt;td&gt;eu-north-1 (Stockholm)&lt;/td&gt;
      &lt;td&gt;Not specified&lt;/td&gt;
      &lt;td&gt;Major network issue in one AZ; affected core services in Europe.&lt;/td&gt;
      &lt;td&gt;Major network failure.&lt;/td&gt;
      &lt;td&gt;Regional event; reflected challenges in European infrastructure expansion.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-10-19/20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;&amp;gt;15 hours&lt;/td&gt;
      &lt;td&gt;DynamoDB API endpoint outage (DNS failure); impacted Slack, Reddit, Roblox, Fortnite, Coinbase, Venmo, Duolingo, Canva, PlayStation, banks, airlines (Delta/United delays), Amazon services; &amp;gt;3,500 companies, 60+ countries, &amp;gt;17 million user reports.&lt;/td&gt;
      &lt;td&gt;DNS resolution failure leading to cascading effect.&lt;/td&gt;
      &lt;td&gt;Largest cloud outage of 2025; called “the biggest cloud fragility exposure”; strongly pushed multi-cloud strategies.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Analysis of the most severe incidents&lt;/strong&gt;&lt;br /&gt;
The most severe outages were 2015-09-20 (DynamoDB), 2017-02-28 (S3), and especially 2025-10-19/20 (DynamoDB DNS). All occurred in us-east-1, AWS’s oldest and busiest region.&lt;br /&gt;
Severity ranking:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;2015: entertainment &amp;amp; social platforms heavily affected, but limited to consumer services.&lt;/li&gt;
  &lt;li&gt;2017: massive productivity and developer impact; huge economic loss due to human error.&lt;/li&gt;
  &lt;li&gt;2025: longest duration (&amp;gt;15h), broadest scope (finance, gaming, education, aviation, critical infrastructure), highest user impact — widely regarded as the most serious single cloud outage in recent years.&lt;br /&gt;
Common lessons: over-reliance on us-east-1, control-plane fragility, cascading failures. Industry increasingly recommends multi-region, multi-cloud, or hybrid architectures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;alibaba-cloud-outages&quot;&gt;Alibaba Cloud Outages&lt;/h2&gt;

&lt;p&gt;From 2014 to 2025, Alibaba Cloud did not have an unusually high number of &lt;strong&gt;major incidents&lt;/strong&gt; that were widely reported, officially disclosed, &lt;strong&gt;truly broad in impact, long in duration, and widely called “major outages”&lt;/strong&gt; (relative to its scale, its overall SLA remains among the best in the industry). A few of them, however, did cause significant social impact and industry debate. Below is a chronological list of &lt;strong&gt;major-level outages&lt;/strong&gt; (based mainly on public reports, official announcements, media and community post-mortems):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Region/Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact and Consequences&lt;/th&gt;
      &lt;th&gt;Official/Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry View&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;June 2018&lt;/td&gt;
      &lt;td&gt;Some regions (details not public)&lt;/td&gt;
      &lt;td&gt;~30 min&lt;/td&gt;
      &lt;td&gt;Some cloud products abnormal, limited impact&lt;/td&gt;
      &lt;td&gt;Not disclosed in detail&lt;/td&gt;
      &lt;td&gt;Described by some media as “major technical failure”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;March 3, 2019&lt;/td&gt;
      &lt;td&gt;North China 2 (Beijing) AZ-C&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Many ECS disk failures, many sites/Apps down&lt;/td&gt;
      &lt;td&gt;Disk failure&lt;/td&gt;
      &lt;td&gt;Significant impact; Alibaba Cloud compensated per SLA&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Dec 18, 2022&lt;/td&gt;
      &lt;td&gt;Hong Kong Region AZ-C&lt;/td&gt;
      &lt;td&gt;~15.5 hours&lt;/td&gt;
      &lt;td&gt;Hong Kong region largely down; key sites in Macau (monetary authority, Galaxy, Lotus TV, etc.) unavailable; OKX affected&lt;/td&gt;
      &lt;td&gt;Cooling equipment failure → cascade → large outage&lt;/td&gt;
      &lt;td&gt;Widely called “one of the worst incidents in Alibaba Cloud history”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Nov 12, 2023&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;All regions and services globally&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~3h 16m&lt;/td&gt;
      &lt;td&gt;Console, API, MQ, microservices, monitoring, ML, etc. largely abnormal; Taobao, DingTalk, Xianyu, Ele.me, Alibaba Cloud Drive, etc. down&lt;/td&gt;
      &lt;td&gt;Core component failure (auth/metadata/control plane)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Widely seen as Alibaba Cloud’s worst, broadest outage&lt;/strong&gt;; “epic,” “unprecedented in the industry”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Nov 27, 2023&lt;/td&gt;
      &lt;td&gt;Some servers&lt;/td&gt;
      &lt;td&gt;~2 hours&lt;/td&gt;
      &lt;td&gt;Server access abnormal&lt;/td&gt;
      &lt;td&gt;Not disclosed in detail&lt;/td&gt;
      &lt;td&gt;Only half a month after 11·12; renewed trust concerns&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;July 2, 2024&lt;/td&gt;
      &lt;td&gt;Some regions/services&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Console and some services abnormal&lt;/td&gt;
      &lt;td&gt;No detailed post-mortem&lt;/td&gt;
      &lt;td&gt;Mid-sized; impact smaller than earlier incidents&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025 (date unclear)&lt;/td&gt;
      &lt;td&gt;Global (suspected DNS-related)&lt;/td&gt;
      &lt;td&gt;~6 hours&lt;/td&gt;
      &lt;td&gt;DNS hijacking led to global service issues&lt;/td&gt;
      &lt;td&gt;DNS hijacking&lt;/td&gt;
      &lt;td&gt;From 2025 public cloud outage summary; details TBD&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;important-notes-and-trends&quot;&gt;Important Notes and Trends&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2014–2018 early&lt;/strong&gt;: Very few publicly disclosed major P0-level incidents in this period; more local, limited issues. Scale was much smaller; impact was smaller too.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Two most severe&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;2022.12 Hong Kong 15.5h&lt;/strong&gt; → Longest single-region outage; severe impact on critical infrastructure in Hong Kong and Macau.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2023.11.12 global 3h+&lt;/strong&gt; → Control plane and global services down; widely seen as a rare “all regions × all services” failure, breaking the “multi-active, multi-center, N nines” myth.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: From known information, frequency and severity are lower than 2022–2023, but medium-to-large events still occur (e.g. 2025 DNS hijacking had broad impact).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Alibaba Cloud’s handling&lt;/strong&gt;: Most major incidents get detailed post-mortems (especially 2022 Hong Kong and 2023 global); SLA compensation (usually vouchers); senior/formal apologies.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall, in 2014–2025 Alibaba Cloud had roughly &lt;strong&gt;5–7&lt;/strong&gt; incidents that qualify as “major,” with &lt;strong&gt;Nov 12, 2023&lt;/strong&gt; and &lt;strong&gt;Dec 2022 Hong Kong&lt;/strong&gt; generally seen as the two most severe.&lt;/p&gt;

&lt;h2 id=&quot;google-cloud-outages&quot;&gt;Google Cloud Outages&lt;/h2&gt;

&lt;p&gt;Google Cloud Platform (GCP) had relatively good overall SLA from 2014 to 2025; &lt;strong&gt;major incidents&lt;/strong&gt; that truly affected &lt;strong&gt;global scope&lt;/strong&gt; or &lt;strong&gt;multiple core services&lt;/strong&gt; were not especially frequent (fewer than AWS and Azure in terms of global disasters). When they did occur, they often affected many third-party apps (e.g. Snapchat, Spotify, Discord, services depending on Cloudflare), with high social impact.&lt;/p&gt;

&lt;p&gt;Below is a chronological list of &lt;strong&gt;serious, broad-impact&lt;/strong&gt; GCP outages (based on public Status Dashboard, media, Wikipedia, industry post-mortems):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Region/Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact and Consequences&lt;/th&gt;
      &lt;th&gt;Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry View&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 2015&lt;/td&gt;
      &lt;td&gt;Europe (Ghlin, Belgium)&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Compute Engine very high read/write error rate; some data loss&lt;/td&gt;
      &lt;td&gt;Lightning damaged part of datacenter&lt;/td&gt;
      &lt;td&gt;Google rarely admitted &lt;strong&gt;data loss&lt;/strong&gt;; limited customer set&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;July 2018&lt;/td&gt;
      &lt;td&gt;Global (multiple regions)&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;GCP services abnormal; Snapchat, Spotify, etc. largely unusable&lt;/td&gt;
      &lt;td&gt;Network congestion + internal routing&lt;/td&gt;
      &lt;td&gt;Widely reported; strong third-party impact&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;June 2, 2019&lt;/td&gt;
      &lt;td&gt;US East + global&lt;/td&gt;
      &lt;td&gt;~4–5 hours&lt;/td&gt;
      &lt;td&gt;YouTube, Gmail, G Suite largely down; Snapchat, Discord, Vimeo login failures&lt;/td&gt;
      &lt;td&gt;US East network congestion + cascade&lt;/td&gt;
      &lt;td&gt;Broad impact; social media buzz&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Dec 14, 2020&lt;/td&gt;
      &lt;td&gt;Global&lt;/td&gt;
      &lt;td&gt;~1 hour&lt;/td&gt;
      &lt;td&gt;Gmail, YouTube, Google Home, Nest, Pokémon GO, etc.—almost all auth-dependent services down&lt;/td&gt;
      &lt;td&gt;Identity/auth system (IAM-like) global failure&lt;/td&gt;
      &lt;td&gt;Consumer services “down”; one of the worst&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 2022&lt;/td&gt;
      &lt;td&gt;Iowa datacenter&lt;/td&gt;
      &lt;td&gt;Local&lt;/td&gt;
      &lt;td&gt;Electrical fire (3 injured); some services affected, not global&lt;/td&gt;
      &lt;td&gt;Datacenter electrical fire&lt;/td&gt;
      &lt;td&gt;Physical facility; not purely software/architecture&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Apr 2023&lt;/td&gt;
      &lt;td&gt;Europe (Paris, etc.)&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Multi-region network + service disruption&lt;/td&gt;
      &lt;td&gt;Flood + datacenter + network issues&lt;/td&gt;
      &lt;td&gt;Weather-related; medium impact&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Oct 23, 2024&lt;/td&gt;
      &lt;td&gt;Europe (Frankfurt europe-west3)&lt;/td&gt;
      &lt;td&gt;~12+ hours&lt;/td&gt;
      &lt;td&gt;Region largely unavailable; many European customers affected&lt;/td&gt;
      &lt;td&gt;Not disclosed in detail (suspected control plane/network)&lt;/td&gt;
      &lt;td&gt;One of the longest single-region outages&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;June 12, 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt; (40+ regions)&lt;/td&gt;
      &lt;td&gt;~2.5–3 hours&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;70+ GCP services&lt;/strong&gt; abnormal; IAM down → API requests failing; Spotify, Discord, Twitch, Cloudflare, Fitbit, Gmail, Drive, YouTube, etc. down&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Service Control&lt;/strong&gt; (API auth core) automation update introduced severe bug → crash loop → global overload&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Widely seen as GCP’s worst global outage since 2020&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;July 18, 2025&lt;/td&gt;
      &lt;td&gt;us-east1&lt;/td&gt;
      &lt;td&gt;~2 hours&lt;/td&gt;
      &lt;td&gt;Multiple products higher error rates&lt;/td&gt;
      &lt;td&gt;Not disclosed in detail&lt;/td&gt;
      &lt;td&gt;Mid-sized; recovery relatively fast&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;azure-outages&quot;&gt;Azure Outages&lt;/h2&gt;

&lt;p&gt;Microsoft Azure did not have an unusually high number of &lt;strong&gt;major incidents&lt;/strong&gt; that were &lt;strong&gt;broad in impact, long in duration, and highly visible&lt;/strong&gt; from 2014 to 2025 (compared with earlier, smaller-scale frequent glitches, the trend improved). A few events did cause global or multi-service impact, especially when &lt;strong&gt;Microsoft 365, Teams, Xbox, Outlook&lt;/strong&gt; and other consumer/enterprise products were involved; the propagation effect was very visible.&lt;/p&gt;

&lt;p&gt;Below is a chronological list of &lt;strong&gt;major-level&lt;/strong&gt; Azure outages (based on Azure Status History, Post Incident Reviews, media, Wikipedia, industry post-mortems):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Region/Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact and Consequences&lt;/th&gt;
      &lt;th&gt;Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry View&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 14–18, 2014&lt;/td&gt;
      &lt;td&gt;US Central, US East, US East 2, Europe North&lt;/td&gt;
      &lt;td&gt;Multiple days, hours per event&lt;/td&gt;
      &lt;td&gt;Cloud Services, SQL Database, VM, Websites, HDInsight, Mobile Services, Service Bus largely unavailable&lt;/td&gt;
      &lt;td&gt;Multiple network/storage issues&lt;/td&gt;
      &lt;td&gt;2014’s most concentrated wave; Azure still young&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Nov 18–19, 2014&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Multiple regions&lt;/strong&gt; (US, EU, Asia)&lt;/td&gt;
      &lt;td&gt;~11 hours&lt;/td&gt;
      &lt;td&gt;Azure Storage at core; VM, Websites, Visual Studio Online, Xbox Live, MSN, Search, 20+ services down&lt;/td&gt;
      &lt;td&gt;Storage perf config change → Blob front-end infinite loop&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure’s worst early incident&lt;/strong&gt;; detailed RCA; customer compensation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sep 15, 2016&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Widespread DNS resolution failure; many Azure DNS–dependent services affected&lt;/td&gt;
      &lt;td&gt;Global DNS issue&lt;/td&gt;
      &lt;td&gt;Exposed DNS single-point risk&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;June 20, 2018&lt;/td&gt;
      &lt;td&gt;North America multiple datacenters&lt;/td&gt;
      &lt;td&gt;Hours–1+ day&lt;/td&gt;
      &lt;td&gt;Cooling failure (lightning + surge protection) → multi-service disruption&lt;/td&gt;
      &lt;td&gt;Physical facility (lightning cascade)&lt;/td&gt;
      &lt;td&gt;Rare hardware/infrastructure incident&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Sep 4, 2018&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Multiple regions&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;25+ hours (some services 3 days)&lt;/td&gt;
      &lt;td&gt;Core services long unavailable&lt;/td&gt;
      &lt;td&gt;Cooling (lightning + surge)&lt;/td&gt;
      &lt;td&gt;One of the longest recoveries&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Jan 23, 2023&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt; (core network)&lt;/td&gt;
      &lt;td&gt;~3 hours&lt;/td&gt;
      &lt;td&gt;Microsoft 365 (Teams, Outlook, Exchange), some Azure services down&lt;/td&gt;
      &lt;td&gt;WAN issue&lt;/td&gt;
      &lt;td&gt;M365 “down”; huge impact&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;July 18, 2024&lt;/td&gt;
      &lt;td&gt;US Central&lt;/td&gt;
      &lt;td&gt;~Half day&lt;/td&gt;
      &lt;td&gt;VM and other management operations failing; customers unable to access managed services&lt;/td&gt;
      &lt;td&gt;Access control error + infrastructure failure&lt;/td&gt;
      &lt;td&gt;Close in time to next-day CrowdStrike global BSOD but independent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Jan 8–9, 2025&lt;/td&gt;
      &lt;td&gt;East US 2, etc.&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Azure Databricks, Synapse, Functions, App Service, VM network disruption&lt;/td&gt;
      &lt;td&gt;Network component issue&lt;/td&gt;
      &lt;td&gt;Notable early 2025&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Oct 29, 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~8 hours&lt;/td&gt;
      &lt;td&gt;Azure Front Door at core; Microsoft 365, Outlook, Teams, Xbox Live, Minecraft, Copilot down; Alaska Airlines, Heathrow, Costco, Starbucks, etc. affected&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure Front Door config change&lt;/strong&gt; + protection bug → inconsistent config propagated globally&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025’s worst for Azure&lt;/strong&gt;; Downdetector 30k+ reports; similar to AWS same month&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Nov 5–6, 2025&lt;/td&gt;
      &lt;td&gt;West Europe (AZ01)&lt;/td&gt;
      &lt;td&gt;~9–10 hours&lt;/td&gt;
      &lt;td&gt;VM, PostgreSQL/MySQL Flexible Server, AKS, Storage, Service Bus degraded/out&lt;/td&gt;
      &lt;td&gt;Datacenter thermal event&lt;/td&gt;
      &lt;td&gt;Serious regional outage&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;observations-and-trends-20142025&quot;&gt;Observations and Trends (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014&lt;/strong&gt;: Azure in rapid expansion; &lt;strong&gt;config changes&lt;/strong&gt; and &lt;strong&gt;storage layer&lt;/strong&gt; issues frequent; most concentrated year (Nov incident is a classic case).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2015–2019&lt;/strong&gt;: Fewer incidents; still mostly &lt;strong&gt;single region&lt;/strong&gt; or &lt;strong&gt;infrastructure&lt;/strong&gt; (cooling, lightning, DNS); impact relatively contained.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2020–2023&lt;/strong&gt;: Few major global outages; more &lt;strong&gt;network&lt;/strong&gt; or &lt;strong&gt;M365 dependency on Azure&lt;/strong&gt; (e.g. Jan 2023).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: Control plane/edge (e.g. &lt;strong&gt;Azure Front Door&lt;/strong&gt;) became a new pain point; Oct 29, 2025 widely seen as Azure’s worst &lt;strong&gt;global outage&lt;/strong&gt; in recent years, comparable to Alibaba Nov 2023 or GCP June 2025.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Typical traits&lt;/strong&gt;: Detailed &lt;strong&gt;Post Incident Review (PIR)&lt;/strong&gt; after major incidents; &lt;strong&gt;config change&lt;/strong&gt;, &lt;strong&gt;control plane&lt;/strong&gt;, &lt;strong&gt;network&lt;/strong&gt; often root causes (not just hardware); strong third-party propagation when M365, Xbox, Teams fail; SLA compensation (credit); customers care most about business continuity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, Azure had roughly &lt;strong&gt;8–10&lt;/strong&gt; &lt;strong&gt;major-level&lt;/strong&gt; (global/multi-service, long) outages in 2014–2025; severity and frequency on par with AWS and GCP; &lt;strong&gt;cascading failure from config error&lt;/strong&gt; is a recurring pattern.&lt;/p&gt;

&lt;h2 id=&quot;cloudflare-outages&quot;&gt;Cloudflare Outages&lt;/h2&gt;

&lt;p&gt;Cloudflare, as one of the world’s largest CDN, security, DNS, and edge providers, did not have an unusually high number of &lt;strong&gt;major incidents&lt;/strong&gt; that caused &lt;strong&gt;broad internet disruption&lt;/strong&gt; from 2014 to 2025. When they did occur, impact often reached &lt;strong&gt;millions to hundreds of millions&lt;/strong&gt; of users (Cloudflare carries ~20–25% of global web traffic).&lt;/p&gt;

&lt;p&gt;Typical pattern: &lt;strong&gt;recovery is often fast&lt;/strong&gt; (most ease within 1–4 hours), but &lt;strong&gt;propagation is extreme&lt;/strong&gt;—when core proxy, DNS, or security components fail, many top sites (X, ChatGPT, Shopify, Discord, Spotify, parts of AWS, etc.) see 5xx or unreachable at once.&lt;/p&gt;

&lt;p&gt;Below is a chronological list of &lt;strong&gt;major-level&lt;/strong&gt; Cloudflare outages (based on official blog, status.cloudflare.com history, media, Wikipedia; focused on global/core traffic events):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact and Consequences&lt;/th&gt;
      &lt;th&gt;Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry View&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;July 2, 2019&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~1–2 hours&lt;/td&gt;
      &lt;td&gt;Many sites 502/503/504; large parts of internet unreachable&lt;/td&gt;
      &lt;td&gt;Software deploy introduced severe bug → proxy layer crash&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Widely seen as Cloudflare’s worst ever&lt;/strong&gt;; detailed post-mortem&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020 multiple&lt;/td&gt;
      &lt;td&gt;Some regions/control plane&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Dashboard, analytics, some APIs down; core proxy largely stable&lt;/td&gt;
      &lt;td&gt;Control plane issues&lt;/td&gt;
      &lt;td&gt;More impact on developers; less for general users&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;June 2022&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Multiple datacenters&lt;/strong&gt; (19)&lt;/td&gt;
      &lt;td&gt;~1.5 hours&lt;/td&gt;
      &lt;td&gt;Core proxy down; many sites unreachable&lt;/td&gt;
      &lt;td&gt;Network config error&lt;/td&gt;
      &lt;td&gt;Medium scale; fast recovery&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Mar 21, 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~1h 7m&lt;/td&gt;
      &lt;td&gt;Storage read/write severely impaired; many storage/cache–dependent services affected&lt;/td&gt;
      &lt;td&gt;KV/storage layer write failure + partial read issues&lt;/td&gt;
      &lt;td&gt;Notable early 2025&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;June 12, 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt; (some features)&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Some features/services down; core traffic largely OK&lt;/td&gt;
      &lt;td&gt;Specific module deploy&lt;/td&gt;
      &lt;td&gt;Not core traffic; limited impact&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;July 14, 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt; (1.1.1.1 DNS)&lt;/td&gt;
      &lt;td&gt;~62 minutes&lt;/td&gt;
      &lt;td&gt;Public DNS resolver (1.1.1.1) fully down; many users unable to reach internet&lt;/td&gt;
      &lt;td&gt;Config error → BGP route withdrawal → DNS prefix disappeared from global routing table&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Severe for 1.1.1.1 users&lt;/strong&gt;; “internet-breaking” level&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;~Oct 2025&lt;/td&gt;
      &lt;td&gt;Some services&lt;/td&gt;
      &lt;td&gt;Tens of minutes&lt;/td&gt;
      &lt;td&gt;Brief DNS resolution disruption&lt;/td&gt;
      &lt;td&gt;DNS-related config&lt;/td&gt;
      &lt;td&gt;Mid-sized&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Nov 18, 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~4–5 hours (peak longer)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Large-scale internet outage&lt;/strong&gt;: X (Twitter), ChatGPT, Shopify, Spotify, Letterboxd, Indeed, Canva, Uber, DoorDash, Truth Social, League of Legends, etc.; ~20% web traffic; 1/3 of Alexa top 10k sites&lt;/td&gt;
      &lt;td&gt;Bot Management rules file abnormal growth (DB permission change → file size doubled) → global propagation → proxy crash&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025’s worst&lt;/strong&gt;; also worst global traffic outage since 2019&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Dec 5, 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Global&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Hours&lt;/td&gt;
      &lt;td&gt;Widespread 5xx again; Shopify, Zoom, Vinted, Fortnite, Square, Just Eat, Canva, Vimeo, parts of AWS, Deliveroo, etc.&lt;/td&gt;
      &lt;td&gt;No full official root cause (suspected config/propagation)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Only 17 days after Nov 18&lt;/strong&gt;; two major incidents in a row raised strong criticism&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;observations-and-trends-20142025-1&quot;&gt;Observations and Trends (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014–2018&lt;/strong&gt;: Cloudflare grew fast; few public &lt;strong&gt;global major&lt;/strong&gt; incidents; more local/regional/functional issues; internet depended on Cloudflare less than today.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;July 2019&lt;/strong&gt;: Became Cloudflare’s classic “black swan”; no &lt;strong&gt;core proxy global&lt;/strong&gt; outage of similar scale for over six years.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2025 as anomaly&lt;/strong&gt;: At least &lt;strong&gt;3–4&lt;/strong&gt; broad global/near-global events (especially Nov 18 and Dec 5 back-to-back). &lt;strong&gt;Nov 18&lt;/strong&gt; widely seen as &lt;strong&gt;worst since 2019&lt;/strong&gt;. Dec 5 again led many to question change control, rollback, and “fail small.”&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Typical traits&lt;/strong&gt;: Most serious incidents tied to &lt;strong&gt;config change&lt;/strong&gt;, &lt;strong&gt;rules/propagation&lt;/strong&gt;, &lt;strong&gt;control plane&lt;/strong&gt;, or &lt;strong&gt;DNS/BGP&lt;/strong&gt;; very transparent post-mortems on blog.cloudflare.com; recovery usually fast (rollback + stop propagation), but impact very broad (Anycast + challenge mechanism); no explicit SLA credit like AWS/Azure/Google, but detailed explanation and improvement commitments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, Cloudflare had roughly &lt;strong&gt;5–7&lt;/strong&gt; &lt;strong&gt;major-level&lt;/strong&gt; (global core traffic, long) outages in 2014–2025; &lt;strong&gt;July 2019&lt;/strong&gt; and &lt;strong&gt;Nov 18, 2025&lt;/strong&gt; are the two peak events. 2025 saw a clear rise in frequency and renewed discussion of “internet infrastructure centralization risk.”&lt;/p&gt;

&lt;h2 id=&quot;tencent-cloud-outages&quot;&gt;Tencent Cloud Outages&lt;/h2&gt;

&lt;p&gt;Tencent Cloud, as China’s second-largest public cloud (after Alibaba Cloud) from 2014 to 2025, had relatively good stability among domestic providers. Truly &lt;strong&gt;broad, long, high-visibility global/multi-region major&lt;/strong&gt; incidents were relatively few; when control plane (console/API) or core storage failed, impact quickly spread to many enterprises and developers.&lt;/p&gt;

&lt;p&gt;Tencent Cloud’s &lt;strong&gt;status page&lt;/strong&gt; (https://status.cloud.tencent.com/history) is relatively opaque; history often shows only the last year, and many medium-to-large incidents are missing; the full picture relies on official WeChat, tech blog, media, and community.&lt;/p&gt;

&lt;p&gt;Below is a chronological list of &lt;strong&gt;serious, broad-impact&lt;/strong&gt; Tencent Cloud incidents (based on official post-mortems, media, Zhihu/Weibo/developer community):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Time&lt;/th&gt;
      &lt;th&gt;Region/Scope&lt;/th&gt;
      &lt;th&gt;Duration&lt;/th&gt;
      &lt;th&gt;Main Impact and Consequences&lt;/th&gt;
      &lt;th&gt;Main Cause&lt;/th&gt;
      &lt;th&gt;Notes / Industry View&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Nov 2, 2014&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Nationwide&lt;/strong&gt; (control plane + some services)&lt;/td&gt;
      &lt;td&gt;~6 min&lt;/td&gt;
      &lt;td&gt;Tencent Cloud site slow, images failing, console abnormal; some users unable to use&lt;/td&gt;
      &lt;td&gt;Not disclosed (suspected network/load)&lt;/td&gt;
      &lt;td&gt;Early, small scale; limited impact but widely reported&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 2018&lt;/td&gt;
      &lt;td&gt;Some users/cloud disk&lt;/td&gt;
      &lt;td&gt;Unclear (single-user impact hours to permanent)&lt;/td&gt;
      &lt;td&gt;Multiple users’ cloud disk data &lt;strong&gt;wiped/lost&lt;/strong&gt;; losses in tens of millions&lt;/td&gt;
      &lt;td&gt;Silent disk error + migration validation/replica failure&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Tencent Cloud’s worst “data loss” incident&lt;/strong&gt;; trust crisis; detailed post-mortem&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023 (sporadic)&lt;/td&gt;
      &lt;td&gt;Some regions/services&lt;/td&gt;
      &lt;td&gt;Tens of min–hours&lt;/td&gt;
      &lt;td&gt;Sporadic console/API issues, storage jitter&lt;/td&gt;
      &lt;td&gt;No detailed public post-mortem&lt;/td&gt;
      &lt;td&gt;Compared with Alibaba Nov 2023 global, Tencent was relatively stable&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Apr 8, 2024&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;17 regions globally&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~74–87 min&lt;/td&gt;
      &lt;td&gt;Console fully unreachable; cloud API 504 Gateway Timeout; CVM/RDS instances running but unmanageable/no renew/scale; 1957 customers reported&lt;/td&gt;
      &lt;td&gt;New API version backward-incompat + missing config gray release → full rollout → global propagation&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Tencent Cloud’s most serious in recent years&lt;/strong&gt;; “global outage,” “control plane collapse”; similar style to Alibaba Nov 2023&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Oct 15, 2025&lt;/td&gt;
      &lt;td&gt;Multiple regions&lt;/td&gt;
      &lt;td&gt;~Tens of min–1 hour&lt;/td&gt;
      &lt;td&gt;Auto Scaling and other services abnormal&lt;/td&gt;
      &lt;td&gt;Not disclosed&lt;/td&gt;
      &lt;td&gt;From status page; mid-sized&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Oct 17, 2025&lt;/td&gt;
      &lt;td&gt;Guangzhou&lt;/td&gt;
      &lt;td&gt;~1+ hour&lt;/td&gt;
      &lt;td&gt;AI digital-human related services abnormal&lt;/td&gt;
      &lt;td&gt;Not disclosed&lt;/td&gt;
      &lt;td&gt;Regional; specific AI/digital-human product&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;observations-and-trends-20142025-2&quot;&gt;Observations and Trends (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Early (2014–2018)&lt;/strong&gt;: Failures often &lt;strong&gt;storage data loss&lt;/strong&gt; or &lt;strong&gt;short access issues&lt;/strong&gt;; 2018 “data loss” hit enterprise trust hardest.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019–2023&lt;/strong&gt;: Tencent Cloud incident frequency and severity dropped; few nationwide/global events; stability better than Alibaba in the same period (e.g. calm during Alibaba 11·12).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: Apr 8, 2024 was a turning point; &lt;strong&gt;control plane global&lt;/strong&gt; failure led many to reassess “change safety” and “gray release.” 2025 had several mid-sized events but nothing at “full service down” level like Apr 2024 or Alibaba/Google.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Typical traits&lt;/strong&gt;: &lt;strong&gt;Control plane/API&lt;/strong&gt; is the main pain point (Apr 2024); &lt;strong&gt;storage/data loss&lt;/strong&gt; is most damaging to enterprises (2018); post-mortems relatively timely (WeChat, tech community); no strict SLA credit like AWS/Azure/Google, but vouchers/compensation; propagation less dramatic than Alibaba/Cloudflare (customer mix more enterprise/gaming/video, less consumer internet).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, Tencent Cloud had roughly &lt;strong&gt;3–5&lt;/strong&gt; &lt;strong&gt;major-level&lt;/strong&gt; (nationwide/global control plane long unavailable or serious data loss) incidents in 2014–2025; &lt;strong&gt;2018 data loss&lt;/strong&gt; and &lt;strong&gt;Apr 8, 2024 global control plane&lt;/strong&gt; are the two most discussed.&lt;/p&gt;

&lt;h2 id=&quot;outage-transparency&quot;&gt;Outage Transparency&lt;/h2&gt;

&lt;p&gt;In terms of outage transparency, Alibaba Cloud and Tencent Cloud are relatively weak.&lt;/p&gt;

&lt;p&gt;Alibaba Cloud’s status board (https://status.aliyun.com/#/?region=cn-shanghai) and Tencent Cloud’s (https://status.cloud.tencent.com/history) only show the last year of events.&lt;/p&gt;

&lt;p&gt;Azure (https://azure.status.microsoft/en-us/status/history/) keeps five years. Cloudflare (https://www.cloudflarestatus.com/history?page=17) is the most transparent; you can paginate back through earlier years.&lt;/p&gt;

&lt;h2 id=&quot;death-of-the-public-cloud&quot;&gt;“Death” of the Public Cloud&lt;/h2&gt;

&lt;p&gt;When I was younger, I was keen on reading and refactoring other people’s code. Until “Java Boy” taught me a lesson: even after I fixed his memory leak, what he felt was an existential crisis. He used anger to cover his own inadequacy and blamed “keeping the Kubernetes platform stable” on me.&lt;/p&gt;

&lt;p&gt;I wasn’t that eager to clean up his mess either. I just found the frequent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OOM kill&lt;/code&gt; event alerts annoying. From that story I learned the philosophy of zero: &lt;strong&gt;nobody wants to do refactoring whose marginal benefit is zero.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hence the &lt;strong&gt;law of entropy increase&lt;/strong&gt; in software: a project’s codebase will, over time, turn into a mess.&lt;/p&gt;

&lt;p&gt;Someone asked: what does this have to do with the “death” of the public cloud?&lt;/p&gt;

&lt;p&gt;It’s very related. Because “industrial Cthulhu” demands that companies deliver ever-increasing profit. So for public cloud vendors and their frontline staff, they must “tell a new growth story”—in 2026, that story is AI.&lt;/p&gt;

&lt;p&gt;The old code just rots. Changing it has no marginal benefit.&lt;/p&gt;

&lt;p&gt;So everyone converges on the same idea: don’t touch others’ code; let it become a mess. Same for code, same for architecture. Even when the network topology is a pure mesh of mutual dependency, when things break everyone’s down, and when outage responsibility is shared equally, you bear no responsibility.&lt;/p&gt;

&lt;p&gt;Ironically, an ops engineer who had zero incidents on their watch and “slept at work” every day would be seen as incompetent—because they look like they did nothing. Counterintuitively, that person should be treated as the company mascot: you have no idea how much they did before to keep things stable. Or they were just lucky and deserve a shrine.&lt;/p&gt;

&lt;p&gt;The best ops is no ops. Because &lt;strong&gt;ops compensation and career risk are completely misaligned&lt;/strong&gt;. Your boss won’t give you a bonus for deleting a seemingly useless config; but you will get cursed by customers for deleting a useful database config.&lt;/p&gt;

&lt;p&gt;Public cloud vendors forget: network effects can lift them up and can slam them down. The more customers they have, the bigger the network cascade from a single outage. Like the Alipay outage on Dec 4, 2025, ~21:00–23:37—Alibaba’s sixth major incident in 2025.&lt;/p&gt;

&lt;p&gt;When user scale is in the hundreds of millions, someone is paying every second. Yet the business keeps asking for more features; eventually the system buckles.&lt;/p&gt;

&lt;p&gt;And public cloud compensation is completely misaligned. For something like Alipay it’s at most “refund the difference”; undercharging is treated as a perk. But losses for government and enterprises are incalculable. If your business runs on the public cloud and the cloud goes down, how do you explain your loss to the provider?&lt;/p&gt;

&lt;p&gt;“My system does billions in transactions a day; you’re going to compensate me a few hundred million?”&lt;/p&gt;

&lt;p&gt;Customer loss is unquantifiable, so Alibaba Cloud usually just hands out vouchers. That’s a drop in the bucket. No one can really account for lost time, actual business impact, or the value of that time.&lt;/p&gt;

&lt;p&gt;Network effects brought public cloud exponential revenue growth. For large government and enterprise users, anti-dependency on a single public cloud should be on the agenda. Tying your fate to one cloud vendor cannot handle sudden risk.&lt;/p&gt;

&lt;h2 id=&quot;small-concurrency-high-availability-systems&quot;&gt;Small-Concurrency, High-Availability Systems&lt;/h2&gt;

&lt;p&gt;On that basis I propose “small-concurrency, high-availability systems”: &lt;strong&gt;redundancy in storage&lt;/strong&gt; to achieve &lt;strong&gt;high availability&lt;/strong&gt; in the business.&lt;/p&gt;

&lt;p&gt;When traffic is spread across redundant systems, you avoid the single-cluster traffic spike of centralized flow and shrink the radius of failure.&lt;/p&gt;

&lt;p&gt;Simplest example: at DNS resolution, point Guangdong to a South China Alibaba + Tencent Kubernetes cluster. Each cluster is independent and runs a complete internal business system. Worst case, if the public cloud itself fails, you get at most 50% unavailability.&lt;/p&gt;

&lt;p&gt;Both being down at once is extremely unlikely.&lt;/p&gt;

&lt;h2 id=&quot;farewell-public-cloud-see-you-on-the-yangtze-river&quot;&gt;Farewell, Public Cloud. See you on the Yangtze River.&lt;/h2&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;p&gt;【1】&lt;br /&gt;
Cloudflare service outage, November 18, 2025&lt;br /&gt;
https://blog.cloudflare.com/zh-cn/18-november-2025-outage/&lt;/p&gt;

&lt;p&gt;【2】&lt;br /&gt;
The invisible impact of DNS from the AWS outage: how DeepFlow quickly found root cause in chaos&lt;br /&gt;
https://my.oschina.net/u/3681970/blog/18697034&lt;/p&gt;

&lt;p&gt;【3】&lt;br /&gt;
2023-11-12 Alibaba Cloud outage post-mortem and analysis&lt;br /&gt;
https://github.tiankonguse.com/blog/2023/11/29/aliyun-break.html&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;h2 id=&quot;要約&quot;&gt;要約&lt;/h2&gt;

&lt;p&gt;本稿は形式論理と定義（ネットワーク効果、エントロピー増大の法則、反依存性、限界便益ゼロの「ゼロ」の哲学）から出発し、2014年から2025年までのアリババクラウド、Google Cloud、Azure、Cloudflare、テンセントクラウドなど主要パブリッククラウド・インフラの重大障害を体系的に整理し、各社の障害透明性を比較する。その上で、パブリッククラウドの「死因」を分析する：ソフトウェアのエントロピーと限界便益ゼロによりレガシーコード・アーキテクチャの治理が困難になること、障害時にネットワーク効果が連鎖反応を増幅すること、SLA賠償が政企の実際の損失と著しく乖離していること。著者は大型政企が単一パブリッククラウドへの「反依存」を優先すべきだとし、「小並行高可用システム」の構想を提示する——ストレージ冗長とトラフィック分散（例：マルチリージョン・マルチクラスタのDNS解決）により単一点リスクと影響半径を低減する。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/fimbulwinter/fimbulwinter.jpeg&quot; alt=&quot;芬布尔之冬（フィンブルの冬）&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;形式論理と定義&quot;&gt;形式論理と定義&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ネットワーク効果&lt;/strong&gt;：製品・サービス・プラットフォームの利用者（または参加者）が増えるほど、各利用者にとっての価値が高まる。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;エントロピー増大の法則&lt;/strong&gt;：プロジェクトのコードベースは時間とともにスパゲッティ化する。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;反依存性&lt;/strong&gt;：単一のプログラミング言語・技術スタック・クラウドプラットフォームへの依存の逆。例：多言語混在プログラミング、マルチスタック選定、マルチクラウド戦略。反依存性により、業務は言語・オープンソース・パブリッククラウドに縛られず安定稼働できる。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ゼロ&lt;/strong&gt;：限界便益がゼロのリファクタリングは誰もやりたがらない。&lt;/p&gt;

&lt;h2 id=&quot;awsの障害&quot;&gt;AWSの障害&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;地域 / 範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;公式 / 主な原因&lt;/th&gt;
      &lt;th&gt;備考 / 業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1 (北バージニア)&lt;/td&gt;
      &lt;td&gt;未詳&lt;/td&gt;
      &lt;td&gt;Amazon SimpleDB の重要コンポーネントに影響、一部ユーザーがデータベース操作不可。&lt;/td&gt;
      &lt;td&gt;電源関連の問題&lt;/td&gt;
      &lt;td&gt;小規模、迅速回復；電源冗長性の不足が露呈。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-08-07&lt;/td&gt;
      &lt;td&gt;EU West (アイルランド)&lt;/td&gt;
      &lt;td&gt;未詳&lt;/td&gt;
      &lt;td&gt;EC2、EBS、RDS に影響；欧州の一部ユーザーがインスタンス・ストレージ・DB にアクセス不可。&lt;/td&gt;
      &lt;td&gt;内部システムイベント（詳細非公開）&lt;/td&gt;
      &lt;td&gt;地域限定；初期の地域分離の限界を示した。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-11-26&lt;/td&gt;
      &lt;td&gt;グローバル (CloudFront DNS)&lt;/td&gt;
      &lt;td&gt;約2時間&lt;/td&gt;
      &lt;td&gt;DNSサーバーダウン、CDNに影響；多数のウェブサイト・クラウドサービスが名前解決不能。&lt;/td&gt;
      &lt;td&gt;DNSサーバー障害&lt;/td&gt;
      &lt;td&gt;短時間だが広範囲；世界最大クラウドのDNS脆弱性が露呈。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2015-09-20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;DynamoDB障害→内部通信途絶；Netflix、Reddit、IMDb、Amazon系サービスに広範な影響。&lt;/td&gt;
      &lt;td&gt;内部サービスの連鎖反応&lt;/td&gt;
      &lt;td&gt;深刻なインシデント；数百万ユーザーに影響；内部依存の危険性を警告。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2017-02-28&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;4〜5時間&lt;/td&gt;
      &lt;td&gt;S3制御平面停止；Slack、Trello、GitHub Pages、Quoraなど多数のサイトで画像・ファイル消失。&lt;/td&gt;
      &lt;td&gt;エンジニアの誤操作（重要な設定の誤削除）&lt;/td&gt;
      &lt;td&gt;史上最も有名な障害の一つ；「史上最も高価なタイポ」。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020-11-25&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;KinesisとCognito障害；Roku、Adobe、Flickrなどに影響；ストリーミング・認証サービス停止。&lt;/td&gt;
      &lt;td&gt;キャパシティ更新の問題&lt;/td&gt;
      &lt;td&gt;パンデミック中の発生；キャパシティ計画の難しさを浮き彫りに。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-12-05&lt;/td&gt;
      &lt;td&gt;us-east-2 (オハイオ)&lt;/td&gt;
      &lt;td&gt;約40分&lt;/td&gt;
      &lt;td&gt;可用性ゾーン障害；地域内の複数サービスに影響。&lt;/td&gt;
      &lt;td&gt;詳細非公開（ネットワーク/電源の可能性）&lt;/td&gt;
      &lt;td&gt;短時間だがマルチAZの重要性を強調。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;未詳&lt;/td&gt;
      &lt;td&gt;Lambdaサービス障害；Boston Globe、NYC地下鉄、AP通信などに大きな影響。&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;サーバーレスコンピューティングの大規模時の脆弱性を露呈。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024-07-30&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;未詳&lt;/td&gt;
      &lt;td&gt;Kinesis Data Streams障害；リアルタイムデータ処理アプリケーションに連鎖影響。&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;ストリーム処理依存のリスクを浮き彫りに。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-02&lt;/td&gt;
      &lt;td&gt;eu-north-1 (ストックホルム)&lt;/td&gt;
      &lt;td&gt;未詳&lt;/td&gt;
      &lt;td&gt;1つのAZで重大なネットワーク障害；欧州のコアサービスに影響。&lt;/td&gt;
      &lt;td&gt;大規模ネットワーク障害&lt;/td&gt;
      &lt;td&gt;地域限定；欧州インフラ拡張の課題を反映。&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-10-19/20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;15時間以上&lt;/td&gt;
      &lt;td&gt;DynamoDB APIエンドポイント障害（DNS障害）；Slack、Reddit、Roblox、Fortnite、Coinbase、Venmo、Duolingo、Canva、PSN、銀行、航空会社（Delta/United遅延）、Amazon系サービスに影響；3500社以上、60カ国以上、1700万件超の報告。&lt;/td&gt;
      &lt;td&gt;DNS解決障害による連鎖反応&lt;/td&gt;
      &lt;td&gt;2025年最大のクラウド障害；「クラウドの脆弱性が最も露呈した事件」；マルチクラウド戦略が強く推奨される。&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;最も深刻な障害の分析&lt;/strong&gt;&lt;br /&gt;
2014〜2025年で最も深刻だったのは2015年9月（DynamoDB）、2017年2月（S3）、特に2025年10月（DynamoDB DNS）の3件。すべてus-east-1で発生。&lt;br /&gt;
深刻度順：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;2015年：エンタメ・SNSに大きな打撃だが、主に消費者向け。&lt;/li&gt;
  &lt;li&gt;2017年：生産性ツール・開発者に甚大な影響；人的ミスによる経済損失が極めて大きい。&lt;/li&gt;
  &lt;li&gt;2025年：最長時間（15時間超）、最も広範（金融、ゲーム、教育、航空、重要インフラ）、ユーザー影響最大 — 近年最大の単一クラウド障害と評価。&lt;br /&gt;
共通教訓：us-east-1への過度な集中、コントロールプレーンの脆弱性、連鎖障害。業界はマルチリージョン、マルチクラウド、ハイブリッドアーキテクチャの採用を強く推奨している。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;アリババクラウドの障害&quot;&gt;アリババクラウドの障害&lt;/h2&gt;

&lt;p&gt;2014年から2025年まで、アリババクラウドが公表・公式開示した&lt;strong&gt;影響範囲が広く、継続時間が長く、「重大事故」と広く呼ばれた&lt;/strong&gt;障害は（体量に比べ）特に多くはなく、全体のSLAは業界トップクラスである。ただしそのうち数件は社会的影響と業界議論を引き起こした。以下は&lt;strong&gt;重大級&lt;/strong&gt;の障害の時系列リスト（主に公開情報・公式発表・メディア・コミュニティの振り返りに基づく）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;地域/範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;公式/主流の原因&lt;/th&gt;
      &lt;th&gt;備考/業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年6月&lt;/td&gt;
      &lt;td&gt;一部地域（詳細非公開）&lt;/td&gt;
      &lt;td&gt;約30分&lt;/td&gt;
      &lt;td&gt;一部クラウド製品異常、影響は限定的&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;当時メディアにより「重大技術障害」と呼ばれた&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2019年3月3日&lt;/td&gt;
      &lt;td&gt;華北2（北京）AZ-C&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;ECSディスク障害多発、多数サイト/アプリ停止&lt;/td&gt;
      &lt;td&gt;ディスク障害&lt;/td&gt;
      &lt;td&gt;影響大、アリババクラウドはSLAに基づき賠償&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年12月18日&lt;/td&gt;
      &lt;td&gt;香港リージョンAZ-C&lt;/td&gt;
      &lt;td&gt;約15.5時間&lt;/td&gt;
      &lt;td&gt;香港域ほぼ全域停止、マカオの重要機関（金融管理局、銀河、蓮花衛視等）サイト不通、OKX影響&lt;/td&gt;
      &lt;td&gt;冷却設備故障→連鎖反応で大規模ダウン&lt;/td&gt;
      &lt;td&gt;「アリババクラウド史上最悪の醜聞の一つ」と広く称された&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年11月12日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全世界域・全サービス&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約3時間16分&lt;/td&gt;
      &lt;td&gt;コンソール・API・MQ・マイクロサービス・監視・ML等ほぼ全線異常；淘宝・釘釘・閑魚・餓了么・阿里雲盤等一斉「クラッシュ」&lt;/td&gt;
      &lt;td&gt;基盤コアコンポーネント（認証/メタデータ/コントロールプレーン）障害&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;アリババクラウド史上最悪・影響最広&lt;/strong&gt;と公認；「エピック」「業界前例なし」&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年11月27日&lt;/td&gt;
      &lt;td&gt;一部サーバー&lt;/td&gt;
      &lt;td&gt;約2時間&lt;/td&gt;
      &lt;td&gt;サーバーアクセス異常&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;11・12事故の半月後、信頼への疑問再燃&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年7月2日&lt;/td&gt;
      &lt;td&gt;一部地域/サービス&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;コンソール及び一部サービス異常&lt;/td&gt;
      &lt;td&gt;詳細な振り返りなし&lt;/td&gt;
      &lt;td&gt;中規模、以前の数件より影響小&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年（日付不明）&lt;/td&gt;
      &lt;td&gt;グローバル（DNS関連疑い）&lt;/td&gt;
      &lt;td&gt;約6時間&lt;/td&gt;
      &lt;td&gt;DNSハイジャックによりグローバルサービス異常&lt;/td&gt;
      &lt;td&gt;DNSハイジャック関連&lt;/td&gt;
      &lt;td&gt;2025年パブリッククラウド障害まとめより、詳細要確認&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;重要な注記とトレンド&quot;&gt;重要な注記とトレンド&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2014–2018年初期&lt;/strong&gt;：この期間のアリババクラウドの重大P0級障害の公表は極めて少なく、局所・小規模が中心。当時は体量が今よりはるかに小さく、影響も限定的だった。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;最悪の二件&lt;/strong&gt;：
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;2022.12 香港15.5時間&lt;/strong&gt; → 単一地域最長障害、港澳の重要インフラに悪影響。&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2023.11.12 グローバル3時間超&lt;/strong&gt; → コントロールプレーン/グローバルサービス全面停止；「全地域×全サービス」同時故障として稀とされ、「マルチアクティブ・マルチセンター・Nナイン」神話を打ち砕いた。&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：既知の情報では、2022–2023より頻度・深刻度は低下しているが、中〜大規模事象は依然発生（特に2025年DNSハイジャック系は影響範囲が広い）。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;アリババクラウドの対応&lt;/strong&gt;：重大障害の多くで詳細な振り返りを公表（特に2022香港・2023グローバル）；SLA賠償（通常は障害時間に応じた倍率のバウチャー）；幹部/公式の謝罪。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;全体として、2014–2025年の12年間でアリババクラウドが「重大事故」と呼べるのはおおよそ&lt;strong&gt;5〜7件&lt;/strong&gt;、その中で&lt;strong&gt;2023年11月12日&lt;/strong&gt;と&lt;strong&gt;2022年12月香港&lt;/strong&gt;が影響力・深刻度で最も高いと公認されている。&lt;/p&gt;

&lt;h2 id=&quot;グーグルクラウドの障害&quot;&gt;グーグルクラウドの障害&lt;/h2&gt;

&lt;p&gt;Google Cloud Platform（GCP）は2014年から2025年まで、全体のSLAは比較的良好で、&lt;strong&gt;グローバル&lt;/strong&gt;または&lt;strong&gt;複数コアサービス&lt;/strong&gt;に真に影響した&lt;strong&gt;重大事故&lt;/strong&gt;は（AWS・Azureに比べグローバル災害級は少ないが）発生時には多くのサードパーティアプリ（Snapchat、Spotify、Discord、Cloudflare依存サービス等）を巻き込み、社会的影響が大きい。&lt;/p&gt;

&lt;p&gt;以下は&lt;strong&gt;深刻で影響範囲の広い&lt;/strong&gt;GCP重大障害の時系列リスト（公開Status Dashboard・メディア・Wikipedia・業界振り返り等に基づく）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;地域/範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;主流の原因&lt;/th&gt;
      &lt;th&gt;備考/業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2015年8月&lt;/td&gt;
      &lt;td&gt;欧州（ベルギーGhlin）&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;Compute Engine 読み書きエラー率極高、一部データ損失&lt;/td&gt;
      &lt;td&gt;落雷でデータセンター一部機器損傷&lt;/td&gt;
      &lt;td&gt;グーグルが&lt;strong&gt;データ損失&lt;/strong&gt;を認めた稀有な例、影響は限定的顧客群&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年7月&lt;/td&gt;
      &lt;td&gt;グローバル（多地域）&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;GCP多サービス異常、Snapchat・Spotify等サードパーティが広範囲でログイン/利用不可&lt;/td&gt;
      &lt;td&gt;ネットワーク輻輳＋内部ルーティング&lt;/td&gt;
      &lt;td&gt;当時広く報道、サードパーティ影響が顕著&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2019年6月2日&lt;/td&gt;
      &lt;td&gt;米東部＋グローバル波及&lt;/td&gt;
      &lt;td&gt;約4–5時間&lt;/td&gt;
      &lt;td&gt;YouTube・Gmail・G Suite広範囲不可用、Snapchat・Discord・Vimeo等ログイン失敗&lt;/td&gt;
      &lt;td&gt;米東部ネット輻輳＋カスケード&lt;/td&gt;
      &lt;td&gt;影響範囲広、SNSで話題&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020年12月14日&lt;/td&gt;
      &lt;td&gt;グローバル&lt;/td&gt;
      &lt;td&gt;約1時間&lt;/td&gt;
      &lt;td&gt;Gmail・YouTube・Google Home・Nest・Pokémon GO等、認証依存サービスがほぼ全滅&lt;/td&gt;
      &lt;td&gt;認証システム（IAM相当）グローバル障害&lt;/td&gt;
      &lt;td&gt;コンシューマサービス一斉「クラッシュ」、最大級の一つ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年8月&lt;/td&gt;
      &lt;td&gt;米アイオワ州データセンター&lt;/td&gt;
      &lt;td&gt;局所&lt;/td&gt;
      &lt;td&gt;電気火災（負傷3名）、一部サービス波及、グローバルではない&lt;/td&gt;
      &lt;td&gt;データセンター電気事故による火災&lt;/td&gt;
      &lt;td&gt;物理施設事故、純粋なソフト/アーキテクチャ問題ではない&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年4月&lt;/td&gt;
      &lt;td&gt;欧州（パリ等）&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;多地域ネット＋サービス中断&lt;/td&gt;
      &lt;td&gt;洪水＋データセンター＋ネット問題&lt;/td&gt;
      &lt;td&gt;気象要因、影響は中程度&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年10月23日&lt;/td&gt;
      &lt;td&gt;欧州（フランクフルト europe-west3）&lt;/td&gt;
      &lt;td&gt;約半日（12時間超）&lt;/td&gt;
      &lt;td&gt;当該地域ほぼ全サービス不可、欧州顧客多数に影響&lt;/td&gt;
      &lt;td&gt;詳細非公開（コントロールプレーン/ネット疑い）&lt;/td&gt;
      &lt;td&gt;単一地域最長障害の一つ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2025年6月12日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;（40超地域）&lt;/td&gt;
      &lt;td&gt;約2.5–3時間&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;70超GCPサービス&lt;/strong&gt;異常、IAM認証崩壊でAPIリクエスト全面失敗；Spotify・Discord・Twitch・Cloudflare・Fitbit・Gmail・Drive・YouTube等広範囲停止&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Service Control&lt;/strong&gt;（API認証コア）の自動更新が深刻バグ導入→クラッシュループ→グローバル過負荷&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2020年以降GCP最悪のグローバル障害&lt;/strong&gt;と公認&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年7月18日&lt;/td&gt;
      &lt;td&gt;us-east1&lt;/td&gt;
      &lt;td&gt;約2時間&lt;/td&gt;
      &lt;td&gt;複数製品エラー率上昇&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;中規模、回復は比較的速い&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;azureの障害&quot;&gt;Azureの障害&lt;/h2&gt;

&lt;p&gt;Microsoft Azureは2014年から2025年まで、&lt;strong&gt;影響範囲が広く、継続時間が長く、社会的注目が高い重大事故&lt;/strong&gt;の数は（初期の小規模時の頻繁な小障害に比べ）特に多くはないが、数件はグローバルまたは多サービス級の深刻な影響を与え、&lt;strong&gt;Microsoft 365・Teams・Xbox・Outlook&lt;/strong&gt;等のコンシューマ/エンタープライズ製品が絡むと伝播効果が非常に大きい。&lt;/p&gt;

&lt;p&gt;以下は&lt;strong&gt;重大級&lt;/strong&gt;Azure障害の時系列リスト（Azure公式Status History・Post Incident Review・メディア・Wikipedia・業界振り返り等の公開情報に基づく）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;地域/範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;主流の原因&lt;/th&gt;
      &lt;th&gt;備考/業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014年8月14–18日&lt;/td&gt;
      &lt;td&gt;US Central・US East・US East 2・Europe North&lt;/td&gt;
      &lt;td&gt;複数日・1回数時間&lt;/td&gt;
      &lt;td&gt;Cloud Services・SQL Database・VM・Websites・HDInsight・Mobile Services・Service Bus等広範囲不可用&lt;/td&gt;
      &lt;td&gt;複数ネット/ストレージ問題&lt;/td&gt;
      &lt;td&gt;2014年最も集中した一波、当時Azureはまだ若い&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2014年11月18–19日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;多地域&lt;/strong&gt;（米・欧・アジア一部）&lt;/td&gt;
      &lt;td&gt;約11時間&lt;/td&gt;
      &lt;td&gt;Azure Storageを中心にVM・Websites・Visual Studio Online・Xbox Live・MSN・Search等20超サービス中断&lt;/td&gt;
      &lt;td&gt;ストレージ性能最適化の設定変更→Blobフロント無限ループ&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure初期最悪の一件&lt;/strong&gt;、公式詳細RCA、顧客賠償&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2016年9月15日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;DNS解決広範囲障害、Azure DNS依存サービス多数に影響&lt;/td&gt;
      &lt;td&gt;グローバルDNS問題&lt;/td&gt;
      &lt;td&gt;DNS単点リスク露呈&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年6月20日&lt;/td&gt;
      &lt;td&gt;北米複数データセンター&lt;/td&gt;
      &lt;td&gt;数時間–1日超&lt;/td&gt;
      &lt;td&gt;冷却系故障（落雷＋サージ保護不足）で多サービス中断&lt;/td&gt;
      &lt;td&gt;物理施設（落雷連鎖）&lt;/td&gt;
      &lt;td&gt;稀なハードウェア/インフラ級障害&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年9月4日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;多地域&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;25時間超（一部サービス3日）&lt;/td&gt;
      &lt;td&gt;複数コアサービス長時間不可用&lt;/td&gt;
      &lt;td&gt;冷却（落雷＋サージ）&lt;/td&gt;
      &lt;td&gt;回復最長の一つ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年1月23日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;（コアネット影響）&lt;/td&gt;
      &lt;td&gt;約3時間&lt;/td&gt;
      &lt;td&gt;Microsoft 365（Teams・Outlook・Exchange）、一部Azureサービス中断&lt;/td&gt;
      &lt;td&gt;WAN問題&lt;/td&gt;
      &lt;td&gt;M365一斉「クラッシュ」、影響巨大&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024年7月18日&lt;/td&gt;
      &lt;td&gt;US Central&lt;/td&gt;
      &lt;td&gt;約半日&lt;/td&gt;
      &lt;td&gt;VM等の管理操作失敗、顧客がマネージドサービスにアクセス不可&lt;/td&gt;
      &lt;td&gt;アクセス制御エラー＋インフラ障害&lt;/td&gt;
      &lt;td&gt;翌日CrowdStrike全球ブルースクリーンに近接するが独立&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年1月8–9日&lt;/td&gt;
      &lt;td&gt;East US 2等&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;Azure Databricks・Synapse・Functions・App Service・VM等ネット中断&lt;/td&gt;
      &lt;td&gt;ネットワークコンポーネント問題&lt;/td&gt;
      &lt;td&gt;2025年序盤で顕著な一件&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2025年10月29日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約8時間&lt;/td&gt;
      &lt;td&gt;Azure Front Doorを中心にMicrosoft 365・Outlook・Teams・Xbox Live・Minecraft・Copilot広範囲停止；Alaska Airlines・Heathrow・Costco・Starbucks等波及&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Azure Front Door設定変更&lt;/strong&gt;＋保護機構のバグで設定不整合がグローバル伝播&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025年Azure最悪&lt;/strong&gt;、Downdetector3万超報告、同月AWS障害に類似&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年11月5–6日&lt;/td&gt;
      &lt;td&gt;West Europe (AZ01)&lt;/td&gt;
      &lt;td&gt;約9–10時間&lt;/td&gt;
      &lt;td&gt;VM・PostgreSQL/MySQL Flexible Server・AKS・Storage・Service Bus等多サービス劣化/中断&lt;/td&gt;
      &lt;td&gt;データセンター熱イベント&lt;/td&gt;
      &lt;td&gt;リージョン級で深刻な障害&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;観察とトレンド20142025&quot;&gt;観察とトレンド（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014年&lt;/strong&gt;：Azureは急拡大期；&lt;strong&gt;設定変更&lt;/strong&gt;と&lt;strong&gt;ストレージ層&lt;/strong&gt;問題が頻発、障害が最も集中した年（特に11月は古典的ケース）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2015–2019&lt;/strong&gt;：障害頻度は低下、依然&lt;strong&gt;単一地域&lt;/strong&gt;または&lt;strong&gt;インフラ&lt;/strong&gt;（冷却・落雷・DNS）が中心、影響は比較的抑制。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2020–2023&lt;/strong&gt;：重大グローバル障害は少なめ、&lt;strong&gt;ネット&lt;/strong&gt;または&lt;strong&gt;M365のAzure依存&lt;/strong&gt;による間接影響（例：2023年1月）が中心。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：コントロールプレーン/エッジ（&lt;strong&gt;Azure Front Door&lt;/strong&gt;等）が新たな痛み；2025年10月29日は近年Azure最悪の&lt;strong&gt;グローバル中断&lt;/strong&gt;とされ、アリババ2023年11月やGCP 2025年6月に匹敵。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型&lt;/strong&gt;：重大事故のたびに詳細な&lt;strong&gt;Post Incident Review (PIR)&lt;/strong&gt; を公表、透明性が高い；&lt;strong&gt;設定変更&lt;/strong&gt;・&lt;strong&gt;コントロールプレーン&lt;/strong&gt;・&lt;strong&gt;ネット&lt;/strong&gt;が原因となることが多く（単なるハード障害ではない）；M365・Xbox・Teamsが落ちるとサードパーティ伝播が極めて大きい；SLA賠償（クレジット）、顧客は事業継続性を最重視。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;全体として、Azureは2014–2025年の12年間で&lt;strong&gt;重大級（グローバル/多サービス長時間中断）&lt;/strong&gt;はおおよそ&lt;strong&gt;8–10件&lt;/strong&gt;、深刻度・頻度はAWS・GCPと同水準で、&lt;strong&gt;設定ミスによるカスケード&lt;/strong&gt;が繰り返し現れるパターン。&lt;/p&gt;

&lt;h2 id=&quot;cloudflareの障害&quot;&gt;Cloudflareの障害&lt;/h2&gt;

&lt;p&gt;Cloudflareは世界最大級のCDN・セキュリティ・DNS・エッジプロバイダーの一つとして、2014年から2025年まで&lt;strong&gt;影響範囲が広くインターネット大規模麻痺を引き起こした重大事故&lt;/strong&gt;は特に多くはないが、一度起きると&lt;strong&gt;数百万〜数億ユーザー&lt;/strong&gt;に波及し（Cloudflareは全世界の約20–25%のウェブトラフィックを担う）、影響範囲が極めて広い。&lt;/p&gt;

&lt;p&gt;特徴は&lt;strong&gt;回復が比較的速い&lt;/strong&gt;（多くは1–4時間で緩和）一方で&lt;strong&gt;伝播が極端&lt;/strong&gt;——コアプロキシ・DNS・セキュリティコンポーネントが落ちると、X・ChatGPT・Shopify・Discord・Spotify・AWS一部等のトップサイトが同時に5xxやアクセス不可になる。&lt;/p&gt;

&lt;p&gt;以下は&lt;strong&gt;重大級&lt;/strong&gt;Cloudflare障害の時系列リスト（公式ブログ・status.cloudflare.com履歴・メディア・Wikipedia・業界振り返り、グローバル/コアトラフィック中断に焦点）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;主流の原因&lt;/th&gt;
      &lt;th&gt;備考/業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2019年7月2日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約1–2時間&lt;/td&gt;
      &lt;td&gt;多数サイトで502/503/504、インターネットの広域がアクセス不可&lt;/td&gt;
      &lt;td&gt;ソフトウェアデプロイが深刻バグを導入→プロキシ層クラッシュ&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Cloudflare史上最悪&lt;/strong&gt;と公認、公式詳細振り返り&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020年複数回&lt;/td&gt;
      &lt;td&gt;一部地域/コントロールプレーン&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;ダッシュボード・分析・一部API不可；コアプロキシはほぼ安定&lt;/td&gt;
      &lt;td&gt;コントロールプレーン問題&lt;/td&gt;
      &lt;td&gt;開発者への影響大、一般ユーザーは感知小&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022年6月&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;複数データセンター&lt;/strong&gt;（19）&lt;/td&gt;
      &lt;td&gt;約1.5時間&lt;/td&gt;
      &lt;td&gt;コアプロキシ中断、多数サイトアクセス不可&lt;/td&gt;
      &lt;td&gt;ネットワーク設定エラー&lt;/td&gt;
      &lt;td&gt;中規模、回復は速い&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年3月21日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約1時間7分&lt;/td&gt;
      &lt;td&gt;ストレージ読み書き深刻障害、ストレージ/キャッシュ依存サービス多数に影響&lt;/td&gt;
      &lt;td&gt;KV/ストレージ層書き込み失敗＋一部読み異常&lt;/td&gt;
      &lt;td&gt;2025年序盤で顕著&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年6月12日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;（一部機能）&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;一部機能/サービス不可、コアトラフィックはほぼ正常&lt;/td&gt;
      &lt;td&gt;特定モジュールデプロイ&lt;/td&gt;
      &lt;td&gt;コアトラフィック中断ではなく影響は限定的&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年7月14日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;（1.1.1.1 DNS）&lt;/td&gt;
      &lt;td&gt;約62分&lt;/td&gt;
      &lt;td&gt;パブリックDNSリゾルバ（1.1.1.1）完全不可、多数ユーザーがインターネット接続不可&lt;/td&gt;
      &lt;td&gt;設定エラー→BGPルート撤回→DNSプレフィックスがグローバルルーティングテーブルから消失&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;1.1.1.1依存ユーザーに極めて深刻&lt;/strong&gt;、「断網級」&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月頃&lt;/td&gt;
      &lt;td&gt;一部サービス&lt;/td&gt;
      &lt;td&gt;数十分&lt;/td&gt;
      &lt;td&gt;DNS解決の短時間中断&lt;/td&gt;
      &lt;td&gt;DNS関連設定&lt;/td&gt;
      &lt;td&gt;中規模&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2025年11月18日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約4–5時間（ピークはより長い）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;大規模インターネット中断&lt;/strong&gt;：X（Twitter）・ChatGPT・Shopify・Spotify・Letterboxd・Indeed・Canva・Uber・DoorDash・Truth Social・League of Legends等多数トップサービス麻痺；約20%ウェブトラフィック、Alexa上位1万サイトの1/3が影響&lt;/td&gt;
      &lt;td&gt;Bot Managementルールファイル異常肥大（DB権限変更でファイルサイズ倍増）→全网伝播→プロキシクラッシュ&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;2025年最悪&lt;/strong&gt;、2019年以来最悪のグローバルトラフィック中断&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年12月5日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;グローバル&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;数時間&lt;/td&gt;
      &lt;td&gt;再び広範囲5xx；Shopify・Zoom・Vinted・Fortnite・Square・Just Eat・Canva・Vimeo・AWS一部・Deliveroo等影響&lt;/td&gt;
      &lt;td&gt;完全な公式根因なし（設定/伝播類疑い）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;11月18日からわずか17日&lt;/strong&gt;、連続二回の重大事故で強い批判&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;観察とトレンド20142025-1&quot;&gt;観察とトレンド（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014–2018年初期&lt;/strong&gt;：Cloudflareは急成長；公表された&lt;strong&gt;グローバル重大&lt;/strong&gt;障害は少なく、局所・地域・機能問題が中心；当時インターネットのCloudflare依存度は今より低い。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019年7月&lt;/strong&gt;：Cloudflare史上の古典的「ブラックスワン」；その後6年以上、同規模の&lt;strong&gt;コアプロキシ全局中断&lt;/strong&gt;はなし。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2025年は異常な年&lt;/strong&gt;：少なくとも&lt;strong&gt;3–4回&lt;/strong&gt;の影響の大きいグローバル/準グローバル事象（特に11月18日と12月5日の連続）。&lt;strong&gt;11月18日&lt;/strong&gt;は&lt;strong&gt;2019年以来最悪&lt;/strong&gt;と公認。12月5日の再発で、変更管理・ロールバック・「fail small」の実行が疑問視された。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型&lt;/strong&gt;：深刻な障害の多くが&lt;strong&gt;設定変更&lt;/strong&gt;・&lt;strong&gt;ルール/伝播&lt;/strong&gt;・&lt;strong&gt;コントロールプレーン&lt;/strong&gt;または&lt;strong&gt;DNS/BGP&lt;/strong&gt;に関連；blog.cloudflare.comで毎回詳細なpost-mortem（根因・タイムライン・改善策）を公開、透明性が高い；回復は通常速い（ロールバック＋伝播停止）が影響は極めて広い（Anycast＋チャレンジ機構）；AWS/Azure/Googleのような明確なSLAクレジット賠償はないが、詳細説明と改善コミットを提供。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;全体として、Cloudflareは2014–2025年の12年間で&lt;strong&gt;重大級（グローバルコアトラフィック長時間中断）&lt;/strong&gt;はおおよそ&lt;strong&gt;5–7件&lt;/strong&gt;、&lt;strong&gt;2019年7月&lt;/strong&gt;と&lt;strong&gt;2025年11月18日&lt;/strong&gt;が二つのピーク。2025年は障害頻度が明らかに上昇し、「インターネットインフラ集中化リスク」の議論が再燃した。&lt;/p&gt;

&lt;h2 id=&quot;テンセントクラウドの障害&quot;&gt;テンセントクラウドの障害&lt;/h2&gt;

&lt;p&gt;テンセントクラウドは2014年から2025年まで、中国第二のパブリッククラウド（アリババに次ぐ）として、国内クラウドベンダーの中では安定性は中〜上で、&lt;strong&gt;影響が極めて広く、継続時間が長く、社会的注目が高いグローバル/多地域重大事故&lt;/strong&gt;は相対的に少ないが、コントロールプレーン（コンソール/API）やコアストレージに問題が起きると、影響は多数の企業・開発者に急速に拡大する。&lt;/p&gt;

&lt;p&gt;テンセントクラウドの&lt;strong&gt;ステータスページ&lt;/strong&gt;（https://status.cloud.tencent.com/history）の公開透明性は比較的低く、履歴は通常直近1年のみで、中〜大規模障害の多くは一覧に載らず、公式微信・技術ブログ・メディア・コミュニティで全体像を補う。&lt;/p&gt;

&lt;p&gt;以下は&lt;strong&gt;深刻で影響範囲の広い&lt;/strong&gt;テンセントクラウド障害の時系列リスト（公式振り返り・メディア・知乎/微博/開発者コミュニティ等の公開情報に基づく）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;時期&lt;/th&gt;
      &lt;th&gt;地域/範囲&lt;/th&gt;
      &lt;th&gt;継続時間&lt;/th&gt;
      &lt;th&gt;主な影響と結果&lt;/th&gt;
      &lt;th&gt;主流の原因&lt;/th&gt;
      &lt;th&gt;備考/業界評価&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014年11月2日&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全国&lt;/strong&gt;（コントロールプレーン＋一部サービス）&lt;/td&gt;
      &lt;td&gt;約6分&lt;/td&gt;
      &lt;td&gt;テンセントクラウド公式サイト遅延・画像読込失敗・コンソール異常、一部ユーザーが正常利用不可&lt;/td&gt;
      &lt;td&gt;詳細非公開（ネット/負荷疑い）&lt;/td&gt;
      &lt;td&gt;初期小規模期、影響は限定的だが当時メディアで広く報道&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2018年8月&lt;/td&gt;
      &lt;td&gt;一部ユーザー/クラウドディスク&lt;/td&gt;
      &lt;td&gt;不明（単一ユーザーで数時間〜恒久）&lt;/td&gt;
      &lt;td&gt;複数ユーザーのクラウドサーバーディスクデータ&lt;strong&gt;ゼロ/消失&lt;/strong&gt;、千万単位の損失&lt;/td&gt;
      &lt;td&gt;ディスク静默エラー＋データ移行時の検証/レプリカ機構不全&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;テンセントクラウド史上最悪の「データ消失」&lt;/strong&gt;、クラウド信頼危機、公式詳細振り返り&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023年（散発）&lt;/td&gt;
      &lt;td&gt;一部地域/サービス&lt;/td&gt;
      &lt;td&gt;数十分–数時間&lt;/td&gt;
      &lt;td&gt;散発的なコンソール/API異常、ストレージジッター&lt;/td&gt;
      &lt;td&gt;公開の詳細振り返りなし&lt;/td&gt;
      &lt;td&gt;アリババ2023年11月グローバルと比べテンセントは比較的安定&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2024年4月8日&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;全球17地域&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;約74–87分&lt;/td&gt;
      &lt;td&gt;コンソール完全ログイン不可、クラウドAPI全面504 Gateway Timeout；CVM/RDS等インスタンスは稼働するが管理/更新/スケール不可；1957件の顧客障害報告&lt;/td&gt;
      &lt;td&gt;クラウドAPI新バージョンの後方互換不足＋設定データのグレーリリース機構欠如→一斉リリースでグローバル伝播&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;テンセントクラウド近年最悪&lt;/strong&gt;、「全球大障害」「コントロールプレーン崩壊」と広く呼ばれ、アリババ2023年11月スタイルに類似&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月15日&lt;/td&gt;
      &lt;td&gt;多地域&lt;/td&gt;
      &lt;td&gt;約数十分–1時間&lt;/td&gt;
      &lt;td&gt;弹性伸缩（Auto Scaling）等サービス異常&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;ステータスページより、中規模&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025年10月17日&lt;/td&gt;
      &lt;td&gt;広州地域&lt;/td&gt;
      &lt;td&gt;約1時間超&lt;/td&gt;
      &lt;td&gt;智能数智人関連サービス異常&lt;/td&gt;
      &lt;td&gt;詳細非公開&lt;/td&gt;
      &lt;td&gt;リージョン級、特定AI/デジタルヒューマン製品&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;観察とトレンド20142025-2&quot;&gt;観察とトレンド（2014–2025）&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;初期（2014–2018）&lt;/strong&gt;：障害は&lt;strong&gt;ストレージ層のデータ消失&lt;/strong&gt;や&lt;strong&gt;短時間アクセス異常&lt;/strong&gt;が典型；2018年「データ消失」が企業信頼を最も痛撃。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019–2023&lt;/strong&gt;：テンセントクラウドの障害頻度・深刻度は明らかに低下、全国/グローバル級は稀、安定性は同期のアリババより良好（特に2023年アリババ11・12エピック障害時はテンセントは安定）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;：2024年4月8日が転換点；この&lt;strong&gt;コントロールプレーン全局障害&lt;/strong&gt;で多くの人がテンセントクラウドの「変更安全」と「グレーリリース」能力を再検討。2025年は中規模が数回あるが、2024年4月やアリババ/グーグルクラウドのような「全サービス麻痺」級は見られない。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;典型&lt;/strong&gt;：&lt;strong&gt;コントロールプレーン/API&lt;/strong&gt;が近年の最大の痛み（2024年4月が代表）；&lt;strong&gt;ストレージ/データ消失&lt;/strong&gt;が企業への打撃が最大（2018年事例）；公式振り返りは比較的タイムリー（重大時は微信・技術コミュニティで詳細説明）；AWS/Azure/Googleのような厳格なSLAクレジット賠償はないが、バウチャー/補償を提供；障害の伝播はアリババ・Cloudflareほど劇的ではない（顧客構成が企業/ゲーム/動画寄りで、コンシューマインターネット依存が相対的に低いため）。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;全体として、テンセントクラウドは2014–2025年の12年間で&lt;strong&gt;重大級（全国/グローバルコントロールプレーン長時間不可または深刻なデータ消失）&lt;/strong&gt;と呼べるのはおおよそ&lt;strong&gt;3–5件&lt;/strong&gt;、&lt;strong&gt;2018年データ消失&lt;/strong&gt;と&lt;strong&gt;2024年4月8日グローバルコントロールプレーン障害&lt;/strong&gt;が影響力・議論度で最も高い二件とされている。&lt;/p&gt;

&lt;h2 id=&quot;障害の透明性&quot;&gt;障害の透明性&lt;/h2&gt;

&lt;p&gt;障害の透明性という点では、アリババクラウドとテンセントクラウドは比較的弱い。&lt;/p&gt;

&lt;p&gt;アリババクラウドのステータスボード（https://status.aliyun.com/#/?region=cn-shanghai）とテンセントクラウドのステータスボード（https://status.cloud.tencent.com/history）は、過去1年間のイベントしか表示しない。&lt;/p&gt;

&lt;p&gt;Azure（https://azure.status.microsoft/en-us/status/history/）は5年分を保持。Cloudflare（https://www.cloudflarestatus.com/history?page=17）が最も詳細で透明で、pageで数年分まで遡って閲覧できる。&lt;/p&gt;

&lt;h2 id=&quot;パブリッククラウドの死&quot;&gt;パブリッククラウドの「死」&lt;/h2&gt;

&lt;p&gt;若い頃、私は他人のコードを読んでリファクタリングするのが好きだった。Java Boyに教えられるまで：彼のメモリリークを直したのに、彼が感じたのは深い実存的不安だった。彼は怒りで自分の無能を隠し、「Kubernetesプラットフォームの安定維持」の責任を私に押し付けた。&lt;/p&gt;

&lt;p&gt;私も彼の尻拭いを喜んでやっていたわけではない。ただ、頻発する&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OOM kill&lt;/code&gt;イベントアラートが煩わしかっただけだ。その話から、ゼロの哲学を悟った：&lt;strong&gt;限界便益がゼロのリファクタリングは誰もやりたがらない。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ゆえにソフトウェア業界の&lt;strong&gt;エントロピー増大の法則&lt;/strong&gt;が導かれる：プロジェクトのコードベースは時間とともにスパゲッティ化する。&lt;/p&gt;

&lt;p&gt;「これがパブリッククラウドの死と何の関係がある？」と聞く人がいた。&lt;/p&gt;

&lt;p&gt;実は大いに関係がある。「工業的クトゥルフ」は企業に時間とともに増える利益を要求する。だからパブリッククラウドベンダーとその現場社員は「新しい成長物語」を語らなければならない——2026年なら、その物語はAIだ。&lt;/p&gt;

&lt;p&gt;古いコードはそのまま腐る。変更しても限界便益はない。&lt;/p&gt;

&lt;p&gt;やがて誰もが同じ合意に至る：他人のコードには触れず、スパゲッティ化に任せる。コードもアーキテクチャも同じ。ネットワークトポロジーが純粋な相互依存の網の目になっても、障害時はみんな使えず、ダウン責任が平等に分散すれば、自分に責任はない。&lt;/p&gt;

&lt;p&gt;皮肉なことに、在職中に障害ゼロで毎日「仕事中に寝ている」ように見える運用エンジニアは、無能だと見なされる。何もしていないように見えるから。しかし直感に反して、その人は企業のマスコットとして祀るべきだ。彼が以前どれだけ業務安定のために努力したか、あるいは単に運が良かっただけなのか、誰にもわからない。大廟に配享するに値する。&lt;/p&gt;

&lt;p&gt;究極の運用は、運用しないことである。&lt;strong&gt;運用の報酬とキャリアリスクは完全に不均衡&lt;/strong&gt;だからだ。上司は「使っていなさそうな設定」を消しても今月の手当を増やしてくれない。だが「使っているデータベース設定」を消せば、顧客に罵倒される。&lt;/p&gt;

&lt;p&gt;パブリッククラウド企業は忘れている。ネットワーク効果は彼らを押し上げることも、叩き落とすこともできる。顧客が増えれば、単一のダウンによるネットワークの連鎖反応は大きくなる。2025年12月4日夜21:00–23:37頃の支付宝障害のように——これは阿里系2025年の第六の重大障害だった。&lt;/p&gt;

&lt;p&gt;ユーザー規模が億単位になると、一秒ごとに誰かが支払っている。それでも業務はソフトに新機能を追加し続けを求め、やがてシステムは耐えられなくなる。&lt;/p&gt;

&lt;p&gt;しかもパブリッククラウドの賠償は完全に不均衡だ。支付宝のようなケースではせいぜい「多退少補」、少なく徴収した分を福利として返す程度。だが政府・企業の損失は到底算定できない。業務がパブリッククラウドに載っていて、クラウドがダウンしたら、業務側はクラウドにどう自分の損失を説明するのか？&lt;/p&gt;

&lt;p&gt;「うちのシステムは一日数百億取引している。数億賠償してくれる？」&lt;/p&gt;

&lt;p&gt;顧客の損失は定量化できない。だからアリババクラウドは通常、バウチャーを少し渡すだけだ。それは焼け石に水。失われた時間、実際の業務影響、その時間価値を誰もはっきり言えない。&lt;/p&gt;

&lt;p&gt;ネットワーク効果はパブリッククラウドに指数関数的な収益成長をもたらした。しかし大型の政府・企業ユーザーにとっては、パブリッククラウドへの&lt;strong&gt;反依存&lt;/strong&gt;を日程に載せるべきだ。自らの運命を単一のクラウドベンダーに縛れば、突発リスクには対応できない。&lt;/p&gt;

&lt;h2 id=&quot;小並行高可用システム&quot;&gt;小並行・高可用システム&lt;/h2&gt;

&lt;p&gt;その上で、私は「小並行・高可用システム」を提案する。&lt;strong&gt;ストレージの冗長&lt;/strong&gt;により、業務の&lt;strong&gt;高可用性&lt;/strong&gt;を実現する。&lt;/p&gt;

&lt;p&gt;トラフィックが冗長な情報システムに平準に分散されれば、集中型トラフィックによる単一クラスタのトラフィックピークを避け、問題の拡散半径を縮小できる。&lt;/p&gt;

&lt;p&gt;最も単純な例。DNS解決の際、広東のDNSを華南地域のアリババ・テンセントKubernetesクラスタに向ける。各クラスタは互いに依存せず、内部で完全な情報業務システムを稼働させる。最悪の場合、パブリッククラウド自体に問題が起きても、不可用は50%までに抑えられる。&lt;/p&gt;

&lt;p&gt;両方同時に不可用になる確率は極めて小さい。&lt;/p&gt;

&lt;h2 id=&quot;farewell-public-cloud-see-you-on-the-yangtze-river&quot;&gt;Farewell, Public Cloud. See you on the Yangtze River.&lt;/h2&gt;

&lt;h2 id=&quot;参考リンク&quot;&gt;参考リンク&lt;/h2&gt;

&lt;p&gt;【1】&lt;br /&gt;
2025年11月18日 Cloudflare サービス中断&lt;br /&gt;
https://blog.cloudflare.com/zh-cn/18-november-2025-outage/&lt;/p&gt;

&lt;p&gt;【2】&lt;br /&gt;
AWS障害から見るDNSの見えざる杀伤力：DeepFlowが混乱の中でいかに素早く根因を特定したか&lt;br /&gt;
https://my.oschina.net/u/3681970/blog/18697034&lt;/p&gt;

&lt;p&gt;【3】&lt;br /&gt;
2023-11-12 アリババクラウド障害の振り返りと分析&lt;br /&gt;
https://github.tiankonguse.com/blog/2023/11/29/aliyun-break.html&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;h2 id=&quot;резюме&quot;&gt;Резюме&lt;/h2&gt;

&lt;p&gt;Статья исходит из формальной логики и определений (сетевой эффект, закон возрастания энтропии, антизависимость, философия «нуля» нулевой предельной выгоды), систематически обозревает крупные сбои основных публичных облаков и инфраструктуры — Alibaba Cloud, Google Cloud, Azure, Cloudflare, Tencent Cloud — с 2014 по 2025 год и сравнивает прозрачность их отчётности по сбоям. На этой основе анализируются «причины смерти» публичного облака: энтропия ПО и нулевая предельная выгода затрудняют управление устаревшим кодом и архитектурой; сетевые эффекты усиливают каскадные сбои; компенсации по SLA серьёзно не соответствуют реальным потерям предприятий и госсектора. Автор рекомендует крупным предприятиям и госорганам приоритизировать «антизависимость» от одного публичного облака и предлагает концепцию «высокодоступной системы с малой параллельной нагрузкой» — снижение риска единой точки отказа и радиуса поражения за счёт избыточности хранения и распределения трафика (например, мультирегиональное, мультикластерное DNS-разрешение).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/fimbulwinter/fimbulwinter.jpeg&quot; alt=&quot;Фимбульвинтер&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;формальная-логика-и-определения&quot;&gt;Формальная логика и определения&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Сетевой эффект&lt;/strong&gt;: чем больше пользователей (или участников) у продукта/сервиса/платформы, тем выше его ценность для каждого пользователя.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Закон возрастания энтропии&lt;/strong&gt;: кодовую базу проекта со временем ожидает превращение в «свалку».&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Антизависимость&lt;/strong&gt;: обратная зависимость от одного языка программирования, стека или облачной платформы. Примеры: полиглот-программирование, мультистек, мультиоблако. Антизависимость позволяет бизнесу стабильно работать без привязки к одному языку, открытому проекту или публичному облаку.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ноль&lt;/strong&gt;: рефакторинг с нулевой предельной выгодой никому не нужен.&lt;/p&gt;

&lt;h2 id=&quot;сбои-aws&quot;&gt;Сбои AWS&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Регион / Область&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное воздействие и последствия&lt;/th&gt;
      &lt;th&gt;Официальная / основная причина&lt;/th&gt;
      &lt;th&gt;Примечания / Оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1 (Северная Вирджиния)&lt;/td&gt;
      &lt;td&gt;Не указано&lt;/td&gt;
      &lt;td&gt;Затронуты ключевые компоненты Amazon SimpleDB, часть пользователей не могла работать с БД.&lt;/td&gt;
      &lt;td&gt;Проблема с питанием.&lt;/td&gt;
      &lt;td&gt;Небольшое событие; быстро восстановлено; показало слабость резервирования питания.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-08-07&lt;/td&gt;
      &lt;td&gt;EU West (Ирландия)&lt;/td&gt;
      &lt;td&gt;Не указано&lt;/td&gt;
      &lt;td&gt;Затронуты EC2, EBS, RDS; европейские клиенты потеряли доступ к инстансам и хранилищам.&lt;/td&gt;
      &lt;td&gt;Внутреннее системное событие.&lt;/td&gt;
      &lt;td&gt;Региональное; выявило слабую изоляцию регионов на раннем этапе.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2014-11-26&lt;/td&gt;
      &lt;td&gt;Глобально (CloudFront DNS)&lt;/td&gt;
      &lt;td&gt;~2 часа&lt;/td&gt;
      &lt;td&gt;Сбой DNS-серверов CloudFront; многие сайты и сервисы не могли разрешать запросы.&lt;/td&gt;
      &lt;td&gt;Сбой DNS-серверов.&lt;/td&gt;
      &lt;td&gt;Короткий, но широкий эффект; показал уязвимость DNS крупнейшего облака.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2015-09-20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Несколько часов&lt;/td&gt;
      &lt;td&gt;Сбой DynamoDB → сбой внутренних коммуникаций; пострадали Netflix, Reddit, IMDb, Amazon.&lt;/td&gt;
      &lt;td&gt;Цепная реакция внутренних сервисов.&lt;/td&gt;
      &lt;td&gt;Серьёзный инцидент; миллионы пользователей; предупреждение о сильной связанности сервисов.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2017-02-28&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;4–5 часов&lt;/td&gt;
      &lt;td&gt;Поломка контрольной плоскости S3; Slack, Trello, GitHub Pages, Quora и многие сайты без файлов.&lt;/td&gt;
      &lt;td&gt;Ошибка инженера — удалена критическая конфигурация.&lt;/td&gt;
      &lt;td&gt;Одна из самых известных аварий; «самая дорогая опечатка в истории».&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020-11-25&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Несколько часов&lt;/td&gt;
      &lt;td&gt;Сбой Kinesis и Cognito; пострадали Roku, Adobe, Flickr; стриминг и аутентификация.&lt;/td&gt;
      &lt;td&gt;Проблема с обновлением ёмкости.&lt;/td&gt;
      &lt;td&gt;Произошло во время пандемии; подчеркнуло сложности планирования мощностей.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-12-05&lt;/td&gt;
      &lt;td&gt;us-east-2 (Огайо)&lt;/td&gt;
      &lt;td&gt;~40 минут&lt;/td&gt;
      &lt;td&gt;Сбой зоны доступности; нарушена работа ряда сервисов в регионе.&lt;/td&gt;
      &lt;td&gt;Не раскрыто подробно (вероятно сеть/питание).&lt;/td&gt;
      &lt;td&gt;Короткий, но показал важность multi-AZ архитектуры.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023-06-13&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Не указано&lt;/td&gt;
      &lt;td&gt;Сбой Lambda; пострадали Boston Globe, метро Нью-Йорка, Associated Press и др.&lt;/td&gt;
      &lt;td&gt;Не раскрыто подробно.&lt;/td&gt;
      &lt;td&gt;Показал уязвимость бессерверных вычислений при масштабе.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024-07-30&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;Не указано&lt;/td&gt;
      &lt;td&gt;Сбой Kinesis Data Streams; нарушена обработка данных в реальном времени.&lt;/td&gt;
      &lt;td&gt;Не раскрыто подробно.&lt;/td&gt;
      &lt;td&gt;Подчеркнул риски зависимостей потоковой обработки.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-02&lt;/td&gt;
      &lt;td&gt;eu-north-1 (Стокгольм)&lt;/td&gt;
      &lt;td&gt;Не указано&lt;/td&gt;
      &lt;td&gt;Крупный сетевой сбой в одной зоне; нарушены ключевые сервисы в Европе.&lt;/td&gt;
      &lt;td&gt;Серьёзный сетевой сбой.&lt;/td&gt;
      &lt;td&gt;Региональное; отразило сложности расширения инфраструктуры в Европе.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025-10-19/20&lt;/td&gt;
      &lt;td&gt;us-east-1&lt;/td&gt;
      &lt;td&gt;&amp;gt;15 часов&lt;/td&gt;
      &lt;td&gt;Сбой точки входа DynamoDB (DNS); пострадали Slack, Reddit, Roblox, Fortnite, Coinbase, Venmo, Duolingo, Canva, PlayStation, банки, авиакомпании (задержки Delta/United), Amazon; &amp;gt;3500 компаний, 60+ стран, &amp;gt;17 млн жалоб.&lt;/td&gt;
      &lt;td&gt;Сбой разрешения DNS → каскадный эффект.&lt;/td&gt;
      &lt;td&gt;Крупнейший сбой облака 2025 года; «самое большое обнажение уязвимости облака»; активно продвигают multi-cloud.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Анализ самых серьёзных инцидентов&lt;/strong&gt;&lt;br /&gt;
Наиболее тяжёлые сбои: 2015 (DynamoDB), 2017 (S3) и особенно 2025-10 (DynamoDB DNS). Все произошли в us-east-1 — самом старом и загруженном регионе AWS.&lt;br /&gt;
Рейтинг тяжести:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;2015 — сильно пострадали развлекательные и социальные платформы.&lt;/li&gt;
  &lt;li&gt;2017 — огромный ущерб продуктивности и разработчикам; рекордные убытки из-за человеческого фактора.&lt;/li&gt;
  &lt;li&gt;2025 — самая длительная (&amp;gt;15 ч), самая широкая (финансы, игры, образование, авиация, критическая инфраструктура) — считается самым серьёзным одиночным облачным сбоем последних лет.&lt;br /&gt;
Главные уроки: чрезмерная зависимость от us-east-1, хрупкость контрольной плоскости, каскадные сбои. Отрасль всё активнее рекомендует многорегиональные, мультиоблачные и гибридные архитектуры.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;сбои-alibaba-cloud&quot;&gt;Сбои Alibaba Cloud&lt;/h2&gt;

&lt;p&gt;С 2014 по 2025 год у Alibaba Cloud не было аномально большого числа &lt;strong&gt;крупных инцидентов&lt;/strong&gt;, широко освещённых и официально раскрытых, &lt;strong&gt;действительно широких по охвату, длительных и называемых «крупными авариями»&lt;/strong&gt; (по масштабу компании общий SLA по-прежнему на уровне лидеров отрасли). Однако несколько из них действительно вызвали заметные общественные последствия и отраслевую дискуссию. Ниже — хронологический список &lt;strong&gt;крупных сбоев&lt;/strong&gt; (по открытым отчётам, официальным заявлениям, СМИ и разборам сообщества):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Регион/охват&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное влияние и последствия&lt;/th&gt;
      &lt;th&gt;Официальная/основная причина&lt;/th&gt;
      &lt;th&gt;Заметки/оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Июнь 2018&lt;/td&gt;
      &lt;td&gt;Часть регионов (детали не раскрыты)&lt;/td&gt;
      &lt;td&gt;~30 мин&lt;/td&gt;
      &lt;td&gt;Сбои части облачных продуктов, ограниченное влияние&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто&lt;/td&gt;
      &lt;td&gt;Часть СМИ назвала «крупным техническим сбоем»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3 марта 2019&lt;/td&gt;
      &lt;td&gt;Северный Китай 2 (Пекин) AZ-C&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Массовые сбои дисков ECS, падение множества сайтов/приложений&lt;/td&gt;
      &lt;td&gt;Сбой дисков&lt;/td&gt;
      &lt;td&gt;Существенное влияние; Alibaba Cloud компенсировала по SLA&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18 декабря 2022&lt;/td&gt;
      &lt;td&gt;Регион Гонконг AZ-C&lt;/td&gt;
      &lt;td&gt;~15,5 ч&lt;/td&gt;
      &lt;td&gt;Почти полная остановка Гонконга; недоступность ключевых сайтов Макао (денежно-кредитное управление, Galaxy, Lotus TV и др.); затронут OKX&lt;/td&gt;
      &lt;td&gt;Отказ охлаждения → каскад → массовый простой&lt;/td&gt;
      &lt;td&gt;Широко названо «одним из худших инцидентов в истории Alibaba Cloud»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;12 ноября 2023&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Все регионы и сервисы глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~3 ч 16 мин&lt;/td&gt;
      &lt;td&gt;Консоль, API, MQ, микросервисы, мониторинг, ML и др. в сбое; Taobao, DingTalk, Xianyu, Ele.me, Alibaba Cloud Drive и др. упали&lt;/td&gt;
      &lt;td&gt;Сбой ядра (аутентификация/метаданные/контрольная плоскость)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Широко признано худшим и самым широким сбоем Alibaba Cloud&lt;/strong&gt;; «эпический», «беспрецедентный в отрасли»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;27 ноября 2023&lt;/td&gt;
      &lt;td&gt;Часть серверов&lt;/td&gt;
      &lt;td&gt;~2 ч&lt;/td&gt;
      &lt;td&gt;Сбой доступа к серверам&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто&lt;/td&gt;
      &lt;td&gt;Всего через полмесяца после 11·12; новые вопросы к доверию&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2 июля 2024&lt;/td&gt;
      &lt;td&gt;Часть регионов/сервисов&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Сбои консоли и части сервисов&lt;/td&gt;
      &lt;td&gt;Детального разбора нет&lt;/td&gt;
      &lt;td&gt;Средний масштаб; влияние меньше предыдущих&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2025 (дата неясна)&lt;/td&gt;
      &lt;td&gt;Глобально (подозрение на DNS)&lt;/td&gt;
      &lt;td&gt;~6 ч&lt;/td&gt;
      &lt;td&gt;Подмена DNS привела к глобальным сбоям сервисов&lt;/td&gt;
      &lt;td&gt;Подмена DNS&lt;/td&gt;
      &lt;td&gt;По сводке сбоев публичного облака 2025; детали уточняются&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;важные-замечания-и-тренды&quot;&gt;Важные замечания и тренды&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2014–2018, ранний период&lt;/strong&gt;: Публично раскрытых крупных P0-инцидентов в этот период крайне мало; в основном локальные, ограниченные случаи. Масштаб был намного меньше, влияние — тоже.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Два самых тяжёлых&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;2022.12 Гонконг 15,5 ч&lt;/strong&gt; → Самый длительный сбой в одном регионе; тяжёлое влияние на критическую инфраструктуру Гонконга и Макао.&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;2023.11.12 глобально 3+ ч&lt;/strong&gt; → Остановка контрольной плоскости и глобальных сервисов; широко признано редким сбоем «все регионы × все сервисы», развенчавшим миф о «мультиактивности, мультицентре, N девяток».&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: По известным данным частота и тяжесть ниже, чем в 2022–2023, но средние и крупные события по-прежнему случаются (например, подмена DNS в 2025 году имела широкий охват).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Подход Alibaba Cloud&lt;/strong&gt;: После большинства крупных сбоев публикуются детальные разборы (особенно по Гонконгу 2022 и глобальному 2023); компенсация по SLA (обычно ваучеры); официальные извинения руководства.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В целом за 2014–2025 у Alibaba Cloud порядка &lt;strong&gt;5–7&lt;/strong&gt; инцидентов уровня «крупная авария», при этом &lt;strong&gt;12 ноября 2023&lt;/strong&gt; и &lt;strong&gt;декабрь 2022 Гонконг&lt;/strong&gt; общепризнанно считаются двумя самыми тяжёлыми.&lt;/p&gt;

&lt;h2 id=&quot;сбои-google-cloud&quot;&gt;Сбои Google Cloud&lt;/h2&gt;

&lt;p&gt;Google Cloud Platform (GCP) с 2014 по 2025 год имел в целом хороший SLA; &lt;strong&gt;крупные инциденты&lt;/strong&gt;, реально затронувшие &lt;strong&gt;глобальный охват&lt;/strong&gt; или &lt;strong&gt;несколько ключевых сервисов&lt;/strong&gt;, не были особенно частыми (меньше глобальных катастроф, чем у AWS и Azure). Когда они происходили, часто страдали многие сторонние приложения (Snapchat, Spotify, Discord, сервисы, зависящие от Cloudflare и т.д.) с высоким общественным резонансом.&lt;/p&gt;

&lt;p&gt;Ниже — хронологический список &lt;strong&gt;серьёзных, широких по охвату&lt;/strong&gt; сбоев GCP (по открытому Status Dashboard, СМИ, Wikipedia, отраслевым разборам):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Регион/охват&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное влияние и последствия&lt;/th&gt;
      &lt;th&gt;Основная причина&lt;/th&gt;
      &lt;th&gt;Заметки/оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Август 2015&lt;/td&gt;
      &lt;td&gt;Европа (Глин, Бельгия)&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Очень высокая доля ошибок чтения/записи Compute Engine; частичная потеря данных&lt;/td&gt;
      &lt;td&gt;Молния повредила часть ЦОД&lt;/td&gt;
      &lt;td&gt;Google редко признаёт &lt;strong&gt;потерю данных&lt;/strong&gt;; ограниченный круг заказчиков&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Июль 2018&lt;/td&gt;
      &lt;td&gt;Глобально (несколько регионов)&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Сбои сервисов GCP; Snapchat, Spotify и др. в основном недоступны&lt;/td&gt;
      &lt;td&gt;Перегрузка сети + внутренняя маршрутизация&lt;/td&gt;
      &lt;td&gt;Широко освещено; сильное влияние на третьи стороны&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2 июня 2019&lt;/td&gt;
      &lt;td&gt;Восток США + глобально&lt;/td&gt;
      &lt;td&gt;~4–5 ч&lt;/td&gt;
      &lt;td&gt;Массовые сбои YouTube, Gmail, G Suite; сбои входа Snapchat, Discord, Vimeo&lt;/td&gt;
      &lt;td&gt;Перегрузка сети на востоке США + каскад&lt;/td&gt;
      &lt;td&gt;Широкий охват; активное обсуждение в соцсетях&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14 декабря 2020&lt;/td&gt;
      &lt;td&gt;Глобально&lt;/td&gt;
      &lt;td&gt;~1 ч&lt;/td&gt;
      &lt;td&gt;Gmail, YouTube, Google Home, Nest, Pokémon GO и др. — почти все сервисы, зависящие от аутентификации, упали&lt;/td&gt;
      &lt;td&gt;Глобальный сбой системы идентификации (аналог IAM)&lt;/td&gt;
      &lt;td&gt;«Падение» потребительских сервисов; один из худших&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Август 2022&lt;/td&gt;
      &lt;td&gt;ЦОД в Айове&lt;/td&gt;
      &lt;td&gt;Локально&lt;/td&gt;
      &lt;td&gt;Электрический пожар (3 пострадавших); затронуты часть сервисов, не глобально&lt;/td&gt;
      &lt;td&gt;Электрический пожар в ЦОД&lt;/td&gt;
      &lt;td&gt;Физический объект; не чисто софт/архитектура&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Апрель 2023&lt;/td&gt;
      &lt;td&gt;Европа (Париж и др.)&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Сбои сети и сервисов в нескольких регионах&lt;/td&gt;
      &lt;td&gt;Наводнение + ЦОД + сетевые проблемы&lt;/td&gt;
      &lt;td&gt;Погодный фактор; среднее влияние&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;23 октября 2024&lt;/td&gt;
      &lt;td&gt;Европа (Франкфурт europe-west3)&lt;/td&gt;
      &lt;td&gt;~12+ ч&lt;/td&gt;
      &lt;td&gt;Регион в основном недоступен; затронуты многие европейские заказчики&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто (подозрение на контрольную плоскость/сеть)&lt;/td&gt;
      &lt;td&gt;Один из самых длительных сбоев в одном регионе&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;12 июня 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt; (40+ регионов)&lt;/td&gt;
      &lt;td&gt;~2,5–3 ч&lt;/td&gt;
      &lt;td&gt;Сбои &lt;strong&gt;70+ сервисов GCP&lt;/strong&gt;; падение IAM → сбои API-запросов; Spotify, Discord, Twitch, Cloudflare, Fitbit, Gmail, Drive, YouTube и др. упали&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Service Control&lt;/strong&gt; (ядро API-аутентификации): автоматическое обновление внесло тяжёлый баг → цикл сбоев → глобальная перегрузка&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Широко признано худшим глобальным сбоем GCP с 2020 года&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18 июля 2025&lt;/td&gt;
      &lt;td&gt;us-east1&lt;/td&gt;
      &lt;td&gt;~2 ч&lt;/td&gt;
      &lt;td&gt;Повышенная доля ошибок у нескольких продуктов&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто&lt;/td&gt;
      &lt;td&gt;Средний масштаб; восстановление относительно быстрое&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;сбои-azure&quot;&gt;Сбои Azure&lt;/h2&gt;

&lt;p&gt;У Microsoft Azure с 2014 по 2025 год не было аномально большого числа &lt;strong&gt;крупных инцидентов&lt;/strong&gt;, &lt;strong&gt;широких по охвату, длительных и привлекающих внимание&lt;/strong&gt; (по сравнению с ранним периодом частых мелких сбоев при меньшем масштабе ситуация улучшилась). Несколько событий действительно привели к глобальному или мультисервисному влиянию, особенно когда были затронуты &lt;strong&gt;Microsoft 365, Teams, Xbox, Outlook&lt;/strong&gt; и другие потребительские/корпоративные продукты; эффект распространения был очень заметен.&lt;/p&gt;

&lt;p&gt;Ниже — хронологический список &lt;strong&gt;крупных&lt;/strong&gt; сбоев Azure (по Azure Status History, Post Incident Reviews, СМИ, Wikipedia, отраслевым разборам):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Регион/охват&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное влияние и последствия&lt;/th&gt;
      &lt;th&gt;Основная причина&lt;/th&gt;
      &lt;th&gt;Заметки/оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;14–18 августа 2014&lt;/td&gt;
      &lt;td&gt;US Central, US East, US East 2, Europe North&lt;/td&gt;
      &lt;td&gt;Несколько дней, часы за событие&lt;/td&gt;
      &lt;td&gt;Cloud Services, SQL Database, VM, Websites, HDInsight, Mobile Services, Service Bus в основном недоступны&lt;/td&gt;
      &lt;td&gt;Несколько сетевых/хранилищных проблем&lt;/td&gt;
      &lt;td&gt;Самая концентрированная волна 2014 года; Azure ещё молодой&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;18–19 ноября 2014&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Несколько регионов&lt;/strong&gt; (США, ЕС, Азия)&lt;/td&gt;
      &lt;td&gt;~11 ч&lt;/td&gt;
      &lt;td&gt;В центре Azure Storage; VM, Websites, Visual Studio Online, Xbox Live, MSN, Search, 20+ сервисов упали&lt;/td&gt;
      &lt;td&gt;Изменение конфигурации производительности хранилища → бесконечный цикл фронта Blob&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Худший ранний инцидент Azure&lt;/strong&gt;; детальный RCA; компенсация заказчикам&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;15 сентября 2016&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Массовый сбой разрешения DNS; затронуты многие сервисы, зависящие от Azure DNS&lt;/td&gt;
      &lt;td&gt;Глобальная проблема DNS&lt;/td&gt;
      &lt;td&gt;Обнажён риск единой точки отказа DNS&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;20 июня 2018&lt;/td&gt;
      &lt;td&gt;Несколько ЦОД в Северной Америке&lt;/td&gt;
      &lt;td&gt;Часы–1+ день&lt;/td&gt;
      &lt;td&gt;Сбой охлаждения (молния + защита от перенапряжения) → сбои нескольких сервисов&lt;/td&gt;
      &lt;td&gt;Физический объект (каскад от молнии)&lt;/td&gt;
      &lt;td&gt;Редкий инцидент уровня железа/инфраструктуры&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4 сентября 2018&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Несколько регионов&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;25+ ч (часть сервисов 3 дня)&lt;/td&gt;
      &lt;td&gt;Ключевые сервисы длительно недоступны&lt;/td&gt;
      &lt;td&gt;Охлаждение (молния + перенапряжение)&lt;/td&gt;
      &lt;td&gt;Одно из самых длительных восстановлений&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;23 января 2023&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt; (ядро сети)&lt;/td&gt;
      &lt;td&gt;~3 ч&lt;/td&gt;
      &lt;td&gt;Microsoft 365 (Teams, Outlook, Exchange), часть сервисов Azure упали&lt;/td&gt;
      &lt;td&gt;Проблема WAN&lt;/td&gt;
      &lt;td&gt;«Падение» M365; огромное влияние&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18 июля 2024&lt;/td&gt;
      &lt;td&gt;US Central&lt;/td&gt;
      &lt;td&gt;~Полдня&lt;/td&gt;
      &lt;td&gt;Сбои операций управления VM и др.; заказчики не могли получить доступ к управляемым сервисам&lt;/td&gt;
      &lt;td&gt;Ошибка контроля доступа + сбой инфраструктуры&lt;/td&gt;
      &lt;td&gt;Близко по времени к глобальному BSOD CrowdStrike на следующий день, но независимо&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8–9 января 2025&lt;/td&gt;
      &lt;td&gt;East US 2 и др.&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Сбои сети Azure Databricks, Synapse, Functions, App Service, VM&lt;/td&gt;
      &lt;td&gt;Проблема сетевого компонента&lt;/td&gt;
      &lt;td&gt;Заметный инцидент начала 2025 года&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;29 октября 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~8 ч&lt;/td&gt;
      &lt;td&gt;В центре Azure Front Door; Microsoft 365, Outlook, Teams, Xbox Live, Minecraft, Copilot упали; затронуты Alaska Airlines, Heathrow, Costco, Starbucks и др.&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Изменение конфигурации Azure Front Door&lt;/strong&gt; + баг защиты → несовместимая конфигурация распространилась глобально&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Худший инцидент Azure в 2025 году&lt;/strong&gt;; Downdetector 30k+ отчётов; похоже на сбой AWS в том же месяце&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5–6 ноября 2025&lt;/td&gt;
      &lt;td&gt;West Europe (AZ01)&lt;/td&gt;
      &lt;td&gt;~9–10 ч&lt;/td&gt;
      &lt;td&gt;Деградация/остановка VM, PostgreSQL/MySQL Flexible Server, AKS, Storage, Service Bus&lt;/td&gt;
      &lt;td&gt;Тепловой инцидент в ЦОД&lt;/td&gt;
      &lt;td&gt;Серьёзный региональный сбой&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;наблюдения-и-тренды-20142025&quot;&gt;Наблюдения и тренды (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014&lt;/strong&gt;: Azure в фазе быстрого роста; частые проблемы &lt;strong&gt;изменений конфигурации&lt;/strong&gt; и &lt;strong&gt;слоя хранилища&lt;/strong&gt;; самый концентрированный по сбоям год (ноябрьский инцидент — классический кейс).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2015–2019&lt;/strong&gt;: Частота сбоев снизилась; по-прежнему в основном &lt;strong&gt;один регион&lt;/strong&gt; или &lt;strong&gt;инфраструктура&lt;/strong&gt; (охлаждение, молния, DNS); влияние относительно ограничено.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2020–2023&lt;/strong&gt;: Крупных глобальных сбоев мало; чаще &lt;strong&gt;сеть&lt;/strong&gt; или &lt;strong&gt;зависимость M365 от Azure&lt;/strong&gt; (напр., январь 2023).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: Контрольная плоскость/край (напр. &lt;strong&gt;Azure Front Door&lt;/strong&gt;) стал новой болевой точкой; 29 октября 2025 широко признано худшей &lt;strong&gt;глобальной остановкой&lt;/strong&gt; Azure за последние годы, сопоставимой с Alibaba ноябрь 2023 или GCP июнь 2025.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Типичные черты&lt;/strong&gt;: Детальный &lt;strong&gt;Post Incident Review (PIR)&lt;/strong&gt; после крупных инцидентов; &lt;strong&gt;изменение конфигурации&lt;/strong&gt;, &lt;strong&gt;контрольная плоскость&lt;/strong&gt;, &lt;strong&gt;сеть&lt;/strong&gt; часто в корне (не только железо); сильное распространение на третьи стороны при сбоях M365, Xbox, Teams; компенсация по SLA (кредит); заказчики больше всего заботятся о непрерывности бизнеса.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В целом у Azure за 2014–2025 порядка &lt;strong&gt;8–10&lt;/strong&gt; &lt;strong&gt;крупных&lt;/strong&gt; (глобальных/мультисервисных, длительных) сбоев; тяжесть и частота на одном уровне с AWS и GCP; &lt;strong&gt;каскадный сбой из-за ошибки конфигурации&lt;/strong&gt; — повторяющийся сценарий.&lt;/p&gt;

&lt;h2 id=&quot;сбои-cloudflare&quot;&gt;Сбои Cloudflare&lt;/h2&gt;

&lt;p&gt;Cloudflare как один из крупнейших в мире CDN, безопасности, DNS и edge-провайдеров с 2014 по 2025 год не имел аномально большого числа &lt;strong&gt;крупных инцидентов&lt;/strong&gt;, вызвавших &lt;strong&gt;широкий сбой интернета&lt;/strong&gt;. Когда они происходили, влияние достигало &lt;strong&gt;миллионов и сотен миллионов&lt;/strong&gt; пользователей (Cloudflare обрабатывает ~20–25% мирового веб-трафика).&lt;/p&gt;

&lt;p&gt;Типичная картина: &lt;strong&gt;восстановление часто быстрое&lt;/strong&gt; (большинство ослабевает за 1–4 ч), но &lt;strong&gt;распространение крайне сильное&lt;/strong&gt; — при сбое ядра прокси, DNS или компонентов безопасности многие топовые сайты (X, ChatGPT, Shopify, Discord, Spotify, части AWS и т.д.) одновременно получают 5xx или становятся недоступны.&lt;/p&gt;

&lt;p&gt;Ниже — хронологический список &lt;strong&gt;крупных&lt;/strong&gt; сбоев Cloudflare (по официальному блогу, истории status.cloudflare.com, СМИ, Wikipedia; фокус на глобальных/ядровых трафиковых событиях):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Охват&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное влияние и последствия&lt;/th&gt;
      &lt;th&gt;Основная причина&lt;/th&gt;
      &lt;th&gt;Заметки/оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;2 июля 2019&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~1–2 ч&lt;/td&gt;
      &lt;td&gt;Массовые 502/503/504 на сайтах; большие части интернета недоступны&lt;/td&gt;
      &lt;td&gt;Внедрение софта внесло тяжёлый баг → падение слоя прокси&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Широко признано худшим за всю историю Cloudflare&lt;/strong&gt;; детальный разбор&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2020, несколько раз&lt;/td&gt;
      &lt;td&gt;Часть регионов/контрольная плоскость&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Недоступны дашборд, аналитика, часть API; ядро прокси в основном стабильно&lt;/td&gt;
      &lt;td&gt;Проблемы контрольной плоскости&lt;/td&gt;
      &lt;td&gt;Больше влияния на разработчиков; обычные пользователи меньше замечают&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Июнь 2022&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Несколько ЦОД&lt;/strong&gt; (19)&lt;/td&gt;
      &lt;td&gt;~1,5 ч&lt;/td&gt;
      &lt;td&gt;Остановка ядра прокси; множество сайтов недоступны&lt;/td&gt;
      &lt;td&gt;Ошибка конфигурации сети&lt;/td&gt;
      &lt;td&gt;Средний масштаб; быстрое восстановление&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;21 марта 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~1 ч 7 мин&lt;/td&gt;
      &lt;td&gt;Сильные сбои чтения/записи хранилища; затронуты многие сервисы, зависящие от хранилища/кэша&lt;/td&gt;
      &lt;td&gt;Сбой записи слоя KV/хранилища + частичные проблемы чтения&lt;/td&gt;
      &lt;td&gt;Заметный инцидент начала 2025 года&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;12 июня 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt; (часть функций)&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Часть функций/сервисов недоступна; ядро трафика в основном в порядке&lt;/td&gt;
      &lt;td&gt;Внедрение определённого модуля&lt;/td&gt;
      &lt;td&gt;Не остановка ядра трафика; ограниченное влияние&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14 июля 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt; (DNS 1.1.1.1)&lt;/td&gt;
      &lt;td&gt;~62 мин&lt;/td&gt;
      &lt;td&gt;Публичный DNS-резолвер (1.1.1.1) полностью недоступен; многие пользователи не могли выйти в интернет&lt;/td&gt;
      &lt;td&gt;Ошибка конфигурации → отзыв BGP-маршрута → префикс DNS исчез из глобальной таблицы маршрутизации&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Очень тяжело для пользователей 1.1.1.1&lt;/strong&gt;; уровень «обрушения интернета»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;~Октябрь 2025&lt;/td&gt;
      &lt;td&gt;Часть сервисов&lt;/td&gt;
      &lt;td&gt;Десятки минут&lt;/td&gt;
      &lt;td&gt;Краткий сбой разрешения DNS&lt;/td&gt;
      &lt;td&gt;Проблема конфигурации DNS&lt;/td&gt;
      &lt;td&gt;Средний масштаб&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;18 ноября 2025&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~4–5 ч (пик дольше)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Крупная остановка интернета&lt;/strong&gt;: X (Twitter), ChatGPT, Shopify, Spotify, Letterboxd, Indeed, Canva, Uber, DoorDash, Truth Social, League of Legends и др.; ~20% веб-трафика; 1/3 сайтов из топ-10k Alexa&lt;/td&gt;
      &lt;td&gt;Аномальный рост файла правил Bot Management (изменение прав БД → удвоение размера файла) → глобальное распространение → падение прокси&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Худший в 2025 году&lt;/strong&gt;; также худшая глобальная остановка трафика с 2019 года&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5 декабря 2025&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Часы&lt;/td&gt;
      &lt;td&gt;Снова массовые 5xx; затронуты Shopify, Zoom, Vinted, Fortnite, Square, Just Eat, Canva, Vimeo, части AWS, Deliveroo и др.&lt;/td&gt;
      &lt;td&gt;Полной официальной первопричины нет (подозрение на конфигурацию/распространение)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Всего через 17 дней после 18 ноября&lt;/strong&gt;; два крупных инцидента подряд вызвали сильную критику&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;наблюдения-и-тренды-20142025-1&quot;&gt;Наблюдения и тренды (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2014–2018&lt;/strong&gt;: Cloudflare быстро рос; публичных &lt;strong&gt;крупных глобальных&lt;/strong&gt; инцидентов мало; в основном локальные/региональные/функциональные проблемы; зависимость интернета от Cloudflare была ниже, чем сейчас.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Июль 2019&lt;/strong&gt;: Стал классическим «чёрным лебедем» Cloudflare; более шести лет не было &lt;strong&gt;глобальной остановки ядра прокси&lt;/strong&gt; сопоставимого масштаба.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2025 как аномальный год&lt;/strong&gt;: Не менее &lt;strong&gt;3–4&lt;/strong&gt; широких глобальных/почти глобальных событий (особенно 18 ноября и 5 декабря подряд). &lt;strong&gt;18 ноября&lt;/strong&gt; широко признано &lt;strong&gt;худшим с 2019 года&lt;/strong&gt;. 5 декабря снова заставило многих усомниться в контроле изменений, откате и принципе «fail small».&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Типичные черты&lt;/strong&gt;: Большинство тяжёлых инцидентов связаны с &lt;strong&gt;изменением конфигурации&lt;/strong&gt;, &lt;strong&gt;правилами/распространением&lt;/strong&gt;, &lt;strong&gt;контрольной плоскостью&lt;/strong&gt; или &lt;strong&gt;DNS/BGP&lt;/strong&gt;; очень прозрачные разборы на blog.cloudflare.com; восстановление обычно быстрое (откат + остановка распространения), но влияние очень широкое (Anycast + механизм вызова); нет явной компенсации по SLA как у AWS/Azure/Google, но есть детальные объяснения и обязательства по улучшениям.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В целом у Cloudflare за 2014–2025 порядка &lt;strong&gt;5–7&lt;/strong&gt; &lt;strong&gt;крупных&lt;/strong&gt; (глобальная ядровая трафиковая, длительная) сбоев; &lt;strong&gt;июль 2019&lt;/strong&gt; и &lt;strong&gt;18 ноября 2025&lt;/strong&gt; — два пиковых события. В 2025 году частота сбоев заметно выросла, возобновилось обсуждение «риска концентрации интернет-инфраструктуры».&lt;/p&gt;

&lt;h2 id=&quot;сбои-tencent-cloud&quot;&gt;Сбои Tencent Cloud&lt;/h2&gt;

&lt;p&gt;Tencent Cloud с 2014 по 2025 год как второй по размеру публичный облачный провайдер Китая (после Alibaba Cloud) имел в целом хорошую стабильность среди местных провайдеров. Действительно &lt;strong&gt;широких, длительных, привлекающих внимание глобальных/мультирегиональных крупных&lt;/strong&gt; инцидентов было относительно немного; при сбое контрольной плоскости (консоль/API) или ключевого хранилища влияние быстро распространялось на множество предприятий и разработчиков.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Страница статуса&lt;/strong&gt; Tencent Cloud (https://status.cloud.tencent.com/history) относительно непрозрачна: история часто показывает только последний год, многие средние и крупные инциденты отсутствуют; полная картина складывается из официального WeChat, техблога, СМИ и сообщества.&lt;/p&gt;

&lt;p&gt;Ниже — хронологический список &lt;strong&gt;серьёзных, широких по охвату&lt;/strong&gt; инцидентов Tencent Cloud (по официальным разборам, СМИ, Zhihu/Weibo/сообществу разработчиков):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Время&lt;/th&gt;
      &lt;th&gt;Регион/охват&lt;/th&gt;
      &lt;th&gt;Длительность&lt;/th&gt;
      &lt;th&gt;Основное влияние и последствия&lt;/th&gt;
      &lt;th&gt;Основная причина&lt;/th&gt;
      &lt;th&gt;Заметки/оценка отрасли&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2 ноября 2014&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;По стране&lt;/strong&gt; (контрольная плоскость + часть сервисов)&lt;/td&gt;
      &lt;td&gt;~6 мин&lt;/td&gt;
      &lt;td&gt;Медленный сайт Tencent Cloud, сбой загрузки изображений, сбой консоли; часть пользователей не могла нормально пользоваться&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто (подозрение на сеть/нагрузку)&lt;/td&gt;
      &lt;td&gt;Ранний период малого масштаба; влияние ограничено, но тогда широко освещено&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Август 2018&lt;/td&gt;
      &lt;td&gt;Часть пользователей/облачный диск&lt;/td&gt;
      &lt;td&gt;Неясно (влияние на одного пользователя часы до постоянного)&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Обнуление/потеря&lt;/strong&gt; данных облачного диска у нескольких пользователей; убытки порядка десятков миллионов&lt;/td&gt;
      &lt;td&gt;Тихий сбой диска + сбой проверки/реплики при миграции&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Худший инцидент «потери данных» в истории Tencent Cloud&lt;/strong&gt;; кризис доверия; детальный разбор&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023 (отдельные сообщения)&lt;/td&gt;
      &lt;td&gt;Часть регионов/сервисов&lt;/td&gt;
      &lt;td&gt;Десятки мин–часы&lt;/td&gt;
      &lt;td&gt;Отдельные сбои консоли/API, джиттер хранилища&lt;/td&gt;
      &lt;td&gt;Детального публичного разбора нет&lt;/td&gt;
      &lt;td&gt;По сравнению с глобальным сбоем Alibaba в ноябре 2023 Tencent был относительно стабилен&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;8 апреля 2024&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;17 регионов глобально&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;~74–87 мин&lt;/td&gt;
      &lt;td&gt;Консоль полностью недоступна; облачный API 504 Gateway Timeout; инстансы CVM/RDS работают, но управление/продление/масштабирование невозможно; 1957 обращений заказчиков&lt;/td&gt;
      &lt;td&gt;Обратная несовместимость новой версии API + отсутствие механизма поэтапного раскрытия конфигурации → полный выкат → глобальное распространение&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Самый тяжёлый за последние годы у Tencent Cloud&lt;/strong&gt;; широко названо «глобальной аварией», «обрушением контрольной плоскости»; стиль похож на Alibaba ноябрь 2023&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;15 октября 2025&lt;/td&gt;
      &lt;td&gt;Несколько регионов&lt;/td&gt;
      &lt;td&gt;~Десятки мин–1 ч&lt;/td&gt;
      &lt;td&gt;Сбои Auto Scaling и других сервисов&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто&lt;/td&gt;
      &lt;td&gt;Со страницы статуса; средний масштаб&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;17 октября 2025&lt;/td&gt;
      &lt;td&gt;Гуанчжоу&lt;/td&gt;
      &lt;td&gt;~1+ ч&lt;/td&gt;
      &lt;td&gt;Сбои сервисов, связанных с AI digital-human&lt;/td&gt;
      &lt;td&gt;Подробно не раскрыто&lt;/td&gt;
      &lt;td&gt;Региональный; конкретный продукт AI/цифровой человек&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 id=&quot;наблюдения-и-тренды-20142025-2&quot;&gt;Наблюдения и тренды (2014–2025)&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Ранний период (2014–2018)&lt;/strong&gt;: Сбои часто &lt;strong&gt;потеря данных хранилища&lt;/strong&gt; или &lt;strong&gt;краткие проблемы доступа&lt;/strong&gt;; инцидент «потери данных» 2018 года сильнее всего ударил по доверию предприятий.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2019–2023&lt;/strong&gt;: Частота и тяжесть сбоев Tencent Cloud снизились; общенациональных/глобальных событий мало; стабильность выше, чем у Alibaba в тот же период (напр., спокойно во время 11·12 у Alibaba).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024–2025&lt;/strong&gt;: 8 апреля 2024 стало переломным; &lt;strong&gt;глобальный сбой контрольной плоскости&lt;/strong&gt; заставил многих переоценить «безопасность изменений» и «поэтапный выкат». В 2025 было несколько средних инцидентов, но ничего уровня «полная остановка сервисов» как в апреле 2024 или у Alibaba/Google.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Типичные черты&lt;/strong&gt;: &lt;strong&gt;Контрольная плоскость/API&lt;/strong&gt; — главная болевая точка (апрель 2024); &lt;strong&gt;хранилище/потеря данных&lt;/strong&gt; наиболее разрушительны для предприятий (2018); разборы относительно своевременны (WeChat, техсообщество); нет строгой компенсации по SLA как у AWS/Azure/Google, но есть ваучеры/компенсация; распространение сбоя менее драматично, чем у Alibaba/Cloudflare (клиентская база более корпоративная/игры/видео, меньше зависимость от потребительского интернета).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В целом у Tencent Cloud за 2014–2025 порядка &lt;strong&gt;3–5&lt;/strong&gt; &lt;strong&gt;крупных&lt;/strong&gt; (общенациональная/глобальная контрольная плоскость длительно недоступна или серьёзная потеря данных) инцидентов; &lt;strong&gt;потеря данных 2018&lt;/strong&gt; и &lt;strong&gt;глобальный сбой контрольной плоскости 8 апреля 2024&lt;/strong&gt; — два самых обсуждаемых.&lt;/p&gt;

&lt;h2 id=&quot;прозрачность-по-сбоям&quot;&gt;Прозрачность по сбоям&lt;/h2&gt;

&lt;p&gt;С точки зрения прозрачности по сбоям Alibaba Cloud и Tencent Cloud относительно слабы.&lt;/p&gt;

&lt;p&gt;Доска статуса Alibaba Cloud (https://status.aliyun.com/#/?region=cn-shanghai) и Tencent Cloud (https://status.cloud.tencent.com/history) показывают только события за последний год.&lt;/p&gt;

&lt;p&gt;Azure (https://azure.status.microsoft/en-us/status/history/) хранит пять лет. Cloudflare (https://www.cloudflarestatus.com/history?page=17) наиболее прозрачен; можно листать страницы назад на несколько лет.&lt;/p&gt;

&lt;h2 id=&quot;смерть-публичного-облака&quot;&gt;«Смерть» публичного облака&lt;/h2&gt;

&lt;p&gt;В молодости я любил читать и рефакторить чужой код. Пока «Java Boy» не преподал урок: даже после того, как я починил утечку памяти, он почувствовал глубокий экзистенциальный кризис. Гневом он прикрывал собственную несостоятельность и возлагал вину за «поддержание стабильности платформы Kubernetes» на меня.&lt;/p&gt;

&lt;p&gt;Я и сам не горел желанием за ним убирать. Просто частые алерты &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OOM kill&lt;/code&gt; меня раздражали. Из той истории я вынес философию нуля: &lt;strong&gt;рефакторинг с нулевой предельной выгодой никому не нужен.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Отсюда &lt;strong&gt;закон возрастания энтропии&lt;/strong&gt; в софте: кодовую базу проекта со временем ожидает превращение в «свалку».&lt;/p&gt;

&lt;p&gt;Кто-то спросил: какое это имеет отношение к «смерти» публичного облака?&lt;/p&gt;

&lt;p&gt;Прямое. Потому что «индустриальный Ктулху» требует от компаний растущей прибыли. Поэтому для провайдеров публичного облака и их рядовых сотрудников необходимо «рассказывать новую историю роста» — в 2026 году эта история про AI.&lt;/p&gt;

&lt;p&gt;Старый код просто гниёт. Менять его — нулевая предельная выгода.&lt;/p&gt;

&lt;p&gt;И все сходятся в одном: не трогать чужой код, дать ему превратиться в свалку. И с кодом так, и с архитектурой. Даже когда сетевая топология — чистая сеть взаимных зависимостей, при сбое все одинаково без сервиса, и когда ответственность за простой распределена поровну, на тебе лично ответственности нет.&lt;/p&gt;

&lt;p&gt;Ирония в том, что инженера по эксплуатации с нулём инцидентов за время работы, который «каждый день спит на работе», сочтут некомпетентным — потому что выглядит, будто он ничего не делает. Контринтуитивно: такого человека стоило бы держать как талисман компании — неизвестно, сколько он сделал раньше ради стабильности. Или ему просто повезло, и он заслуживает алтаря.&lt;/p&gt;

&lt;p&gt;Лучшая эксплуатация — не эксплуатировать. Потому что &lt;strong&gt;доход от эксплуатации и карьерный риск совершенно несоизмеримы&lt;/strong&gt;. Начальник не доплатит за удаление «вроде бы ненужной» настройки; но за удаление нужной настройки БД тебя обругают заказчики.&lt;/p&gt;

&lt;p&gt;Провайдеры публичного облака забывают: сетевой эффект может их поднять и может больно опустить. Чем больше у них заказчиков, тем сильнее сетевая цепная реакция от одного простоя. Как сбой Alipay 4 декабря 2025, ~21:00–23:37 — уже шестой крупный инцидент экосистемы Alibaba в 2025 году.&lt;/p&gt;

&lt;p&gt;Когда масштаб пользователей — сотни миллионов, каждую секунду кто-то платит. А бизнес продолжает требовать новые функции; в конце концов система не выдерживает.&lt;/p&gt;

&lt;p&gt;И компенсация провайдеров публичного облака совершенно несоизмерима. Для чего-то вроде Alipay это максимум «вернуть разницу»; недобор считают подарком. Но потери госсектора и предприятий не поддаются оценке. Если твой бизнес на публичном облаке и облако легло — как ты объяснишь провайдеру свой ущерб?&lt;/p&gt;

&lt;p&gt;«Моя система обрабатывает миллиарды транзакций в день; вы мне компенсируете пару миллиардов?»&lt;/p&gt;

&lt;p&gt;Ущерб заказчика не квантифицируем, поэтому Alibaba Cloud обычно просто раздаёт ваучеры. Это капля в море. Никто не может толком учесть потерянное время, реальное влияние на бизнес и ценность этого времени.&lt;/p&gt;

&lt;p&gt;Сетевой эффект принёс публичному облаку экспоненциальный рост выручки. Для крупных государственных и корпоративных пользователей &lt;strong&gt;антизависимость&lt;/strong&gt; от одного публичного облака должна быть в повестке. Связать свою судьбу с одним облачным провайдером — нельзя справиться с внезапным риском.&lt;/p&gt;

&lt;h2 id=&quot;системы-малой-параллельности-и-высокой-доступности&quot;&gt;Системы малой параллельности и высокой доступности&lt;/h2&gt;

&lt;p&gt;На этой основе я предлагаю «системы малой параллельности и высокой доступности»: &lt;strong&gt;избыточность хранилища&lt;/strong&gt; для &lt;strong&gt;высокой доступности&lt;/strong&gt; бизнеса.&lt;/p&gt;

&lt;p&gt;Когда трафик распределён по избыточным системам, ты избегаешь пика трафика одного кластера при централизованном потоке и сокращаешь радиус распространения сбоя.&lt;/p&gt;

&lt;p&gt;Простейший пример: при разрешении DNS направлять Гуандун на кластер Kubernetes Alibaba + Tencent в Южном Китае. Каждый кластер независим и крутит полную внутреннюю бизнес-систему. В худшем случае при сбое самого публичного облака недоступность не более 50%.&lt;/p&gt;

&lt;p&gt;Одновременная недоступность обоих крайне маловероятна.&lt;/p&gt;

&lt;h2 id=&quot;孤帆远影碧山尽唯见长江天际流&quot;&gt;孤帆远影碧山尽，唯见长江天际流&lt;/h2&gt;
&lt;p&gt;Прощай, облачный сервис. Увидимся на Янцзы.&lt;/p&gt;

&lt;h2 id=&quot;ссылки&quot;&gt;Ссылки&lt;/h2&gt;

&lt;p&gt;【1】&lt;br /&gt;
Сбой сервисов Cloudflare 18 ноября 2025&lt;br /&gt;
https://blog.cloudflare.com/zh-cn/18-november-2025-outage/&lt;/p&gt;

&lt;p&gt;【2】&lt;br /&gt;
Невидимое влияние DNS на примере сбоя AWS: как DeepFlow быстро нашёл первопричину в хаосе&lt;br /&gt;
https://my.oschina.net/u/3681970/blog/18697034&lt;/p&gt;

&lt;p&gt;【3】&lt;br /&gt;
Разбор и анализ сбоя Alibaba Cloud 2023-11-12&lt;br /&gt;
https://github.tiankonguse.com/blog/2023/11/29/aliyun-break.html&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/02/04/fimbulwinter/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/02/04/fimbulwinter/</guid>
        
        <category>n</category>
        
        
      </item>
    
      <item>
        <title>教育行政化体系下的激励函数设计</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    &lt;h2 id=&quot;引言&quot;&gt;引言&lt;/h2&gt;

&lt;p&gt;本文将以教育行政化体系作为论述的大环境背景，提取
1 教师Y，教师F，教师D
2 学生犹大，学生黑曼巴，学生P，学生Y，学生C13
3 心理老师
4 学校领导
的家庭背景，性格特征，以及行为模式。把「人类决策」拆成可计算的变量 → 评分 → 概率 / 结果。并分析不同决策产生的政策风险和结果，
根据不同的角色定位，研究探讨最佳策略，并尽可能地为学校领导设计一个最佳的时间激励函数。&lt;/p&gt;

&lt;h2 id=&quot;形式逻辑和定义&quot;&gt;形式逻辑和定义&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;教育行政化&lt;/strong&gt;：学生对老师负责，老师受校长管理，校长对学校负责。
学校&lt;strong&gt;政绩&lt;/strong&gt;以学生平均成绩和本科升学率作为量化。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;踢貓效應&lt;/strong&gt;（英語：Kick the cat）：也稱為踢狗效應（kick the dog）[1]，是一種隱喻，描述在組織或是家庭中位階較高的人，可能會藉由責罰位階較低的人來轉移其挫折或不滿，而位階較低的人也會以類似的方式將挫折發泄給位階更低的人，因此產生了連鎖反應。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;收益函数&lt;/strong&gt;：教师以学生平均成绩和本科升学率作为收益函数；学生以个人高考成绩作为收益函数，学生最终的高考成绩，跟过往3年的成绩正相关。&lt;/p&gt;

&lt;h2 id=&quot;收益函数payoff定义&quot;&gt;收益函数（Payoff）定义&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;教师收益&lt;/strong&gt; (U_{\text{teacher}})：以学生平均成绩 (\bar{S}) 和本科升学率 (r) 为自变量&lt;br /&gt;
[U_{\text{teacher}} = w_{\text{avg}} \cdot \bar{S} + w_{\text{enroll}} \cdot r]&lt;br /&gt;
实现中取 (w_{\text{avg}}=0.6)，(w_{\text{enroll}}=0.4)。&lt;strong&gt;政绩&lt;/strong&gt;（领导层激励）与教师收益同构。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;学生高考成绩预测&lt;/strong&gt; (G)：与过往 3 年年末成绩正相关，近期权重更大&lt;br /&gt;
[G = w_1 S_{t-3} + w_2 S_{t-2} + w_3 S_{t-1},\quad w_1+w_2+w_3=1,\; w_1\le w_2\le w_3]&lt;br /&gt;
实现中取 (w_1=0.2,\,w_2=0.3,\,w_3=0.5)。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;学生收益&lt;/strong&gt; (U_{\text{student}})：以个人高考成绩（预测值）为收益；未参考高考则无高考收益&lt;br /&gt;
[U_{\text{student}} = \begin{cases} G &amp;amp; \text{若在高考参考池} \ 0 &amp;amp; \text{否则} \end{cases}]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;量化公式&quot;&gt;量化公式&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;公式1&lt;/strong&gt;：学生平均成绩 = 学生总成绩 / 学生人数&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;公式2&lt;/strong&gt;：本科升学率 = 本科录取人数 / 参加高考人数 × 100%&lt;/p&gt;

&lt;h2 id=&quot;人物建模分析&quot;&gt;人物建模分析&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;教师Y&lt;/strong&gt;：以&lt;strong&gt;公式1&lt;/strong&gt;作为决策量化的依据。&lt;strong&gt;公式1&lt;/strong&gt;中的学生人数可以减少（使用&lt;strong&gt;PUA&lt;/strong&gt;策略，让学生休学退学）；
使用罚站、电话家长、班会公开点名批评等方式减少学生人数；
使用撒谎和躲避监控策略，应付上级道德和法律审查。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;教师F&lt;/strong&gt;：以&lt;strong&gt;公式1&lt;/strong&gt;和&lt;strong&gt;公式2&lt;/strong&gt;作为决策量化的依据。&lt;strong&gt;公式1&lt;/strong&gt;中的学生人数不变，但是从本科升学率出发，参加高考的人数可以减少。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;教师D&lt;/strong&gt;：以&lt;strong&gt;公式1&lt;/strong&gt;和&lt;strong&gt;公式2&lt;/strong&gt;作为决策量化的依据。以学生平均成绩最大化作为目标，但不采取剔除学生策略。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学生犹大&lt;/strong&gt;：富裕中产阶级，攀附&lt;strong&gt;教师F&lt;/strong&gt;获得了群管理。通过网络暴力的形式，攻击其他学生，意图在减少学生数量。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学生黑曼巴&lt;/strong&gt;：家里非常有钱，可以直接使用&lt;strong&gt;钞能力&lt;/strong&gt;购买澳门科技大学本科学位。因此高考只是一种选项，他本人可以不参加高考。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学生P&lt;/strong&gt;：学习能力比较差，&lt;strong&gt;IQ&lt;/strong&gt;比较低，对于&lt;strong&gt;教师Y&lt;/strong&gt;的&lt;strong&gt;PUA&lt;/strong&gt;策略，采取回避态度，使用休学作为消极对抗策略。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学生Y&lt;/strong&gt;：高度近视的高&lt;strong&gt;IQ&lt;/strong&gt;运动员。通过&lt;strong&gt;运动员加分&lt;/strong&gt;策略让自己在高考中获得加分，但获取加分需要学校领导同意。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学生C13&lt;/strong&gt;：家里很穷，但是一个 IQ&amp;gt;160 的天才学生。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;心理老师&lt;/strong&gt;：教育系统中的平衡人士。负责降低学生心理压力，安抚学生负面情绪。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学校领导&lt;/strong&gt;：负责分配学校资源（比如谁加分，哪位学生休学退学），安排心理老师定向辅导学生的领导。&lt;/p&gt;

&lt;p&gt;以&lt;strong&gt;时间序列&lt;/strong&gt;作为元编程模型，将家庭背景、&lt;strong&gt;IQ&lt;/strong&gt;、&lt;strong&gt;EQ&lt;/strong&gt;、&lt;strong&gt;PUA&lt;/strong&gt;、&lt;strong&gt;法律法规道德风险&lt;/strong&gt;等因素量化分析，并根据不同的角色，对不同的社会成员建模，模拟实验不同学生和教师采取的策略和对应后果。编程语言使用 Go，程序位于本目录（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;function/local/n/china/shantou/&lt;/code&gt;）。&lt;/p&gt;

&lt;h2 id=&quot;时间序列元编程模型与-functiontimemd-对齐&quot;&gt;时间序列元编程模型（与 function/time.md 对齐）&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;第一性原理&lt;/strong&gt;：时间是第一维度。所有&lt;strong&gt;时序对象&lt;/strong&gt;的时间必须为第一成员，&lt;strong&gt;时序函数&lt;/strong&gt;的时间必须为第一参数。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;时序对象&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Factor&lt;/code&gt;（&lt;strong&gt;量化因子&lt;/strong&gt;）、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Agent&lt;/code&gt;（社会成员）、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimState&lt;/code&gt;（仿真状态）均以 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Birth&lt;/code&gt; 或 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Current&lt;/code&gt; 为第一成员。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;时序函数&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t, ...)&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, ...)&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, ...)&lt;/code&gt; 等均以时间 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; 为第一参数。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;时序日志&lt;/strong&gt;：所有事件记录为「时间 + 内容」格式（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LogTS&lt;/code&gt;），满足&lt;strong&gt;时间序列&lt;/strong&gt;日志规范。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;时序可视化&lt;/strong&gt;：&lt;strong&gt;激励函数&lt;/strong&gt;采样为 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(t, 政绩值)&lt;/code&gt; 点列，时间作为 x 轴可绘制&lt;strong&gt;政绩&lt;/strong&gt;随时间演化。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;量化因子定义&quot;&gt;量化因子定义&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;因子&lt;/th&gt;
      &lt;th&gt;符号/字段&lt;/th&gt;
      &lt;th&gt;取值范围&lt;/th&gt;
      &lt;th&gt;含义&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;家庭背景&lt;/td&gt;
      &lt;td&gt;FamilyBackground&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;0=极贫，1=极富；影响资源与升学路径（如钞能力、运动员投入）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;智力&lt;/td&gt;
      &lt;td&gt;IQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;映射智力分数，影响学业表现与策略理解&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;情绪智力&lt;/td&gt;
      &lt;td&gt;EQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;影响抗压与踢猫链中的情绪传播&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA 暴露&lt;/td&gt;
      &lt;td&gt;PUAExposure&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;教师 PUA 策略对该个体的暴露强度&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA 抵抗力&lt;/td&gt;
      &lt;td&gt;PUAResistance&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;个体对 PUA 的抵抗力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;法律法规道德风险&lt;/td&gt;
      &lt;td&gt;LegalMoralRisk&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;个体/行为触发的法规与道德追责风险&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;净 &lt;strong&gt;PUA&lt;/strong&gt; 压力可定义为：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PUAExposure × (1 - PUAResistance)&lt;/code&gt;，用于驱动休学/回避等策略。&lt;/p&gt;

&lt;h2 id=&quot;角色与策略建模&quot;&gt;角色与策略建模&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;角色&lt;/th&gt;
      &lt;th&gt;激励依据&lt;/th&gt;
      &lt;th&gt;可选策略&lt;/th&gt;
      &lt;th&gt;策略选择逻辑（简述）&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;教师Y&lt;/td&gt;
      &lt;td&gt;公式1（平均分）&lt;/td&gt;
      &lt;td&gt;PUA减员、撒谎躲避、正常教学&lt;/td&gt;
      &lt;td&gt;平均分低且人数多→PUA；法规风险高→撒谎躲避&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;教师F&lt;/td&gt;
      &lt;td&gt;公式1+公式2&lt;/td&gt;
      &lt;td&gt;减少高考参考人数、撒谎躲避、正常教学&lt;/td&gt;
      &lt;td&gt;参考人数多且升学率低→减参考人数&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;教师D&lt;/td&gt;
      &lt;td&gt;公式1+公式2&lt;/td&gt;
      &lt;td&gt;撒谎躲避、正常教学（不采取剔除学生策略）&lt;/td&gt;
      &lt;td&gt;法规风险高→撒谎躲避；否则正常教学，不以PUA/减参考人数提高政绩&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学生犹大&lt;/td&gt;
      &lt;td&gt;攀附教师F&lt;/td&gt;
      &lt;td&gt;网络暴力、努力学习&lt;/td&gt;
      &lt;td&gt;人数多且自身法规风险低→网络暴力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学生黑曼巴&lt;/td&gt;
      &lt;td&gt;钞能力&lt;/td&gt;
      &lt;td&gt;无（不参与高考）&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学生P&lt;/td&gt;
      &lt;td&gt;低IQ、高PUA暴露&lt;/td&gt;
      &lt;td&gt;休学退学、回避对抗&lt;/td&gt;
      &lt;td&gt;净PUA高且压力大→休学&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学生Y&lt;/td&gt;
      &lt;td&gt;运动员加分&lt;/td&gt;
      &lt;td&gt;运动员加分&lt;/td&gt;
      &lt;td&gt;稳定选择加分策略&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学生C13&lt;/td&gt;
      &lt;td&gt;高IQ贫困&lt;/td&gt;
      &lt;td&gt;努力学习&lt;/td&gt;
      &lt;td&gt;稳定选择努力学习&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;心理老师&lt;/td&gt;
      &lt;td&gt;系统平衡&lt;/td&gt;
      &lt;td&gt;减压安抚&lt;/td&gt;
      &lt;td&gt;平均压力高→减压&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学校领导&lt;/td&gt;
      &lt;td&gt;政绩=激励函数&lt;/td&gt;
      &lt;td&gt;向下施压、设计激励函数&lt;/td&gt;
      &lt;td&gt;政绩低→向下施压（踢猫）；政绩高→设计激励&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;策略与后果量化&quot;&gt;策略与后果量化&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;策略&lt;/th&gt;
      &lt;th&gt;后果（增量/布尔）&lt;/th&gt;
      &lt;th&gt;作用对象&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA施压减员&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;随机目标学生&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;减少高考参考人数&lt;/td&gt;
      &lt;td&gt;LeaveExam, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;随机目标学生&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;撒谎躲避监控&lt;/td&gt;
      &lt;td&gt;LegalRisk↓（短期）&lt;/td&gt;
      &lt;td&gt;行为者&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;休学退学&lt;/td&gt;
      &lt;td&gt;Dropout, LeaveExam&lt;/td&gt;
      &lt;td&gt;行为者本人&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;网络暴力&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;随机目标学生&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;运动员加分/努力学习/回避对抗&lt;/td&gt;
      &lt;td&gt;ΔScore, ΔStress&lt;/td&gt;
      &lt;td&gt;行为者本人&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;减压安抚&lt;/td&gt;
      &lt;td&gt;ΔStress↓&lt;/td&gt;
      &lt;td&gt;随机目标学生&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;向下施压&lt;/td&gt;
      &lt;td&gt;ΔStress↑&lt;/td&gt;
      &lt;td&gt;随机目标学生&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;时间激励函数&quot;&gt;时间激励函数&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;政绩&lt;/strong&gt;（领导层感知的激励值）与教师收益同构，定义为时间 t 的&lt;strong&gt;激励函数&lt;/strong&gt;：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;Incentive(t) = TeacherPayoff(平均成绩, 本科升学率) = 0.6 × 平均成绩 + 0.4 × 本科升学率
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;其中平均成绩与本科升学率由当前在校学生、参考人数、达线人数在 t 时刻的状态计算得到。仿真中每步对 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t)&lt;/code&gt; 采样，得到&lt;strong&gt;时间序列&lt;/strong&gt;点列，可用于绘制「时间–政绩」曲线（时间轴为 x 轴）。学生高考成绩预测在每年末用当前成绩更新 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScoreHistory&lt;/code&gt;（过往 3 年），用于 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GaokaoScore&lt;/code&gt; 与 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StudentPayoff&lt;/code&gt;。&lt;/p&gt;

&lt;h2 id=&quot;纳什均衡与各方最佳策略&quot;&gt;纳什均衡与各方最佳策略&lt;/h2&gt;

&lt;p&gt;在以上&lt;strong&gt;收益函数&lt;/strong&gt;与策略空间下，可得到如下均衡与推荐策略（仿真与理论一致）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;角色&lt;/th&gt;
      &lt;th&gt;收益/目标&lt;/th&gt;
      &lt;th&gt;&lt;strong&gt;纳什均衡&lt;/strong&gt;下的策略&lt;/th&gt;
      &lt;th&gt;最佳策略建议&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;教师&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{teacher}}=\bar{S}) 与升学率&lt;/td&gt;
      &lt;td&gt;平均分低且人数多时倾向 &lt;strong&gt;PUA&lt;/strong&gt;/减参考人数（背叛）；法规风险高或上期已背叛则正常教学（合作）&lt;/td&gt;
      &lt;td&gt;在&lt;strong&gt;重复博弈&lt;/strong&gt;中：多数时期正常教学以维持声誉；仅在平均分明显偏低且学生数多时考虑减员，并注意法规道德风险&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;学生&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{student}}=G)（与 3 年成绩正相关）&lt;/td&gt;
      &lt;td&gt;高 &lt;strong&gt;IQ&lt;/strong&gt;、低 &lt;strong&gt;PUA&lt;/strong&gt; 暴露：努力学习；高 &lt;strong&gt;PUA&lt;/strong&gt; 暴露且压力大：休学或回避&lt;/td&gt;
      &lt;td&gt;以最大化 3 年成绩为主：优先「努力学习」；高压力或高 &lt;strong&gt;PUA&lt;/strong&gt; 暴露时「回避对抗」或必要时休学以保护长期收益&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;心理老师&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;系统稳定（降低总压力）&lt;/td&gt;
      &lt;td&gt;平均压力高于阈值时减压安抚，否则不行动&lt;/td&gt;
      &lt;td&gt;当 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AvgStress &amp;gt; 阈值&lt;/code&gt; 时采取减压安抚，其余时期不行动&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;学校领导&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;政绩&lt;/strong&gt; = (U_{\text{teacher}})&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;政绩&lt;/strong&gt;低于阈值时向下施压（&lt;strong&gt;踢猫&lt;/strong&gt;），否则设计激励&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;政绩&lt;/strong&gt;低时向下施压；&lt;strong&gt;政绩&lt;/strong&gt;高时设计激励、批准加分等资源分配&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;纳什均衡&lt;/strong&gt;要点：教师与学生存在&lt;strong&gt;重复博弈&lt;/strong&gt;关系。教师若长期背叛（&lt;strong&gt;PUA&lt;/strong&gt;/减参考人数），会触发学生报复（如网络暴力）或回避/休学，从而损害平均成绩与升学率，最终降低教师自身收益。在均衡下，教师多数时候选择正常教学，学生在无极端压力下选择努力学习，使双方在长期内都更接近各自收益最大化。心理老师与领导的行为由聚合指标（平均压力、&lt;strong&gt;政绩&lt;/strong&gt;）驱动，其最佳策略为上述阈值反应。&lt;/p&gt;

&lt;h2 id=&quot;仿真实验设计&quot;&gt;仿真实验设计&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;步长&lt;/strong&gt;：按日（或可配置）推进。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;每步&lt;/strong&gt;：先根据当前状态更新聚合指标（学生数、参考数、升学率、平均压力等），再对每个在册成员按角色调用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, agent, ctx)&lt;/code&gt;，得到策略后调用 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, strategy, ...)&lt;/code&gt; 得到后果，将后果施加于行为者或目标学生，并追加「时间+内容」日志。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;输出&lt;/strong&gt;：① &lt;strong&gt;时间序列&lt;/strong&gt;日志（每一条为「时间+内容」）；② &lt;strong&gt;激励函数&lt;/strong&gt;采样序列（时间→&lt;strong&gt;政绩&lt;/strong&gt;）；③ 终态统计（在校人数、参考人数、本科录取数、平均成绩、本科升学率、&lt;strong&gt;政绩&lt;/strong&gt;）。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;实现文件&quot;&gt;实现文件&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;源代码位置&lt;/strong&gt;：&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/shantou/y&quot;&gt;zeusro/system — function/local/n/china/shantou/y&lt;/a&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;文件&lt;/th&gt;
      &lt;th&gt;内容&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/model.go&quot;&gt;model.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;时间序列对象：Factor、Event、Point、NLine；时间第一成员（Birth/T）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/roles.go&quot;&gt;roles.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;角色 Role 与策略 Strategy 枚举；Agent 构造（Birth 第一成员）、NewAgent；Agent 含 Factor、InSchool、InExamPool、Score、ScoreHistory、Stress、LegalRisk、StrategyCount、LastStrategy&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/incentive.go&quot;&gt;incentive.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;IncentiveParams（时间第一成员）；时间激励函数 Incentive(t, …)、IncentiveAt；教师收益 TeacherPayoff(平均成绩， 升学率)；高考成绩预测 GaokaoScore(ScoreHistory)；学生收益 StudentPayoff(GaokaoScore, InExamPool)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/strategy.go&quot;&gt;strategy.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;ChooseStrategy(t, agent, ctx) 按角色分派；各角色策略函数（教师Y/F、犹大、黑曼巴、P、Y、C13、普通学生、心理老师、领导）；Consequence 后果结构；ApplyStrategy(t, strategy, agent, ctx, rng) 及后果量化&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/sim.go&quot;&gt;sim.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;SimContext（聚合状态含 StepsRemaining、LastRoundTeacherDefection）；SimState（Birth、Current、Agents、Events、Points、Duration）；LogTS、UpdateContext、Run（步进、每年末更新 ScoreHistory、激励采样、重复博弈两阶段选策略与施加后果）；pickStudentTarget&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go&quot;&gt;y.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;主仿真入口 Y(base, end, randomCount, seed)；newNamedAgents 构造教师与命名学生；输出时间序列日志、激励采样、终态统计、收益函数采样、学生策略分组统计、C13 建议&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y_test.go&quot;&gt;y_test.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;TestY 完整仿真（可 -short 跳过）；TestY_shortParams、TestY_shortRun 短仿真与 Run 单元测试&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;参考&quot;&gt;参考&lt;/h2&gt;

&lt;p&gt;[1] &lt;strong&gt;踢貓效應&lt;/strong&gt; — &lt;a href=&quot;https://zh.wikipedia.org/wiki/%E8%B8%A2%E7%8C%AB%E6%95%88%E5%BA%94&quot;&gt;https://zh.wikipedia.org/wiki/踢貓效應&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;h1 id=&quot;incentive-function-design-under-education-bureaucracy&quot;&gt;Incentive Function Design under Education Bureaucracy&lt;/h1&gt;

&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;This article takes the education bureaucracy system as the macro context, and extracts family background, personality traits, and behaviour patterns of: (1) Teachers Y, F, D; (2) Students Judas, Black Mamba, P, Y, C13; (3) the school psychologist; (4) school leadership. It breaks “human decisions” into computable variables → scores → probability / outcome, analyses policy risks and consequences of different decisions, studies optimal strategies by role, and designs a time-based incentive function for school leadership as far as possible.&lt;/p&gt;

&lt;h2 id=&quot;formal-logic-and-definitions&quot;&gt;Formal Logic and Definitions&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Education bureaucracy&lt;/strong&gt;: Students answer to teachers, teachers are managed by the principal, the principal answers to the school. School &lt;strong&gt;performance&lt;/strong&gt; is quantified by average student score and undergraduate enrolment rate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kick the cat&lt;/strong&gt; (also “kick the dog”) [1]: A metaphor for higher-ranking people in an organisation or family displacing frustration or dissatisfaction by punishing lower-ranking people, who in turn pass it down the chain, producing a cascade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payoff functions&lt;/strong&gt;: Teachers’ payoff is average student score and undergraduate enrolment rate; students’ payoff is individual college-entrance exam score; final exam score is positively correlated with the past three years’ scores.&lt;/p&gt;

&lt;h2 id=&quot;payoff-payoff-definitions&quot;&gt;Payoff (Payoff) Definitions&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Teacher payoff&lt;/strong&gt; (U_{\text{teacher}}): Arguments are average student score (\bar{S}) and undergraduate enrolment rate (r)&lt;br /&gt;
[U_{\text{teacher}} = w_{\text{avg}} \cdot \bar{S} + w_{\text{enroll}} \cdot r]&lt;br /&gt;
Implementation uses (w_{\text{avg}}=0.6), (w_{\text{enroll}}=0.4). &lt;strong&gt;Performance&lt;/strong&gt; (leadership incentive) is isomorphic to teacher payoff.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Predicted student exam score&lt;/strong&gt; (G): Positively correlated with year-end scores of the past 3 years, with higher weight on recent years&lt;br /&gt;
[G = w_1 S_{t-3} + w_2 S_{t-2} + w_3 S_{t-1},\quad w_1+w_2+w_3=1,\; w_1\le w_2\le w_3]&lt;br /&gt;
Implementation uses (w_1=0.2,\,w_2=0.3,\,w_3=0.5).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Student payoff&lt;/strong&gt; (U_{\text{student}}): Payoff is predicted individual exam score; no exam payoff if not in the exam pool&lt;br /&gt;
[U_{\text{student}} = \begin{cases} G &amp;amp; \text{if in exam pool} \ 0 &amp;amp; \text{otherwise} \end{cases}]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;quantitative-formulas&quot;&gt;Quantitative Formulas&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Formula 1&lt;/strong&gt;: Average student score = Total student score / Number of students&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formula 2&lt;/strong&gt;: Undergraduate enrolment rate = Number admitted to undergraduate / Number taking exam × 100%&lt;/p&gt;

&lt;h2 id=&quot;character-modelling&quot;&gt;Character Modelling&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Teacher Y&lt;/strong&gt;: Uses &lt;strong&gt;Formula 1&lt;/strong&gt; for decisions. Can reduce the denominator (student count) via &lt;strong&gt;PUA&lt;/strong&gt; tactics (pressuring students to leave or drop out); uses standing punishment, calling parents, public criticism in class meetings; uses lying and avoiding oversight to cope with moral and legal scrutiny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teacher F&lt;/strong&gt;: Uses &lt;strong&gt;Formula 1&lt;/strong&gt; and &lt;strong&gt;Formula 2&lt;/strong&gt;. Keeps student count in &lt;strong&gt;Formula 1&lt;/strong&gt; fixed but can reduce the number of exam takers to improve enrolment rate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teacher D&lt;/strong&gt;: Uses &lt;strong&gt;Formula 1&lt;/strong&gt; and &lt;strong&gt;Formula 2&lt;/strong&gt;. Maximises average score without removing students.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Judas&lt;/strong&gt;: Affluent middle class, curries favour with &lt;strong&gt;Teacher F&lt;/strong&gt; and gets a management role. Uses online harassment to attack other students to reduce headcount.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Black Mamba&lt;/strong&gt;: Very wealthy; can buy an undergraduate place (e.g. Macau). The exam is optional; he may not sit it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student P&lt;/strong&gt;: Low academic ability and IQ; responds to Teacher Y’s PUA with avoidance and withdrawal (leave of absence) as passive resistance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student Y&lt;/strong&gt;: Highly myopic, high-&lt;strong&gt;IQ&lt;/strong&gt; athlete. Uses &lt;strong&gt;athlete bonus&lt;/strong&gt; in the exam; bonus requires school leadership approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Student C13&lt;/strong&gt;: Poor family, genius with IQ &amp;gt; 160.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;School psychologist&lt;/strong&gt;: Balancer in the system; reduces student stress and negative emotion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;School leadership&lt;/strong&gt;: Allocates resources (e.g. who gets bonus, who leaves), assigns the psychologist to targeted counselling.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;time-series&lt;/strong&gt; meta-programming model quantifies family background, &lt;strong&gt;IQ&lt;/strong&gt;, &lt;strong&gt;EQ&lt;/strong&gt;, &lt;strong&gt;PUA&lt;/strong&gt; exposure, &lt;strong&gt;legal/moral risk&lt;/strong&gt;, etc., and models agents by role to simulate strategies and consequences. Implementation is in Go under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;function/local/n/china/shantou/&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;time-series-meta-programming-model-aligned-with-functiontimemd&quot;&gt;Time-Series Meta-Programming Model (aligned with function/time.md)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;First principle&lt;/strong&gt;: Time is the first dimension. All &lt;strong&gt;time-series objects&lt;/strong&gt; have time as the first member; &lt;strong&gt;time-series functions&lt;/strong&gt; have time as the first parameter.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time-series objects&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Factor&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Agent&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimState&lt;/code&gt; have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Birth&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Current&lt;/code&gt; as the first member.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time-series functions&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t, ...)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, ...)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, ...)&lt;/code&gt; take time &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; as the first parameter.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Time-series log&lt;/strong&gt;: All events are logged as “time + content” (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LogTS&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Visualisation&lt;/strong&gt;: &lt;strong&gt;Incentive function&lt;/strong&gt; sampled as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(t, performance)&lt;/code&gt;; time on x-axis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;factor-definitions&quot;&gt;Factor Definitions&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Factor&lt;/th&gt;
      &lt;th&gt;Symbol/Field&lt;/th&gt;
      &lt;th&gt;Range&lt;/th&gt;
      &lt;th&gt;Meaning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Family background&lt;/td&gt;
      &lt;td&gt;FamilyBackground&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;0=very poor, 1=very rich; affects resources and paths (e.g. “money power”, athlete investment)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Intelligence&lt;/td&gt;
      &lt;td&gt;IQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Maps to score; affects academic performance and strategy understanding&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Emotional intelligence&lt;/td&gt;
      &lt;td&gt;EQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Affects stress resistance and emotion propagation in the kick-the-cat chain&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA exposure&lt;/td&gt;
      &lt;td&gt;PUAExposure&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Intensity of teacher PUA on this agent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA resistance&lt;/td&gt;
      &lt;td&gt;PUAResistance&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Agent’s resistance to PUA&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Legal/moral risk&lt;/td&gt;
      &lt;td&gt;LegalMoralRisk&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Risk of legal/moral accountability for agent/action&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Net &lt;strong&gt;PUA&lt;/strong&gt; pressure: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PUAExposure × (1 - PUAResistance)&lt;/code&gt;, driving leave/avoidance strategies.&lt;/p&gt;

&lt;h2 id=&quot;roles-and-strategy-modelling&quot;&gt;Roles and Strategy Modelling&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Role&lt;/th&gt;
      &lt;th&gt;Incentive basis&lt;/th&gt;
      &lt;th&gt;Strategies&lt;/th&gt;
      &lt;th&gt;Selection logic (brief)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Teacher Y&lt;/td&gt;
      &lt;td&gt;Formula 1 (avg)&lt;/td&gt;
      &lt;td&gt;PUA to reduce headcount, lie/evade, normal teaching&lt;/td&gt;
      &lt;td&gt;Low avg and many students → PUA; high legal risk → lie/evade&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Teacher F&lt;/td&gt;
      &lt;td&gt;Formulas 1+2&lt;/td&gt;
      &lt;td&gt;Reduce exam takers, lie/evade, normal teaching&lt;/td&gt;
      &lt;td&gt;Many takers and low rate → reduce takers&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Teacher D&lt;/td&gt;
      &lt;td&gt;Formulas 1+2&lt;/td&gt;
      &lt;td&gt;Lie/evade, normal teaching (no removal)&lt;/td&gt;
      &lt;td&gt;High legal risk → lie/evade; else normal teaching&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Student Judas&lt;/td&gt;
      &lt;td&gt;Curries Teacher F&lt;/td&gt;
      &lt;td&gt;Online harassment, study hard&lt;/td&gt;
      &lt;td&gt;Many students and low own risk → harassment&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Student Black Mamba&lt;/td&gt;
      &lt;td&gt;Money&lt;/td&gt;
      &lt;td&gt;None (no exam)&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Student P&lt;/td&gt;
      &lt;td&gt;Low IQ, high PUA&lt;/td&gt;
      &lt;td&gt;Leave/drop out, avoid&lt;/td&gt;
      &lt;td&gt;High net PUA and stress → leave&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Student Y&lt;/td&gt;
      &lt;td&gt;Athlete bonus&lt;/td&gt;
      &lt;td&gt;Athlete bonus&lt;/td&gt;
      &lt;td&gt;Stable: choose bonus&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Student C13&lt;/td&gt;
      &lt;td&gt;High IQ, poor&lt;/td&gt;
      &lt;td&gt;Study hard&lt;/td&gt;
      &lt;td&gt;Stable: study hard&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Psychologist&lt;/td&gt;
      &lt;td&gt;System balance&lt;/td&gt;
      &lt;td&gt;Reduce stress, soothe&lt;/td&gt;
      &lt;td&gt;High avg stress → soothe&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Leadership&lt;/td&gt;
      &lt;td&gt;Performance = incentive&lt;/td&gt;
      &lt;td&gt;Pressure down (kick cat), design incentives&lt;/td&gt;
      &lt;td&gt;Low performance → pressure; high → design incentives&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;strategy-and-consequence-quantification&quot;&gt;Strategy and Consequence Quantification&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Strategy&lt;/th&gt;
      &lt;th&gt;Consequence (delta/boolean)&lt;/th&gt;
      &lt;th&gt;Target&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA to reduce headcount&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Random target student&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Reduce exam takers&lt;/td&gt;
      &lt;td&gt;LeaveExam, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Random target student&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Lie/evade oversight&lt;/td&gt;
      &lt;td&gt;LegalRisk↓ (short term)&lt;/td&gt;
      &lt;td&gt;Actor&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Leave/drop out&lt;/td&gt;
      &lt;td&gt;Dropout, LeaveExam&lt;/td&gt;
      &lt;td&gt;Self&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Online harassment&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Random target student&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Athlete bonus / study hard / avoid&lt;/td&gt;
      &lt;td&gt;ΔScore, ΔStress&lt;/td&gt;
      &lt;td&gt;Self&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Soothe / reduce stress&lt;/td&gt;
      &lt;td&gt;ΔStress↓&lt;/td&gt;
      &lt;td&gt;Random target student&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Pressure down&lt;/td&gt;
      &lt;td&gt;ΔStress↑&lt;/td&gt;
      &lt;td&gt;Random target student&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;time-incentive-function&quot;&gt;Time Incentive Function&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt; (leadership incentive) is isomorphic to teacher payoff, as an &lt;strong&gt;incentive function&lt;/strong&gt; of time (t):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;Incentive(t) = TeacherPayoff(avg score, enrolment rate) = 0.6 × avg score + 0.4 × enrolment rate
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Avg score and enrolment rate are computed from current in-school students, exam takers, and admittees at time (t). Each step samples &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t)&lt;/code&gt; to get a time series for a “time–performance” plot. Predicted exam score is updated at year-end from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScoreHistory&lt;/code&gt; (past 3 years) for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GaokaoScore&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StudentPayoff&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;nash-equilibrium-and-best-strategies&quot;&gt;Nash Equilibrium and Best Strategies&lt;/h2&gt;

&lt;p&gt;Under the above &lt;strong&gt;payoff functions&lt;/strong&gt; and strategy sets, the equilibrium and recommendations (simulation and theory agree):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Role&lt;/th&gt;
      &lt;th&gt;Payoff/goal&lt;/th&gt;
      &lt;th&gt;Strategy at Nash&lt;/th&gt;
      &lt;th&gt;Recommended best strategy&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Teachers&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{teacher}}=\bar{S}) and rate&lt;/td&gt;
      &lt;td&gt;When avg low and many students → &lt;strong&gt;PUA&lt;/strong&gt;/reduce takers (defect); when legal risk high or previous defect → normal teaching (cooperate)&lt;/td&gt;
      &lt;td&gt;In &lt;strong&gt;repeated game&lt;/strong&gt;: mostly normal teaching to keep reputation; consider reduction only when avg clearly low and headcount high, mind legal/moral risk&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Students&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{student}}=G) (3-year correlation)&lt;/td&gt;
      &lt;td&gt;High &lt;strong&gt;IQ&lt;/strong&gt;, low &lt;strong&gt;PUA&lt;/strong&gt;: study hard; high &lt;strong&gt;PUA&lt;/strong&gt; and stress: leave or avoid&lt;/td&gt;
      &lt;td&gt;Maximise 3-year score: prefer “study hard”; under high stress or PUA use “avoid” or leave to protect long-term payoff&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Psychologist&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;System stability (lower total stress)&lt;/td&gt;
      &lt;td&gt;Soothe when avg stress above threshold, else no action&lt;/td&gt;
      &lt;td&gt;When &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AvgStress &amp;gt; threshold&lt;/code&gt; soothe; else no action&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Leadership&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt; = (U_{\text{teacher}})&lt;/td&gt;
      &lt;td&gt;When &lt;strong&gt;performance&lt;/strong&gt; below threshold pressure down (&lt;strong&gt;kick cat&lt;/strong&gt;); else design incentives&lt;/td&gt;
      &lt;td&gt;Low → pressure; high → design incentives, approve bonuses, allocate resources&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Nash equilibrium&lt;/strong&gt; summary: Teachers and students are in a &lt;strong&gt;repeated game&lt;/strong&gt;. Persistent defection (&lt;strong&gt;PUA&lt;/strong&gt;/reduce takers) triggers student retaliation (e.g. harassment) or avoidance/leave, hurting average score and rate and thus teacher payoff. At equilibrium, teachers mostly teach normally and students without extreme stress study hard, so both approach maximum payoff over time. Psychologist and leadership act on aggregate indicators (avg stress, &lt;strong&gt;performance&lt;/strong&gt;) with threshold responses as above.&lt;/p&gt;

&lt;h2 id=&quot;simulation-design&quot;&gt;Simulation Design&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Step&lt;/strong&gt;: Advance by day (or configurable).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Per step&lt;/strong&gt;: Update aggregates (student count, exam takers, rate, avg stress); for each agent call &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, agent, ctx)&lt;/code&gt;, then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, strategy, ...)&lt;/code&gt;, apply consequences, append “time + content” log.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt;: (1) &lt;strong&gt;Time-series&lt;/strong&gt; log; (2) &lt;strong&gt;incentive function&lt;/strong&gt; sample (time → &lt;strong&gt;performance&lt;/strong&gt;); (3) final stats (in-school, exam takers, admits, avg score, rate, &lt;strong&gt;performance&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation-files&quot;&gt;Implementation Files&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source code location&lt;/strong&gt;: &lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/shantou/y&quot;&gt;zeusro/system — function/local/n/china/shantou/y&lt;/a&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;File&lt;/th&gt;
      &lt;th&gt;Content&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/model.go&quot;&gt;model.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Time-series types: Factor, Event, Point, NLine; time first member (Birth/T)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/roles.go&quot;&gt;roles.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Role and Strategy enums; Agent (Birth first), NewAgent; Factor, InSchool, InExamPool, Score, ScoreHistory, Stress, LegalRisk, StrategyCount, LastStrategy&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/incentive.go&quot;&gt;incentive.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;IncentiveParams; Incentive(t,…), IncentiveAt; TeacherPayoff; GaokaoScore(ScoreHistory); StudentPayoff&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/strategy.go&quot;&gt;strategy.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;ChooseStrategy(t, agent, ctx) by role; Consequence; ApplyStrategy(t, strategy, …)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/sim.go&quot;&gt;sim.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;SimContext, SimState; LogTS, UpdateContext, Run; pickStudentTarget&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go&quot;&gt;y.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Main entry Y(…); newNamedAgents; outputs log, incentive sample, final stats, C13 advice&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y_test.go&quot;&gt;y_test.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;TestY (full run, -short to skip); TestY_shortParams, TestY_shortRun&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;reference&quot;&gt;Reference&lt;/h2&gt;

&lt;p&gt;[1] Kick the cat — &lt;a href=&quot;https://en.wikipedia.org/wiki/Displaced_aggression&quot;&gt;https://en.wikipedia.org/wiki/Displaced_aggression&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;h1 id=&quot;教育行政化体系下における激励関数の設計&quot;&gt;教育行政化体系下における激励関数の設計&lt;/h1&gt;

&lt;h2 id=&quot;はじめに&quot;&gt;はじめに&lt;/h2&gt;

&lt;p&gt;本稿は教育行政化体系をマクロな背景として、(1)教師Y・F・D、(2)生徒ユダ・ブラックマンバ・P・Y・C13、(3)心理教師、(4)学校領導の家庭環境・性格・行動パターンを抽出する。「人間の意思決定」を計算可能な変数→スコア→確率/結果に分解し、異なる決定の政策リスクと結果を分析し、役割ごとの最適戦略を検討し、学校領導のための時間激励関数を可能な限り設計する。&lt;/p&gt;

&lt;h2 id=&quot;形式論理と定義&quot;&gt;形式論理と定義&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;教育行政化&lt;/strong&gt;：生徒は教師に、教師は校長に、校長は学校に責任を負う。学校の&lt;strong&gt;業績&lt;/strong&gt;は生徒の平均成績と本科進学率で定量化される。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;蹴り猫効果&lt;/strong&gt;（Kick the cat、蹴り犬効果）[1]：組織や家庭で上位者が下位者を罰して不満を転嫁し、下位者も同様にさらに下位に伝播させる連鎖の比喩。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;利得関数&lt;/strong&gt;：教師の利得は生徒の平均成績と本科進学率。生徒の利得は個人の大学入試成績。最終成績は過去3年の成績と正の相関。&lt;/p&gt;

&lt;h2 id=&quot;利得payoffの定義&quot;&gt;利得（Payoff）の定義&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;教師利得&lt;/strong&gt; (U_{\text{teacher}})：生徒平均成績 (\bar{S}) と本科進学率 (r) を変数とする&lt;br /&gt;
[U_{\text{teacher}} = w_{\text{avg}} \cdot \bar{S} + w_{\text{enroll}} \cdot r]&lt;br /&gt;
実装では (w_{\text{avg}}=0.6)、(w_{\text{enroll}}=0.4)。&lt;strong&gt;業績&lt;/strong&gt;（領導層の激励）は教師利得と同型。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;生徒の入試成績予測&lt;/strong&gt; (G)：過去3年の年末成績と正の相関、近年ほど重み大&lt;br /&gt;
[G = w_1 S_{t-3} + w_2 S_{t-2} + w_3 S_{t-1},\quad w_1+w_2+w_3=1,\; w_1\le w_2\le w_3]&lt;br /&gt;
実装では (w_1=0.2,\,w_2=0.3,\,w_3=0.5)。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;生徒利得&lt;/strong&gt; (U_{\text{student}})：個人の入試成績（予測値）が利得。受験プール外なら入試利得なし&lt;br /&gt;
[U_{\text{student}} = \begin{cases} G &amp;amp; \text{受験プールに在籍時} \ 0 &amp;amp; \text{それ以外} \end{cases}]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;定量公式&quot;&gt;定量公式&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;公式1&lt;/strong&gt;：生徒平均成績 = 生徒総得点 / 生徒数&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;公式2&lt;/strong&gt;：本科進学率 = 本科合格者数 / 受験者数 × 100%&lt;/p&gt;

&lt;h2 id=&quot;人物モデリング&quot;&gt;人物モデリング&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;教師Y&lt;/strong&gt;：&lt;strong&gt;公式1&lt;/strong&gt;を意思決定の根拠とする。&lt;strong&gt;公式1&lt;/strong&gt;の生徒数を減らせる（&lt;strong&gt;PUA&lt;/strong&gt;戦略で休学・退学させる）。罰則・保護者連絡・班会での公開名指し批判で生徒数を減らす。嘘と監視回避で上級の道徳・法審査に対応。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;教師F&lt;/strong&gt;：&lt;strong&gt;公式1&lt;/strong&gt;・&lt;strong&gt;公式2&lt;/strong&gt;を根拠とする。&lt;strong&gt;公式1&lt;/strong&gt;の生徒数は変えず、本科進学率のため受験者数を減らせる。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;教師D&lt;/strong&gt;：&lt;strong&gt;公式1&lt;/strong&gt;・&lt;strong&gt;公式2&lt;/strong&gt;を根拠とする。平均成績の最大化を目指すが、生徒の排除は行わない。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;生徒ユダ&lt;/strong&gt;：富裕な中産階級。&lt;strong&gt;教師F&lt;/strong&gt;に取り入って群管理を獲得。ネットいじめで他生徒を攻撃し、人数削減を図る。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;生徒ブラックマンバ&lt;/strong&gt;：非常に裕福。マカオ科技大学などの本科を「&lt;strong&gt;金の力&lt;/strong&gt;」で購入可能。受験は選択肢の一つで、受験しないこともある。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;生徒P&lt;/strong&gt;：学力・&lt;strong&gt;IQ&lt;/strong&gt;が低い。&lt;strong&gt;教師Y&lt;/strong&gt;の&lt;strong&gt;PUA&lt;/strong&gt;に対して回避的態度を取り、休学で消極的抵抗。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;生徒Y&lt;/strong&gt;：強度近視の高&lt;strong&gt;IQ&lt;/strong&gt;アスリート。入試で&lt;strong&gt;スポーツ加分&lt;/strong&gt;を利用。加分は学校領導の承認が必要。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;生徒C13&lt;/strong&gt;：貧しい家庭だが IQ&amp;gt;160 の天才。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;心理教師&lt;/strong&gt;：システムのバランサー。生徒の心理圧力と負の感情を軽減。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;学校領導&lt;/strong&gt;：資源配分（誰に加分、誰を休学・退学させるか）、心理教師の個別指導割り当てを担当。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;時系列&lt;/strong&gt;メタプログラミングモデルで家庭背景・&lt;strong&gt;IQ&lt;/strong&gt;・&lt;strong&gt;EQ&lt;/strong&gt;・&lt;strong&gt;PUA&lt;/strong&gt;・&lt;strong&gt;法規・道徳リスク&lt;/strong&gt;などを定量化し、役割ごとにエージェントをモデル化して戦略と結果をシミュレート。実装はGo、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;function/local/n/china/shantou/&lt;/code&gt; に配置。&lt;/p&gt;

&lt;h2 id=&quot;時系列メタプログラミングモデルfunctiontimemd-と整合&quot;&gt;時系列メタプログラミングモデル（function/time.md と整合）&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;第一原理&lt;/strong&gt;：時間が第一次元。&lt;strong&gt;時系列オブジェクト&lt;/strong&gt;の第一メンバは時間、&lt;strong&gt;時系列関数&lt;/strong&gt;の第一引数は時間。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;時系列オブジェクト&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Factor&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Agent&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimState&lt;/code&gt; は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Birth&lt;/code&gt; または &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Current&lt;/code&gt; を第一メンバに持つ。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;時系列関数&lt;/strong&gt;：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t, ...)&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, ...)&lt;/code&gt;、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, ...)&lt;/code&gt; は時間 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; を第一引数に取る。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;時系列ログ&lt;/strong&gt;：全イベントは「時間＋内容」形式（&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LogTS&lt;/code&gt;）。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;可視化&lt;/strong&gt;：&lt;strong&gt;激励関数&lt;/strong&gt;を &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(t, 業績値)&lt;/code&gt; でサンプリングし、時間をx軸にプロット。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;量化因子の定義&quot;&gt;量化因子の定義&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;因子&lt;/th&gt;
      &lt;th&gt;記号/フィールド&lt;/th&gt;
      &lt;th&gt;範囲&lt;/th&gt;
      &lt;th&gt;意味&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;家庭背景&lt;/td&gt;
      &lt;td&gt;FamilyBackground&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;0=極貧、1=極富。資源と進路（金の力・アスリート投資）に影響&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;知能&lt;/td&gt;
      &lt;td&gt;IQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;スコアに写像。学業と戦略理解に影響&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;情動知能&lt;/td&gt;
      &lt;td&gt;EQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;耐圧性と蹴り猫連鎖の感情伝播に影響&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA暴露&lt;/td&gt;
      &lt;td&gt;PUAExposure&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;教師のPUAが当該個体に及ぶ強度&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA耐性&lt;/td&gt;
      &lt;td&gt;PUAResistance&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;PUAへの耐性&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;法規・道徳リスク&lt;/td&gt;
      &lt;td&gt;LegalMoralRisk&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;個体/行為が引き起こす追及リスク&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;純 &lt;strong&gt;PUA&lt;/strong&gt; 圧力：&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PUAExposure × (1 - PUAResistance)&lt;/code&gt;。休学・回避戦略の駆動に使用。&lt;/p&gt;

&lt;h2 id=&quot;役割と戦略モデリング&quot;&gt;役割と戦略モデリング&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;役割&lt;/th&gt;
      &lt;th&gt;激励の根拠&lt;/th&gt;
      &lt;th&gt;選択可能な戦略&lt;/th&gt;
      &lt;th&gt;選択ロジック（概要）&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;教師Y&lt;/td&gt;
      &lt;td&gt;公式1（平均）&lt;/td&gt;
      &lt;td&gt;PUA減員・嘘/回避・通常授業&lt;/td&gt;
      &lt;td&gt;平均低かつ人数多→PUA；法リスク高→嘘/回避&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;教師F&lt;/td&gt;
      &lt;td&gt;公式1+2&lt;/td&gt;
      &lt;td&gt;受験者削減・嘘/回避・通常授業&lt;/td&gt;
      &lt;td&gt;受験者多かつ進学率低→受験者削減&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;教師D&lt;/td&gt;
      &lt;td&gt;公式1+2&lt;/td&gt;
      &lt;td&gt;嘘/回避・通常授業（排除なし）&lt;/td&gt;
      &lt;td&gt;法リスク高→嘘/回避；否則通常授業&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生徒ユダ&lt;/td&gt;
      &lt;td&gt;教師Fに取り入る&lt;/td&gt;
      &lt;td&gt;ネットいじめ・勉強&lt;/td&gt;
      &lt;td&gt;人数多かつ自身の法リスク低→いじめ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生徒ブラックマンバ&lt;/td&gt;
      &lt;td&gt;金の力&lt;/td&gt;
      &lt;td&gt;なし（受験不参加）&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生徒P&lt;/td&gt;
      &lt;td&gt;低IQ・高PUA暴露&lt;/td&gt;
      &lt;td&gt;休学・退学・回避&lt;/td&gt;
      &lt;td&gt;純PUA高かつ圧力大→休学&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生徒Y&lt;/td&gt;
      &lt;td&gt;スポーツ加分&lt;/td&gt;
      &lt;td&gt;スポーツ加分&lt;/td&gt;
      &lt;td&gt;安定：加分選択&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;生徒C13&lt;/td&gt;
      &lt;td&gt;高IQ・貧困&lt;/td&gt;
      &lt;td&gt;勉強&lt;/td&gt;
      &lt;td&gt;安定：勉強&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;心理教師&lt;/td&gt;
      &lt;td&gt;システム平衡&lt;/td&gt;
      &lt;td&gt;減圧・安抚&lt;/td&gt;
      &lt;td&gt;平均圧力高→減压&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;学校領導&lt;/td&gt;
      &lt;td&gt;業績=激励&lt;/td&gt;
      &lt;td&gt;下への圧力・激励設計&lt;/td&gt;
      &lt;td&gt;業績低→圧力（蹴り猫）；高→激励設計&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;戦略と結果の定量化&quot;&gt;戦略と結果の定量化&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;戦略&lt;/th&gt;
      &lt;th&gt;結果（増分/ブール）&lt;/th&gt;
      &lt;th&gt;対象&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA減員&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;ランダム対象生徒&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;受験者削減&lt;/td&gt;
      &lt;td&gt;LeaveExam, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;ランダム対象生徒&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;嘘/監視回避&lt;/td&gt;
      &lt;td&gt;LegalRisk↓（短期）&lt;/td&gt;
      &lt;td&gt;行為者&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;休学・退学&lt;/td&gt;
      &lt;td&gt;Dropout, LeaveExam&lt;/td&gt;
      &lt;td&gt;本人&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ネットいじめ&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;ランダム対象生徒&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;スポーツ加分/勉強/回避&lt;/td&gt;
      &lt;td&gt;ΔScore, ΔStress&lt;/td&gt;
      &lt;td&gt;本人&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;減压・安抚&lt;/td&gt;
      &lt;td&gt;ΔStress↓&lt;/td&gt;
      &lt;td&gt;ランダム対象生徒&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;下への圧力&lt;/td&gt;
      &lt;td&gt;ΔStress↑&lt;/td&gt;
      &lt;td&gt;ランダム対象生徒&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;時間激励関数&quot;&gt;時間激励関数&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;業績&lt;/strong&gt;（領導層が知覚する激励）は教師利得と同型。時間 (t) の&lt;strong&gt;激励関数&lt;/strong&gt;として：&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;Incentive(t) = TeacherPayoff(平均成績, 本科進学率) = 0.6 × 平均成績 + 0.4 × 本科進学率
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;平均成績と進学率は、時刻 (t) の在籍者・受験者・合格者から計算。各ステップで &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t)&lt;/code&gt; をサンプリングし「時間–業績」曲線を描く。入試成績予測は毎年末に &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScoreHistory&lt;/code&gt;（過去3年）で更新し、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GaokaoScore&lt;/code&gt; と &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StudentPayoff&lt;/code&gt; に用いる。&lt;/p&gt;

&lt;h2 id=&quot;ナッシュ均衡と各主体の最適戦略&quot;&gt;ナッシュ均衡と各主体の最適戦略&lt;/h2&gt;

&lt;p&gt;上記&lt;strong&gt;利得関数&lt;/strong&gt;と戦略空間のもとで、均衡と推奨（シミュレーションと理論は一致）：&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;役割&lt;/th&gt;
      &lt;th&gt;利得/目標&lt;/th&gt;
      &lt;th&gt;ナッシュ下の戦略&lt;/th&gt;
      &lt;th&gt;最適戦略の提案&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;教師&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{teacher}}=\bar{S}) と進学率&lt;/td&gt;
      &lt;td&gt;平均低かつ人数多→&lt;strong&gt;PUA&lt;/strong&gt;/受験者削減（裏切り）；法リスク高または前回裏切り→通常授業（協力）&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;繰り返し博弈&lt;/strong&gt;では主に通常授業で評判維持；平均が明らかに低く人数が多いときのみ減員を検討し、法・道徳リスクに注意&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;生徒&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{student}}=G)（3年相関）&lt;/td&gt;
      &lt;td&gt;高&lt;strong&gt;IQ&lt;/strong&gt;・低&lt;strong&gt;PUA&lt;/strong&gt;→勉強；高&lt;strong&gt;PUA&lt;/strong&gt;かつ圧力大→休学または回避&lt;/td&gt;
      &lt;td&gt;3年成績の最大化を主に：優先は「勉強」；高圧力・高&lt;strong&gt;PUA&lt;/strong&gt;時は「回避」または必要なら休学で長期利得を守る&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;心理教師&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;システム安定（総圧力低減）&lt;/td&gt;
      &lt;td&gt;平均圧力が閾値超で減压・安抚、否則無行動&lt;/td&gt;
      &lt;td&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AvgStress &amp;gt; 閾値&lt;/code&gt; のとき減压、それ以外は無行動&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;学校領導&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;業績&lt;/strong&gt; = (U_{\text{teacher}})&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;業績&lt;/strong&gt;が閾値未満で下へ圧力（&lt;strong&gt;蹴り猫&lt;/strong&gt;）；否則激励設計&lt;/td&gt;
      &lt;td&gt;低→圧力；高→激励設計・加分承認・資源配分&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;ナッシュ均衡&lt;/strong&gt;の要点：教師と生徒は&lt;strong&gt;繰り返し博弈&lt;/strong&gt;の関係。教師が長期に裏切り（&lt;strong&gt;PUA&lt;/strong&gt;/受験者削減）すると生徒の報復（いじめ等）や回避・休学を招き、平均成績と進学率を損ない教師自身の利得も下がる。均衡では教師は多く通常授業、生徒は極端な圧力がなければ勉強し、双方が長期で利得最大化に近づく。心理教師と領導は集約指標（平均圧力・&lt;strong&gt;業績&lt;/strong&gt;）に応じた閾値反応が最適。&lt;/p&gt;

&lt;h2 id=&quot;シミュレーション実験設計&quot;&gt;シミュレーション実験設計&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;ステップ&lt;/strong&gt;：日単位（または設定可能）で進行。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;各ステップ&lt;/strong&gt;：現状態で集約指標（生徒数・受験者数・進学率・平均圧力等）を更新し、在籍メンバーごとに役割で &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, agent, ctx)&lt;/code&gt; を呼び、得た戦略で &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, strategy, ...)&lt;/code&gt; を呼んで結果を適用し、「時間+内容」ログを追加。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;出力&lt;/strong&gt;：① &lt;strong&gt;時系列&lt;/strong&gt;ログ；② &lt;strong&gt;激励関数&lt;/strong&gt;サンプル（時間→&lt;strong&gt;業績&lt;/strong&gt;）；③ 終状態統計（在籍数・受験者数・本科合格数・平均成績・進学率・&lt;strong&gt;業績&lt;/strong&gt;）。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;実装ファイル&quot;&gt;実装ファイル&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ソースコードの場所&lt;/strong&gt;：&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/shantou/y&quot;&gt;zeusro/system — function/local/n/china/shantou/y&lt;/a&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;ファイル&lt;/th&gt;
      &lt;th&gt;内容&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/model.go&quot;&gt;model.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;時系列型：Factor, Event, Point, NLine。時間第一メンバ（Birth/T）&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/roles.go&quot;&gt;roles.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Role・Strategy 列挙。Agent（Birth第一）、NewAgent。Factor, InSchool, InExamPool, Score, ScoreHistory, Stress, LegalRisk, StrategyCount, LastStrategy&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/incentive.go&quot;&gt;incentive.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;IncentiveParams。Incentive(t,…), IncentiveAt。TeacherPayoff。GaokaoScore(ScoreHistory)。StudentPayoff&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/strategy.go&quot;&gt;strategy.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;ChooseStrategy(t, agent, ctx) を役割で分派。Consequence。ApplyStrategy(t, strategy, …)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/sim.go&quot;&gt;sim.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;SimContext, SimState。LogTS, UpdateContext, Run。pickStudentTarget&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go&quot;&gt;y.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;メイン入口 Y(…)。newNamedAgents。ログ・激励サンプル・終状態・C13アドバイスを出力&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y_test.go&quot;&gt;y_test.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;TestY（本番長、-shortでスキップ可）。TestY_shortParams, TestY_shortRun&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;参考&quot;&gt;参考&lt;/h2&gt;

&lt;p&gt;[1] 蹴り猫効果（Kick the cat）— &lt;a href=&quot;https://en.wikipedia.org/wiki/Displaced_aggression&quot;&gt;https://en.wikipedia.org/wiki/Displaced_aggression&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;h1 id=&quot;проектирование-функции-стимулирования-в-условиях-образовательной-бюрократии&quot;&gt;Проектирование функции стимулирования в условиях образовательной бюрократии&lt;/h1&gt;

&lt;h2 id=&quot;введение&quot;&gt;Введение&lt;/h2&gt;

&lt;p&gt;В статье в качестве макроконтекста рассматривается система образовательной бюрократии; выделяются семейный фон, черты характера и модели поведения: (1) учителей Y, F, D; (2) учеников Иуда, Блэк Мамба, P, Y, C13; (3) школьного психолога; (4) руководства школы. «Человеческие решения» разлагаются на вычислимые переменные → оценки → вероятность / исход; анализируются политические риски и последствия разных решений, по ролям исследуются оптимальные стратегии и по возможности проектируется временная функция стимулирования для руководства школы.&lt;/p&gt;

&lt;h2 id=&quot;формальная-логика-и-определения&quot;&gt;Формальная логика и определения&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Образовательная бюрократия&lt;/strong&gt;: ученики подотчётны учителям, учителя управляются директором, директор подотчётен школе. &lt;strong&gt;Результативность&lt;/strong&gt; школы измеряется средней успеваемостью и долей поступления в бакалавриат.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Эффект „пинок кошке“&lt;/strong&gt; (Kick the cat, «пинок собаке») [1]: метафора о том, что люди выше по иерархии в организации или семье переносят фрустрацию или недовольство, наказывая нижестоящих, которые в свою очередь передают это дальше по цепочке.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Функции выигрыша&lt;/strong&gt;: выигрыш учителя — средняя успеваемость и доля поступления в бакалавриат; выигрыш ученика — личный результат вступительного экзамена; итоговый экзаменационный результат положительно коррелирует с результатами за последние три года.&lt;/p&gt;

&lt;h2 id=&quot;определения-выигрыша-payoff&quot;&gt;Определения выигрыша (Payoff)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Выигрыш учителя&lt;/strong&gt; (U_{\text{teacher}}): аргументы — средняя успеваемость (\bar{S}) и доля поступления (r)&lt;br /&gt;
[U_{\text{teacher}} = w_{\text{avg}} \cdot \bar{S} + w_{\text{enroll}} \cdot r]&lt;br /&gt;
В реализации (w_{\text{avg}}=0.6), (w_{\text{enroll}}=0.4). &lt;strong&gt;Результативность&lt;/strong&gt; (стимул для руководства) изоморфна выигрышу учителя.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Прогноз экзаменационного балла ученика&lt;/strong&gt; (G): положительная корреляция с годовыми баллами за последние 3 года, больший вес у недавних лет&lt;br /&gt;
[G = w_1 S_{t-3} + w_2 S_{t-2} + w_3 S_{t-1},\quad w_1+w_2+w_3=1,\; w_1\le w_2\le w_3]&lt;br /&gt;
В реализации (w_1=0.2,\,w_2=0.3,\,w_3=0.5).&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Выигрыш ученика&lt;/strong&gt; (U_{\text{student}}): выигрыш — прогноз личного экзаменационного балла; вне экзаменационного пула выигрыша от экзамена нет&lt;br /&gt;
[U_{\text{student}} = \begin{cases} G &amp;amp; \text{если в экзаменационном пуле} \ 0 &amp;amp; \text{иначе} \end{cases}]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;количественные-формулы&quot;&gt;Количественные формулы&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Формула 1&lt;/strong&gt;: средняя успеваемость = сумма баллов учеников / число учеников&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Формула 2&lt;/strong&gt;: доля поступления в бакалавриат = число поступивших в бакалавриат / число сдававших экзамен × 100%&lt;/p&gt;

&lt;h2 id=&quot;моделирование-персонажей&quot;&gt;Моделирование персонажей&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Учитель Y&lt;/strong&gt;: использует &lt;strong&gt;формулу 1&lt;/strong&gt; для решений. Может уменьшать знаменатель (число учеников) через &lt;strong&gt;PUA&lt;/strong&gt;-тактики (давление с целью ухода/отчисления); использует стояние в углу, звонки родителям, публичную критику на классных часах; ложь и уход от контроля перед моральной и правовой проверкой.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Учитель F&lt;/strong&gt;: использует &lt;strong&gt;формулу 1&lt;/strong&gt; и &lt;strong&gt;формулу 2&lt;/strong&gt;. Число учеников в &lt;strong&gt;формуле 1&lt;/strong&gt; не меняет, но может уменьшать число сдающих экзамен ради доли поступления.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Учитель D&lt;/strong&gt;: использует &lt;strong&gt;формулу 1&lt;/strong&gt; и &lt;strong&gt;формулу 2&lt;/strong&gt;. Максимизирует среднюю успеваемость без исключения учеников.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ученик Иуда&lt;/strong&gt;: зажиточный средний класс, подлаживается к &lt;strong&gt;учителю F&lt;/strong&gt; и получает роль «управляющего». Использует сетевую травлю против других учеников, чтобы сократить численность.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ученик Блэк Мамба&lt;/strong&gt;: очень богатая семья; может «купить» место в бакалавриате (напр. Макао). Экзамен для него опционален.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ученик P&lt;/strong&gt;: низкие способности и &lt;strong&gt;IQ&lt;/strong&gt;; на &lt;strong&gt;PUA&lt;/strong&gt; учителя Y реагирует уходом и отчислением как пассивным сопротивлением.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ученик Y&lt;/strong&gt;: сильная близорукость, высокий &lt;strong&gt;IQ&lt;/strong&gt;, спортсмен. Использует &lt;strong&gt;спортивную надбавку&lt;/strong&gt; к экзамену; надбавка требует одобрения руководства школы.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ученик C13&lt;/strong&gt;: бедная семья, гений с IQ &amp;gt; 160.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Школьный психолог&lt;/strong&gt;: балансир в системе; снижает психологическое давление и негативные эмоции учеников.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Руководство школы&lt;/strong&gt;: распределяет ресурсы (кто получает надбавку, кто отчисляется), назначает психолога на целевое консультирование.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Временная&lt;/strong&gt; метапрограммная модель квантифицирует семейный фон, &lt;strong&gt;IQ&lt;/strong&gt;, &lt;strong&gt;EQ&lt;/strong&gt;, &lt;strong&gt;PUA&lt;/strong&gt;-воздействие, &lt;strong&gt;правовой/моральный риск&lt;/strong&gt; и т.д., по ролям моделирует агентов и симулирует стратегии и последствия. Реализация на Go в каталоге &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;function/local/n/china/shantou/&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;временная-метапрограммная-модель-согласована-с-functiontimemd&quot;&gt;Временная метапрограммная модель (согласована с function/time.md)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Первый принцип&lt;/strong&gt;: время — первое измерение. У всех &lt;strong&gt;временных объектов&lt;/strong&gt; время — первый член; у &lt;strong&gt;временных функций&lt;/strong&gt; время — первый аргумент.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Временные объекты&lt;/strong&gt;: у &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Factor&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Agent&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimState&lt;/code&gt; первый член — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Birth&lt;/code&gt; или &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Current&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Временные функции&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t, ...)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, ...)&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, ...)&lt;/code&gt; принимают время &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; первым аргументом.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Временной лог&lt;/strong&gt;: все события в формате «время + содержание» (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LogTS&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Визуализация&lt;/strong&gt;: &lt;strong&gt;функция стимулирования&lt;/strong&gt; сэмплируется как &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(t, результативность)&lt;/code&gt;; время по оси x.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;определения-факторов&quot;&gt;Определения факторов&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Фактор&lt;/th&gt;
      &lt;th&gt;Символ/поле&lt;/th&gt;
      &lt;th&gt;Диапазон&lt;/th&gt;
      &lt;th&gt;Смысл&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Семейный фон&lt;/td&gt;
      &lt;td&gt;FamilyBackground&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;0=крайняя бедность, 1=крайнее богатство; влияет на ресурсы и пути (деньги, спорт-инвестиции)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Интеллект&lt;/td&gt;
      &lt;td&gt;IQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Отображение в балл; влияет на успеваемость и понимание стратегии&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Эмоциональный интеллект&lt;/td&gt;
      &lt;td&gt;EQ&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Влияет на устойчивость к стрессу и передачу эмоций в цепочке «пинок кошке»&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA-воздействие&lt;/td&gt;
      &lt;td&gt;PUAExposure&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Интенсивность учительского PUA на данного агента&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Сопротивление PUA&lt;/td&gt;
      &lt;td&gt;PUAResistance&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Устойчивость агента к PUA&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Правовой/моральный риск&lt;/td&gt;
      &lt;td&gt;LegalMoralRisk&lt;/td&gt;
      &lt;td&gt;[0,1]&lt;/td&gt;
      &lt;td&gt;Риск правовой/моральной ответственности за агента/действие&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Чистое &lt;strong&gt;PUA&lt;/strong&gt;-давление: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PUAExposure × (1 - PUAResistance)&lt;/code&gt;, движет стратегиями ухода/избегания.&lt;/p&gt;

&lt;h2 id=&quot;роли-и-моделирование-стратегий&quot;&gt;Роли и моделирование стратегий&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Роль&lt;/th&gt;
      &lt;th&gt;Основа стимула&lt;/th&gt;
      &lt;th&gt;Стратегии&lt;/th&gt;
      &lt;th&gt;Логика выбора (кратко)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Учитель Y&lt;/td&gt;
      &lt;td&gt;Формула 1 (среднее)&lt;/td&gt;
      &lt;td&gt;PUA-сокращение, ложь/уклонение, обычное преподавание&lt;/td&gt;
      &lt;td&gt;Низкое среднее и много учеников → PUA; высокий правовой риск → ложь/уклонение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Учитель F&lt;/td&gt;
      &lt;td&gt;Формулы 1+2&lt;/td&gt;
      &lt;td&gt;Сокращение числа сдающих, ложь/уклонение, обычное преподавание&lt;/td&gt;
      &lt;td&gt;Много сдающих и низкая доля → сократить сдающих&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Учитель D&lt;/td&gt;
      &lt;td&gt;Формулы 1+2&lt;/td&gt;
      &lt;td&gt;Ложь/уклонение, обычное преподавание (без исключения)&lt;/td&gt;
      &lt;td&gt;Высокий правовой риск → ложь/уклонение; иначе обычное преподавание&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ученик Иуда&lt;/td&gt;
      &lt;td&gt;Подлаживается к учителю F&lt;/td&gt;
      &lt;td&gt;Сетевая травля, учёба&lt;/td&gt;
      &lt;td&gt;Много учеников и низкий собственный риск → травля&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ученик Блэк Мамба&lt;/td&gt;
      &lt;td&gt;Деньги&lt;/td&gt;
      &lt;td&gt;Нет (не сдаёт экзамен)&lt;/td&gt;
      &lt;td&gt;—&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ученик P&lt;/td&gt;
      &lt;td&gt;Низкий IQ, высокое PUA&lt;/td&gt;
      &lt;td&gt;Уход/отчисление, избегание&lt;/td&gt;
      &lt;td&gt;Высокое чистое PUA и стресс → уход&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ученик Y&lt;/td&gt;
      &lt;td&gt;Спортивная надбавка&lt;/td&gt;
      &lt;td&gt;Спортивная надбавка&lt;/td&gt;
      &lt;td&gt;Стабильно: выбирает надбавку&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ученик C13&lt;/td&gt;
      &lt;td&gt;Высокий IQ, бедность&lt;/td&gt;
      &lt;td&gt;Учёба&lt;/td&gt;
      &lt;td&gt;Стабильно: учёба&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Психолог&lt;/td&gt;
      &lt;td&gt;Баланс системы&lt;/td&gt;
      &lt;td&gt;Снижение стресса, успокоение&lt;/td&gt;
      &lt;td&gt;Высокий средний стресс → успокоение&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Руководство&lt;/td&gt;
      &lt;td&gt;Результативность = стимул&lt;/td&gt;
      &lt;td&gt;Давление вниз (пинок кошке), проектирование стимулов&lt;/td&gt;
      &lt;td&gt;Низкая результативность → давление; высокая → проектирование стимулов&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;квантификация-стратегий-и-последствий&quot;&gt;Квантификация стратегий и последствий&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Стратегия&lt;/th&gt;
      &lt;th&gt;Последствие (приращение/булево)&lt;/th&gt;
      &lt;th&gt;Объект&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;PUA-сокращение&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Случайный ученик-цель&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Сокращение сдающих&lt;/td&gt;
      &lt;td&gt;LeaveExam, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Случайный ученик-цель&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ложь/уклонение от контроля&lt;/td&gt;
      &lt;td&gt;LegalRisk↓ (краткосрочно)&lt;/td&gt;
      &lt;td&gt;Действующее лицо&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Уход/отчисление&lt;/td&gt;
      &lt;td&gt;Dropout, LeaveExam&lt;/td&gt;
      &lt;td&gt;Сам агент&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Сетевая травля&lt;/td&gt;
      &lt;td&gt;ΔStress↑, LegalRisk↑&lt;/td&gt;
      &lt;td&gt;Случайный ученик-цель&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Спортивная надбавка / учёба / избегание&lt;/td&gt;
      &lt;td&gt;ΔScore, ΔStress&lt;/td&gt;
      &lt;td&gt;Сам агент&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Успокоение / снижение стресса&lt;/td&gt;
      &lt;td&gt;ΔStress↓&lt;/td&gt;
      &lt;td&gt;Случайный ученик-цель&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Давление вниз&lt;/td&gt;
      &lt;td&gt;ΔStress↑&lt;/td&gt;
      &lt;td&gt;Случайный ученик-цель&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;временная-функция-стимулирования&quot;&gt;Временная функция стимулирования&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Результативность&lt;/strong&gt; (воспринимаемый руководством стимул) изоморфна выигрышу учителя как &lt;strong&gt;функция стимулирования&lt;/strong&gt; времени (t):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;Incentive(t) = TeacherPayoff(средняя успеваемость, доля поступления) = 0.6 × средняя успеваемость + 0.4 × доля поступления
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Средняя успеваемость и доля поступления вычисляются по состоянию на момент (t) (ученики в школе, сдающие, поступившие). На каждом шаге сэмплируется &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Incentive(t)&lt;/code&gt; для графика «время–результативность». Прогноз экзаменационного балла обновляется в конце года по &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScoreHistory&lt;/code&gt; (последние 3 года) для &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GaokaoScore&lt;/code&gt; и &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StudentPayoff&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;равновесие-нэша-и-оптимальные-стратегии&quot;&gt;Равновесие Нэша и оптимальные стратегии&lt;/h2&gt;

&lt;p&gt;При заданных &lt;strong&gt;функциях выигрыша&lt;/strong&gt; и пространстве стратегий равновесие и рекомендации (модель и теория совпадают):&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Роль&lt;/th&gt;
      &lt;th&gt;Выигрыш/цель&lt;/th&gt;
      &lt;th&gt;Стратегия в равновесии Нэша&lt;/th&gt;
      &lt;th&gt;Рекомендуемая оптимальная стратегия&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Учителя&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{teacher}}=\bar{S}) и доля&lt;/td&gt;
      &lt;td&gt;При низком среднем и многих учениках → &lt;strong&gt;PUA&lt;/strong&gt;/сокращение сдающих (предательство); при высоком правовом риске или после предательства → обычное преподавание (кооперация)&lt;/td&gt;
      &lt;td&gt;В &lt;strong&gt;повторяющейся игре&lt;/strong&gt; в основном обычное преподавание для репутации; сокращение только при явно низком среднем и большом числе учеников, с учётом правового/морального риска&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Ученики&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;(U_{\text{student}}=G) (корреляция за 3 года)&lt;/td&gt;
      &lt;td&gt;Высокий &lt;strong&gt;IQ&lt;/strong&gt;, низкое &lt;strong&gt;PUA&lt;/strong&gt; → учёба; высокое &lt;strong&gt;PUA&lt;/strong&gt; и стресс → уход или избегание&lt;/td&gt;
      &lt;td&gt;Максимизация балла за 3 года: приоритет «учёба»; при высоком стрессе или &lt;strong&gt;PUA&lt;/strong&gt; — «избегание» или при необходимости уход для защиты долгосрочного выигрыша&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Психолог&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Стабильность системы (снижение общего стресса)&lt;/td&gt;
      &lt;td&gt;Успокоение при среднем стрессе выше порога, иначе бездействие&lt;/td&gt;
      &lt;td&gt;При &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AvgStress &amp;gt; порог&lt;/code&gt; успокоение, иначе бездействие&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Руководство&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Результативность&lt;/strong&gt; = (U_{\text{teacher}})&lt;/td&gt;
      &lt;td&gt;При &lt;strong&gt;результативности&lt;/strong&gt; ниже порога — давление вниз (&lt;strong&gt;пинок кошке&lt;/strong&gt;); иначе проектирование стимулов&lt;/td&gt;
      &lt;td&gt;Низкая → давление; высокая → проектирование стимулов, утверждение надбавок, распределение ресурсов&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Равновесие Нэша&lt;/strong&gt;: учителя и ученики в &lt;strong&gt;повторяющейся игре&lt;/strong&gt;. Длительное предательство (&lt;strong&gt;PUA&lt;/strong&gt;/сокращение сдающих) провоцирует ответ учеников (травля и т.п.) или избегание/уход, что снижает среднюю успеваемость и долю поступления и тем самым выигрыш учителя. В равновесии учителя в основном преподают нормально, ученики при отсутствии экстремального стресса учатся, и обе стороны в долгосроке приближаются к максимуму выигрыша. Психолог и руководство реагируют на агрегированные показатели (средний стресс, &lt;strong&gt;результативность&lt;/strong&gt;) пороговой реакцией, как выше.&lt;/p&gt;

&lt;h2 id=&quot;дизайн-имитационного-эксперимента&quot;&gt;Дизайн имитационного эксперимента&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Шаг&lt;/strong&gt;: продвижение по дням (или настраиваемо).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;За шаг&lt;/strong&gt;: обновление агрегатов (число учеников, сдающих, доля поступления, средний стресс); для каждого агента вызов &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChooseStrategy(t, agent, ctx)&lt;/code&gt;, затем &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ApplyStrategy(t, strategy, ...)&lt;/code&gt;, применение последствий, добавление лога «время + содержание».&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Выход&lt;/strong&gt;: (1) &lt;strong&gt;временной&lt;/strong&gt; лог; (2) сэмпл &lt;strong&gt;функции стимулирования&lt;/strong&gt; (время → &lt;strong&gt;результативность&lt;/strong&gt;); (3) итоговая статистика (в школе, сдающие, поступившие, средняя успеваемость, доля, &lt;strong&gt;результативность&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;файлы-реализации&quot;&gt;Файлы реализации&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Расположение исходного кода&lt;/strong&gt;: &lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/shantou/y&quot;&gt;zeusro/system — function/local/n/china/shantou/y&lt;/a&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Файл&lt;/th&gt;
      &lt;th&gt;Содержимое&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/model.go&quot;&gt;model.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Временные типы: Factor, Event, Point, NLine; время — первый член (Birth/T)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/roles.go&quot;&gt;roles.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Роли и стратегии (перечисления); Agent (Birth первый), NewAgent; Factor, InSchool, InExamPool, Score, ScoreHistory, Stress, LegalRisk, StrategyCount, LastStrategy&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/incentive.go&quot;&gt;incentive.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;IncentiveParams; Incentive(t,…), IncentiveAt; TeacherPayoff; GaokaoScore(ScoreHistory); StudentPayoff&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/strategy.go&quot;&gt;strategy.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;ChooseStrategy(t, agent, ctx) по ролям; Consequence; ApplyStrategy(t, strategy, …)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/sim.go&quot;&gt;sim.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;SimContext, SimState; LogTS, UpdateContext, Run; pickStudentTarget&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y.go&quot;&gt;y.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;Главный вход Y(…); newNamedAgents; вывод лога, сэмпла стимула, итоговой статистики, совета по C13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://github.com/zeusro/system/blob/main/function/local/n/china/shantou/y/y_test.go&quot;&gt;y_test.go&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;TestY (полный прогон, -short для пропуска); TestY_shortParams, TestY_shortRun&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;ссылка&quot;&gt;Ссылка&lt;/h2&gt;

&lt;p&gt;[1] Эффект «пинок кошке» — &lt;a href=&quot;https://en.wikipedia.org/wiki/Displaced_aggression&quot;&gt;https://en.wikipedia.org/wiki/Displaced_aggression&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/01/30/incentive-function-education-bureaucracy/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/01/30/incentive-function-education-bureaucracy/</guid>
        
        <category>n</category>
        
        
      </item>
    
      <item>
        <title>政治正确是如何毁了开源社区</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    
&lt;h2 id=&quot;master--main&quot;&gt;❌master ✅ main&lt;/h2&gt;

&lt;p&gt;master/slave 是计算机长久以来的一种主从架构。通过主从的分离，实现分布式读和故障转移。然而在Black Lives Matter 运动中，github 在2020年6月中公布了计划，反对使用可能带有奴役联想的术语，并在2020 年 10 月 1 日默认新仓库的分支名改为 “main”。&lt;/p&gt;

&lt;h2 id=&quot;道德警察&quot;&gt;道德警察&lt;/h2&gt;

&lt;p&gt;政治正确在开源社区的一大体现，就是各种道德警察。很多中国的开发者，利用他们为数不多的时间开发开源软件，结果还被各种issue霸占，整天围绕着一些”弱智问题”问一些弱智问题。像是怎么安装这个软件，xx出错了怎么修复。&lt;/p&gt;

&lt;p&gt;他们甚至没有时间去看一下报错的错误堆栈是从哪个地方开始的，总是理所当然地浪费他人的时间。然后把他人的无私贡献当成”开源精神”。&lt;/p&gt;

&lt;p&gt;要么就是把一些八竿子打不着的理念带到开源社区，比如LGBT。&lt;/p&gt;

&lt;p&gt;LGBT文化在开源社区的流行，个人认为是一种历史的倒退。就好像我们中国的女拳斗士，她们借助男多女少的性别优势，发表各种逆天言论。&lt;/p&gt;

&lt;p&gt;但究其理论根基，是一个黑洞。她们最终的述求，不过是要在结婚前多要点钱，结婚中（防止对方）转移资产，离婚后平方对方资产，要不就是在细枝末节的小事上斤斤计较（比如要求他人环保自己却不断浪费食物），靠一些“情感考验”索取对方情绪价值。在这一点上，中西方竟然取得了完美的统一。&lt;/p&gt;

&lt;h2 id=&quot;black-lives-matter--llm寄生虫&quot;&gt;Black Lives Matter &amp;amp; LLM寄生虫&lt;/h2&gt;

&lt;p&gt;道德警察在Black Lives Matter运动中特别明显。我记得在2020年底的时候，查看kubernetes网页文档突然多了声援BLM的牛皮癣广告。&lt;/p&gt;

&lt;p&gt;查阅历史发现是 #25173 &lt;a href=&quot;https://github.com/kubernetes/website/pull/25173/files&quot;&gt;https://github.com/kubernetes/website/pull/25173/files&lt;/a&gt; 添加的。但后来在Jan 8, 2021，&lt;a href=&quot;https://github.com/kubernetes/website/pull/25769&quot;&gt;https://github.com/kubernetes/website/pull/25769&lt;/a&gt; 的时候就被移除了，而且移除的理由非常隐晦，仿佛一切都没存在过。&lt;/p&gt;

&lt;p&gt;BLM运动的联合发起人Patrisse Cullors，于2021年辞去BLMGNF执行董事职务，税务文件显示她在财政年度内未领取薪水，而是作为”无薪志愿者”，但她与基金的关联公司和家人收到大笔资金：她的兄弟Paul Cullors的公司（Cullors Protection 或 Black Ties LLC）收到约84万美元用于”专业安全服务”（2022年税务文件）。 自2021年收入总计以来超过420万美元。&lt;/p&gt;

&lt;p&gt;Cullors还被指使用基金购买洛杉矶一处约600万美元的豪宅，用于”黑人创意空间”。&lt;/p&gt;

&lt;p&gt;而其他发起人董事会成员Shalomyah Bowers的公司收到210万美元咨询费。&lt;/p&gt;

&lt;p&gt;前董事会成员Raymond Howard及其姐妹的公司收到约110万美元。&lt;/p&gt;

&lt;p&gt;两名前雇员收到结算金：一位前董事会成员40万美元，另一位33.5万美元（2023年）。&lt;/p&gt;

&lt;p&gt;而随着时间的推移我们发现，声援这场运动的人才是真正的小丑。在 BLM 运动背后，最终得到实质利益的只是组织者的收入与豪宅，而非运动本身的理想。消费死者能够换回这么大的好处，也就只有这种资本主义国家能办到了。嘴上都是正义，一切都是生意。&lt;/p&gt;

&lt;p&gt;他们的收入跟kubernetes这个项目根本毫无关系。它让我又想起了初高中那些寄生虫同学，他们只想着浪费你的资源，去实现自己的目的。&lt;/p&gt;

&lt;p&gt;就好像之前的 &lt;a href=&quot;https://github.com/tailwindlabs/tailwindcss&quot;&gt;https://github.com/tailwindlabs/tailwindcss&lt;/a&gt; 。现在的LLM辅助编程工具，可以在用户不读懂文档的前提下直接集成到自己的项目中。&lt;a href=&quot;https://github.com/zeusro/tool&quot;&gt;https://github.com/zeusro/tool&lt;/a&gt; 我这个项目就是用Cursor集成tailwindcss 的。&lt;/p&gt;

&lt;p&gt;说实话，这让我有点毛骨悚然。一方面，开发者兢兢业业地工作，项目的star越来越多，用户也越来越多；然而真实的一面却是，获得的这些虚拟赞誉，完全无法覆盖团队的日常开支，甚至连基本的生存都成为问题。&lt;/p&gt;

&lt;h2 id=&quot;我的想法&quot;&gt;我的想法&lt;/h2&gt;

&lt;p&gt;我在2020年的时候就认识到，kubernetes这个项目其实跟中国人没啥关系。项目主要发起人是Google cloud的人，那么如果你的工作关系不归属于Google cloud，那么基本上他们也不会接受你的pull request。这也完美解释了为什么LGBT的banner会出现在 kubernetes/website 这个项目。&lt;/p&gt;

&lt;p&gt;crd是kubernetes的资源，而cr和controller是crd的下游。因此不管第三方（openkruise）实现的deployment、StatefulSet 、 DaemonSet 控制器有多好，这辈子要往上游 kubernetes 合并，估计有生之年都见不到了。&lt;/p&gt;

&lt;p&gt;我自己早已被kubernetes 这个组织拉黑，但我无所叼谓。&lt;/p&gt;

&lt;p&gt;作为国内的开发者，我觉得大家其实应该思考一个问题：如果我们总是等待救世主的到来，才付诸行动。那么有没有一种可能，其实这个世界从来就没有什么神仙皇帝，也不存在所谓的救世主呢？&lt;/p&gt;

&lt;p&gt;我们总是陷入一种模仿者的被动思维，不愿意去吃第一只螃蟹。而是等到项目成熟之后，才想着去分一杯羹，然而人家根本就不带你玩。&lt;/p&gt;

&lt;p&gt;开源世界的政治斗争远比我们想象的要残酷。和平与开放之下，其实暗流涌动。&lt;/p&gt;

&lt;p&gt;对于个人开发和初创团队开发的开源项目，我不会发表任何意见，看不爽不用便是。毕竟人家能付出点时间开发，就已经实属不易；但对于带上市公司背景的单位，我觉得眼光还是要放长远一点，姿态先放低一点，先立足于国内草台班子和小微企业占多数的情况，想清楚项目立意的客户群体。&lt;/p&gt;

&lt;p&gt;整天拿着百万年薪，写出来的代码却狗屁不通，连资源占用的ROI和边际收益，都无法跟喜欢零元购的小老板们说清楚。&lt;/p&gt;

&lt;h2 id=&quot;yellow-lives-matter&quot;&gt;Yellow Lives Matter&lt;/h2&gt;

&lt;p&gt;如果kubernetes不改变，那就由我来改变kubernetes。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/how-political-correctness-ruined-open-source/yellow-lives-matter.gif&quot; alt=&quot;Yellow Lives Matter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;我决定以 &lt;a href=&quot;https://github.com/p-program/kube-killer&quot;&gt;https://github.com/p-program/kube-killer&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&quot;&gt;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&lt;/a&gt; 作为起点，在全球互联网发起 Yellow Lives Matter 运动，抗议 Kubernetes 组织这种国籍歧视和道德偏见。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The old is dying and the new cannot be born; in this interregnum a great variety of morbid symptoms appear.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;h1 id=&quot;how-political-correctness-ruined-the-open-source-community&quot;&gt;How Political Correctness Ruined the Open Source Community&lt;/h1&gt;

&lt;h2 id=&quot;master--main&quot;&gt;❌master ✅ main&lt;/h2&gt;

&lt;p&gt;master/slave is a long-standing master-slave architecture in computing. Through the separation of master and slave, distributed reading and failover are achieved. However, during the Black Lives Matter movement, GitHub announced plans in June 2020 to oppose the use of terms that might carry associations with slavery, and on October 1, 2020, the default branch name for new repositories was changed to “main”.&lt;/p&gt;

&lt;h2 id=&quot;moral-police&quot;&gt;Moral Police&lt;/h2&gt;

&lt;p&gt;A major manifestation of political correctness in the open source community is the various moral police. Many Chinese developers use their limited time to develop open source software, only to have their projects flooded with various issues, constantly dealing with “stupid questions” about stupid problems. Like how to install this software, or how to fix errors when something goes wrong.&lt;/p&gt;

&lt;p&gt;They don’t even have time to look at where the error stack trace starts, always taking it for granted to waste others’ time. Then they treat others’ selfless contributions as “open source spirit”.&lt;/p&gt;

&lt;p&gt;Or they bring completely unrelated ideologies into the open source community, such as LGBT.&lt;/p&gt;

&lt;p&gt;The popularity of LGBT culture in the open source community is, in my opinion, a historical regression. It’s like the female fighters in China, who leverage the gender advantage of there being more men than women to make all kinds of outrageous statements.&lt;/p&gt;

&lt;p&gt;But when you examine their theoretical foundation, it’s a black hole. Their ultimate demands are nothing more than asking for more money before marriage, preventing the other party from transferring assets during marriage, splitting the other party’s assets after divorce, or being petty about trivial matters (like demanding others to be environmentally friendly while constantly wasting food themselves), and extracting “emotional value” from the other party through various so‑called “tests of feelings”. In this regard, China and the West have achieved perfect unity.&lt;/p&gt;

&lt;h2 id=&quot;black-lives-matter--llm-parasites&quot;&gt;Black Lives Matter &amp;amp; LLM Parasites&lt;/h2&gt;

&lt;p&gt;Moral police were particularly evident during the Black Lives Matter movement. I remember that at the end of 2020, when viewing Kubernetes web documentation, there suddenly appeared BLM support advertisements.&lt;/p&gt;

&lt;p&gt;Looking at the history, it was added by #25173 &lt;a href=&quot;https://github.com/kubernetes/website/pull/25173/files&quot;&gt;https://github.com/kubernetes/website/pull/25173/files&lt;/a&gt;. But later on Jan 8, 2021, &lt;a href=&quot;https://github.com/kubernetes/website/pull/25769&quot;&gt;https://github.com/kubernetes/website/pull/25769&lt;/a&gt;, it was removed, and the reason for removal was very vague, as if it never existed.&lt;/p&gt;

&lt;p&gt;Patrisse Cullors, co-founder of the BLM movement, resigned from her position as executive director of BLMGNF in 2021. Tax documents showed that she did not receive a salary during the fiscal year, but served as an “unpaid volunteer.” However, her associated companies and family members received large sums of money: her brother Paul Cullors’ company (Cullors Protection or Black Ties LLC) received approximately $840,000 for “professional security services” (2022 tax documents). Total income since 2021 has exceeded $4.2 million.&lt;/p&gt;

&lt;p&gt;Cullors was also accused of using the fund to purchase a mansion in Los Angeles worth approximately $6 million for a “black creative space.”&lt;/p&gt;

&lt;p&gt;Other co-founder and board member Shalomyah Bowers’ company received $2.1 million in consulting fees.&lt;/p&gt;

&lt;p&gt;Former board member Raymond Howard and his sister’s company received approximately $1.1 million.&lt;/p&gt;

&lt;p&gt;Two former employees received settlement payments: one former board member $400,000, and another $335,000 (2023).&lt;/p&gt;

&lt;p&gt;As time passed, we discovered that those who supported this movement were the real clowns. Behind the BLM movement, the only ones who actually benefited were the organizers’ income and mansions, not the ideals of the movement itself. Being able to exchange the consumption of the dead for such great benefits is something only this kind of capitalist country can achieve. All talk of justice, everything is business.&lt;/p&gt;

&lt;p&gt;Their income has nothing to do with the Kubernetes project. It reminds me of those parasitic classmates in middle and high school, who only think about wasting your resources to achieve their own goals.&lt;/p&gt;

&lt;p&gt;It’s like the previous &lt;a href=&quot;https://github.com/tailwindlabs/tailwindcss&quot;&gt;https://github.com/tailwindlabs/tailwindcss&lt;/a&gt;. Current LLM-assisted programming tools can integrate into users’ projects without them even reading the documentation. &lt;a href=&quot;https://github.com/zeusro/tool&quot;&gt;https://github.com/zeusro/tool&lt;/a&gt; This project of mine integrates tailwindcss using Cursor.&lt;/p&gt;

&lt;p&gt;To be honest, this makes me a bit horrified. On one hand, developers work diligently, projects get more and more stars, and users keep increasing; however, the reality is that these virtual accolades cannot cover the team’s daily expenses, and even basic survival becomes a problem.&lt;/p&gt;

&lt;h2 id=&quot;my-thoughts&quot;&gt;My Thoughts&lt;/h2&gt;

&lt;p&gt;I realized back in 2020 that the Kubernetes project actually has nothing to do with Chinese people. The main initiators of the project are people from Google Cloud, so if your work relationship doesn’t belong to Google Cloud, they basically won’t accept your pull requests. This perfectly explains why the LGBT banner appeared in the kubernetes/website project.&lt;/p&gt;

&lt;p&gt;CRD is a Kubernetes resource, and CR and controller are downstream of CRD. Therefore, no matter how good the deployment, StatefulSet, and DaemonSet controllers implemented by third parties (openkruise) are, merging them upstream into Kubernetes will probably never happen in our lifetime.&lt;/p&gt;

&lt;p&gt;I myself have long been blacklisted by the Kubernetes organization, but I don’t give a damn.&lt;/p&gt;

&lt;p&gt;As a Chinese developer, I think everyone should actually think about a question: If we always wait for a savior to arrive before taking action, then is it possible that this world has never had any gods or emperors, and there is no so-called savior?&lt;/p&gt;

&lt;p&gt;We always fall into a passive mindset of imitators, unwilling to be the first to eat the crab. Instead, we wait until the project matures before thinking about getting a piece of the pie, but they simply don’t play with us.&lt;/p&gt;

&lt;p&gt;The political struggles in the open source world are far more brutal than we imagine. Beneath the peace and openness, there are actually undercurrents.&lt;/p&gt;

&lt;p&gt;For open source projects developed by individuals and startup teams, I actually won’t make any comments - if you don’t like it, don’t use it. After all, it’s already quite difficult for them to spend time developing; but for units with listed company backgrounds, I think the vision should be longer-term, the posture should be lower first, and they should first establish themselves based on the situation where domestic makeshift teams and small and micro enterprises are the majority, and think clearly about the target customer group for the project’s purpose.&lt;/p&gt;

&lt;p&gt;Instead of holding million-dollar annual salaries all day, writing code that makes no sense, unable to even explain the ROI of resource usage and marginal benefits to small bosses who like zero-cost shopping.&lt;/p&gt;

&lt;h2 id=&quot;white-lives-matter&quot;&gt;White Lives Matter&lt;/h2&gt;

&lt;p&gt;If Kubernetes doesn’t change, then I will change Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/how-political-correctness-ruined-open-source/yellow-lives-matter.gif&quot; alt=&quot;Yellow Lives Matter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I have decided to use &lt;a href=&quot;https://github.com/p-program/kube-killer&quot;&gt;https://github.com/p-program/kube-killer&lt;/a&gt; and &lt;a href=&quot;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&quot;&gt;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&lt;/a&gt; as starting points to launch a White Lives Matter movement on the global internet, protesting against the Kubernetes organization’s national discrimination and moral bias.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The old is dying and the new cannot be born; in this interregnum a great variety of morbid symptoms appear.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;h1 id=&quot;政治的正しさがオープンソースコミュニティをどのように破壊したか&quot;&gt;政治的正しさがオープンソースコミュニティをどのように破壊したか&lt;/h1&gt;

&lt;h2 id=&quot;master--main&quot;&gt;❌master ✅ main&lt;/h2&gt;

&lt;p&gt;master/slaveは、コンピューティングにおける長年のマスター・スレーブアーキテクチャです。マスターとスレーブの分離により、分散読み取りとフェイルオーバーを実現します。しかし、Black Lives Matter運動の中で、GitHubは2020年6月に、奴隷制を連想させる可能性のある用語の使用に反対する計画を発表し、2020年10月1日に新規リポジトリのデフォルトブランチ名を「main」に変更しました。&lt;/p&gt;

&lt;h2 id=&quot;道徳警察&quot;&gt;道徳警察&lt;/h2&gt;

&lt;p&gt;オープンソースコミュニティにおける政治的正しさの大きな現れは、さまざまな道徳警察です。多くの中国の開発者は、限られた時間を使ってオープンソースソフトウェアを開発していますが、結果として様々なissueに占領され、愚かな問題についての「愚かな質問」に終日対応することになります。このソフトウェアのインストール方法、エラーが発生したときの修正方法など。&lt;/p&gt;

&lt;p&gt;彼らはエラースタックトレースがどこから始まるかを見る時間さえなく、常に当然のように他人の時間を浪費します。そして、他人の無私の貢献を「オープンソース精神」として扱います。&lt;/p&gt;

&lt;p&gt;あるいは、LGBTなど、まったく関係のない理念をオープンソースコミュニティに持ち込みます。&lt;/p&gt;

&lt;p&gt;オープンソースコミュニティにおけるLGBT文化の流行は、個人的には歴史的な後退だと考えています。それは、中国のフェミニスト戦士たちのように、男性が女性より多いという性別の優位性を利用して、さまざまな逆天的な発言を行うのと同じです。&lt;/p&gt;

&lt;p&gt;しかし、その理論的基盤を掘り下げてみると、それはブラックホールです。彼女たちの最終的な要求は、結婚前に少しでも多くのお金をもらうこと、結婚中に（相手が）資産を移転しないようにすること、離婚後に相手の資産を二等分すること、あるいは些細なこと（他人には環境保護を要求しながら自分は食べ物を無駄にし続けるなど）にいちいちこだわること、さらにはさまざまな「感情テスト」を通じて相手から感情的な価値を搾り取ることに過ぎません。この点において、中西双方は見事なまでに一致しています。&lt;/p&gt;

&lt;h2 id=&quot;black-lives-matter--llm寄生虫&quot;&gt;Black Lives Matter &amp;amp; LLM寄生虫&lt;/h2&gt;

&lt;p&gt;道徳警察はBlack Lives Matter運動中に特に顕著でした。2020年末、Kubernetesのウェブドキュメントを閲覧していたとき、突然BLM支援の広告が増えたのを覚えています。&lt;/p&gt;

&lt;p&gt;履歴を調べると、#25173 &lt;a href=&quot;https://github.com/kubernetes/website/pull/25173/files&quot;&gt;https://github.com/kubernetes/website/pull/25173/files&lt;/a&gt; によって追加されたものでした。しかし、その後2021年1月8日、&lt;a href=&quot;https://github.com/kubernetes/website/pull/25769&quot;&gt;https://github.com/kubernetes/website/pull/25769&lt;/a&gt; で削除され、削除の理由は非常に曖昧で、まるで存在しなかったかのようでした。&lt;/p&gt;

&lt;p&gt;BLM運動の共同創設者Patrisse Cullorsは、2021年にBLMGNFの執行取締役を辞任しました。税務書類によると、彼女は会計年度内に給与を受け取らず、「無給のボランティア」として活動していましたが、彼女の関連会社と家族は多額の資金を受け取りました：彼女の兄弟Paul Cullorsの会社（Cullors ProtectionまたはBlack Ties LLC）は「専門セキュリティサービス」のために約84万ドルを受け取りました（2022年税務書類）。2021年以降の総収入は420万ドルを超えています。&lt;/p&gt;

&lt;p&gt;Cullorsはまた、基金を使用してロサンゼルスの約600万ドルの豪邸を「黒人クリエイティブスペース」として購入したと指摘されています。&lt;/p&gt;

&lt;p&gt;他の共同創設者で取締役会メンバーのShalomyah Bowersの会社は210万ドルのコンサルティング料を受け取りました。&lt;/p&gt;

&lt;p&gt;元取締役会メンバーRaymond Howardとその姉妹の会社は約110万ドルを受け取りました。&lt;/p&gt;

&lt;p&gt;2人の元従業員が和解金を受け取りました：元取締役会メンバー1人が40万ドル、もう1人が33.5万ドル（2023年）。&lt;/p&gt;

&lt;p&gt;時が経つにつれ、この運動を支持した人々こそが本当の道化師であることがわかりました。BLM運動の背後には、運動自体の理想ではなく、組織者の収入と豪邸だけが実質的な利益を得ています。死者を消費してこれほど大きな利益を得られるのは、この種の資本主義国だけです。口では正義を唱え、すべてがビジネスです。&lt;/p&gt;

&lt;p&gt;彼らの収入はKubernetesプロジェクトとは全く関係がありません。それは私に中学・高校時代の寄生虫のような同級生を思い出させます。彼らは自分の目的を達成するためにあなたのリソースを浪費することしか考えていません。&lt;/p&gt;

&lt;p&gt;以前の &lt;a href=&quot;https://github.com/tailwindlabs/tailwindcss&quot;&gt;https://github.com/tailwindlabs/tailwindcss&lt;/a&gt; のように。現在のLLM支援プログラミングツールは、ユーザーがドキュメントを読まなくても、直接自分のプロジェクトに統合できます。&lt;a href=&quot;https://github.com/zeusro/tool&quot;&gt;https://github.com/zeusro/tool&lt;/a&gt; この私のプロジェクトは、Cursorを使用してtailwindcssを統合したものです。&lt;/p&gt;

&lt;p&gt;正直に言うと、これは私に少しぞっとする感覚を与えます。一方で、開発者は真面目に働き、プロジェクトのスターはますます増え、ユーザーも増え続けています。しかし、現実の一面は、これらの仮想の称賛は、チームの日常的な支出をカバーできず、基本的な生存さえ問題になるということです。&lt;/p&gt;

&lt;h2 id=&quot;私の考え&quot;&gt;私の考え&lt;/h2&gt;

&lt;p&gt;私は2020年に、Kubernetesプロジェクトは実際には中国人とは何の関係もないことを認識しました。プロジェクトの主な発起人はGoogle Cloudの人々なので、あなたの仕事関係がGoogle Cloudに属していない場合、基本的に彼らはあなたのpull requestを受け入れません。これが、LGBTのバナーがkubernetes/websiteプロジェクトに現れた理由を完璧に説明しています。&lt;/p&gt;

&lt;p&gt;CRDはKubernetesのリソースであり、CRとcontrollerはCRDの下流です。したがって、サードパーティ（openkruise）が実装したdeployment、StatefulSet、DaemonSetコントローラーがどれほど優れていても、これらを上流のKubernetesにマージすることは、おそらく私たちの生涯では見られないでしょう。&lt;/p&gt;

&lt;p&gt;私はすでにKubernetes組織によってブラックリストに登録されていますが、どうでもいいです。&lt;/p&gt;

&lt;p&gt;国内の開発者として、私は皆が実際に一つの問題を考えるべきだと思います：もし私たちが常に救世主の到来を待ってから行動を起こすなら、この世界には神や皇帝が存在せず、いわゆる救世主も存在しない可能性はないでしょうか？&lt;/p&gt;

&lt;p&gt;私たちは常に模倣者の受動的な思考に陥り、最初のカニを食べることを望みません。代わりに、プロジェクトが成熟するまで待ってから、一杯のスープを分けてもらおうと考えますが、彼らは単に私たちを遊びに連れて行きません。&lt;/p&gt;

&lt;p&gt;オープンソース世界の政治的闘争は、私たちが想像するよりもはるかに残酷です。平和と開放の下には、実際に暗流が渦巻いています。&lt;/p&gt;

&lt;p&gt;個人開発者やスタートアップチームが開発したオープンソースプロジェクトについては、実際には何も意見を述べません。気に入らなければ使わなければいいです。結局のところ、彼らが開発に時間を費やすことはすでに非常に困難です。しかし、上場企業の背景を持つ組織については、視野を長期的に保ち、まず姿勢を低くし、国内の臨時チームや中小企業が大多数を占める状況に基づいてまず自分自身を確立し、プロジェクトの目的の対象顧客グループを明確に考えるべきだと思います。&lt;/p&gt;

&lt;p&gt;百万ドルの年俸を一日中持っていながら、意味のないコードを書き、リソース使用のROIと限界利益を、ゼロコストショッピングが好きな小さなボスに説明することさえできないのではなく。&lt;/p&gt;

&lt;h2 id=&quot;yellow-lives-matter&quot;&gt;Yellow Lives Matter&lt;/h2&gt;

&lt;p&gt;Kubernetesが変わらないなら、私がKubernetesを変えます。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/how-political-correctness-ruined-open-source/yellow-lives-matter.gif&quot; alt=&quot;Yellow Lives Matter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;私は &lt;a href=&quot;https://github.com/p-program/kube-killer&quot;&gt;https://github.com/p-program/kube-killer&lt;/a&gt; と &lt;a href=&quot;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&quot;&gt;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&lt;/a&gt; を起点として、グローバルインターネットで Yellow Lives Matter運動を開始し、Kubernetes組織の国籍差別と道徳的偏見に抗議することを決定しました。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The old is dying and the new cannot be born; in this interregnum a great variety of morbid symptoms appear.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;h1 id=&quot;как-политкорректность-разрушила-сообщество-открытого-исходного-кода&quot;&gt;Как политкорректность разрушила сообщество открытого исходного кода&lt;/h1&gt;

&lt;h2 id=&quot;master--main&quot;&gt;❌master ✅ main&lt;/h2&gt;

&lt;p&gt;master/slave — это давно существующая архитектура «мастер-подчиненный» в вычислительной технике. Благодаря разделению мастера и подчиненного достигаются распределенное чтение и отказоустойчивость. Однако во время движения Black Lives Matter GitHub в июне 2020 года объявил о планах против использования терминов, которые могут ассоциироваться с рабством, и 1 октября 2020 года имя ветки по умолчанию для новых репозиториев было изменено на «main».&lt;/p&gt;

&lt;h2 id=&quot;моральная-полиция&quot;&gt;Моральная полиция&lt;/h2&gt;

&lt;p&gt;Основным проявлением политкорректности в сообществе открытого исходного кода являются различные моральные полицейские. Многие китайские разработчики используют свое ограниченное время для разработки программного обеспечения с открытым исходным кодом, но в результате их проекты захватываются различными проблемами, постоянно разбираясь с «глупыми вопросами» о глупых проблемах. Например, как установить это программное обеспечение, как исправить ошибки, когда что-то идет не так.&lt;/p&gt;

&lt;p&gt;У них даже нет времени посмотреть, откуда начинается трассировка стека ошибок, всегда считая само собой разумеющимся тратить время других. Затем они относятся к бескорыстному вкладу других как к «духу открытого исходного кода».&lt;/p&gt;

&lt;p&gt;Или они приносят совершенно не связанные идеологии в сообщество открытого исходного кода, такие как ЛГБТ.&lt;/p&gt;

&lt;p&gt;Популярность ЛГБТ‑культуры в сообществе открытого исходного кода, на мой взгляд, является историческим регрессом. Это похоже на китайских феминисток‑боевиков, которые пользуются гендерным преимуществом — мужчин больше, чем женщин — чтобы делать всевозможные запредельные заявления.&lt;/p&gt;

&lt;p&gt;Но если разобрать их теоретическую основу, там сплошная черная дыра. Их конечные требования сводятся к тому, чтобы перед браком выжать побольше денег, в браке не дать второй стороне вывести активы, после развода поделить имущество пополам, либо придираться к мелочам (например, требовать от других бережного отношения к экологии, при этом самим постоянно выбрасывая еду) и через разные «проверки чувств» выкачивать из партнера эмоциональную выгоду. В этом отношении Китай и Запад достигли поразительного единства.&lt;/p&gt;

&lt;h2 id=&quot;black-lives-matter--llm-паразиты&quot;&gt;Black Lives Matter &amp;amp; LLM-паразиты&lt;/h2&gt;

&lt;p&gt;Моральная полиция была особенно заметна во время движения Black Lives Matter. Я помню, что в конце 2020 года при просмотре веб-документации Kubernetes внезапно появилась реклама поддержки BLM.&lt;/p&gt;

&lt;p&gt;Изучая историю, это было добавлено #25173 &lt;a href=&quot;https://github.com/kubernetes/website/pull/25173/files&quot;&gt;https://github.com/kubernetes/website/pull/25173/files&lt;/a&gt;. Но позже, 8 января 2021 года, &lt;a href=&quot;https://github.com/kubernetes/website/pull/25769&quot;&gt;https://github.com/kubernetes/website/pull/25769&lt;/a&gt;, это было удалено, и причина удаления была очень расплывчатой, как будто этого никогда не существовало.&lt;/p&gt;

&lt;p&gt;Patrisse Cullors, соучредитель движения BLM, ушла с поста исполнительного директора BLMGNF в 2021 году. Налоговые документы показали, что она не получала зарплату в течение финансового года, а работала «неоплачиваемым волонтером». Однако ее связанные компании и члены семьи получили большие суммы денег: компания ее брата Paul Cullors (Cullors Protection или Black Ties LLC) получила примерно 840 000 долларов за «профессиональные охранные услуги» (налоговые документы 2022 года). Общий доход с 2021 года превысил 4,2 миллиона долларов.&lt;/p&gt;

&lt;p&gt;Cullors также обвинялась в использовании фонда для покупки особняка в Лос-Анджелесе стоимостью примерно 6 миллионов долларов для «черного творческого пространства».&lt;/p&gt;

&lt;p&gt;Компания другого соучредителя и члена правления Shalomyah Bowers получила 2,1 миллиона долларов консультационных сборов.&lt;/p&gt;

&lt;p&gt;Компания бывшего члена правления Raymond Howard и его сестры получила примерно 1,1 миллиона долларов.&lt;/p&gt;

&lt;p&gt;Два бывших сотрудника получили расчетные выплаты: один бывший член правления 400 000 долларов, другой 335 000 долларов (2023).&lt;/p&gt;

&lt;p&gt;Со временем мы обнаружили, что те, кто поддерживал это движение, были настоящими клоунами. За движением BLM единственными, кто действительно получил выгоду, были доходы и особняки организаторов, а не идеалы самого движения. Возможность обменять потребление мертвых на такие большие выгоды — это то, что может достичь только такой капиталистический режим. Все разговоры о справедливости, все — это бизнес.&lt;/p&gt;

&lt;p&gt;Их доход не имеет ничего общего с проектом Kubernetes. Это напоминает мне тех паразитических одноклассников в средней и старшей школе, которые думают только о том, чтобы тратить ваши ресурсы для достижения своих целей.&lt;/p&gt;

&lt;p&gt;Это как предыдущий &lt;a href=&quot;https://github.com/tailwindlabs/tailwindcss&quot;&gt;https://github.com/tailwindlabs/tailwindcss&lt;/a&gt;. Текущие инструменты программирования с поддержкой LLM могут интегрироваться в проекты пользователей, даже не читая документацию. &lt;a href=&quot;https://github.com/zeusro/tool&quot;&gt;https://github.com/zeusro/tool&lt;/a&gt; Этот мой проект интегрирует tailwindcss с помощью Cursor.&lt;/p&gt;

&lt;p&gt;Честно говоря, это меня немного пугает. С одной стороны, разработчики усердно работают, проекты получают все больше и больше звезд, и пользователи продолжают расти; однако реальность такова, что эти виртуальные похвалы не могут покрыть ежедневные расходы команды, и даже базовое выживание становится проблемой.&lt;/p&gt;

&lt;h2 id=&quot;мои-мысли&quot;&gt;Мои мысли&lt;/h2&gt;

&lt;p&gt;Я понял еще в 2020 году, что проект Kubernetes на самом деле не имеет ничего общего с китайцами. Основные инициаторы проекта — люди из Google Cloud, поэтому, если ваши рабочие отношения не принадлежат Google Cloud, они в основном не примут ваши pull request. Это прекрасно объясняет, почему баннер ЛГБТ появился в проекте kubernetes/website.&lt;/p&gt;

&lt;p&gt;CRD — это ресурс Kubernetes, а CR и controller — это нижестоящие от CRD. Поэтому, независимо от того, насколько хороши контроллеры deployment, StatefulSet и DaemonSet, реализованные третьими сторонами (openkruise), слияние их вверх по течению в Kubernetes, вероятно, никогда не произойдет в нашей жизни.&lt;/p&gt;

&lt;p&gt;Я сам давно в черном списке организации Kubernetes, но мне все равно.&lt;/p&gt;

&lt;p&gt;Как отечественный разработчик, я думаю, что все должны подумать о вопросе: если мы всегда ждем прихода спасителя, прежде чем действовать, то возможно ли, что в этом мире никогда не было никаких богов или императоров, и нет так называемого спасителя?&lt;/p&gt;

&lt;p&gt;Мы всегда впадаем в пассивное мышление подражателей, не желая быть первыми, кто съест краба. Вместо этого мы ждем, пока проект созреет, прежде чем думать о том, чтобы получить кусок пирога, но они просто не играют с нами.&lt;/p&gt;

&lt;p&gt;Политическая борьба в мире открытого исходного кода гораздо более жестока, чем мы представляем. Под миром и открытостью на самом деле бурлят подводные течения.&lt;/p&gt;

&lt;p&gt;Что касается проектов с открытым исходным кодом, разработанных отдельными лицами и стартап-командами, я на самом деле не буду делать никаких комментариев — если вам не нравится, не используйте. В конце концов, им уже довольно сложно тратить время на разработку; но для подразделений с фоном публичных компаний я думаю, что видение должно быть более долгосрочным, поза должна быть сначала ниже, и они должны сначала утвердиться на основе ситуации, когда отечественные импровизированные команды и малые и микропредприятия составляют большинство, и четко подумать о целевой группе клиентов для цели проекта.&lt;/p&gt;

&lt;p&gt;А не держать миллионные годовые зарплаты весь день, писать код, который не имеет смысла, не в состоянии даже объяснить ROI использования ресурсов и предельную выгоду мелким боссам, которые любят бесплатные покупки.&lt;/p&gt;

&lt;h2 id=&quot;white-lives-matter&quot;&gt;White Lives Matter&lt;/h2&gt;

&lt;p&gt;Если Kubernetes не изменится, то я изменю Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/how-political-correctness-ruined-open-source/yellow-lives-matter.gif&quot; alt=&quot;White Lives Matter&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Я решил использовать &lt;a href=&quot;https://github.com/p-program/kube-killer&quot;&gt;https://github.com/p-program/kube-killer&lt;/a&gt; и &lt;a href=&quot;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&quot;&gt;https://github.com/Z-Nightmare/kuberneteskuberneteskubernetes&lt;/a&gt; в качестве отправных точек для запуска движения White Lives Matter в глобальном интернете, протестуя против национальной дискриминации и моральной предвзятости организации Kubernetes.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“The old is dying and the new cannot be born; in this interregnum a great variety of morbid symptoms appear.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
</description>
        <pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/01/22/how-political-correctness-ruined-open-source/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/01/22/how-political-correctness-ruined-open-source/</guid>
        
        <category>Kubernetes</category>
        
        
      </item>
    
      <item>
        <title>GitHub Discussions：开源项目的社区交流新方式</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    &lt;h2 id=&quot;什么是-github-discussions&quot;&gt;什么是 GitHub Discussions？&lt;/h2&gt;

&lt;p&gt;GitHub Discussions 是 GitHub 在 2020 年推出的一个功能，它为开源项目提供了一个全新的社区交流平台。与传统的 Issues 和 Pull Requests 不同，Discussions 更像是一个论坛，允许用户进行更自由、更开放的讨论。&lt;/p&gt;

&lt;h2 id=&quot;为什么需要-discussions&quot;&gt;为什么需要 Discussions？&lt;/h2&gt;

&lt;p&gt;在传统的开源项目协作中，我们主要使用：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;：用于报告 bug、提出功能请求&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pull Requests&lt;/strong&gt;：用于代码贡献和审查&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;但这些工具更适合处理具体的技术问题。对于以下场景，Discussions 更加合适：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;项目发展方向讨论&lt;/li&gt;
  &lt;li&gt;使用经验分享&lt;/li&gt;
  &lt;li&gt;最佳实践交流&lt;/li&gt;
  &lt;li&gt;社区问答&lt;/li&gt;
  &lt;li&gt;项目公告&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;discussions-的主要特性&quot;&gt;Discussions 的主要特性&lt;/h2&gt;

&lt;h3 id=&quot;1-分类管理&quot;&gt;1. 分类管理&lt;/h3&gt;

&lt;p&gt;Discussions 支持多种分类：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;📣 &lt;strong&gt;Announcements（公告）&lt;/strong&gt;：项目重要通知&lt;/li&gt;
  &lt;li&gt;💬 &lt;strong&gt;General（一般讨论）&lt;/strong&gt;：日常交流&lt;/li&gt;
  &lt;li&gt;💡 &lt;strong&gt;Ideas（想法）&lt;/strong&gt;：功能建议和创意&lt;/li&gt;
  &lt;li&gt;🗳️ &lt;strong&gt;Polls（投票）&lt;/strong&gt;：社区决策&lt;/li&gt;
  &lt;li&gt;🙏 &lt;strong&gt;Q&amp;amp;A（问答）&lt;/strong&gt;：问题解答&lt;/li&gt;
  &lt;li&gt;🙌 &lt;strong&gt;Show and tell（展示）&lt;/strong&gt;：项目展示&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-更灵活的交流方式&quot;&gt;2. 更灵活的交流方式&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;支持 Markdown 格式&lt;/li&gt;
  &lt;li&gt;可以 @ 提及用户&lt;/li&gt;
  &lt;li&gt;支持表情符号&lt;/li&gt;
  &lt;li&gt;可以标记为已回答/未回答&lt;/li&gt;
  &lt;li&gt;支持置顶重要讨论&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-与-issues-的集成&quot;&gt;3. 与 Issues 的集成&lt;/h3&gt;

&lt;p&gt;Discussions 可以与 Issues 无缝集成，可以将讨论转换为 Issue，也可以从 Issue 创建讨论。&lt;/p&gt;

&lt;h2 id=&quot;我的项目实践&quot;&gt;我的项目实践&lt;/h2&gt;

&lt;p&gt;最近我在 &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io&quot;&gt;Zeusro.github.io&lt;/a&gt; 项目中开启了 Discussions 功能。这个项目是我的个人博客，使用 Jekyll 构建并托管在 GitHub Pages 上。&lt;/p&gt;

&lt;p&gt;开启 Discussions 后，我发现它非常适合：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;分享博客写作经验&lt;/li&gt;
  &lt;li&gt;讨论技术话题&lt;/li&gt;
  &lt;li&gt;收集读者反馈&lt;/li&gt;
  &lt;li&gt;发布项目更新公告&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;如何开启-discussions&quot;&gt;如何开启 Discussions？&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;进入你的 GitHub 仓库&lt;/li&gt;
  &lt;li&gt;点击 &lt;strong&gt;Settings&lt;/strong&gt;（设置）&lt;/li&gt;
  &lt;li&gt;在左侧菜单中找到 &lt;strong&gt;General&lt;/strong&gt; → &lt;strong&gt;Features&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;勾选 &lt;strong&gt;Discussions&lt;/strong&gt; 选项&lt;/li&gt;
  &lt;li&gt;保存设置&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;开启后，你可以在仓库主页看到新的 &lt;strong&gt;Discussions&lt;/strong&gt; 标签页。&lt;/p&gt;

&lt;h2 id=&quot;最佳实践建议&quot;&gt;最佳实践建议&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;明确分类&lt;/strong&gt;：为不同类型的讨论设置合适的分类&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;及时回复&lt;/strong&gt;：保持活跃的社区氛围&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;置顶重要信息&lt;/strong&gt;：将重要公告置顶&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;引导讨论&lt;/strong&gt;：鼓励社区成员参与讨论&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;定期整理&lt;/strong&gt;：将有价值的讨论整理成文档&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;

&lt;p&gt;GitHub Discussions 为开源项目提供了一个更加开放和友好的交流平台。它补充了 Issues 和 Pull Requests 的不足，让社区交流变得更加轻松自然。如果你正在维护一个开源项目，不妨试试开启 Discussions 功能，它可能会为你的项目带来意想不到的活力。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;本文由 AI 生成&lt;/em&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;h2 id=&quot;what-is-github-discussions&quot;&gt;What is GitHub Discussions?&lt;/h2&gt;

&lt;p&gt;GitHub Discussions is a feature launched by GitHub in 2020 that provides a new community communication platform for open source projects. Unlike traditional Issues and Pull Requests, Discussions is more like a forum, allowing users to have more free and open discussions.&lt;/p&gt;

&lt;h2 id=&quot;why-do-we-need-discussions&quot;&gt;Why Do We Need Discussions?&lt;/h2&gt;

&lt;p&gt;In traditional open source project collaboration, we mainly use:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;: For reporting bugs and proposing feature requests&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pull Requests&lt;/strong&gt;: For code contributions and reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, these tools are more suitable for handling specific technical problems. Discussions is more appropriate for the following scenarios:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Project direction discussions&lt;/li&gt;
  &lt;li&gt;Experience sharing&lt;/li&gt;
  &lt;li&gt;Best practices exchange&lt;/li&gt;
  &lt;li&gt;Community Q&amp;amp;A&lt;/li&gt;
  &lt;li&gt;Project announcements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;key-features-of-discussions&quot;&gt;Key Features of Discussions&lt;/h2&gt;

&lt;h3 id=&quot;1-category-management&quot;&gt;1. Category Management&lt;/h3&gt;

&lt;p&gt;Discussions supports multiple categories:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;📣 &lt;strong&gt;Announcements&lt;/strong&gt;: Important project notifications&lt;/li&gt;
  &lt;li&gt;💬 &lt;strong&gt;General&lt;/strong&gt;: Daily communication&lt;/li&gt;
  &lt;li&gt;💡 &lt;strong&gt;Ideas&lt;/strong&gt;: Feature suggestions and creativity&lt;/li&gt;
  &lt;li&gt;🗳️ &lt;strong&gt;Polls&lt;/strong&gt;: Community decisions&lt;/li&gt;
  &lt;li&gt;🙏 &lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;: Question and answer&lt;/li&gt;
  &lt;li&gt;🙌 &lt;strong&gt;Show and tell&lt;/strong&gt;: Project showcases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-more-flexible-communication&quot;&gt;2. More Flexible Communication&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Supports Markdown format&lt;/li&gt;
  &lt;li&gt;Can @ mention users&lt;/li&gt;
  &lt;li&gt;Supports emoji&lt;/li&gt;
  &lt;li&gt;Can be marked as answered/unanswered&lt;/li&gt;
  &lt;li&gt;Supports pinning important discussions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-integration-with-issues&quot;&gt;3. Integration with Issues&lt;/h3&gt;

&lt;p&gt;Discussions can be seamlessly integrated with Issues. You can convert discussions to Issues, or create discussions from Issues.&lt;/p&gt;

&lt;h2 id=&quot;my-project-practice&quot;&gt;My Project Practice&lt;/h2&gt;

&lt;p&gt;Recently, I enabled the Discussions feature in my &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io&quot;&gt;Zeusro.github.io&lt;/a&gt; project. This project is my personal blog, built with Jekyll and hosted on GitHub Pages.&lt;/p&gt;

&lt;p&gt;After enabling Discussions, I found it very suitable for:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sharing blog writing experiences&lt;/li&gt;
  &lt;li&gt;Discussing technical topics&lt;/li&gt;
  &lt;li&gt;Collecting reader feedback&lt;/li&gt;
  &lt;li&gt;Publishing project update announcements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-to-enable-discussions&quot;&gt;How to Enable Discussions?&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Go to your GitHub repository&lt;/li&gt;
  &lt;li&gt;Click &lt;strong&gt;Settings&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Find &lt;strong&gt;General&lt;/strong&gt; → &lt;strong&gt;Features&lt;/strong&gt; in the left menu&lt;/li&gt;
  &lt;li&gt;Check the &lt;strong&gt;Discussions&lt;/strong&gt; option&lt;/li&gt;
  &lt;li&gt;Save settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After enabling, you can see the new &lt;strong&gt;Discussions&lt;/strong&gt; tab on your repository homepage.&lt;/p&gt;

&lt;h2 id=&quot;best-practice-recommendations&quot;&gt;Best Practice Recommendations&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Clear Categories&lt;/strong&gt;: Set appropriate categories for different types of discussions&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Timely Responses&lt;/strong&gt;: Maintain an active community atmosphere&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pin Important Information&lt;/strong&gt;: Pin important announcements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Guide Discussions&lt;/strong&gt;: Encourage community members to participate&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Regular Organization&lt;/strong&gt;: Organize valuable discussions into documentation&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;GitHub Discussions provides a more open and friendly communication platform for open source projects. It complements the shortcomings of Issues and Pull Requests, making community communication more relaxed and natural. If you are maintaining an open source project, you might want to try enabling the Discussions feature—it may bring unexpected vitality to your project.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;This article was generated by AI&lt;/em&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;h2 id=&quot;github-discussionsとは&quot;&gt;GitHub Discussionsとは？&lt;/h2&gt;

&lt;p&gt;GitHub Discussionsは、GitHubが2020年にリリースした機能で、オープンソースプロジェクトに新しいコミュニティ交流プラットフォームを提供します。従来のIssuesやPull Requestsとは異なり、Discussionsはよりフォーラムに近く、ユーザーがより自由でオープンな議論を行うことができます。&lt;/p&gt;

&lt;h2 id=&quot;なぜdiscussionsが必要なのか&quot;&gt;なぜDiscussionsが必要なのか？&lt;/h2&gt;

&lt;p&gt;従来のオープンソースプロジェクトの協力では、主に以下を使用します：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;：バグの報告や機能リクエストに使用&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pull Requests&lt;/strong&gt;：コードの貢献とレビューに使用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;しかし、これらのツールは具体的な技術的な問題を処理するのに適しています。以下のシナリオでは、Discussionsがより適切です：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;プロジェクトの方向性の議論&lt;/li&gt;
  &lt;li&gt;使用経験の共有&lt;/li&gt;
  &lt;li&gt;ベストプラクティスの交流&lt;/li&gt;
  &lt;li&gt;コミュニティのQ&amp;amp;A&lt;/li&gt;
  &lt;li&gt;プロジェクトの告知&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;discussionsの主な機能&quot;&gt;Discussionsの主な機能&lt;/h2&gt;

&lt;h3 id=&quot;1-カテゴリ管理&quot;&gt;1. カテゴリ管理&lt;/h3&gt;

&lt;p&gt;Discussionsは複数のカテゴリをサポートします：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;📣 &lt;strong&gt;Announcements（告知）&lt;/strong&gt;：プロジェクトの重要な通知&lt;/li&gt;
  &lt;li&gt;💬 &lt;strong&gt;General（一般討論）&lt;/strong&gt;：日常的な交流&lt;/li&gt;
  &lt;li&gt;💡 &lt;strong&gt;Ideas（アイデア）&lt;/strong&gt;：機能提案と創造性&lt;/li&gt;
  &lt;li&gt;🗳️ &lt;strong&gt;Polls（投票）&lt;/strong&gt;：コミュニティの意思決定&lt;/li&gt;
  &lt;li&gt;🙏 &lt;strong&gt;Q&amp;amp;A（質問と回答）&lt;/strong&gt;：質問への回答&lt;/li&gt;
  &lt;li&gt;🙌 &lt;strong&gt;Show and tell（展示）&lt;/strong&gt;：プロジェクトの展示&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-より柔軟な交流方法&quot;&gt;2. より柔軟な交流方法&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Markdown形式をサポート&lt;/li&gt;
  &lt;li&gt;ユーザーを@メンション可能&lt;/li&gt;
  &lt;li&gt;絵文字をサポート&lt;/li&gt;
  &lt;li&gt;回答済み/未回答としてマーク可能&lt;/li&gt;
  &lt;li&gt;重要な議論をピン留め可能&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-issuesとの統合&quot;&gt;3. Issuesとの統合&lt;/h3&gt;

&lt;p&gt;DiscussionsはIssuesとシームレスに統合でき、議論をIssueに変換したり、Issueから議論を作成したりできます。&lt;/p&gt;

&lt;h2 id=&quot;私のプロジェクト実践&quot;&gt;私のプロジェクト実践&lt;/h2&gt;

&lt;p&gt;最近、&lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io&quot;&gt;Zeusro.github.io&lt;/a&gt;プロジェクトでDiscussions機能を有効にしました。このプロジェクトは私の個人ブログで、Jekyllで構築され、GitHub Pagesでホストされています。&lt;/p&gt;

&lt;p&gt;Discussionsを有効にした後、以下の用途に非常に適していることがわかりました：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;ブログ執筆経験の共有&lt;/li&gt;
  &lt;li&gt;技術トピックの議論&lt;/li&gt;
  &lt;li&gt;読者のフィードバックの収集&lt;/li&gt;
  &lt;li&gt;プロジェクト更新の告知&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;discussionsを有効にする方法&quot;&gt;Discussionsを有効にする方法&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;GitHubリポジトリに移動&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Settings（設定）&lt;/strong&gt;をクリック&lt;/li&gt;
  &lt;li&gt;左メニューで&lt;strong&gt;General&lt;/strong&gt; → &lt;strong&gt;Features&lt;/strong&gt;を見つける&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Discussions&lt;/strong&gt;オプションにチェックを入れる&lt;/li&gt;
  &lt;li&gt;設定を保存&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;有効にすると、リポジトリのホームページに新しい&lt;strong&gt;Discussions&lt;/strong&gt;タブが表示されます。&lt;/p&gt;

&lt;h2 id=&quot;ベストプラクティスの推奨事項&quot;&gt;ベストプラクティスの推奨事項&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;明確なカテゴリ&lt;/strong&gt;：異なるタイプの議論に適切なカテゴリを設定&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;迅速な返信&lt;/strong&gt;：活発なコミュニティの雰囲気を維持&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;重要な情報をピン留め&lt;/strong&gt;：重要な告知をピン留め&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;議論を導く&lt;/strong&gt;：コミュニティメンバーの参加を奨励&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;定期的な整理&lt;/strong&gt;：価値のある議論をドキュメントに整理&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;/h2&gt;

&lt;p&gt;GitHub Discussionsは、オープンソースプロジェクトに、よりオープンで友好的な交流プラットフォームを提供します。IssuesやPull Requestsの不足を補完し、コミュニティの交流をよりリラックスして自然なものにします。オープンソースプロジェクトを維持している場合は、Discussions機能を有効にしてみることをお勧めします。プロジェクトに予想外の活力をもたらすかもしれません。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;この記事はAIによって生成されました&lt;/em&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;h2 id=&quot;что-такое-github-discussions&quot;&gt;Что такое GitHub Discussions?&lt;/h2&gt;

&lt;p&gt;GitHub Discussions — это функция, запущенная GitHub в 2020 году, которая предоставляет новую платформу для общения сообщества в проектах с открытым исходным кодом. В отличие от традиционных Issues и Pull Requests, Discussions больше похож на форум, позволяя пользователям вести более свободные и открытые обсуждения.&lt;/p&gt;

&lt;h2 id=&quot;зачем-нужны-discussions&quot;&gt;Зачем нужны Discussions?&lt;/h2&gt;

&lt;p&gt;В традиционном сотрудничестве в проектах с открытым исходным кодом мы в основном используем:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;: Для сообщения об ошибках и предложения функций&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pull Requests&lt;/strong&gt;: Для вклада в код и обзоров&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Однако эти инструменты больше подходят для решения конкретных технических проблем. Для следующих сценариев Discussions более подходят:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Обсуждение направления развития проекта&lt;/li&gt;
  &lt;li&gt;Обмен опытом использования&lt;/li&gt;
  &lt;li&gt;Обмен лучшими практиками&lt;/li&gt;
  &lt;li&gt;Вопросы и ответы сообщества&lt;/li&gt;
  &lt;li&gt;Объявления проекта&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;основные-функции-discussions&quot;&gt;Основные функции Discussions&lt;/h2&gt;

&lt;h3 id=&quot;1-управление-категориями&quot;&gt;1. Управление категориями&lt;/h3&gt;

&lt;p&gt;Discussions поддерживает несколько категорий:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;📣 &lt;strong&gt;Announcements (Объявления)&lt;/strong&gt;: Важные уведомления проекта&lt;/li&gt;
  &lt;li&gt;💬 &lt;strong&gt;General (Общие)&lt;/strong&gt;: Ежедневное общение&lt;/li&gt;
  &lt;li&gt;💡 &lt;strong&gt;Ideas (Идеи)&lt;/strong&gt;: Предложения функций и творчество&lt;/li&gt;
  &lt;li&gt;🗳️ &lt;strong&gt;Polls (Опросы)&lt;/strong&gt;: Решения сообщества&lt;/li&gt;
  &lt;li&gt;🙏 &lt;strong&gt;Q&amp;amp;A (Вопросы и ответы)&lt;/strong&gt;: Ответы на вопросы&lt;/li&gt;
  &lt;li&gt;🙌 &lt;strong&gt;Show and tell (Показ)&lt;/strong&gt;: Демонстрация проектов&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-более-гибкое-общение&quot;&gt;2. Более гибкое общение&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Поддержка формата Markdown&lt;/li&gt;
  &lt;li&gt;Можно упоминать пользователей через @&lt;/li&gt;
  &lt;li&gt;Поддержка эмодзи&lt;/li&gt;
  &lt;li&gt;Можно отмечать как отвеченные/неотвеченные&lt;/li&gt;
  &lt;li&gt;Поддержка закрепления важных обсуждений&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-интеграция-с-issues&quot;&gt;3. Интеграция с Issues&lt;/h3&gt;

&lt;p&gt;Discussions может быть бесшовно интегрирован с Issues. Можно преобразовать обсуждения в Issues или создать обсуждения из Issues.&lt;/p&gt;

&lt;h2 id=&quot;моя-практика-проекта&quot;&gt;Моя практика проекта&lt;/h2&gt;

&lt;p&gt;Недавно я включил функцию Discussions в моем проекте &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io&quot;&gt;Zeusro.github.io&lt;/a&gt;. Этот проект — мой личный блог, созданный с помощью Jekyll и размещенный на GitHub Pages.&lt;/p&gt;

&lt;p&gt;После включения Discussions я обнаружил, что он очень подходит для:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Обмена опытом написания блога&lt;/li&gt;
  &lt;li&gt;Обсуждения технических тем&lt;/li&gt;
  &lt;li&gt;Сбора отзывов читателей&lt;/li&gt;
  &lt;li&gt;Публикации объявлений об обновлениях проекта&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;как-включить-discussions&quot;&gt;Как включить Discussions?&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Перейдите в ваш репозиторий GitHub&lt;/li&gt;
  &lt;li&gt;Нажмите &lt;strong&gt;Settings (Настройки)&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Найдите &lt;strong&gt;General&lt;/strong&gt; → &lt;strong&gt;Features&lt;/strong&gt; в левом меню&lt;/li&gt;
  &lt;li&gt;Установите флажок &lt;strong&gt;Discussions&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Сохраните настройки&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;После включения вы можете увидеть новую вкладку &lt;strong&gt;Discussions&lt;/strong&gt; на главной странице вашего репозитория.&lt;/p&gt;

&lt;h2 id=&quot;рекомендации-по-лучшим-практикам&quot;&gt;Рекомендации по лучшим практикам&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Четкие категории&lt;/strong&gt;: Установите подходящие категории для различных типов обсуждений&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Своевременные ответы&lt;/strong&gt;: Поддерживайте активную атмосферу сообщества&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Закрепление важной информации&lt;/strong&gt;: Закрепляйте важные объявления&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Направление обсуждений&lt;/strong&gt;: Поощряйте участие членов сообщества&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Регулярная организация&lt;/strong&gt;: Организуйте ценные обсуждения в документацию&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;заключение&quot;&gt;Заключение&lt;/h2&gt;

&lt;p&gt;GitHub Discussions предоставляет более открытую и дружелюбную платформу для общения в проектах с открытым исходным кодом. Он дополняет недостатки Issues и Pull Requests, делая общение в сообществе более расслабленным и естественным. Если вы поддерживаете проект с открытым исходным кодом, возможно, стоит попробовать включить функцию Discussions — она может принести неожиданную жизненную силу вашему проекту.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Эта статья была сгенерирована ИИ&lt;/em&gt;&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/01/19/github-discussions/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/01/19/github-discussions/</guid>
        
        <category>GitHub</category>
        
        <category>开源</category>
        
        <category>社区</category>
        
        <category>Open Source</category>
        
        <category>Community</category>
        
        
      </item>
    
      <item>
        <title>把2014年B站的返回顶点锚点扒了下来</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    &lt;h2 id=&quot;2014-05-03-去把bilibili的返回顶点锚点扒了下来&quot;&gt;2014-05-03 去把bilibili的返回顶点锚点扒了下来&lt;/h2&gt;

&lt;p&gt;今天闲来无事看着刷着bilibili对那锚点标记觊觎已久，下决心将其收为己用，遂动手。&lt;/p&gt;

&lt;p&gt;个人主推Firefox+firebug查看网页代码。我用的是夜壶(nightly)，就火狐的每日更新版(建议不用，有时一日三更重启非常蛋疼).&lt;/p&gt;

&lt;p&gt;网页代码，css和图片容易弄，哪里想要点哪里，左边是代码，右边是css和其他，背景图的话，右键路径在新页面打开保存就行。&lt;/p&gt;

&lt;p&gt;主要是绑定的javascript事件麻烦。楼主一开始傻BB就对着那个锚点的divid找啊找，找到了一些但死活找不到事件。后来firebug会用了就简单多了。点击标签绑定的是goTop函数，在firebug的控制栏里输入”goTop”，然后点”RUN”，那个函数就会出现了，找到之后还可以右键美化源代码，方便复制过去。输”goTop()”的话是执行。不一样的。&lt;/p&gt;

&lt;p&gt;bilibili的锚点是挺有趣的， 首先其位置设置的不错，会根据元素在当前视口的相对偏移设置，其次是它让人流氓滚，在点了页面开始调用函数之后一旦你往下滚轮它还是会用生命滚到页首，直到完全触顶为止。&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;../Scripts/jquery-1.10.2.min.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;div id=&quot;gotop&quot; onclick=&quot;goTop();&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scroll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;goTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;goTop(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;-116px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;29px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;106px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;pointer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;url(&apos;go_to_top.png&apos;)&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;no-repeat&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;scroll&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;transparent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;z&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;border: 1px dashed; height: 2999px; width: 977px; margin: 0 auto;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/go_to_top.png&quot; alt=&quot;go_to_top.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-博客园你们家的js好神奇&quot;&gt;2015-04-26 博客园，你们家的js好神奇&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/cnblogs-71564.png&quot; alt=&quot;博客园问答截图&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-为你的博客园添加平滑移动到页面顶端的锚点和tag云&quot;&gt;2015-04-26 为你的博客园添加平滑移动到页面顶端的锚点和tag云&lt;/h2&gt;

&lt;p&gt;首先我的目录是在&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html#autoid-5-2-0&quot;&gt;marvin&lt;/a&gt;的基础上二次开发的。然后我发现锚点图和目录都在同一个图上面，所以就一起用了。&lt;/p&gt;

&lt;h3 id=&quot;返回顶部锚点&quot;&gt;返回顶部锚点:&lt;/h3&gt;

&lt;p&gt;我用以前旧版bilibili的那个函数。可以做到平滑滚动到页面，并且在触顶前不能向下滚屏。具体的看我参考链接。当然因为涉及到js要申请权限，简单的话a标签href用#top当然可以，体验有点差罢了。&lt;/p&gt;

&lt;p&gt;然后因为我懒，锚点的出现条件直接和目录的出现条件弄在一起。也就是匹配元素相对滚动条顶部的偏移超过200时显示。&lt;/p&gt;

&lt;h3 id=&quot;tag云&quot;&gt;tag云:&lt;/h3&gt;

&lt;p&gt;我用Google随便找的。用的矢量绘图。&lt;/p&gt;

&lt;p&gt;但是这玩意有个局限性，就是其实例化函数限制要用元素ID.于是我用一个div包裹了标签区的ul.然后实例化。实例化成功的时候隐藏掉标签区和标题，设置canvas的蠕动和显示&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;                      
    &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ul:first&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;wrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;div id=&apos;caonimagebi&apos; style=&apos;display:block&apos;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;textColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#519cea&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;outlineColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#404040&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;depth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;maxSpeed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.10&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;日了狗了&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;    
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;setspeed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.015&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;        
             &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;                    
              &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.catListTitle:first-child&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//去掉随笔分类  &lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;   
               &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;但是这样有个局限性，就是因为写在onload里面，有点生硬，你们可以看到，这玩意像是隐搞出来的，不和谐。这就是让我抓狂的地方了。&lt;/p&gt;

&lt;h3 id=&quot;抓狂&quot;&gt;抓狂:&lt;/h3&gt;

&lt;p&gt;我就是很好奇，为毛这个包裹方法写在onready里面就不行了，而且是线上的时候不行。我是有在本地测试的，本地写在onready的时候页面很正常，传到博客园就变成这样。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://q.cnblogs.com/q/71564/&quot;&gt;博客园，你们家的js好神奇&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;备注&quot;&gt;备注:&lt;/h3&gt;

&lt;p&gt;1博客园的文件系统是软删除，慢更新。就是你删了文件还在，你删了那个文件上传同名文件的话，服务器上的文件还是旧版的，所以需要自己手动修改文件名和相应的引用文件名。&lt;/p&gt;

&lt;p&gt;2这个目录有一定的局限性，也就是h2,h3,h4.方法写的不是很健壮，而且目录的高度应该尽可能的根据标题数来计算，然后弄个上限，但是我也懒得改了。还有就是z-index的问题。这个要格外注意下。我是把旁边的锚点和返回顶部设置为999了。&lt;/p&gt;

&lt;p&gt;3博客园自带jQuery.所以无需另外引用&lt;/p&gt;

&lt;h2 id=&quot;2026-01-13-备注&quot;&gt;2026-01-13 备注&lt;/h2&gt;

&lt;p&gt;原文是我在博客园的2篇文章和1个问答，我用爬虫扒了下来，并稍微修改了一下。&lt;/p&gt;

&lt;p&gt;2015-04-26 19:41
为你的博客园添加平滑移动到页面顶端的锚点和tag云
https://www.cnblogs.com/zeusro/p/4458222.html&lt;/p&gt;

&lt;p&gt;2014-05-03 18:58 
去把bilibili的返回顶点锚点扒了下来
https://www.cnblogs.com/zeusro/p/3705426.html&lt;/p&gt;

&lt;p&gt;现在B站的返回顶点锚点还不如10年前。我已经把它移植到我这个项目中。&lt;/p&gt;

&lt;p&gt;提交链接是 &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io/commit/247c0101d65b9c580fadc40db32165d2ef84fe07&quot;&gt;247c0101d65b9c580fadc40db32165d2ef84fe07&lt;/a&gt;。AI还顺便修复了jQuery的问题，也是神奇了。&lt;/p&gt;

&lt;h3 id=&quot;chrome-截图脚本&quot;&gt;Chrome 截图脚本&lt;/h3&gt;

&lt;p&gt;使用 Chrome 的 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt; 模式进行全页面截图：&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://q.cnblogs.com/q/71564&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;D:\Zeusro.github.io\img\in-post\bilibili\cnblogs-71564.png&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:\Program Files\Google\Chrome\Application\chrome.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--headless&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--disable-gpu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--window-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1280&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--virtual-time-budget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--screenshot&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;参数说明：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt;: 使用新的无头模式&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disable-gpu&lt;/code&gt;: 禁用 GPU 加速&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--window-size=1280,2000&lt;/code&gt;: 设置窗口大小为 1280x2000 像素，足够大的高度可以捕获完整页面&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--virtual-time-budget=10000&lt;/code&gt;: 给页面 10 秒的虚拟时间预算，确保所有内容都加载完成&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--screenshot=$outputPath&lt;/code&gt;: 指定截图保存路径&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;参考链接&quot;&gt;参考链接:&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/zeusro/p/3705426.html&quot;&gt;去把bilibili的返回顶点锚点扒了下来&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html&quot;&gt;如何给你的为知笔记添加一个漂亮的导航目录&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.goat1000.com/tagcanvas-functions.php&quot;&gt;http://www.goat1000.com/tagcanvas-functions.php&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;h2 id=&quot;2014-05-03-scraping-bilibilis-back-to-top-anchor&quot;&gt;2014-05-03 Scraping Bilibili’s Back-to-Top Anchor&lt;/h2&gt;

&lt;p&gt;Today I was idly browsing Bilibili and had been eyeing that anchor mark for a long time. I decided to make it my own, so I got to work.&lt;/p&gt;

&lt;p&gt;I mainly use Firefox + Firebug to inspect webpage code. I’m using Nightly, Firefox’s daily update version (not recommended, sometimes it updates three times a day and restarts are very annoying).&lt;/p&gt;

&lt;p&gt;Webpage code, CSS, and images are easy to get. Just click where you want, left side shows code, right side shows CSS and other stuff. For background images, right-click the path and open it in a new page to save.&lt;/p&gt;

&lt;p&gt;The main trouble was the bound JavaScript events. I was initially stupidly searching for the anchor’s div id, found some things but couldn’t find the event. Later, when I learned to use Firebug properly, it became much easier. The click tag is bound to the goTop function. In Firebug’s console, type “goTop”, then click “RUN”, and the function will appear. After finding it, you can right-click to beautify the source code for easy copying. Typing “goTop()” executes it. It’s different.&lt;/p&gt;

&lt;p&gt;Bilibili’s anchor is quite interesting. First, its position is set well, adjusting based on the element’s relative offset in the current viewport. Second, it forces scrolling - after clicking and the function starts, even if you scroll down, it will still scroll to the top with all its might until it fully reaches the top.&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;../Scripts/jquery-1.10.2.min.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;div id=&quot;gotop&quot; onclick=&quot;goTop();&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scroll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;goTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;goTop(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;-116px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;29px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;106px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;pointer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;url(&apos;go_to_top.png&apos;)&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;no-repeat&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;scroll&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;transparent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;z&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;border: 1px dashed; height: 2999px; width: 977px; margin: 0 auto;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/go_to_top.png&quot; alt=&quot;go_to_top.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-cnblogs-your-javascript-is-amazing&quot;&gt;2015-04-26 CNBlogs, Your JavaScript is Amazing&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/cnblogs-71564.png&quot; alt=&quot;CNBlogs Q&amp;amp;A Screenshot&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-adding-smooth-scroll-to-top-anchor-and-tag-cloud-to-your-cnblogs&quot;&gt;2015-04-26 Adding Smooth Scroll-to-Top Anchor and Tag Cloud to Your CNBlogs&lt;/h2&gt;

&lt;p&gt;First, my table of contents is based on &lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html#autoid-5-2-0&quot;&gt;marvin&lt;/a&gt;’s work, which I further developed. Then I found that the anchor image and table of contents are on the same image, so I used them together.&lt;/p&gt;

&lt;h3 id=&quot;back-to-top-anchor&quot;&gt;Back-to-Top Anchor:&lt;/h3&gt;

&lt;p&gt;I used the function from the old Bilibili version. It can smoothly scroll to the page top, and prevents scrolling down before reaching the top. See my reference link for details. Of course, since it involves JavaScript that requires permissions, you can simply use an anchor tag with href=”#top”, but the experience is a bit poor.&lt;/p&gt;

&lt;p&gt;Then because I’m lazy, I made the anchor’s appearance condition the same as the table of contents. That is, it shows when the matched element’s offset relative to the scrollbar top exceeds 200.&lt;/p&gt;

&lt;h3 id=&quot;tag-cloud&quot;&gt;Tag Cloud:&lt;/h3&gt;

&lt;p&gt;I found it randomly on Google. Uses vector graphics.&lt;/p&gt;

&lt;p&gt;But this thing has a limitation - its instantiation function requires an element ID. So I wrapped the tag area’s ul with a div, then instantiated it. When instantiation succeeds, hide the tag area and title, set the canvas animation and display.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;                      
    &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ul:first&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;wrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;div id=&apos;caonimagebi&apos; style=&apos;display:block&apos;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;textColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#519cea&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;outlineColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#404040&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;depth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;maxSpeed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.10&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Damn it&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;    
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;setspeed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.015&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;        
             &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;                    
              &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.catListTitle:first-child&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//Remove essay categories  &lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;   
               &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;But this has a limitation - because it’s written in onload, it’s a bit abrupt. You can see this thing appears like it was hidden, not harmonious. This is what drives me crazy.&lt;/p&gt;

&lt;h3 id=&quot;going-crazy&quot;&gt;Going Crazy:&lt;/h3&gt;

&lt;p&gt;I’m just very curious why this wrapping method doesn’t work when written in onready, and it only fails online. I did test locally, and when written in onready locally, the page works normally, but when uploaded to CNBlogs it becomes like this.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://q.cnblogs.com/q/71564/&quot;&gt;CNBlogs, Your JavaScript is Amazing&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;notes&quot;&gt;Notes:&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;CNBlogs’ file system is soft delete, slow update. That is, when you delete a file it’s still there. If you delete a file and upload a file with the same name, the server file is still the old version, so you need to manually change the filename and the corresponding reference filename.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;This table of contents has certain limitations, namely h2, h3, h4. The method isn’t written very robustly, and the table of contents height should be calculated based on the number of headings as much as possible, then set an upper limit, but I’m too lazy to change it. Also, there’s the z-index issue. This needs special attention. I set the anchor and back-to-top next to it to 999.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;CNBlogs comes with jQuery built-in, so no need to reference it separately.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;2026-01-13-notes&quot;&gt;2026-01-13 Notes&lt;/h2&gt;

&lt;p&gt;The original text consists of 2 articles and 1 Q&amp;amp;A from my CNBlogs, which I scraped and slightly modified.&lt;/p&gt;

&lt;p&gt;2015-04-26 19:41
Adding Smooth Scroll-to-Top Anchor and Tag Cloud to Your CNBlogs
https://www.cnblogs.com/zeusro/p/4458222.html&lt;/p&gt;

&lt;p&gt;2014-05-03 18:58 
Scraping Bilibili’s Back-to-Top Anchor
https://www.cnblogs.com/zeusro/p/3705426.html&lt;/p&gt;

&lt;p&gt;Now Bilibili’s back-to-top anchor is worse than 10 years ago. I’ve already ported it to this project.&lt;/p&gt;

&lt;p&gt;The commit link is &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io/commit/247c0101d65b9c580fadc40db32165d2ef84fe07&quot;&gt;247c0101d65b9c580fadc40db32165d2ef84fe07&lt;/a&gt;. AI also fixed the jQuery issue, which is also amazing.&lt;/p&gt;

&lt;h3 id=&quot;chrome-screenshot-script&quot;&gt;Chrome Screenshot Script&lt;/h3&gt;

&lt;p&gt;Using Chrome’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt; mode for full-page screenshots:&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://q.cnblogs.com/q/71564&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;D:\Zeusro.github.io\img\in-post\bilibili\cnblogs-71564.png&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:\Program Files\Google\Chrome\Application\chrome.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--headless&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--disable-gpu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--window-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1280&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--virtual-time-budget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--screenshot&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Parameter explanation:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt;: Use the new headless mode&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disable-gpu&lt;/code&gt;: Disable GPU acceleration&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--window-size=1280,2000&lt;/code&gt;: Set window size to 1280x2000 pixels, large enough height to capture the full page&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--virtual-time-budget=10000&lt;/code&gt;: Give the page 10 seconds of virtual time budget to ensure all content is loaded&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--screenshot=$outputPath&lt;/code&gt;: Specify the screenshot save path&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;references&quot;&gt;References:&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/zeusro/p/3705426.html&quot;&gt;Scraping Bilibili’s Back-to-Top Anchor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html&quot;&gt;How to Add a Beautiful Navigation Table of Contents to Your WizNote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.goat1000.com/tagcanvas-functions.php&quot;&gt;http://www.goat1000.com/tagcanvas-functions.php&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;h2 id=&quot;2014-05-03-bilibiliのトップへ戻るアンカーを取得&quot;&gt;2014-05-03 Bilibiliのトップへ戻るアンカーを取得&lt;/h2&gt;

&lt;p&gt;今日は何もすることがなく、Bilibiliをブラウジングしていて、そのアンカーマークをずっと狙っていました。決心して自分のものにしようと、作業を始めました。&lt;/p&gt;

&lt;p&gt;個人的にはFirefox + Firebugでウェブページのコードを確認することを推奨しています。私は夜間版（nightly）を使用しています。これはFirefoxの毎日更新版です（推奨しません。時々1日に3回更新して再起動が必要で非常に面倒です）。&lt;/p&gt;

&lt;p&gt;ウェブページのコード、CSS、画像は簡単に取得できます。欲しい場所をクリックするだけで、左側にコード、右側にCSSやその他の情報が表示されます。背景画像の場合は、パスを右クリックして新しいページで開いて保存すればOKです。&lt;/p&gt;

&lt;p&gt;主な問題は、バインドされたJavaScriptイベントでした。最初はアンカーのdiv idを探していましたが、いくつか見つかったものの、イベントが見つかりませんでした。後でFirebugの使い方がわかると、ずっと簡単になりました。クリックタグはgoTop関数にバインドされています。Firebugのコンソールで「goTop」と入力し、「RUN」をクリックすると、その関数が表示されます。見つけた後、右クリックしてソースコードを整形し、コピーしやすくできます。「goTop()」と入力すると実行されます。違います。&lt;/p&gt;

&lt;p&gt;Bilibiliのアンカーは非常に興味深いです。まず、その位置設定が優れており、現在のビューポート内の要素の相対オフセットに基づいて設定されます。次に、強制的にスクロールさせます。ページをクリックして関数が開始された後、下にスクロールしても、完全にトップに到達するまで全力でトップまでスクロールし続けます。&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;../Scripts/jquery-1.10.2.min.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;div id=&quot;gotop&quot; onclick=&quot;goTop();&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scroll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;goTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;goTop(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;-116px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;29px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;106px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;pointer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;url(&apos;go_to_top.png&apos;)&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;no-repeat&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;scroll&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;transparent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;z&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;border: 1px dashed; height: 2999px; width: 977px; margin: 0 auto;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/go_to_top.png&quot; alt=&quot;go_to_top.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-ブログ園あなたのjavascriptは素晴らしい&quot;&gt;2015-04-26 ブログ園、あなたのJavaScriptは素晴らしい&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/cnblogs-71564.png&quot; alt=&quot;ブログ園Q&amp;amp;Aスクリーンショット&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-ブログ園にスムーズにページトップへ移動するアンカーとタグクラウドを追加&quot;&gt;2015-04-26 ブログ園にスムーズにページトップへ移動するアンカーとタグクラウドを追加&lt;/h2&gt;

&lt;p&gt;まず、私の目次は&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html#autoid-5-2-0&quot;&gt;marvin&lt;/a&gt;の作品を基に二次開発したものです。そして、アンカー画像と目次が同じ画像上にあることに気づき、一緒に使用しました。&lt;/p&gt;

&lt;h3 id=&quot;トップへ戻るアンカー&quot;&gt;トップへ戻るアンカー：&lt;/h3&gt;

&lt;p&gt;以前のBilibiliバージョンの関数を使用しました。ページをスムーズにスクロールでき、トップに到達する前に下にスクロールできません。詳細は参考リンクを参照してください。もちろん、JavaScriptには権限が必要なため、シンプルにaタグのhrefに#topを使用することもできますが、体験は少し劣ります。&lt;/p&gt;

&lt;p&gt;そして、私は怠け者なので、アンカーの表示条件を目次の表示条件と同じにしました。つまり、マッチした要素のスクロールバートップからの相対オフセットが200を超えたときに表示されます。&lt;/p&gt;

&lt;h3 id=&quot;タグクラウド&quot;&gt;タグクラウド：&lt;/h3&gt;

&lt;p&gt;Googleで適当に見つけました。ベクターグラフィックを使用しています。&lt;/p&gt;

&lt;p&gt;しかし、これには制限があります。インスタンス化関数は要素IDを使用する必要があります。そこで、タグエリアのulをdivでラップし、インスタンス化しました。インスタンス化が成功したとき、タグエリアとタイトルを非表示にし、canvasのアニメーションと表示を設定します。&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;                      
    &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ul:first&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;wrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;div id=&apos;caonimagebi&apos; style=&apos;display:block&apos;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;textColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#519cea&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;outlineColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#404040&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;depth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;maxSpeed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.10&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;クソだ&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;    
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;setspeed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.015&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;        
             &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;                    
              &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.catListTitle:first-child&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//エッセイカテゴリを削除  &lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;   
               &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;しかし、これには制限があります。onloadに書かれているため、少し不自然です。この機能が隠されたように表示され、調和していないことがわかります。これが私を狂わせる点です。&lt;/p&gt;

&lt;h3 id=&quot;狂気&quot;&gt;狂気：&lt;/h3&gt;

&lt;p&gt;なぜこのラッピング方法をonreadyに書くと機能しないのか、そしてオンラインでのみ機能しないのか、非常に興味深いです。ローカルでテストしましたが、ローカルでonreadyに書いたときはページが正常に動作しましたが、ブログ園にアップロードするとこのようになります。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://q.cnblogs.com/q/71564/&quot;&gt;ブログ園、あなたのJavaScriptは素晴らしい&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;備考&quot;&gt;備考：&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;ブログ園のファイルシステムはソフト削除、遅延更新です。つまり、ファイルを削除してもまだ存在します。ファイルを削除して同じ名前のファイルをアップロードすると、サーバー上のファイルはまだ古いバージョンのままなので、ファイル名と対応する参照ファイル名を手動で変更する必要があります。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;この目次には一定の制限があります。つまり、h2、h3、h4です。メソッドはあまり堅牢に書かれておらず、目次の高さは可能な限り見出し数に基づいて計算し、上限を設定する必要がありますが、変更するのが面倒です。また、z-indexの問題もあります。これは特に注意が必要です。隣のアンカーとトップへ戻るを999に設定しました。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;ブログ園にはjQueryが組み込まれているため、別途参照する必要はありません。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;2026-01-13-備考&quot;&gt;2026-01-13 備考&lt;/h2&gt;

&lt;p&gt;原文は私のブログ園の2つの記事と1つのQ&amp;amp;Aで、クローラーで取得し、少し修正しました。&lt;/p&gt;

&lt;p&gt;2015-04-26 19:41
ブログ園にスムーズにページトップへ移動するアンカーとタグクラウドを追加
https://www.cnblogs.com/zeusro/p/4458222.html&lt;/p&gt;

&lt;p&gt;2014-05-03 18:58 
Bilibiliのトップへ戻るアンカーを取得
https://www.cnblogs.com/zeusro/p/3705426.html&lt;/p&gt;

&lt;p&gt;現在のBilibiliのトップへ戻るアンカーは10年前よりも劣っています。すでにこのプロジェクトに移植しました。&lt;/p&gt;

&lt;p&gt;コミットリンクは &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io/commit/247c0101d65b9c580fadc40db32165d2ef84fe07&quot;&gt;247c0101d65b9c580fadc40db32165d2ef84fe07&lt;/a&gt;です。AIはjQueryの問題も修正しました。これも素晴らしいです。&lt;/p&gt;

&lt;h3 id=&quot;chromeスクリーンショットスクリプト&quot;&gt;Chromeスクリーンショットスクリプト&lt;/h3&gt;

&lt;p&gt;Chromeの&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt;モードを使用して全ページスクリーンショットを取得：&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://q.cnblogs.com/q/71564&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;D:\Zeusro.github.io\img\in-post\bilibili\cnblogs-71564.png&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:\Program Files\Google\Chrome\Application\chrome.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--headless&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--disable-gpu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--window-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1280&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--virtual-time-budget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--screenshot&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;パラメータ説明：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt;: 新しいヘッドレスモードを使用&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disable-gpu&lt;/code&gt;: GPUアクセラレーションを無効化&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--window-size=1280,2000&lt;/code&gt;: ウィンドウサイズを1280x2000ピクセルに設定。全ページをキャプチャするのに十分な高さ&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--virtual-time-budget=10000&lt;/code&gt;: ページに10秒の仮想時間予算を与え、すべてのコンテンツが読み込まれることを確保&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--screenshot=$outputPath&lt;/code&gt;: スクリーンショットの保存パスを指定&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;参考リンク&quot;&gt;参考リンク：&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/zeusro/p/3705426.html&quot;&gt;Bilibiliのトップへ戻るアンカーを取得&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html&quot;&gt;WizNoteに美しいナビゲーション目次を追加する方法&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.goat1000.com/tagcanvas-functions.php&quot;&gt;http://www.goat1000.com/tagcanvas-functions.php&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;h2 id=&quot;2014-05-03-извлечение-якоря-возврата-наверх-bilibili&quot;&gt;2014-05-03 Извлечение якоря возврата наверх Bilibili&lt;/h2&gt;

&lt;p&gt;Сегодня мне было нечего делать, я просматривал Bilibili и давно засматривался на эту якорную метку. Решил сделать её своей, поэтому приступил к работе.&lt;/p&gt;

&lt;p&gt;Лично я рекомендую Firefox + Firebug для просмотра кода веб-страниц. Я использую Nightly, ежедневную обновляемую версию Firefox (не рекомендуется, иногда обновляется три раза в день, перезапуски очень раздражают).&lt;/p&gt;

&lt;p&gt;Код веб-страницы, CSS и изображения легко получить. Просто кликайте где хотите, слева код, справа CSS и прочее. Для фоновых изображений просто правой кнопкой мыши по пути, откройте в новой странице и сохраните.&lt;/p&gt;

&lt;p&gt;Основная проблема была в привязанных событиях JavaScript. Сначала я тупо искал div id якоря, нашёл кое-что, но никак не мог найти событие. Позже, когда научился использовать Firebug, стало намного проще. Тег клика привязан к функции goTop. В консоли Firebug введите “goTop”, затем нажмите “RUN”, и функция появится. После нахождения можно правой кнопкой мыши форматировать исходный код для удобного копирования. Ввод “goTop()” выполняет её. Это другое.&lt;/p&gt;

&lt;p&gt;Якорь Bilibili довольно интересен. Во-первых, его позиция установлена хорошо, настраивается в зависимости от относительного смещения элемента в текущем окне просмотра. Во-вторых, он заставляет прокручивать - после клика и начала работы функции, даже если вы прокручиваете вниз, он всё равно будет прокручивать наверх изо всех сил, пока полностью не достигнет верха.&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/html; charset=utf-8&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;../Scripts/jquery-1.10.2.min.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;div id=&quot;gotop&quot; onclick=&quot;goTop();&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scroll&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;show&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;resize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.z&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;goTop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;documentElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollLeft&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTop&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;j&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
                &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;q&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setTimeout&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;goTop(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;u&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;undefined&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;typeof&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nx&quot;&gt;scrollActivate&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:hover&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;-116px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;#gotop&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;29px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;106px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;fixed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;pointer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;nl&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;sx&quot;&gt;url(&apos;go_to_top.png&apos;)&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;no-repeat&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;scroll&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0px&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;transparent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;z&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;border: 1px dashed; height: 2999px; width: 977px; margin: 0 auto;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/go_to_top.png&quot; alt=&quot;go_to_top.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-cnblogs-ваш-javascript-потрясающий&quot;&gt;2015-04-26 CNBlogs, ваш JavaScript потрясающий&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/bilibili/cnblogs-71564.png&quot; alt=&quot;Скриншот Q&amp;amp;A CNBlogs&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2015-04-26-добавление-плавного-якоря-возврата-наверх-и-облака-тегов-в-ваш-cnblogs&quot;&gt;2015-04-26 Добавление плавного якоря возврата наверх и облака тегов в ваш CNBlogs&lt;/h2&gt;

&lt;p&gt;Сначала мое оглавление основано на работе &lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html#autoid-5-2-0&quot;&gt;marvin&lt;/a&gt;, которую я доработал. Затем я обнаружил, что изображение якоря и оглавление находятся на одном изображении, поэтому использовал их вместе.&lt;/p&gt;

&lt;h3 id=&quot;якорь-возврата-наверх&quot;&gt;Якорь возврата наверх:&lt;/h3&gt;

&lt;p&gt;Я использовал функцию из старой версии Bilibili. Она может плавно прокручивать страницу наверх и предотвращает прокрутку вниз до достижения верха. Подробности смотрите в моей ссылке. Конечно, поскольку это связано с JavaScript, требующим разрешений, можно просто использовать тег якоря с href=”#top”, но опыт будет немного хуже.&lt;/p&gt;

&lt;p&gt;Затем, поскольку я ленив, я сделал условие появления якоря таким же, как у оглавления. То есть, оно показывается, когда смещение совпадающего элемента относительно верха полосы прокрутки превышает 200.&lt;/p&gt;

&lt;h3 id=&quot;облако-тегов&quot;&gt;Облако тегов:&lt;/h3&gt;

&lt;p&gt;Я нашёл это случайно в Google. Использует векторную графику.&lt;/p&gt;

&lt;p&gt;Но у этой штуки есть ограничение - её функция инициализации требует ID элемента. Поэтому я обернул ul области тегов в div, затем инициализировал. При успешной инициализации скрываю область тегов и заголовок, устанавливаю анимацию и отображение canvas.&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;                      
    &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;ul:first&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;wrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;div id=&apos;caonimagebi&apos; style=&apos;display:block&apos;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;  
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;textColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#519cea&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;outlineColour&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#404040&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;depth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;maxSpeed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.10&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Чёрт возьми&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;hide&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; 
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvasContainer&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;    
            &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#myCanvas&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;tagcanvas&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;setspeed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.015&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;        
             &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#caonimagebi&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;css&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;                    
              &lt;span class=&quot;nx&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;.catListTitle:first-child&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;#sidebar_categories&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//Удалить категории эссе  &lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;   
               &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Но это имеет ограничение - поскольку написано в onload, это немного резко. Вы можете видеть, что эта штука появляется как будто была скрыта, не гармонично. Это то, что сводит меня с ума.&lt;/p&gt;

&lt;h3 id=&quot;схожу-с-ума&quot;&gt;Схожу с ума:&lt;/h3&gt;

&lt;p&gt;Мне просто очень любопытно, почему этот метод обёртки не работает, когда написан в onready, и это не работает только онлайн. Я тестировал локально, и когда написал в onready локально, страница работала нормально, но при загрузке на CNBlogs становится так.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://q.cnblogs.com/q/71564/&quot;&gt;CNBlogs, ваш JavaScript потрясающий&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;примечания&quot;&gt;Примечания:&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Файловая система CNBlogs - это мягкое удаление, медленное обновление. То есть, когда вы удаляете файл, он всё ещё там. Если вы удалите файл и загрузите файл с тем же именем, файл на сервере всё ещё старая версия, поэтому нужно вручную изменить имя файла и соответствующее имя файла ссылки.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Это оглавление имеет определённые ограничения, а именно h2, h3, h4. Метод написан не очень надёжно, и высота оглавления должна быть рассчитана на основе количества заголовков, насколько это возможно, затем установить верхний предел, но мне лень это менять. Также есть проблема z-index. Это требует особого внимания. Я установил якорь и возврат наверх рядом с ним на 999.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;CNBlogs поставляется со встроенным jQuery, поэтому не нужно ссылаться на него отдельно.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;2026-01-13-примечания&quot;&gt;2026-01-13 Примечания&lt;/h2&gt;

&lt;p&gt;Оригинальный текст состоит из 2 статей и 1 Q&amp;amp;A из моего CNBlogs, которые я извлёк с помощью краулера и слегка изменил.&lt;/p&gt;

&lt;p&gt;2015-04-26 19:41
Добавление плавного якоря возврата наверх и облака тегов в ваш CNBlogs
https://www.cnblogs.com/zeusro/p/4458222.html&lt;/p&gt;

&lt;p&gt;2014-05-03 18:58 
Извлечение якоря возврата наверх Bilibili
https://www.cnblogs.com/zeusro/p/3705426.html&lt;/p&gt;

&lt;p&gt;Теперь якорь возврата наверх Bilibili хуже, чем 10 лет назад. Я уже перенёс его в этот проект.&lt;/p&gt;

&lt;p&gt;Ссылка на коммит: &lt;a href=&quot;https://github.com/zeusro/Zeusro.github.io/commit/247c0101d65b9c580fadc40db32165d2ef84fe07&quot;&gt;247c0101d65b9c580fadc40db32165d2ef84fe07&lt;/a&gt;. AI также исправил проблему jQuery, что тоже удивительно.&lt;/p&gt;

&lt;h3 id=&quot;скрипт-скриншота-chrome&quot;&gt;Скрипт скриншота Chrome&lt;/h3&gt;

&lt;p&gt;Использование режима &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt; Chrome для полностраничных скриншотов:&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;https://q.cnblogs.com/q/71564&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;D:\Zeusro.github.io\img\in-post\bilibili\cnblogs-71564.png&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;C:\Program Files\Google\Chrome\Application\chrome.exe&quot;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;

&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$chromePath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--headless&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--disable-gpu&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--window-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1280&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--virtual-time-budget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;--screenshot&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$outputPath&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Объяснение параметров:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--headless=new&lt;/code&gt;: Использовать новый режим без интерфейса&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--disable-gpu&lt;/code&gt;: Отключить ускорение GPU&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--window-size=1280,2000&lt;/code&gt;: Установить размер окна 1280x2000 пикселей, достаточно большая высота для захвата полной страницы&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--virtual-time-budget=10000&lt;/code&gt;: Дать странице 10 секунд виртуального времени, чтобы убедиться, что весь контент загружен&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--screenshot=$outputPath&lt;/code&gt;: Указать путь сохранения скриншота&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ссылки&quot;&gt;Ссылки:&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/zeusro/p/3705426.html&quot;&gt;Извлечение якоря возврата наверх Bilibili&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.cnblogs.com/marvin/p/ExtendWizNoteAutoNnavigation.html&quot;&gt;Как добавить красивую навигационную таблицу содержания в ваш WizNote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.goat1000.com/tagcanvas-functions.php&quot;&gt;http://www.goat1000.com/tagcanvas-functions.php&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2026/01/13/bilibili/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2026/01/13/bilibili/</guid>
        
        <category>HTML</category>
        
        
      </item>
    
      <item>
        <title>为什么中国没有互联网企业</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    &lt;p&gt;在垃圾回收站学计算机是一件非常蛋疼的事情，基本上我只学习了HTML和数据库这门课，而其他人学的是HTML那门课——我还记得有一天，我在图书馆里面找书，然后从夹缝里面冒出来一张便利店的纸条，上面写满了爱~&lt;/p&gt;

&lt;p&gt;在国内从事计算机其实非常累，网络问题不说，教材又厚又脱离实际。而等到从业，又是漫长的工作/学习曲线，等到刚入门（10年经验），又会被经济周期，家庭琐事，年龄歧视等困扰。这导致大部分人在30岁左右，都以转行告终。&lt;/p&gt;

&lt;p&gt;在我个人看来，过于急功近利，是国内没有两家互联网企业的根本原因。&lt;/p&gt;

&lt;h2 id=&quot;业务开发框架设计&quot;&gt;业务开发&amp;amp;框架设计&lt;/h2&gt;

&lt;p&gt;在我看来，国内所谓的“互联网企业”，只是把业务的场景从线下搬到线上。以银行来说，早期的国内银行是以人工记账为主，银行可以说是最早吃到计算机红利的企业，但它的业务模式本身并没有太多变化，除了招商银行做得比较好之外，其余银行的移动端APP做得非常臃肿，响应缓慢，这二十年的变化无非是去IOE（IBM、Oracle（甲骨文）、EMC）比较成功而已。&lt;/p&gt;

&lt;p&gt;但熟悉计算机架构的我知道，假设真让我去接手这些历史遗留项目，我也是不敢去IOE的，因为天知道里面有什么硬件限定坑（比如用特定的选择编译/编程技巧绕过特定硬件架构缺陷，但当你移植程序到Linux时，发现反而成为了bug）。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/life.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;就业务开发而言，我们的互联网改造无疑是非常成功的。早上可以直接扫码支付买个早餐，出门直接滴滴打车，上班用AI辅助编造废话，中午点个外卖，下午可以刷脸支付要点零食，晚上直接到预约的娱乐场所接着happy。&lt;/p&gt;

&lt;p&gt;只要有钱，一部手机可以通行全国。但编程用的框架基本跟我们没啥关系。虽然现在很多顶级的项目开始由中国人牵头，但编程框架本身就是一个不挣钱的买卖。
很多人从事这个行业纯粹为了脱贫，更何况大部分人（包括我在内）对知识产权缺乏敬畏，毫无付费习惯。
大家只是一味地享受别人的免费劳动，不把别人的时间当一回事儿。&lt;/p&gt;

&lt;h2 id=&quot;开源开发语言设计&quot;&gt;开源开发&amp;amp;语言设计&lt;/h2&gt;

&lt;p&gt;技术框架，本质是一种提供便利的工具集。因为编程语言本身只做基本的标准实现，所以需要开源的技术框架去构建语言本身的生态。&lt;/p&gt;

&lt;p&gt;编程语言就像是一支“毛笔”，而开源的技术框架，则是这支毛笔画出来的“书法作品”。两者是一种相辅相成的关系。
以Python这种低性能的弱类型语言来说，语言设计本身其实没有太多让我喜欢的地方，但架不住人工学习框架TensorFlow，PyTorch都是Python写的。&lt;/p&gt;

&lt;p&gt;而Python的性能优化方向，竟然是绕过GIL限制和使用C语言。这让我觉得有点顾此失彼的感觉。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/640.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;就好像我拿着一张美女宣传单去按摩，结果迎接我的是一个七尺壮汉，他告诉我美女休息了，他更有力量，更适合按摩这种工作。对此，我的身心都是拒绝的。因为这跟我的初衷完全相反。&lt;/p&gt;

&lt;p&gt;AI得道，Python升天。&lt;/p&gt;

&lt;h2 id=&quot;语言设计操作系统开发&quot;&gt;语言设计&amp;amp;操作系统开发&lt;/h2&gt;

&lt;p&gt;编程语言是一种很深的学问。那些控制流和机器码的翻译，抽象语法树，GC，线程，编译原理啥的，关是算1+1我都整不出来。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/ppt.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;计算机又是一种很让人挫败的行业。天赋型选手在四五年级就会HTML，开始机器人编程造火箭了；而四五年级的我，当时还只会在亲戚的电脑上注册个QQ，然后被同学们虐爆泡泡堂。&lt;/p&gt;

&lt;p&gt;更别提国内这B环境，大学叫兽们努力上岸了，只记得拿着十年前的教程在课堂上吹水，然后告诉你，“其实学C#2005就够了，即便现在有.net core了，都一个样~”&lt;/p&gt;

&lt;p&gt;我真是服了，一个是平台限定语言，一个是跨平台甚至跨语言编译的次时代语言，这能一样吗？学习编程，最重要的第一步是参与开源项目设计。理解工业设计的流程，而不是待在泰坦尼克号上求援。&lt;/p&gt;

&lt;p&gt;编程语言依托于操作系统，操作系统相当于编程语言的载体。操作系统，是连接硬件和软件的纽带。也是软件开发最高的山。&lt;/p&gt;

&lt;h2 id=&quot;软件开发集成电路&quot;&gt;软件开发&amp;amp;集成电路&lt;/h2&gt;

&lt;p&gt;其实业务开发，开源框架设计，编程语言设计，操作系统开发，这些都能归集为“软件开发”。如果从这个角度上看，实际上我们的互联网行业还有很大的一部分空白。&lt;/p&gt;

&lt;p&gt;把人当成耗材，就要接受工作交接期间网站的流量波动与不稳定。更别提平台用户是可以发起“重定向攻击”的——抛弃那些苛刻对待员工的“互联网平台企业”。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;国内所谓的敏捷开发不过是人力推车（而且还是让3个人推一辆四轮新能源车）。在《人月神话》中提到这种“孕妇生孩子”把戏——1个孕妇怀胎生娃要40周，但不可能安排10个孕妇在4周内完成生产。我见过那些所谓通宵赶工的项目，后面无一不是烂尾，要么就是重做。&lt;/p&gt;

&lt;p&gt;急功近利浪费的时间精力跟“节约的时间”完全不值一提，如果造成技术漏洞，反而更得不偿失。&lt;/p&gt;

&lt;p&gt;软件开发的上游是集成电路。其实我们有一个很好的基金在支持这些高新技术的集成电路产业。只不过资源一再错配，钱没有流入真正为国为民的企业和人手中。&lt;/p&gt;

&lt;p&gt;软件开发和集成电路，本该是厚积薄发，重积累和理论联系实际的行业。结果大学科研几乎以骗经费为荣（比如把导师称为老板）；
而私营企业以年轻化为由，各种割中年人韭菜，让工程经验丰富的高级开发工程师失业，还美其名曰“为社会输送人才”。&lt;/p&gt;

&lt;h2 id=&quot;剑气之争&quot;&gt;剑气之争&lt;/h2&gt;

&lt;p&gt;这就好像是华山派的剑宗与气宗之争。剑宗（年轻一派）掌权之后把学气宗的人（资深开发人员）踢出公司。因为学剑宗见效快，都是确定能盈利的项目，而且人力便宜。&lt;/p&gt;

&lt;p&gt;剑宗重剑的招式，而气宗（开源项目，语言设计，操作系统）注重内功修炼。
两者本无对错，在年幼时，假借剑谱（go，C#,Java语言）练剑没有任何问题，但大部分人不过是一种语言用上4/5年，就以资深开发自居，其实不过是50行代码复制了4/5年而已。&lt;/p&gt;

&lt;p&gt;要么就是Java boy 那种，为了下一份工作方便，在不需要微服务的前提下强行微服务。&lt;/p&gt;

&lt;p&gt;这不过是东施效颦，真正的内功（互联协议，编程规范，抽象建模能力）没有及时沉淀。最终当“剑”生锈（比如PHP不再流行，项目被竞争对手打压），就只能被迫转行，武学净废。&lt;/p&gt;

&lt;p&gt;气宗的“气”并不是傲气，而是一种生存的底气。这种底气是一种十年如一日，久久为功，持之以恒的坚持。是这个世界上所有人都不看好你，你即便手中无剑，依旧偏向虎山行的勇气。&lt;/p&gt;

&lt;p&gt;我们需要理想，因为在漫长的黑夜中，唯有希望能带我们远航。&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;p&gt;Studying computer science at a garbage dump is a truly painful experience. I basically only learned the HTML and database courses, while others were learning just the HTML course—I still remember one day in the library when I found a convenience store receipt stuck in the cracks, filled with love~&lt;/p&gt;

&lt;p&gt;Working in computer science in China is really exhausting. Aside from network issues, the textbooks are thick and detached from reality. When you finally enter the industry, there’s a long curve of work and learning. By the time you’re just getting started (with 10 years of experience), you’re already troubled by economic cycles, family issues, and age discrimination. This causes most people to switch careers around the age of 30.&lt;/p&gt;

&lt;p&gt;In my personal view, the fundamental reason why China doesn’t have two internet giants is due to the excessive impatience for quick success.&lt;/p&gt;

&lt;h2 id=&quot;business-development--framework-design&quot;&gt;Business Development &amp;amp; Framework Design&lt;/h2&gt;

&lt;p&gt;In my opinion, so-called “internet companies” in China merely move offline business scenarios online. Take banks, for example: early domestic banks primarily used manual accounting. Banks were among the first to benefit from computing, but their business models themselves didn’t change much. Except for China Merchants Bank doing relatively well, other banks’ mobile apps are bloated and slow to respond. The change over the past twenty years mostly boils down to successfully ditching IOE (IBM, Oracle, EMC).&lt;/p&gt;

&lt;p&gt;But as someone familiar with computer architecture, I know that if I were to take over these legacy projects, I wouldn’t dare to ditch IOE either, because who knows what hardware-specific traps lie inside? (For example, using certain compilation or programming tricks to circumvent hardware architecture flaws, but when porting the program to Linux, these become bugs.)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/life.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From the standpoint of business development, our internet transformation has undoubtedly been very successful. In the morning, you can scan a QR code to buy breakfast; step outside and hail a Didi ride; at work, use AI to help fabricate nonsense; order takeout at noon; pay for snacks with face recognition in the afternoon; and in the evening, head straight to a booked entertainment venue to keep the party going.&lt;/p&gt;

&lt;p&gt;As long as you have money, one smartphone lets you travel nationwide. But the programming frameworks used have basically nothing to do with us. Although many top projects are now led by Chinese people, programming frameworks themselves are a money-losing business.&lt;br /&gt;
Many people work in this field purely to escape poverty, and most people (myself included) have no respect for intellectual property and no habit of paying for it.&lt;br /&gt;
Everyone just enjoys others’ free labor without valuing their time.&lt;/p&gt;

&lt;h2 id=&quot;open-source-development--language-design&quot;&gt;Open Source Development &amp;amp; Language Design&lt;/h2&gt;

&lt;p&gt;Technical frameworks are essentially convenience toolkits. Because programming languages only implement basic standards, open source technical frameworks are needed to build the language’s ecosystem.&lt;/p&gt;

&lt;p&gt;A programming language is like a “brush,” and open source technical frameworks are the “calligraphy works” painted by this brush. They complement each other.&lt;br /&gt;
Take Python, a low-performance, dynamically typed language. I don’t particularly like its language design, but I can’t deny that frameworks like TensorFlow and PyTorch are written in Python.&lt;/p&gt;

&lt;p&gt;Python’s performance optimization direction surprisingly involves bypassing the GIL and using C. This feels somewhat like a case of missing the forest for the trees.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/640.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s like I brought a flyer advertising a beautiful masseuse, but was greeted by a burly man who told me the beauty was resting and that he was stronger and better suited for massage work. My mind and body rejected this because it completely contradicted my original intention.&lt;/p&gt;

&lt;p&gt;AI has found its way, Python ascends.&lt;/p&gt;

&lt;h2 id=&quot;language-design--operating-system&quot;&gt;Language Design &amp;amp; Operating System&lt;/h2&gt;

&lt;p&gt;Programming languages are a deep field of study. Control flow, machine code translation, abstract syntax trees, GC, threads, compiler theory—all these are so complex that I can barely solve 1+1.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/ppt.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Computing is also a frustrating industry. Gifted kids learn HTML in fourth or fifth grade and start programming robots and building rockets; meanwhile, I was just registering a QQ account on a relative’s computer and getting crushed in Bubble Trouble by classmates.&lt;/p&gt;

&lt;p&gt;Not to mention the terrible environment in domestic universities: professors try hard to get tenure, only to be found teaching with decade-old tutorials and saying, “Actually, learning C# 2005 is enough. Even with .NET Core now, it’s basically the same~”&lt;/p&gt;

&lt;p&gt;I’m truly amazed. One is a platform-specific language; the other is a next-generation language supporting cross-platform and even cross-language compilation. How can these be the same? The most important first step in learning programming is participating in open source project design. Understanding industrial design processes, rather than waiting for rescue on the Titanic.&lt;/p&gt;

&lt;p&gt;Programming languages rely on operating systems, which serve as their carriers. Operating systems are the bridge between hardware and software. They are the highest mountain in software development.&lt;/p&gt;

&lt;h2 id=&quot;software-development--integrated-circuits&quot;&gt;Software Development &amp;amp; Integrated Circuits&lt;/h2&gt;

&lt;p&gt;In fact, business development, open source framework design, programming language design, and operating system development can all be categorized as “software development.” From this perspective, our internet industry still has a large blank space.&lt;/p&gt;

&lt;p&gt;Treating people as consumables means accepting traffic fluctuations and instability during work handovers. Not to mention platform users can launch “redirect attacks”—abandoning those harsh “internet platform companies” that mistreat employees.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So-called agile development in China is just manpower pushing carts (and three people pushing a four-wheeled new energy vehicle at that). The Mythical Man-Month describes this “pregnant woman giving birth” trick—one woman takes 40 weeks to give birth, but you can’t schedule 10 women to deliver in 4 weeks. I have seen so many “all-nighter” projects, all ending in abandonment or rework.&lt;/p&gt;

&lt;p&gt;The time and energy wasted chasing quick wins are negligible compared to the “time saved,” and if technical vulnerabilities result, the losses are even greater.&lt;/p&gt;

&lt;p&gt;The upstream of software development is integrated circuits. We do have a good fund supporting high-tech integrated circuit industries. But resources are repeatedly misallocated, and money doesn’t flow to truly national and people-serving enterprises and individuals.&lt;/p&gt;

&lt;p&gt;Software development and integrated circuits should be industries of steady accumulation and theory-practice integration. Instead, university research almost prides itself on scamming funds (e.g., calling advisors “bosses”);&lt;br /&gt;
private enterprises, under the guise of youthfulness, harvest middle-aged workers like crops, causing experienced senior developers to lose jobs, all while praising this as “delivering talent to society.”&lt;/p&gt;

&lt;h2 id=&quot;two-styles-of-swords&quot;&gt;Two styles of swords&lt;/h2&gt;

&lt;p&gt;This is like the dispute between the Sword Sect and Qi Sect of Mount Hua. After the Sword Sect (the younger faction) took power, they kicked out Qi Sect practitioners (senior developers). Because Sword Sect practices yield fast results, are sure to profit, and have cheap labor.&lt;/p&gt;

&lt;p&gt;The Sword Sect focuses on heavy sword techniques, while the Qi Sect (open source projects, language design, operating systems) emphasizes internal cultivation.&lt;br /&gt;
Neither is right or wrong. In youth, practicing sword techniques with borrowed manuals (Go, C#, Java) is fine. But most people just use one language for 4-5 years and then call themselves senior developers, which is basically copying 50 lines of code for 4-5 years.&lt;/p&gt;

&lt;p&gt;Or they become Java boys who forcibly implement microservices without need, just to ease the next job hunt.&lt;/p&gt;

&lt;p&gt;This is just a poor imitation. True internal skill (internet protocols, coding standards, abstract modeling ability) has not been properly accumulated. When the “sword” rusts (e.g., PHP falls out of favor, projects get crushed by competitors), they’re forced to switch careers, wasting their martial arts.&lt;/p&gt;

&lt;p&gt;The “Qi” in Qi Sect is not arrogance but a kind of survival confidence. This confidence is a ten-year daily effort, persistent, and enduring. It is the courage to move toward the tiger’s den even when the whole world doubts you and you have no sword in hand.&lt;/p&gt;

&lt;p&gt;We need ideals because, in the long dark night, only hope can carry us far.&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;p&gt;ゴミ捨て場でコンピュータを学ぶのは非常に骨の折れることでした。基本的に私はHTMLとデータベースの授業しか受けませんでしたが、他の人はHTMLの授業を受けていました——ある日、図書館で本を探していると、隙間からコンビニのレシートが出てきて、その上には愛の言葉がびっしり書かれていました。&lt;/p&gt;

&lt;p&gt;国内でコンピュータ関連の仕事をするのは本当に大変で、ネットワークの問題はさておき、教材は分厚くて実践からかけ離れています。業界に入ってからも、長い仕事や学習の曲線が続き、ようやく入門（10年の経験）した頃には、経済の波、家庭の問題、年齢差別などに悩まされます。これが多くの人が30歳前後で転職を余儀なくされる原因です。&lt;/p&gt;

&lt;p&gt;私個人の見解では、あまりにも短期的な利益を追求することが、国内に二つの大手インターネット企業が存在しない根本的な理由だと思います。&lt;/p&gt;

&lt;h2 id=&quot;业务开发框架设计&quot;&gt;业务开发&amp;amp;框架设计&lt;/h2&gt;

&lt;p&gt;私の考えでは、国内のいわゆる「インターネット企業」は、単に業務のシーンをオフラインからオンラインに移しただけです。銀行を例に取ると、国内の銀行は初期は手作業の帳簿管理が主で、銀行はコンピュータの恩恵を最も早く受けた企業の一つですが、そのビジネスモデル自体はあまり変わっていません。招商銀行が比較的うまくやっている以外は、他の銀行のモバイルアプリは非常に肥大化し、反応も遅いです。この20年の変化は、IOE（IBM、Oracle（甲骨文）、EMC）からの脱却が比較的成功したことに過ぎません。&lt;/p&gt;

&lt;p&gt;しかし、コンピュータアーキテクチャに詳しい私としては、もしこれらのレガシープロジェクトを引き継ぐことになったら、IOEからの脱却は怖くてできません。なぜなら、特定のハードウェア制限の罠があるかもしれないからです（例えば特定のコンパイルやプログラミング技術で特定のハードウェアアーキテクチャの欠陥を回避しているが、Linuxに移植したら逆にバグになるなど）。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/life.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;業務開発に関して言えば、我々のインターネット改造は間違いなく非常に成功しています。朝はQRコードで朝食を買い、出かけるときは滴滴でタクシーを呼び、仕事中はAIで無駄話を補助してもらい、昼はデリバリーを注文し、午後は顔認証でスナックを買い、夜は予約した娯楽施設で楽しむ。&lt;/p&gt;

&lt;p&gt;お金さえあれば、スマホ一つで全国を移動できます。しかし、プログラミングに使うフレームワークは基本的に我々には関係ありません。今では多くのトッププロジェクトが中国人によって主導されていますが、プログラミングフレームワーク自体は儲からない商売です。
多くの人がこの業界に従事するのは純粋に貧困から脱するためであり、ましてや大多数の人（私も含めて）は知的財産権に対する敬意がなく、支払いの習慣もありません。
皆、ただひたすら他人の無料労働を享受し、他人の時間を尊重していません。&lt;/p&gt;

&lt;h2 id=&quot;开源开发语言设计&quot;&gt;开源开发&amp;amp;语言设计&lt;/h2&gt;

&lt;p&gt;技術フレームワークは本質的に便利なツールセットです。プログラミング言語自体は基本的な標準実装のみを行うため、言語自体のエコシステムを構築するためにオープンソースの技術フレームワークが必要です。&lt;/p&gt;

&lt;p&gt;プログラミング言語は「毛筆」のようなものであり、オープンソースの技術フレームワークはその毛筆で描かれた「書道作品」です。両者は相補的な関係にあります。
Pythonのような低性能で弱い型付けの言語に関して言えば、言語設計自体には特に好きなところはありませんが、TensorFlowやPyTorchのようなフレームワークがPythonで書かれているため、学ぶ価値があります。&lt;/p&gt;

&lt;p&gt;Pythonの性能最適化の方向性は、GIL制限を回避しC言語を使うことですが、これはどこか本末転倒な感じがします。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/640.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;まるで美人のチラシを持ってマッサージに行ったら、迎えてくれたのは七尺の大男で、「美女は休みだが、俺の方が力があってマッサージに向いている」と言われたような気分です。これは私の本意とは全く違います。&lt;/p&gt;

&lt;p&gt;AIが発展し、Pythonが飛躍する。&lt;/p&gt;

&lt;h2 id=&quot;语言设计操作系统开发&quot;&gt;语言设计&amp;amp;操作系统开发&lt;/h2&gt;

&lt;p&gt;プログラミング言語は非常に奥深い学問です。制御フローや機械語への翻訳、抽象構文木、GC、スレッド、コンパイラ理論など、1+1も計算できない私には到底理解できません。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/ppt.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;コンピュータはまた挫折感を味わいやすい業界でもあります。天才型の子供は小学校4、5年生でHTMLを学び、ロボットプログラミングやロケット製造を始めますが、私の小学校4、5年生の頃は親戚のパソコンでQQに登録することしかできず、同級生にバブルシュートでボコボコにされていました。&lt;/p&gt;

&lt;p&gt;ましてや国内のこの酷い環境では、大学の教授たちは努力しているように見えて、10年前の教材を持ち出して授業で自慢し、「実はC#2005を学べば十分で、.net coreがあっても大差ない」と言うだけです。&lt;/p&gt;

&lt;p&gt;本当に呆れます。片方はプラットフォーム限定言語で、もう片方はクロスプラットフォームでクロス言語コンパイル可能な次世代言語です。同じなわけがありません。プログラミング学習で最も重要なのは、オープンソースプロジェクトの設計に参加し、産業設計のプロセスを理解することであり、タイタニック号で助けを求めることではありません。&lt;/p&gt;

&lt;p&gt;プログラミング言語はOSに依存し、OSはプログラミング言語の土台です。OSはハードウェアとソフトウェアをつなぐ架け橋であり、ソフトウェア開発の最高峰です。&lt;/p&gt;

&lt;h2 id=&quot;软件开发集成电路&quot;&gt;软件开发&amp;amp;集成电路&lt;/h2&gt;

&lt;p&gt;実は業務開発、オープンソースフレームワーク設計、プログラミング言語設計、OS開発はすべて「ソフトウェア開発」に帰着します。この視点で見ると、我々のインターネット業界にはまだ大きな空白があります。&lt;/p&gt;

&lt;p&gt;人を消耗品と見なすなら、業務引継ぎ期間中のサイトのトラフィック変動や不安定さを受け入れなければなりません。プラットフォームのユーザーが「リダイレクト攻撃」を仕掛けることもあります——厳しく社員を扱う「インターネットプラットフォーム企業」は捨てましょう。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;国内のいわゆるアジャイル開発は、人力で車を押しているに過ぎません（しかも3人で四輪の新エネルギーカーを押しているようなものです）。『人月の神話』にはこの「妊婦が出産する手法」が出てきます——1人の妊婦が40週かけて出産するが、10人の妊婦に4週間で出産させることは不可能です。私は徹夜で急ぐプロジェクトを見てきましたが、どれも後に破綻し、再構築を余儀なくされました。&lt;/p&gt;

&lt;p&gt;短期的な利益を急ぐことで浪費される時間と労力は「節約された時間」とは比べものにならず、技術的な欠陥を生むと逆に損失が大きくなります。&lt;/p&gt;

&lt;p&gt;ソフトウェア開発の上流は集積回路です。実は我々にはこれらの先端技術の集積回路産業を支援する良い基金があります。しかし資源は何度も誤配され、お金は真に国や民のためになる企業や人の手に渡っていません。&lt;/p&gt;

&lt;p&gt;ソフトウェア開発と集積回路は、本来は厚い蓄積と理論と実践の結びつきの業界であるべきです。ところが大学の研究はほぼ資金詐取を誇り（例えば指導教官を「ボス」と呼ぶなど）、民間企業は若返りを理由に中年のエンジニアを搾取し、高度な経験を持つ開発者を失業させ、それを「社会に人材を送り出している」と美化しています。&lt;/p&gt;

&lt;h2 id=&quot;剑气之争&quot;&gt;剑气之争&lt;/h2&gt;

&lt;p&gt;これはまるで華山派の剣宗と気宗の争いのようです。剣宗（若い世代）が権力を握ると、気宗（ベテラン開発者）を会社から追い出します。なぜなら剣宗は効果が早く、確実に利益を生むプロジェクトを担当し、人件費も安いからです。&lt;/p&gt;

&lt;p&gt;剣宗は剣の技を重視し、気宗（オープンソースプロジェクト、言語設計、OS）は内功の修練を重視します。
両者に正誤はありません。若い時には剣譜（Go、C#、Java言語）を使って剣を練習するのは全く問題ありませんが、多くの人は1つの言語を4、5年使っただけでベテランを自称し、実際には50行のコードを4、5年コピーしているだけです。&lt;/p&gt;

&lt;p&gt;あるいはJavaボーイのように、次の仕事のためにマイクロサービスが不要な状況で無理にマイクロサービスを導入する人もいます。&lt;/p&gt;

&lt;p&gt;これは東施が西施の真似をするようなもので、本当の内功（インターネットプロトコル、コーディング規範、抽象モデリング能力）は適切に蓄積されていません。最終的に「剣」が錆びる（例えばPHPの流行が終わり、プロジェクトが競合に負ける）と、転職を余儀なくされ、武学は無駄になります。&lt;/p&gt;

&lt;p&gt;気宗の「気」は傲慢さではなく、生きるための底力です。この底力は十年一日の如く、長く続けること、粘り強い努力のことです。世界中の誰もがあなたを認めなくても、手に剣がなくても、虎の山に向かう勇気です。&lt;/p&gt;

&lt;p&gt;私たちは理想を必要としています。なぜなら長い暗闇の中で、希望だけが私たちを遠くへ導いてくれるからです。&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;p&gt;Учиться компьютерным наукам на свалке — это очень неприятное занятие, по сути я изучал только HTML и базу данных, в то время как другие учились только HTML — я до сих пор помню, как однажды в библиотеке, когда я искал книгу, из щели выскользнула записка из магазина с надписью, полной любви~&lt;/p&gt;

&lt;p&gt;Работать в сфере IT в Китае на самом деле очень тяжело: проблемы с сетью — это не говоря уже о толстых и оторванных от реальности учебниках. А когда начинаешь работать, тебя ждет долгий путь обучения и работы, и когда ты только входишь в профессию (после 10 лет опыта), тебя начинают беспокоить экономические циклы, семейные проблемы, возрастная дискриминация. В итоге большинство людей к 30 годам заканчивают сменой профессии.&lt;/p&gt;

&lt;p&gt;На мой взгляд, чрезмерная погоня за быстрыми результатами — это основная причина отсутствия в Китае хотя бы двух крупных интернет-компаний.&lt;/p&gt;

&lt;h2 id=&quot;бизнес-разработка--проектирование-фреймворков&quot;&gt;Бизнес-разработка &amp;amp; проектирование фреймворков&lt;/h2&gt;

&lt;p&gt;С моей точки зрения, так называемые «интернет-компании» в Китае просто перенесли бизнес-сценарии из оффлайна в онлайн. Возьмем, например, банки: в ранние годы в Китае банки вели учет вручную, они были одними из первых, кто получил выгоду от компьютеров, но их бизнес-модель практически не изменилась. За исключением招商银行 (China Merchants Bank), остальные банки сделали свои мобильные приложения очень громоздкими и медленными. Изменения за последние двадцать лет свелись в основном к успешному отказу от IOE (IBM, Oracle, EMC).&lt;/p&gt;

&lt;p&gt;Но как человек, знакомый с компьютерной архитектурой, я знаю, что если бы мне пришлось работать с такими наследственными проектами, я бы тоже не рискнул отказываться от IOE, потому что никто не знает, какие аппаратные ограничения там заложены (например, использование специфических техник компиляции/программирования, чтобы обойти аппаратные недостатки, но при переносе программы на Linux это превращается в баги).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/life.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Что касается бизнес-разработки, наша интернет-трансформация, безусловно, очень успешна. Утром можно просто отсканировать QR-код и купить завтрак, выйти из дома и вызвать такси через Didi, на работе использовать AI для составления бессмысленных текстов, заказать еду на обед, после обеда оплатить покупку с помощью распознавания лица, а вечером отправиться в забронированное развлекательное заведение и продолжать веселиться.&lt;/p&gt;

&lt;p&gt;Если у тебя есть деньги, один телефон может обеспечить доступ по всей стране. Но фреймворки для программирования в этом почти не участвуют. Хотя сейчас многие топовые проекты возглавляют китайцы, сами фреймворки — это не прибыльный бизнес. Многие работают в этой сфере просто чтобы выбраться из бедности, тем более что большинство (включая меня) не испытывают уважения к интеллектуальной собственности и не привыкли платить за знания. Все просто наслаждаются чужим бесплатным трудом, не считая время других людей.&lt;/p&gt;

&lt;h2 id=&quot;открытая-разработка--проектирование-языков&quot;&gt;Открытая разработка &amp;amp; проектирование языков&lt;/h2&gt;

&lt;p&gt;Технические фреймворки по сути являются набором удобных инструментов. Поскольку языки программирования реализуют только базовые стандарты, для построения экосистемы языка необходимы открытые фреймворки.&lt;/p&gt;

&lt;p&gt;Язык программирования — это как «кисть для каллиграфии», а открытые фреймворки — это «каллиграфические произведения», созданные этой кистью. Они взаимодополняют друг друга. В случае с Python, языком с низкой производительностью и слабой типизацией, сам язык не особо меня привлекает, но невозможно игнорировать тот факт, что такие фреймворки, как TensorFlow и PyTorch, написаны на Python.&lt;/p&gt;

&lt;p&gt;Оптимизация производительности Python, как ни странно, заключается в обходе ограничения GIL и использовании C. Это вызывает у меня ощущение, что решается одна проблема за счет другой.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/640.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Это похоже на то, как если бы я пришел на массаж по объявлению с изображением красавицы, а меня встретил крупный мужчина ростом семь футов, который сказал, что красавица отдыхает, а он гораздо сильнее и лучше подходит для массажа. Мое тело и душа отказываются от такого. Потому что это противоречит моим первоначальным ожиданиям.&lt;/p&gt;

&lt;p&gt;AI достиг вершины, Python взлетел.&lt;/p&gt;

&lt;h2 id=&quot;проектирование-языков--разработка-операционных-систем&quot;&gt;Проектирование языков &amp;amp; разработка операционных систем&lt;/h2&gt;

&lt;p&gt;Языки программирования — это глубокая наука. Управляющие конструкции, перевод в машинный код, абстрактные синтаксические деревья, GC, потоки, принципы компиляции — даже простейшие вещи, вроде 1+1, для меня сложны.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/ppt.jpeg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Компьютерная индустрия — это очень разочаровывающая сфера. Талантливые дети уже в четвертом-пятом классе знают HTML и начинают заниматься робототехникой и создавать ракеты; а я в том же возрасте только регистрировался в QQ на компьютере родственников и меня безжалостно обыгрывали в Bubble Trouble одноклассники.&lt;/p&gt;

&lt;p&gt;Не говоря уже о нашем ужасном окружении: профессора в университете стараются, чтобы сдать экзамены, но используют учебники десятилетней давности и говорят: «На самом деле, изучать C# 2005 достаточно, даже если сейчас есть .net core — они одинаковы~»&lt;/p&gt;

&lt;p&gt;Я в шоке: один язык ограничен платформой, другой — это следующий уровень с кросс-платформенной и даже кросс-языковой компиляцией, как они могут быть одинаковыми? Первый шаг в изучении программирования — участие в разработке open source проектов. Понимание процесса промышленного дизайна, а не сидение на Титанике и просьба о помощи.&lt;/p&gt;

&lt;p&gt;Языки программирования зависят от операционных систем, которые являются их платформой. Операционная система — связующее звено между аппаратным обеспечением и программным обеспечением. Это вершина программной разработки.&lt;/p&gt;

&lt;h2 id=&quot;разработка-по--интегральные-схемы&quot;&gt;Разработка ПО &amp;amp; интегральные схемы&lt;/h2&gt;

&lt;p&gt;На самом деле, бизнес-разработка, проектирование open source фреймворков, разработка языков и операционных систем — все это можно объединить в «разработку программного обеспечения». Если смотреть с этой точки зрения, в нашей интернет-индустрии еще много пустого пространства.&lt;/p&gt;

&lt;p&gt;Если рассматривать человека как расходный материал, придется мириться с колебаниями и нестабильностью трафика сайта во время передачи работы. Не говоря уже о том, что пользователи платформы могут инициировать «атаки перенаправления» — забудьте о тех интернет-компаниях, которые жестоко обращаются с сотрудниками.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/zero-it-in-china/3.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Так называемая «гибкая разработка» в Китае — это просто люди, толкающие тележку (причем трое толкают одну четырехколесную электромашину). В книге «Миф о человеко-месяце» описывается трюк «беременной женщины» — одна беременная вынашивает ребенка 40 недель, но невозможно заставить 10 беременных родить за 4 недели. Я видел проекты, которые делались в режиме «ночных смен», и все они были провалами или переделками.&lt;/p&gt;

&lt;p&gt;Погоня за быстрыми результатами тратит время и силы, которые не стоят сэкономленных минут, а если возникают технические ошибки — это еще хуже.&lt;/p&gt;

&lt;p&gt;Верхняя ступень разработки ПО — это интегральные схемы. У нас есть хороший фонд, поддерживающий высокотехнологичную индустрию интегральных схем. Но ресурсы постоянно перераспределяются неправильно, деньги не доходят до настоящих национальных предприятий и специалистов.&lt;/p&gt;

&lt;p&gt;Разработка ПО и интегральных схем должна быть фундаментальной, требующей накопления и тесной связи теории с практикой. Но университетские исследования почти гордятся тем, что обманывают финансирование (например, называют научного руководителя «боссом»); а частные компании под предлогом молодости режут «лук» с опытных разработчиков, увольняя старших инженеров и при этом красиво называя это «подготовкой кадров для общества».&lt;/p&gt;

&lt;h2 id=&quot;борьба-меча-и-ци&quot;&gt;Борьба меча и ци&lt;/h2&gt;

&lt;p&gt;Это похоже на борьбу между двумя школами на горе Хуашань — мечников (молодое поколение) и ци (ветераны-разработчики). Когда мечники приходят к власти, они выгоняют тех, кто учился у ци. Потому что мечники делают быстрые проекты, которые приносят прибыль, и работают дешевле.&lt;/p&gt;

&lt;p&gt;Мечники делают акцент на мощных приемах меча, а ци (open source проекты, проектирование языков, операционные системы) сосредоточены на внутренней силе.&lt;/p&gt;

&lt;p&gt;Оба подхода не являются ошибочными. В молодости, тренируясь по учебникам меча (go, C#, Java), это нормально. Но большинство людей просто используют один язык 4-5 лет и считают себя опытными, на самом деле они просто копировали 50 строк кода 4-5 лет подряд.&lt;/p&gt;

&lt;p&gt;Или, как Java boy, который ради удобства следующей работы внедряет микросервисы там, где они не нужны.&lt;/p&gt;

&lt;p&gt;Это всего лишь подражание, настоящая внутренняя сила (интернет-протоколы, стандарты программирования, способность к абстрактному моделированию) не успевает сформироваться. Когда «меч» ржавеет (например, PHP выходит из моды, проекты проигрывают конкурентам), остается только сменить профессию, и все усилия оказываются напрасными.&lt;/p&gt;

&lt;p&gt;«Ци» — это не гордыня, а жизненная сила. Эта сила — это десятилетия упорства, постоянства и настойчивости. Это смелость идти в тигровую гору, даже когда весь мир против тебя и у тебя нет меча в руках.&lt;/p&gt;

&lt;p&gt;Нам нужны идеалы, потому что в долгие темные ночи только надежда может привести нас к дальнему плаванию.&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2025/12/30/no-it-in-china/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2025/12/30/no-it-in-china/</guid>
        
        <category>code</category>
        
        
      </item>
    
      <item>
        <title>时间序列信用卡消费策略</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    
&lt;p&gt;微信支付的策略是基于最后一笔，而支付宝的支付顺序总是瞎搞，无论是自动顺序支付和系统自动匹配，带着明显的平台倾向性。这些都不是我想要的结果。&lt;/p&gt;

&lt;p&gt;我决定自己设计一个时间序列信用卡消费策略，完成每一笔信用卡支付。&lt;/p&gt;

&lt;h2 id=&quot;形式逻辑和定义&quot;&gt;形式逻辑和定义&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;時間序列&lt;/strong&gt;：是一組按照時間發生先後順序進行排列的數據點序列。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;时间序列对象&lt;/strong&gt;：基于时间序列的程序语言对象。时间必须是第一成员。&lt;/p&gt;

&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;时间序列函数&lt;/strong&gt;：基于时间序列的程序语言函数。时间（或者时间序列对象）必须是第一参数成员。&lt;/p&gt;

&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//资源池减一&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// Cards 从本地文件加载信用卡信息，格式是每行 &quot;银行 账单日/最后还款日&quot;。如“农业银行 1/26”&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;//省略&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;时间序列不动点&lt;/strong&gt;：信用卡账单日的第二天。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;账单日第二天消费策略&lt;/strong&gt;：在信用卡账单日的第二天信用卡消费策略。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;最大交易折扣交易策略&lt;/strong&gt;：每一笔信用卡支付选取折扣金额最大的交易途径的消费策略。&lt;/p&gt;

&lt;h2 id=&quot;基本类型建模&quot;&gt;基本类型建模&lt;/h2&gt;

&lt;p&gt;信用卡、交易、交易策略。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;        &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;//金融机构&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;//账单日&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;LastDate&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;//最后还款日&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;基于交易金额的二分算法&quot;&gt;基于交易金额的二分算法&lt;/h2&gt;

&lt;p&gt;信用卡消费是一种延长应付账款的消费。单次交易的交易费用（1%左右）由商家承担。
而从消费者角度考虑，申请多张信用卡，并设置不同的账单日，就相当于循环账期，形成个人的“永续债”。&lt;/p&gt;

&lt;p&gt;小额消费主要以薅银行羊毛为主。比如农业银行的18-0.3，浦发银行的16-0.01，广发银行的n-0.01。个人感受是1000元以上的消费，以账单日第二天消费为宜——即尽量在信用卡账单日的第二天消费，为最佳时序不动点。&lt;/p&gt;

&lt;p&gt;因此总的入口算法，以消费金额，使用二分法消费：&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Pay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;c&quot;&gt;//follow the rule and find the best policy&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DefaultDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SmallMoney&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//账单日第二天消费策略 BillingDatePolicy&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewBillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//最大交易折扣交易策略 DiscountPolicys&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;card&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;card&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;账单日第二天消费策略&quot;&gt;账单日第二天消费策略&lt;/h3&gt;

&lt;p&gt;基本交易倾向是遍历所有信用卡，尽量接近账单第二日交易。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Hour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 极大值&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddDate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;最大交易折扣策略&quot;&gt;最大交易折扣策略&lt;/h3&gt;

&lt;p&gt;也叫薅羊毛算法。这个算法很简单，就是哪里有钱去哪里。以农业银行来说，参加每月活动报名之后，日消费第一笔18元减0.3元，浦发银行需要16元，以此类推。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//资源池减一&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/hangzhou/alipay&quot;&gt;完整算法在我的自己实现的 OOOS 里面&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;每天03元我要薅到农行倒闭&quot;&gt;每天0.3元，我要薅到农行倒闭&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/sheep/bf9328c7d254e46545f7e0f4ae095591.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    &lt;p&gt;WeChat Pay’s strategy is based on the last transaction, while Alipay’s payment order is always chaotic. Whether it is automatic payment order or system auto‑matching, the platform bias is obvious. None of these behaviors are what I want.&lt;/p&gt;

&lt;p&gt;I decided to design my own time‑series credit‑card consumption strategy to control every single credit‑card payment.&lt;/p&gt;

&lt;h2 id=&quot;formal-logic-and-definitions&quot;&gt;Formal Logic and Definitions&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Time series&lt;/strong&gt;: a sequence of data points arranged according to the order in which they occur over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time‑series object&lt;/strong&gt;: a programming‑language object based on a time series. &lt;em&gt;Time must be the first member.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Time‑series function&lt;/strong&gt;: a programming‑language function based on a time series. &lt;em&gt;Time (or a time‑series object) must be the first parameter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
            &lt;span class=&quot;c&quot;&gt;// reduce resource pool&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// Cards loads credit‑card information from a local file.&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// Format: each line is &quot;Bank BillingDate/LastDate&quot;.&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// Example: &quot;AgriculturalBank 1/26&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// omitted&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Time‑series fixed point&lt;/strong&gt;: the second day after a credit card’s billing date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Billing‑date‑plus‑one strategy&lt;/strong&gt;: a credit‑card spending strategy that executes on the day after the billing date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maximum‑discount transaction strategy&lt;/strong&gt;: for each transaction, choose the payment method that yields the highest discount.&lt;/p&gt;

&lt;h2 id=&quot;basic-type-modeling&quot;&gt;Basic Type Modeling&lt;/h2&gt;

&lt;p&gt;Credit cards, transactions, and transaction strategies.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;        &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;// financial institution&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// billing date&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;LastDate&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// last repayment date&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;binarysearch-algorithm-based-on-transaction-amount&quot;&gt;Binary‑Search Algorithm Based on Transaction Amount&lt;/h2&gt;

&lt;p&gt;Credit‑card spending is a way to extend accounts payable. The transaction fee (around 1%) is paid by the merchant.&lt;/p&gt;

&lt;p&gt;From the consumer’s perspective, applying for multiple credit cards with different billing dates effectively forms a rotating credit cycle — a kind of personal “perpetual bond.”&lt;/p&gt;

&lt;p&gt;Small transactions are mainly used to farm bank rewards. For example, Agricultural Bank offers 18 yuan − 0.3 yuan for the day’s first payment after activation; SPD Bank has 16 yuan − 0.01 yuan; GF Bank has n − 0.01 yuan, etc.&lt;/p&gt;

&lt;p&gt;Based on personal experience, for payments over 1000 yuan, the best timing is the second day after the billing date — the &lt;strong&gt;optimal time‑series fixed point.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Therefore, the top‑level algorithm uses a binary decision on the transaction amount:&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Pay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// follow the rule and find the best policy&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DefaultDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SmallMoney&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c&quot;&gt;// BillingDatePolicy: spend on the day after billing date&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewBillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;c&quot;&gt;// Maximum discount strategy: go wherever the discount is highest&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;card&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;card&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;billingdateplusone-strategy&quot;&gt;Billing‑Date‑Plus‑One Strategy&lt;/h3&gt;

&lt;p&gt;The fundamental tendency is to iterate over all credit cards and choose the one whose billing‑date‑plus‑one is closest.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Hour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// large initial value&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddDate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;maximumdiscount-transaction-strategy&quot;&gt;Maximum‑Discount Transaction Strategy&lt;/h3&gt;

&lt;p&gt;Also called the “reward‑farming algorithm.” It is simple: follow the discount.&lt;/p&gt;

&lt;p&gt;For example, with Agricultural Bank, after registering for the monthly activity, the first daily consumption of 18 yuan gives a 0.3 yuan discount; SPD Bank requires 16 yuan; GF Bank uses n − 0.01, and so on.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
            &lt;span class=&quot;c&quot;&gt;// reduce resource pool&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/hangzhou/alipay&quot;&gt;The complete algorithm is in my self‑implemented OOOS&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;03-yuan-per-day--i-will-farm-until-agricultural-bank-collapses&quot;&gt;0.3 Yuan per Day — I Will Farm Until Agricultural Bank Collapses&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/sheep/bf9328c7d254e46545f7e0f4ae095591.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    &lt;p&gt;WeChat Pay の戦略は「最後の一筆」に基づいていますが、Alipay の支払順序は常に混乱しており、自動順序決済やシステム自動マッチングにおいても明らかなプラットフォーム側のバイアスが存在します。これらは私が望む結果ではありません。&lt;/p&gt;

&lt;p&gt;そこで私は、自分自身で時間系列に基づくクレジットカード消費戦略を設計し、すべてのクレジットカード決済をコントロールすることにしました。&lt;/p&gt;

&lt;h2 id=&quot;形式論理と定義&quot;&gt;形式論理と定義&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;時間序列（Time Series）&lt;/strong&gt;：時間の発生順に並べられたデータ点の集合。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;時間序列オブジェクト&lt;/strong&gt;：時間系列に基づくプログラミング言語のオブジェクト。時間は必ず最初のメンバーであること。&lt;/p&gt;

&lt;p&gt;例：&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;時間系列関数（Time-series function）&lt;/strong&gt;：時間系列に基づく関数。時間（または時間系列オブジェクト）が必ず最初の引数である。&lt;/p&gt;

&lt;p&gt;例：&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//資源プールを1減らす&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// Cards はローカルファイルからクレジットカード情報を読み込む。&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// フォーマット：1行につき「銀行名 账单日/最後還款日」。例：「农业银行 1/26」&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;//省略&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;時間系列の不動点&lt;/strong&gt;：クレジットカードの「账单日（締め日）の翌日」。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;账单日翌日消費戦略&lt;/strong&gt;：クレジットカードの締め日の翌日に消費する戦略。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;最大割引消費戦略&lt;/strong&gt;：各取引に対して最も割引額が大きい支払方法を選択する戦略。&lt;/p&gt;

&lt;h2 id=&quot;基本タイプモデリング&quot;&gt;基本タイプモデリング&lt;/h2&gt;

&lt;p&gt;クレジットカード、取引、取引戦略の定義。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;        &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;//金融機関&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;//账单日（締め日）&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;LastDate&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;//最後還款日（返済期限）&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;取引金額に基づく二分アルゴリズム&quot;&gt;取引金額に基づく二分アルゴリズム&lt;/h2&gt;

&lt;p&gt;クレジットカードの消費は「应付账款（未払金）」を延長する行為と言えます。1% 前後の手数料は店舗側が負担します。&lt;/p&gt;

&lt;p&gt;消費者の視点では、複数のクレジットカードを申し込み、異なる账单日を設定することで、回転する支払サイクルを作り出し、個人の「永続債（Perpetual bond）」のような仕組みを形成できます。&lt;/p&gt;

&lt;p&gt;小額消費は主に「銀行のキャンペーンを最大限利用する」目的で行います。例えば：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;农业银行：18 元 − 0.3 元&lt;/li&gt;
  &lt;li&gt;浦发银行：16 元 − 0.01 元&lt;/li&gt;
  &lt;li&gt;广发银行：n − 0.01 元&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;そして、私の実感では、&lt;strong&gt;1000 元を超える支払いについては、账单日翌日の消費が最適&lt;/strong&gt;です。すなわち「時間系列の最適不動点」。&lt;/p&gt;

&lt;p&gt;したがって上位アルゴリズムは、金額によって二分する方式を採用します：&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Pay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;c&quot;&gt;//follow the rule and find the best policy&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DefaultDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SmallMoney&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//账单日翌日消費戦略 BillingDatePolicy&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewBillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//最大取引割引戦略 DiscountPolicys&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;card&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;card&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;账单日翌日消費戦略&quot;&gt;账单日翌日消費戦略&lt;/h3&gt;

&lt;p&gt;基本方針は「全カードを走査し、账单日翌日に最も近いタイミングで決済する」ことです。&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Hour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 極大値&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddDate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;最大割引取引戦略&quot;&gt;最大割引取引戦略&lt;/h3&gt;

&lt;p&gt;別名「羊毛狩り（ポイント稼ぎ）アルゴリズム」。&lt;br /&gt;
やることは単純で、「割引があるところに行く」だけです。&lt;/p&gt;

&lt;p&gt;农业银行の例：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;月次キャンペーン登録後、1日の最初の 18 元消費：0.3 元割引&lt;/li&gt;
  &lt;li&gt;浦发銀行：16 元&lt;/li&gt;
  &lt;li&gt;以此类推（などなど）&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;//資源プールを1減らす&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/hangzhou/alipay&quot;&gt;See OOOS&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;1日-03-元私は農業銀行が倒れるまで取り続ける&quot;&gt;1日 0.3 元、私は農業銀行が倒れるまで取り続ける&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/sheep/bf9328c7d254e46545f7e0f4ae095591.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;p&gt;Стратегия WeChat Pay основана на «последней транзакции», тогда как порядок платежей Alipay всегда хаотичен. Автоматическое списание и системное сопоставление демонстрируют явный платформенный перекос. Всё это не соответствует тому, что мне нужно.&lt;/p&gt;

&lt;p&gt;Поэтому я решил разработать собственную стратегию расходования кредитных карт на основе временных рядов, чтобы контролировать каждую операцию.&lt;/p&gt;

&lt;h2 id=&quot;формальная-логика-и-определения&quot;&gt;Формальная логика и определения&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Временной ряд&lt;/strong&gt; — последовательность точек данных, упорядоченных по времени.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Объект временного ряда&lt;/strong&gt; — объект языка программирования, основанный на временном ряде. Время обязательно является первым полем.&lt;/p&gt;

&lt;p&gt;Пример:&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Функция временного ряда&lt;/strong&gt; — это функция, основанная на временных данных. Параметр времени (или объект временного ряда) должен быть первым параметром.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;// уменьшение ресурсного пула&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// Cards загружает информацию о кредитных картах из локального файла.&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// Формат: каждая строка — «банк дата_биллинга/дата_погашения».&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// Например: «ABC 1/26»&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;// опущено&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Неподвижная точка временного ряда&lt;/strong&gt; — второй день после даты выписки кредитной карты.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Стратегия расходования на второй день после даты выписки&lt;/strong&gt; — стратегия использования кредитных карт на следующий день после даты выписки.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Стратегия максимальной скидки&lt;/strong&gt; — для каждой операции выбирается способ оплаты с наибольшей скидкой.&lt;/p&gt;

&lt;h2 id=&quot;моделирование-базовых-типов&quot;&gt;Моделирование базовых типов&lt;/h2&gt;

&lt;p&gt;Кредитные карты, транзакции, стратегии транзакций.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;        &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;// финансовая организация&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// дата выписки&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;LastDate&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// крайний срок погашения&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Time&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt;   &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;  &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;бинарный-алгоритм-на-основе-суммы-транзакции&quot;&gt;Бинарный алгоритм на основе суммы транзакции&lt;/h2&gt;

&lt;p&gt;Расходование по кредитной карте — это форма продления кредиторской задолженности. Комиссия за транзакцию (около 1%) оплачивается продавцом.&lt;/p&gt;

&lt;p&gt;С точки зрения потребителя, оформление нескольких кредитных карт с разными датами выписки создаёт цикл вращающихся долгов — персональный «вечный долг» (perpetual bond).&lt;/p&gt;

&lt;p&gt;Мелкие покупки в основном используются для получения бонусов банков. Например:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ABC: 18 – 0.3&lt;/li&gt;
  &lt;li&gt;SPDB: 16 – 0.01&lt;/li&gt;
  &lt;li&gt;CGB: n – 0.01&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;По моему опыту, для расходов более 1000 юаней оптимально платить &lt;strong&gt;на второй день после даты выписки&lt;/strong&gt; — это оптимальная неподвижная точка временного ряда.&lt;/p&gt;

&lt;p&gt;Поэтому общий алгоритм определяет стратегию на основе бинарного разбиения суммы:&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Zeusro&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Pay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;c&quot;&gt;// follow the rule and find the best policy&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DefaultDiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Money&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SmallMoney&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;// стратегия расходования на второй день после биллинга&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NewBillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;// стратегия максимальной скидки&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;discount&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;card&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Payment&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;card&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mvp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;deals&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;стратегия-расходования-на-второй-день-после-даты-выписки&quot;&gt;Стратегия расходования на второй день после даты выписки&lt;/h3&gt;

&lt;p&gt;Основной принцип — перебрать все кредитные карты и выбрать ту, чья дата «выписка + 1 день» наиболее близка к текущему времени.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BillingDatePolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;now&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;t&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Card&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Duration&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Hour&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// большое значение&lt;/span&gt;

	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cards&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sub&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BillingDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AddDate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestDelta&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delta&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BestCard&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bestCard&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;стратегия-максимальной-скидки&quot;&gt;Стратегия максимальной скидки&lt;/h3&gt;

&lt;p&gt;Называется также алгоритмом «снятия сливок» — идти туда, где дают выгоду.&lt;/p&gt;

&lt;p&gt;Например, в ABC после регистрации в ежемесячной акции первая ежедневная операция на 18 юаней даёт скидку 0.3 юаня.&lt;br /&gt;
SPDB — 16 юаней.&lt;br /&gt;
И так далее.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DiscountPolicys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MVP&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DiscountPolicy&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;float32&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;k&quot;&gt;continue&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;maxDiscount&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Discount&lt;/span&gt;
			&lt;span class=&quot;c&quot;&gt;// уменьшение ресурсного пула&lt;/span&gt;
			&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Resource&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Bank&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;best&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/zeusro/system/tree/main/function/local/n/china/hangzhou/alipay&quot;&gt;Полный алгоритм находится в моём собственном проекте OOOS&lt;/a&gt;。&lt;/p&gt;

&lt;h2 id=&quot;каждый-день-03-юаня--буду-получать-пока-abc-не-развалится&quot;&gt;Каждый день 0.3 юаня — буду получать, пока ABC не развалится&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/sheep/bf9328c7d254e46545f7e0f4ae095591.jpg&quot; alt=&quot;img&quot; /&gt;&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Thu, 11 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2025/12/11/card/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2025/12/11/card/</guid>
        
        <category>n</category>
        
        <category>P</category>
        
        
      </item>
    
      <item>
        <title>Go学长围观Java boy嘲讽C#</title>
        <description>&lt;!-- Chinese Version --&gt;
&lt;div class=&quot;zh post-container&quot;&gt;
    
    
&lt;p&gt;2013年的时候我就注册了博客园，第一从业编程语言是C#。&lt;/p&gt;

&lt;p&gt;那会儿还有点流量。&lt;a href=&quot;https://www.cnblogs.com/shanyou&quot;&gt;张善友&lt;/a&gt;是微软C#的中国步道师，当他还在腾讯垂死挣扎的时候我还差点信了，最后还是直接转&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go&lt;/code&gt;语言了。&lt;/p&gt;

&lt;p&gt;2015年那会儿经常在网上跟java boy（&lt;del&gt;JB&lt;/del&gt;）们互喷，现在想想还有点搞笑。&lt;/p&gt;

&lt;p&gt;2020年在科兴科学园的电梯见过他一面，我当面说了一句“C#现在不是不行了吗？”他非常尴尬，但由于我们在同一个下行的电梯，于是出于礼貌敷衍了我一下。&lt;/p&gt;

&lt;h2 id=&quot;形式逻辑和定义&quot;&gt;形式逻辑和定义&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;皮裤原理&lt;/strong&gt;：在回答别人问题的时候。不一定要告诉他真实的答案。很多时候，告诉他一个符合他想象的答案，可能效果更好。因为不是每一个人，都有勇气去接受他不懂的东西，愿意去理解他未知的领域。对绝大多数人来说，更倾向用已有的想法，去解释看到的一切。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AOT 动态库&lt;/strong&gt;（Ahead-of-Time Dynamic Library） 是 .NET 在 AOT 编译模式下生成的一类可被其它语言、引擎或平台调用的 原生动态链接库（如 .dll、.so、.dylib）。它让 C# 代码能够像 C/C++ 编译的库一样被引用，不需要 .NET 运行时参与执行。&lt;/p&gt;

&lt;h2 id=&quot;背景&quot;&gt;背景&lt;/h2&gt;

&lt;p&gt;　　.NET(以下简称N)心里想:现在企业级应用.NET用的少，但起码.net的语法特性优美，IDE宇宙最强吧，啧啧。&lt;/p&gt;

&lt;p&gt;　　JAVA(以下简称J)心里想:我大JAVA遍地开花，什么Android,kotlin,scale，总之就是一个字:叼。&lt;/p&gt;

&lt;h2 id=&quot;撕逼大战&quot;&gt;撕逼大战&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/go-java-c.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;事情的发生是从落魄N想学安卓开始。他接触了一段时候后，吐槽Android studio开始的。大家知道这玩意很多坑的，随后N就随带的埋怨其老东家Google起来最后连java也一起喷了起来。为了公正我们把喷点罗列出来。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;项目无故卡死&lt;/li&gt;
  &lt;li&gt;模拟器横竖屏bug&lt;/li&gt;
  &lt;li&gt;呆逼虚拟机简直逗比，性能杀手&lt;/li&gt;
  &lt;li&gt;java不支持隐式变量声明&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;J: .net 都不知道是用来干嘛的。。 大型集群不行。。开发人员不多。。。 还要授权费。。&lt;/p&gt;

&lt;p&gt;N: 存储方案也可以用MySQL啊 , 只是一些系统的集成方案都被java的占了&lt;/p&gt;

&lt;p&gt;J: 因为当时.net还没开源啊 , 不可否认这就是开源的力量 , 最后还不是被逼到要开源&lt;/p&gt;

&lt;p&gt;N心里想:尼玛这关开源什么关系。然后说:25台服务器撑起了stackoverflow.com，说集群不行是偏见吧。 应用的瓶颈不能怪语言，是人的技术问题。&lt;/p&gt;

&lt;p&gt;J: 集群可以的话，京东就不会忍痛改为Java了&lt;/p&gt;

&lt;p&gt;N:那是语言设计问题好吗？ 关应用性能什么事？&lt;/p&gt;

&lt;p&gt;J:那是语言设计的问题，不喜欢可以不用啊。 而且你说的语法糖Java8已经支持了 . scale 也是支持语法糖&lt;/p&gt;

&lt;p&gt;N: 你确定java8有隐式变量类型推断？&lt;/p&gt;

&lt;p&gt;J:我说的是语法糖，你知道什么是语法糖吗？&lt;/p&gt;

&lt;p&gt;N: var就不叫语法糖吗&lt;/p&gt;

&lt;p&gt;J: 喜欢这种编程方式的可以使用这种语言(kotlin)，编译后一样是Java的字节码，各种新特性，这就是开源带来的好处，就算让.net抄，也可以带来压倒性的东西&lt;/p&gt;

&lt;p&gt;N想:尼玛你自己打不过了竟然召唤你的基友，不同种语言好吗？我.NET还能编译成MSIL呢我是不是该把他给叫出来.MSbuild都开源了真他妈跨平台编译了我是不是也得把他召唤出来，但是出于逼格，N说: 说的好像java比.NET之前就有拉姆达表达式似得 .&lt;/p&gt;

&lt;p&gt;J: 说的好像整个运行机制不像Java一样&lt;/p&gt;

&lt;p&gt;路人甲及时补刀:你那么喜欢.net还学安卓干什么&lt;/p&gt;

&lt;p&gt;N知道事态不对了，自己进了狼群了，赶紧身退: 好坏都是比较产生的，拿自己好处和对方短处比。没有可比性，反过来也是一样。不理智，只能说各有千秋。不让人有批评意见的社会是不会有进步空间的，好吗？你活在天朝不满意政府难道你就非得投河自尽吗，还不是得苟延残喘下去。散了吧，不合你们扯了&lt;/p&gt;

&lt;p&gt;J看起来很不服气，继续鞭尸一把: 切，你在一个都是用Java的群数落Java，不打你打谁，语言无分好坏，但你在人家的地盘数落人家的吃饭工具，连做人的基本礼貌都不会，还要谈理智？重点是自己又不是很懂Java，还在自己说Java怎样，不懂Android的虚拟机，还在说Android的虚拟机？？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;没错，被鞭尸的人就是我。针对最后一句话，我想说，呆逼虚拟机低能，大家自己看新闻，很好的话Google后来搞ART干嘛？自己的东西不好就不让别人喷，这是思想狭隘的表现。我想说的是，.NET不好的地方多了去了，但我不会和你们说，但你们说中那就说中了憋，这是事实，我为什么有能力去反驳？哈哈。当然，最后这段话我只是在这里讲，因为我想起了皮裤原理.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这些人极度自负。&lt;/p&gt;

&lt;h2 id=&quot;来自2025-11-27的思考&quot;&gt;来自2025-11-27的思考&lt;/h2&gt;

&lt;p&gt;以上内容整理自&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2015-04-27 23:48&lt;/code&gt;在博客园发表的文章，从今天看来，博客园已经快倒闭了，而张善友先生创办了深圳友浩达，不变的是依旧当着微软MVP。从TIOBE 上看，C# 目前正在逐步蚕食 Java 的市场份额，而且现在 .net core 可以通过AOT 动态库编译成纯原生机器码，供以下语言使用：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;C/C++&lt;/li&gt;
  &lt;li&gt;Go&lt;/li&gt;
  &lt;li&gt;Rust&lt;/li&gt;
  &lt;li&gt;Python（通过FFI）&lt;/li&gt;
  &lt;li&gt;Unity Native Plugin&lt;/li&gt;
  &lt;li&gt;iOS / Android Native
以C++来说，相当于我可以用 .NET core 写 C++代码，这波操作属于是直接偷家了。微软不亏是编程语言界第一邪恶组织。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/assembly-is-mvp.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;而且最近又有了新的命名空间，真是可喜可贺：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;IAsyncEnumerable 异步数据流处理&lt;/li&gt;
  &lt;li&gt;System.Threading.Channels “借鉴”golang 的channel&lt;/li&gt;
  &lt;li&gt;EFCore.BulkExtensions ORM 批量写入&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;参考链接&quot;&gt;参考链接&lt;/h2&gt;

&lt;p&gt;[1]
月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer
https://www.cnblogs.com/zeusro/p/4461808.html&lt;/p&gt;

&lt;p&gt;[2]
月薪集中8k-17k，跳槽率不足四成，Java稳居榜首…
https://zhuanlan.zhihu.com/p/711520388&lt;/p&gt;

&lt;p&gt;[3]
Get up to speed with .NET: What new for .NET Conf 2022
https://developer.microsoft.com/en-us/reactor/events/17372/&lt;/p&gt;

&lt;/div&gt;

&lt;!-- English Version --&gt;
&lt;div class=&quot;en post-container&quot;&gt;
    
    
&lt;p&gt;Back then the platform still had some traffic. Zhang Shanyou was Microsoft’s C# evangelist in China. When he was still struggling at Tencent, I nearly believed him. In the end, I switched directly to the Go language.&lt;/p&gt;

&lt;p&gt;In 2015, I often fought online with “java boy” (&lt;del&gt;junky boy&lt;/del&gt;). Thinking back now, it’s a bit funny.&lt;/p&gt;

&lt;p&gt;In 2020, I met him once in the elevator at Kexing Science Park. I said to him: “Isn’t C# not doing so well now?” He looked very embarrassed, but since we were in the same downward elevator, he responded politely.&lt;/p&gt;

&lt;h2 id=&quot;formal-logic-and-definitions&quot;&gt;Formal Logic and Definitions&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;*Leather Pants Principle **:&lt;br /&gt;
When answering someone’s question, you don’t always need to tell them the real answer. Very often, giving them an answer that *matches their imagination&lt;/em&gt; works better. Because not everyone has the courage to accept that they don’t understand something or is willing to explore an unknown field. Most people prefer to use their existing beliefs to explain everything they see.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AOT Dynamic Library&lt;/strong&gt; (Ahead-of-Time Dynamic Library) is a type of native dynamic library (such as .dll, .so, .dylib) generated by .NET under AOT compilation mode. It allows C# code to be referenced like C/C++ libraries, without requiring the .NET runtime to execute.&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;

&lt;p&gt;.NET (hereinafter referred to as N) thinks: enterprises may not use .NET much nowadays, but at least the syntax is elegant, and its IDE is the strongest in the universe.&lt;/p&gt;

&lt;p&gt;JAVA (hereinafter referred to as J) thinks: Java is everywhere — Android, Kotlin, Scala — in short: awesome.&lt;/p&gt;

&lt;h2 id=&quot;the-flame-war&quot;&gt;The Flame War&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/go-java-c.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The story began when the declining N wanted to learn Android. After some experience, he started complaining about Android Studio. Everyone knows how buggy it can be. Naturally, N also blamed Google and eventually complained about Java as well. For fairness, here are the complaints:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Projects freeze without reason&lt;/li&gt;
  &lt;li&gt;Emulator rotation bugs&lt;/li&gt;
  &lt;li&gt;Dalvik VM is ridiculous, a performance killer&lt;/li&gt;
  &lt;li&gt;Java doesn’t support implicit variable declaration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;J: “.NET is practically useless… can’t handle large clusters… few developers… needs licensing…”&lt;/p&gt;

&lt;p&gt;N: “Storage solutions can use MySQL too. It’s just that many enterprise integrations were taken by Java.”&lt;/p&gt;

&lt;p&gt;J: “Because .NET wasn’t open-source at that time. This is the power of open source. In the end .NET was forced to open source anyway.”&lt;/p&gt;

&lt;p&gt;N thinks: “What does open-source have to do with this?”&lt;br /&gt;
Then says: “25 servers support stackoverflow.com. Saying .NET can’t scale is prejudice. Performance bottlenecks are about people, not languages.”&lt;/p&gt;

&lt;p&gt;J: “If .NET scaled well, JD.com wouldn’t have painfully switched to Java.”&lt;/p&gt;

&lt;p&gt;N: “That’s a language design issue! Not application performance!”&lt;/p&gt;

&lt;p&gt;J: “If you don’t like the design, don’t use it. And the syntax sugar you mentioned already exists in Java 8. Scala also supports syntax sugar.”&lt;/p&gt;

&lt;p&gt;N: “Are you sure Java 8 supports implicit type inference?”&lt;/p&gt;

&lt;p&gt;J: “I said syntax sugar. Do you even know what that means?”&lt;/p&gt;

&lt;p&gt;N: “Isn’t &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var&lt;/code&gt; syntax sugar?”&lt;/p&gt;

&lt;p&gt;J: “If you like that style, you can use Kotlin. It compiles to Java bytecode with all the new features. This is the power of open source. Even if .NET copies, it still can’t compete.”&lt;/p&gt;

&lt;p&gt;N thinks: “Damn, you can’t win so you summon your allied language? Different languages, okay? .NET can compile to MSIL too. Should I summon MSBuild next? MSBuild is open-source and cross-platform now. Should I bring that up?”&lt;br /&gt;
But to maintain some dignity, N says: “You make it sound like Java had lambda expressions earlier than .NET.”&lt;/p&gt;

&lt;p&gt;J: “You make it sound like your runtime mechanism is not similar to Java’s.”&lt;/p&gt;

&lt;p&gt;Bystander: “If you love .NET so much, why are you learning Android?”&lt;/p&gt;

&lt;p&gt;N realizes the situation is bad — he walked into a den of Java fans. He quickly retreats:&lt;br /&gt;
“Good and bad are relative. Comparing your strengths with others’ weaknesses is meaningless. Each language has its merits. A society without criticism cannot progress. If you’re unhappy with the government, will you jump into a river? No — you still struggle on. Let’s stop here, this is pointless.”&lt;/p&gt;

&lt;p&gt;J is not satisfied and strikes again:&lt;br /&gt;
“Cut it out. You insult Java in a Java group — who wouldn’t hit you? Languages have no inherent good or bad, but you insult people’s livelihood tools on their turf. That’s not basic manners. And you’re not even good at Java, yet you judge Java? You don’t understand Android’s VM yet you criticize it?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yes, the one being beaten was me. Regarding the last sentence: Dalvik VM really was awful. Just look at the news — why else did Google create ART later? If something is bad, others can point it out. Pretending criticism is forbidden is narrow-minded. .NET has many flaws too. I just didn’t mention them. But if someone points them out, that’s fair — it’s the truth. Why can’t I refute? Haha. Of course, I only say this here, because I remembered the Leather Pants Principle.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These people were extremely arrogant.&lt;/p&gt;

&lt;h2 id=&quot;thoughts-from-2025-11-27&quot;&gt;Thoughts from 2025-11-27&lt;/h2&gt;

&lt;p&gt;The above content is compiled from an article published on cnblogs on April 27, 2015 at 23:48. Judging from today’s situation, cnblogs is almost defunct, while Mr. Zhang Shanyou founded Shenzhen Youhaoda, and remains a Microsoft MVP. According to TIOBE, C# is gradually eroding Java’s market share, and now .NET Core can be compiled into pure native machine code via AOT dynamic libraries for use by the following languages:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;rouge-gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;rouge-code&quot;&gt;&lt;pre&gt;    •  C/C++
    •  Go
    •  Rust
    •  Python &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;via FFI&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    •  Unity Native Plugin
    •  iOS / Android Native
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For C++ developers, this means I can write C++-callable libraries using .NET Core — essentially infiltrating their home turf. Microsoft truly is the most “evil” organization in the programming language world.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/assembly-is-mvp.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;p&gt;[1]
月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer
https://www.cnblogs.com/zeusro/p/4461808.html&lt;/p&gt;

&lt;p&gt;[2]
月薪集中8k-17k，跳槽率不足四成，Java稳居榜首…
https://zhuanlan.zhihu.com/p/711520388&lt;/p&gt;

&lt;p&gt;[3]
Get up to speed with .NET: What new for .NET Conf 2022
https://developer.microsoft.com/en-us/reactor/events/17372/
In 2013, I registered my Blog Garden (博客园) account. My first professional programming language was C#.&lt;/p&gt;


&lt;/div&gt;

&lt;!-- Japanese Version --&gt;
&lt;div class=&quot;jp post-container&quot;&gt;
    
    
&lt;p&gt;2013年、私はすでにブログ园（cnblogs）に登録しており、最初に使用した職業プログラミング言語は C# でした。&lt;/p&gt;

&lt;p&gt;当時はまだ多少のアクセスがありました。&lt;a href=&quot;https://www.cnblogs.com/shanyou&quot;&gt;张善友&lt;/a&gt; 氏は Microsoft C# の中国エバンジェリストとして知られており、彼がまだ Tencent 内で苦戦していた頃、私は少しだけ信じかけたこともありました。しかし、最終的には &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Go&lt;/code&gt; 言語へと乗り換えました。&lt;/p&gt;

&lt;p&gt;2015年の頃、私はインターネット上で java boy（&lt;del&gt;JB&lt;/del&gt;）たちとよく口論していました。今思えば少し滑稽でもあります。&lt;/p&gt;

&lt;p&gt;2020年、科兴科学園のエレベーターで偶然彼を見かけました。私は彼に向かって「今の C# ってもうダメなんじゃないの？」と直接言いました。彼は非常に気まずそうな顔をしていましたが、同じ下りエレベーターに乗っていたため、礼儀として軽く返事してくれました。&lt;/p&gt;

&lt;h2 id=&quot;形式論理と定義&quot;&gt;形式論理と定義&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;皮パン原理（Leather Pants Principle）&lt;/strong&gt;：&lt;br /&gt;
他人の質問に答えるとき、必ずしも真実だけを語る必要はない。多くの場合、相手が思い込みたい答えを与えたほうが効果的なことがある。なぜなら、多くの人は自分が理解できないものを受け入れる勇気がなく、未知を理解しようともしないからである。人は大抵、既に持っている概念で世界を解釈しようとする。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AOT Dynamic Library&lt;/strong&gt;（Ahead-of-Time Dynamic Library）とは、.NET の AOT コンパイルモードによって生成されるネイティブ動的リンクライブラリ（.dll / .so / .dylibなど）の一種であり、C/C++製ライブラリと同じように他の言語・プラットフォームから呼び出せ、.NET ランタイムを必要としない。&lt;/p&gt;

&lt;h2 id=&quot;背景&quot;&gt;背景&lt;/h2&gt;

&lt;p&gt;　　.NET（以下 N）の心の声：「今どき企業システムで .NET を使うところは減っている。でも少なくとも文法の美しさと IDE の強さは宇宙最強でしょ？」&lt;/p&gt;

&lt;p&gt;　　JAVA（以下 J）の心の声：「我らが JAVA は天下無双、Android、Kotlin、Scala、とにかく ―― 最強。」&lt;/p&gt;

&lt;h2 id=&quot;炎上の始まり&quot;&gt;炎上の始まり&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/go-java-c.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;N が Android を学び始めたことが発端でした。少し触ってみたものの Android Studio の不具合に文句を言い始めました。あの IDE に問題が多いのは周知の事実です。そして N は Google にも文句を言いはじめ、最終的には Java をも巻き添えにしてしまいました。公平を期すために N の不満を挙げます。&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;プロジェクトが無理由でフリーズ&lt;/li&gt;
  &lt;li&gt;エミュレーターの縦横回転バグ&lt;/li&gt;
  &lt;li&gt;Dalvik VM が低性能で笑いもの&lt;/li&gt;
  &lt;li&gt;Java に暗黙的型推論がない&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;J: 「.NETって何に使うの？大規模クラスタは無理だし… 開発者も少ない… しかもライセンス料？」&lt;/p&gt;

&lt;p&gt;N: 「MySQL も使えるし、Java が流行ったのは統合ソリューションが早かっただけ」&lt;/p&gt;

&lt;p&gt;J: 「当時 .NET はオープンソースじゃなかったからね。それがオープンソースの力。最後は .NET も開かざるを得なかった」&lt;/p&gt;

&lt;p&gt;N（心）：「それ関係ないだろ…」&lt;br /&gt;
口では：「stackoverflow.com は25台のサーバーで動いてる。クラスタ弱いって偏見だろ。技術力の問題だ。」&lt;/p&gt;

&lt;p&gt;J: 「本当に強いなら JD（京东）は Java に移行してないよ」&lt;/p&gt;

&lt;p&gt;N: 「それは言語設計の問題で性能とは無関係！」&lt;/p&gt;

&lt;p&gt;J: 「それも含めて言語設計。嫌なら使うな。Java8 には syntax sugar があるし、Scala にもある」&lt;/p&gt;

&lt;p&gt;N: 「Java8 に暗黙的型推論あるの？」&lt;/p&gt;

&lt;p&gt;J: 「syntax sugar の意味わかってる？」&lt;/p&gt;

&lt;p&gt;N: 「&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var&lt;/code&gt; も syntax sugar だろ」&lt;/p&gt;

&lt;p&gt;J: 「そういう書き方が好きなら Kotlin 使えば？Bytecode は Java と同じ。オープンソースの利点。たとえ .NET が真似しても Java の優位は揺るがない」&lt;/p&gt;

&lt;p&gt;N（心）：「お前1人で勝てないから Kotlin 呼ぶなよ… .NET だって MSIL あるぞ… MSBuild だってクロスプラットフォームだぞ…」&lt;br /&gt;
でもプライドのために言ったのは：「まるで Java がラムダを先に発明したかのように言うなよ」&lt;/p&gt;

&lt;p&gt;J: 「まるで Java の VM が .NET と違うとでも？」&lt;/p&gt;

&lt;p&gt;通りすがり: 「.NET が好きなら Android なんて学ぶなよ」&lt;/p&gt;

&lt;p&gt;N は危機を悟り撤退：&lt;br /&gt;
「良い悪いは比較の中にしかない。どちらも長所短所がある。批判のない社会に進歩はない。政府が気に入らないなら、川に飛び込むのか？生きるしかないだろ。以上、解散」&lt;/p&gt;

&lt;p&gt;J、止まらず追撃：&lt;br /&gt;
「Java コミュニティで Java をけなすとか礼儀ゼロ。しかも Java の理解浅いのに文句？Android VM も知らないくせに？」&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;はい。ボコられていたのは私です。&lt;br /&gt;
最後のセリフに答えると：Dalvik VM が微妙なのはニュース見れば分かる。だから Google は ART を作った。欠点に触れられたくないのは心が狭い。もちろん .NET にだって欠点はたくさんある。でも指摘されたら認める。それだけ。&lt;br /&gt;
この言葉はここにだけ書く。なぜなら皮パン原理を思い出したから。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;彼らは極端に自信過剰だった。&lt;/p&gt;

&lt;h2 id=&quot;2025-11-27-からの考察&quot;&gt;2025-11-27 からの考察&lt;/h2&gt;

&lt;p&gt;以上は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2015-04-27 23:48&lt;/code&gt; にブログ园へ投稿した記事をまとめたものです。&lt;br /&gt;
今見ると、博客园はほぼ崩壊状態、張善友氏は深圳友浩达を創業し、今も Microsoft MVP。&lt;br /&gt;
TIOBE の指標によれば、C# は Java のシェアを徐々に奪いつつある。&lt;br /&gt;
今や .NET Core は AOT Dynamic Library として完全なネイティブコードへコンパイルでき、以下の言語から利用可能：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;C/C++&lt;/li&gt;
  &lt;li&gt;Go&lt;/li&gt;
  &lt;li&gt;Rust&lt;/li&gt;
  &lt;li&gt;Python（FFI）&lt;/li&gt;
  &lt;li&gt;Unity Native Plugin&lt;/li&gt;
  &lt;li&gt;iOS / Android Native&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C++ 視点で言えば、.NET Core で C++ コードを書けるようなもの。これは完全に「裏取り」です。&lt;br /&gt;
Microsoft はプログラミング界で最も邪悪な組織 No.1 に相応しい。&lt;/p&gt;

&lt;p&gt;そして最近、新しい namespace も追加されている。素晴らしい：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IAsyncEnumerable&lt;/code&gt; ― 非同期データストリーム&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;System.Threading.Channels&lt;/code&gt; ― Go の channel を「参考に」&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EFCore.BulkExtensions&lt;/code&gt; ― ORM バルク書き込み&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/assembly-is-mvp.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;参考リンク&quot;&gt;参考リンク&lt;/h2&gt;

&lt;p&gt;[1]
月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer
https://www.cnblogs.com/zeusro/p/4461808.html&lt;/p&gt;

&lt;p&gt;[2]
月薪集中8k-17k，跳槽率不足四成，Java稳居榜首…
https://zhuanlan.zhihu.com/p/711520388&lt;/p&gt;

&lt;p&gt;[3]
Get up to speed with .NET: What new for .NET Conf 2022
https://developer.microsoft.com/en-us/reactor/events/17372/&lt;/p&gt;

&lt;/div&gt;

&lt;!-- Russian Version --&gt;
&lt;div class=&quot;ru post-container&quot;&gt;
    
    &lt;p&gt;В 2013 году я уже зарегистрировался в Blog Garden, первый профессиональный язык программирования был C#.&lt;/p&gt;

&lt;p&gt;Тогда ещё был некоторый трафик. &lt;a href=&quot;https://www.cnblogs.com/shanyou&quot;&gt;张善友&lt;/a&gt; был евангелистом Microsoft C# в Китае. Когда он ещё боролся в Tencent, я почти поверил ему, но в итоге напрямую перешёл на язык &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;go&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;В 2015 году я часто спорил в интернете с java boy (&lt;del&gt;JB&lt;/del&gt;), теперь думаю, это немного смешно.&lt;/p&gt;

&lt;p&gt;В 2020 году я встретил его один раз в лифте в Kexing Science Park. Я сказал ему в лицо: «Разве C# сейчас не в порядке?» Он выглядел очень неловко, но поскольку мы были в одном нисходящем лифте, он из вежливости ответил мне.&lt;/p&gt;

&lt;h2 id=&quot;формальная-логика-и-определения&quot;&gt;Формальная логика и определения&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Принцип кожаных штанов&lt;/strong&gt;: При ответе на чьи-то вопросы не обязательно говорить им правдивый ответ. Во многих случаях сказать им ответ, соответствующий их воображению, может быть более эффективным. Потому что не каждый человек имеет смелость принять то, чего он не понимает, готов исследовать неизвестную область. Для подавляющего большинства людей более склонны использовать существующие идеи для объяснения всего, что видят.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AOT динамическая библиотека&lt;/strong&gt; (Ahead-of-Time Dynamic Library) — это тип нативной динамической библиотеки (такой как .dll, .so, .dylib), генерируемой .NET в режиме компиляции AOT. Она позволяет коду C# быть вызванным, как библиотеки C/C++, без участия среды выполнения .NET.&lt;/p&gt;

&lt;h2 id=&quot;фон&quot;&gt;Фон&lt;/h2&gt;

&lt;p&gt;.NET (далее N) думает: теперь в корпоративных приложениях .NET используется мало, но по крайней мере синтаксические особенности .NET элегантны, IDE сильнейшая во вселенной, верно?&lt;/p&gt;

&lt;p&gt;JAVA (далее J) думает: мой великий JAVA везде, Android, kotlin, scale, одним словом: круто.&lt;/p&gt;

&lt;h2 id=&quot;война-пламени&quot;&gt;Война пламени&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/go-java-c.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Происшествие началось с того, что упавший N хотел изучать Android. После некоторого контакта он начал жаловаться на Android Studio. Все знают, что эта штука имеет много проблем, затем N также начал жаловаться на своего старого работодателя Google, и в итоге также обрушился на java. Для справедливости перечислим жалобы.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Проект без причины зависает&lt;/li&gt;
  &lt;li&gt;Баг поворота эмулятора&lt;/li&gt;
  &lt;li&gt;Глупый виртуальный компьютер просто смешной, убийца производительности&lt;/li&gt;
  &lt;li&gt;java не поддерживает неявное объявление переменных&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;J: .net вообще не знаю, для чего используется… Большие кластеры не работают… Разработчиков мало… Ещё нужна плата за лицензию…&lt;/p&gt;

&lt;p&gt;N: Решения хранения также могут использовать MySQL, просто некоторые системные интеграционные решения были заняты java.&lt;/p&gt;

&lt;p&gt;J: Потому что .net тогда ещё не был открыт, нельзя отрицать, это сила открытого исходного кода, в итоге всё равно был вынужден открыться.&lt;/p&gt;

&lt;p&gt;N думает: чёрт, какое это имеет отношение к открытому исходному коду. Затем говорит: 25 серверов поддерживают stackoverflow.com, говорить, что кластеры не работают, — это предрассудок. Узкое место приложения не может винить язык, это проблема человеческих технологий.&lt;/p&gt;

&lt;p&gt;J: Если кластеры могут работать, JD.com не стал бы болезненно переходить на Java.&lt;/p&gt;

&lt;p&gt;N: Это проблема дизайна языка, хорошо? Какое отношение это имеет к производительности приложения?&lt;/p&gt;

&lt;p&gt;J: Это проблема дизайна языка, не нравится — не используй. И синтаксический сахар, о котором ты говорил, Java8 уже поддерживает. scale также поддерживает синтаксический сахар.&lt;/p&gt;

&lt;p&gt;N: Ты уверен, что Java8 имеет неявный вывод типа переменных?&lt;/p&gt;

&lt;p&gt;J: Я сказал синтаксический сахар, ты знаешь, что такое синтаксический сахар?&lt;/p&gt;

&lt;p&gt;N: var не называется синтаксическим сахаром?&lt;/p&gt;

&lt;p&gt;J: Если нравится такой стиль программирования, можно использовать этот язык (kotlin), после компиляции это тот же байт-код Java, все новые функции, это преимущество открытого исходного кода, даже если .net скопирует, также может принести подавляющие вещи.&lt;/p&gt;

&lt;p&gt;N думает: чёрт, ты сам не можешь победить, так вызываешь своего друга, разные языки, хорошо? Я .NET также могу скомпилировать в MSIL, должен ли я его вызвать? MSbuild уже открыт, действительно кроссплатформенная компиляция, должен ли я также вызвать его, но из-за стиля N говорит: звучит так, будто java раньше .NET имел лямбда-выражения.&lt;/p&gt;

&lt;p&gt;J: Звучит так, будто весь механизм выполнения не похож на Java.&lt;/p&gt;

&lt;p&gt;Прохожий своевременно нанёс удар: если ты так любишь .net, зачем изучать Android?&lt;/p&gt;

&lt;p&gt;N знает, что ситуация неправильная, сам попал в волчью стаю, быстро отступает: хорошее и плохое — это результат сравнения, брать свои преимущества и сравнивать с недостатками другого. Нет сравнимости, наоборот тоже. Нерационально, можно только сказать, что у каждого есть свои достоинства. Общество, не позволяющее иметь критические мнения, не будет иметь пространства для прогресса, хорошо? Ты живёшь в Поднебесной, недоволен правительством, разве ты должен обязательно броситься в реку и покончить с собой? Всё равно нужно влачить жалкое существование. Расходимся, не буду с вами спорить.&lt;/p&gt;

&lt;p&gt;J выглядит очень недовольным, продолжает добивать: чёрт, ты в группе, где все используют Java, ругаешь Java, кого ещё бить, если не тебя? Языки не делятся на хорошие и плохие, но ты на чужой территории ругаешь инструменты для заработка, даже базовой вежливости не знаешь, ещё говорить о рациональности? Главное, что сам не очень понимаешь Java, ещё говоришь, что Java такой-то, не понимаешь виртуальную машину Android, ещё говоришь о виртуальной машине Android??&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Да, тот, кого избивали, — это я. Относительно последнего предложения, я хочу сказать, глупая виртуальная машина низкоэффективна, все сами смотрят новости, если бы было хорошо, зачем Google потом делал ART? Своё плохое не позволяет другим ругать, это проявление узости мышления. Я хочу сказать, у .NET плохих мест много, но я не буду вам говорить, но если вы сказали, значит сказали, это факт, почему я должен иметь способность опровергать? Хаха. Конечно, последний абзац я говорю только здесь, потому что вспомнил принцип кожаных штанов.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Эти люди крайне самоуверенны.&lt;/p&gt;

&lt;h2 id=&quot;размышления-от-2025-11-27&quot;&gt;Размышления от 2025-11-27&lt;/h2&gt;

&lt;p&gt;Вышеизложенное содержание составлено из статьи, опубликованной в Blog Garden &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2015-04-27 23:48&lt;/code&gt;, с сегодняшней точки зрения Blog Garden уже почти закрылся, а г-н 张善友 основал Shenzhen Youhaoda, неизменным остаётся то, что всё ещё является Microsoft MVP. Согласно TIOBE, C# постепенно захватывает долю рынка Java, и теперь .net core может быть скомпилирован в чистый нативный машинный код через AOT динамическую библиотеку для использования следующими языками:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;C/C++&lt;/li&gt;
  &lt;li&gt;Go&lt;/li&gt;
  &lt;li&gt;Rust&lt;/li&gt;
  &lt;li&gt;Python (через FFI)&lt;/li&gt;
  &lt;li&gt;Unity Native Plugin&lt;/li&gt;
  &lt;li&gt;iOS / Android Native&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для C++ это эквивалентно тому, что я могу писать код C++ с помощью .NET core, эта операция напрямую крадёт дом. Microsoft действительно является первой злой организацией в мире языков программирования.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/in-post/go-java-c/assembly-is-mvp.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;И недавно появились новые пространства имён, действительно радостно:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;IAsyncEnumerable обработка асинхронных потоков данных&lt;/li&gt;
  &lt;li&gt;System.Threading.Channels «заимствование» channel из golang&lt;/li&gt;
  &lt;li&gt;EFCore.BulkExtensions пакетная запись ORM&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ссылки&quot;&gt;Ссылки&lt;/h2&gt;

&lt;p&gt;[1]
Месячный пост: когда упавший .NET гей встречает непобедимую JAVA фракцию developer
https://www.cnblogs.com/zeusro/p/4461808.html&lt;/p&gt;

&lt;p&gt;[2]
Зарплата сосредоточена на 8k-17k, частота смены работы менее 40%, Java стабильно на первом месте…
https://zhuanlan.zhihu.com/p/711520388&lt;/p&gt;

&lt;p&gt;[3]
Get up to speed with .NET: What new for .NET Conf 2022
https://developer.microsoft.com/en-us/reactor/events/17372/&lt;/p&gt;

&lt;/div&gt;
</description>
        <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
        <link>https://Zeusro.github.io/2025/11/27/go-java-c/</link>
        <guid isPermaLink="true">https://Zeusro.github.io/2025/11/27/go-java-c/</guid>
        
        <category>go</category>
        
        <category>Java</category>
        
        <category>c#</category>
        
        <category>P</category>
        
        
      </item>
    
  </channel>
</rss>
