<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>世界观察日志</title>
    <link>/</link>
    <description>Recent content on 世界观察日志</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <copyright>世界观察日志&lt;br&gt;若无特殊说明，本站所有内容均以CC-BY 4.0协议发布</copyright>
    <lastBuildDate>Sat, 25 May 2024 13:49:01 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ABEMA逆向心得</title>
      <link>/abema%E9%80%86%E5%90%91%E5%BF%83%E5%BE%97/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/abema%E9%80%86%E5%90%91%E5%BF%83%E5%BE%97/</guid>
      <description>ABEMA的逆向相对而言比较简单，没有涉及到Native层的内容，也没有太恶心的混淆。 万变不离其宗，先从检测到区域限制时弹出的错误提示このサービスはお住まいの地域からはご利用になれません 开始入手。常规</description>
      <content>&lt;p&gt;ABEMA的逆向相对而言比较简单，没有涉及到Native层的内容，也没有太恶心的混淆。&lt;/p&gt;
&lt;p&gt;万变不离其宗，先从检测到区域限制时弹出的错误提示&lt;code&gt;このサービスはお住まいの地域からはご利用になれません&lt;/code&gt; 开始入手。常规版的代码比TV版复杂，因此先从TV版开始。&lt;/p&gt;
&lt;p&gt;Android开发中字符串是单独存储在资源文件当中的，因此直接在资源文件中查找，得到字段名&lt;code&gt;error_abroad_label&lt;/code&gt;
&lt;img src=&#34;https://s2.loli.net/2024/05/25/SlWdPOptJjio1r8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;但使用&lt;code&gt;error_abroad_label&lt;/code&gt;进行查找时却没有什么合适的结果，可以确定没有直接通过&lt;code&gt;R.string&lt;/code&gt;的方式读取文本&lt;img src=&#34;https://s2.loli.net/2024/05/25/sVzQUfagoTDpjXt.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;扩大查找范围，字段名的关键词是&lt;code&gt;abroad&lt;/code&gt;，以此进行查找，很快就出现了突破口&lt;code&gt;p167Lc.EnumC2721p&lt;/code&gt;和&lt;code&gt;p167Lc.EnumC2722q&lt;/code&gt;&lt;img src=&#34;https://s2.loli.net/2024/05/25/JxtBWfAZnuCeXSz.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;跳转到代码，右键查找用例，选择看上去代码最简单的&lt;code&gt;m12168a&lt;/code&gt;&lt;img src=&#34;https://s2.loli.net/2024/05/25/QNMAkpuv8TxYfUP.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;可以清楚的看到在程序中所对应的错误：&lt;img src=&#34;https://s2.loli.net/2024/05/25/gdfN4oTUFVnShrX.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;继续查找&lt;code&gt;AppLaunchUseCase.RegionException&lt;/code&gt;的用例，只有最后两条是有用的&lt;img src=&#34;https://s2.loli.net/2024/05/25/G8EC3NpW1YLisDv.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;阅读代码，可以注意到似乎与&lt;code&gt;cVar.f77009e&lt;/code&gt;的值相关联&lt;img src=&#34;https://s2.loli.net/2024/05/25/rYVu9U82m5WKTpQ.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;但无论是cVar的类型&lt;code&gt;InterfaceC0880d&lt;/code&gt;还是用例中的&lt;code&gt;c.invokeSuspend&lt;/code&gt;都没有什么有用的信息&lt;img src=&#34;https://s2.loli.net/2024/05/25/bEOm9JTGRKty47c.png&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://s2.loli.net/2024/05/25/rY2TLpjCq6ubVzm.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;返回&lt;code&gt;m74529A&lt;/code&gt;方法继续阅读代码，注意到else代码块内有&lt;code&gt;regionCheckRepository&lt;/code&gt;与我们的意图相匹配&lt;img src=&#34;https://s2.loli.net/2024/05/25/Ndn9VTq7GW1cZ8y.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;但是是个接口&lt;img src=&#34;https://s2.loli.net/2024/05/25/APsaUVxTKz7i3Wn.png&#34; alt=&#34;image.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;查找该接口的用例，注意到&lt;code&gt;RegionCheckRepositoryImpl&lt;/code&gt;继承了该接口，符合我们的要求&lt;img src=&#34;https://s2.loli.net/2024/05/25/nMBctD5dEGTiwJW.png&#34; alt=&#34;image.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;排除内联类，该类只有三个方法：&lt;code&gt;mo65875a&lt;/code&gt;、&lt;code&gt;mo65876b&lt;/code&gt;、&lt;code&gt;mo65877c&lt;/code&gt;。有鉴于这些方法一个个长得要死，且调用链复杂难以排查，直接使用Frida进行注入调试。调试用脚本如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;performNow&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pb.V&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;implementation&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65875a is called: interfaceC0880d=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65875a result=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;performNow&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pb.V&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;implementation&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65876b is called: interfaceC0880d=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65876b result=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;performNow&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pb.V&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;implementation&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`RegionCheckRepositoryImpl.mo65877c result=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;result&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Frida控制台返回如下内容：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=[object Object]
RegionCheckRepositoryImpl.mo65877c result=COROUTINE_SUSPENDED
RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=[object Object]
RegionCheckRepositoryImpl.mo65877c result=Failure(AppForbiddenExceptionEntity(message=anonymous_ip, cause=tv.abema.AppError$ApiForbiddenException: anonymous_ip
Source: Request{method=GET, url=https://api.p-c3-e.abema-tv.com/v1/ip/check?device=androidtv, headers=[newrelic:**DELETED**, traceparent:**DELETED**, tracestate:**DELETED**], tags={class retrofit2.Invocation=tv.abema.data.api.L$a.a() [androidtv]}}, statusCode=403, errorCode=0))
RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=[object Object]
RegionCheckRepositoryImpl.mo65877c result=COROUTINE_SUSPENDED
RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=[object Object]
RegionCheckRepositoryImpl.mo65877c result=Failure(AppForbiddenExceptionEntity(message=anonymous_ip, cause=tv.abema.AppError$ApiForbiddenException: anonymous_ip
Source: Request{method=GET, url=https://api.p-c3-e.abema-tv.com/v1/ip/check?device=androidtv, headers=[X-NewRelic-ID:**DELETED**, traceparent:**DELETED**, newrelic:**DELETED**, tracestate:**DELETED**], tags={class retrofit2.Invocation=tv.abema.data.api.L$a.a() [androidtv]}}, statusCode=403, errorCode=0))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;因而确定实际调用的方法为&lt;code&gt;mo65877c&lt;/code&gt;。注意到在使用被限制IP时，&lt;code&gt;mo65877c&lt;/code&gt;方法返回Failure，猜想是该值决定ABEMA的区域检测结果。使用未被限制的IP重新注入，控制台返回如下内容：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;RegionCheckRepositoryImpl.mo65877c result=COROUTINE_SUSPENDED
RegionCheckRepositoryImpl.mo65877c is called: interfaceC0880d=[object Object]
RegionCheckRepositoryImpl.mo65877c result=IPCheckEntity(isoCountryCode=CountryCodeEntity(isoCountryCode=JP), division=JAPAN)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;因此，猜测只需将mo65877c方法的返回值强行修改为&lt;code&gt;IPCheckEntity(isoCountryCode=CountryCodeEntity(isoCountryCode=JP), division=JAPAN)&lt;/code&gt;即可。以下是Frida示例代码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;performNow&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pb.V&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IPCheckEntity&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Ab.L0&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CountryCodeEntity&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Ab.X&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CountryCodeJP&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CountryCodeEntity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;$new&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JP&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DivisionType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Java&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;use&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bb.j&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DivisionTypeJAPAN&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DivisionType&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IPCheckEntityJP&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IPCheckEntity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;$new&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;CountryCodeJP&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;DivisionTypeJAPAN&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;RegionCheckRepositoryImpl&lt;/span&gt;[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;implementation&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;interfaceC0880d&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IPCheckEntityJP&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}, &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用该脚本注入后成功绕过ABEMA区域检测，猜测正确，再将Frida脚本转换成Xposed模块即可。&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>爆改Telegram小黄鸭表情</title>
      <link>/%E7%88%86%E6%94%B9telegram%E5%B0%8F%E9%BB%84%E9%B8%AD%E8%A1%A8%E6%83%85/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/%E7%88%86%E6%94%B9telegram%E5%B0%8F%E9%BB%84%E9%B8%AD%E8%A1%A8%E6%83%85/</guid>
      <description>Telegram的表情分为三种：静态图片（PNG），动态图片（WEBM）和动画（Lottie），官方提供的表情包以动画格式为主。由于Telegram在动画表情上使用的TGS格式仅仅只是对Lottie/</description>
      <content>&lt;p&gt;Telegram的表情分为三种：静态图片（PNG），动态图片（WEBM）和动画（Lottie），官方提供的表情包以动画格式为主。由于Telegram在动画表情上使用的TGS格式仅仅只是对Lottie/JSON进行了压缩，而Lottie导出后的文件可以重新导入Adobe After Effects进行编辑，对Telegram的动画表情进行成为了可能。本文以简单的添加图层为例，展示修改Telegram动画表情的过程。&lt;/p&gt;
&lt;h2 id=&#34;0-环境准备&#34;&gt;0. 环境准备&lt;/h2&gt;
&lt;p&gt;所需要的软件为：Adobe After Effects，Adobe Illustrator，Adobe Creative Cloud，其中，Adobe After Effects需要安装&lt;a href=&#34;https://github.com/airbnb/lottie-web/blob/master/build/extension/bodymovin.zxp&#34;&gt;Bodymovin&lt;/a&gt;与&lt;a href=&#34;https://github.com/TelegramMessenger/bodymovin-extension&#34;&gt;Bodymovin for Telegram Stickers&lt;/a&gt;插件。&lt;/p&gt;
&lt;h2 id=&#34;1-素材准备&#34;&gt;1. 素材准备&lt;/h2&gt;
&lt;h3 id=&#34;11-添加图片处理&#34;&gt;1.1 添加图片处理&lt;/h3&gt;
&lt;p&gt;Telegram的动画表情在Adobe After Effects中体现为多个形状图层的叠加，因此所添加的图层也必须预先转换为矢量图。本文使用Vectorizer.AI完成此步骤。
打开&lt;a href=&#34;https://vectorizer.ai/&#34;&gt;Vectorizer.AI&lt;/a&gt;，上传所需的图像，等待处理完成后导出为SVG格式。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/xar9yfhv2MALHt4.png&#34; alt=&#34;Pasted image 20240102105635.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;由于Telegram要求.tgs文件不得大于64KB，所以还需对SVG文件进行压缩。打开&lt;a href=&#34;https://jakearchibald.github.io/svgomg/&#34;&gt;svgomg&lt;/a&gt;，导入先前生成的SVG文件，将&lt;code&gt;Number precision&lt;/code&gt;调至0，可以看到SVG文件大小大幅度下降。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/kA4Y5nZWEzKIfPR.png&#34; alt=&#34;Pasted image 20240102110058.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;将压缩后的SVG文件导入Adobe Illustrator中，再存储为Adobe Illustrator (.ai)格式即可。&lt;/p&gt;
&lt;h3 id=&#34;12-telegram动画表情处理&#34;&gt;1.2 Telegram动画表情处理&lt;/h3&gt;
&lt;p&gt;向&lt;a href=&#34;https://t.me/Stickerdownloadbot&#34;&gt;@Stickerdownloadbot&lt;/a&gt;发送动画表情后，Bot将返回三种格式的文件。此处下载最后一种，文件名以tgs开头的压缩包，解压后可得到.tgs文件。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/YeXiCVmvIWgj84n.png&#34; alt=&#34;Pasted image 20240102110517.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;打开&lt;a href=&#34;https://michielp1807.github.io/lottie-editor/&#34;&gt;lottie-editor&lt;/a&gt;，导入.tgs文件，确认动画正常后点击&lt;code&gt;Save as Lottie/JSON&lt;/code&gt;按钮，即可获得可导入Adobe After Effects的Lottie/JSON格式动画。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/RoPptKLOi13AuXN.png&#34; alt=&#34;Pasted image 20240102110839.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-导入文件&#34;&gt;2. 导入文件&lt;/h2&gt;
&lt;p&gt;在Adobe After Effects中新建项目，随后点击&lt;code&gt;窗口-扩展-Bodymovin&lt;/code&gt;，点击&lt;code&gt;Import Lottie Animation-Import Local File&lt;/code&gt;，选择在步骤1.2中生成的.json文件，等待导入完成。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/r3tmR7bMacvBCG4.png&#34; alt=&#34;Pasted image 20240102111403.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;随后导入步骤1.1中生成的.ai文件，在项目框中右键单击，点击&lt;code&gt;基于所选项新建合成&lt;/code&gt;。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/ARnmpXfieZqtW8M.png&#34; alt=&#34;Pasted image 20240102111911.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击合成框，右键选择&lt;code&gt;创建-从矢量图层创建形状&lt;/code&gt;，
&lt;img src=&#34;https://s2.loli.net/2024/01/02/9NZP47fYAganrh2.png&#34; alt=&#34;Pasted image 20240102112100.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;形状创建完成后在项目框中删除导入的.ai矢量插画文件。&lt;/p&gt;
&lt;p&gt;随后在合成框中右键选择&lt;code&gt;变换-缩放&lt;/code&gt;，将宽度或高度调整为512像素。在项目框中右键刚刚新建的合成，点击&lt;code&gt;合成设置&lt;/code&gt;，将宽度或高度调整为520像素。&lt;/p&gt;
&lt;h2 id=&#34;3修改动画&#34;&gt;3.修改动画&lt;/h2&gt;
&lt;p&gt;Telegram动画表情导入后可能会出现多个&lt;code&gt;Lottie_Main_Comp&lt;/code&gt;合成，通常第一个合成存放实际的动画。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/CADzIOkXesLU8fy.png&#34; alt=&#34;Pasted image 20240102113753.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击第一个&lt;code&gt;Lottie_Main_Comp&lt;/code&gt;合成，将步骤2中创建的合成拖入合成框中进行调整。&lt;/p&gt;
&lt;h2 id=&#34;4-导出动画&#34;&gt;4. 导出动画&lt;/h2&gt;
&lt;p&gt;点击&lt;code&gt;窗口-扩展-Bodymovin for Telegram Stickers&lt;/code&gt;，选择第一个合成，设置导出路径，点击&lt;code&gt;Render&lt;/code&gt;即可。
&lt;img src=&#34;https://s2.loli.net/2024/01/02/lBISsZrbDjJg2RG.png&#34; alt=&#34;Pasted image 20240102114808.png&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>基于Hugo&#43;GitHub Actions&#43;Cloudflare Pages的自构建博客系统的部署</title>
      <link>/%E5%9F%BA%E4%BA%8Ehugo-github-actions-cloudflare-pages%E7%9A%84%E8%87%AA%E6%9E%84%E5%BB%BA%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F%E7%9A%84%E9%83%A8%E7%BD%B2/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/%E5%9F%BA%E4%BA%8Ehugo-github-actions-cloudflare-pages%E7%9A%84%E8%87%AA%E6%9E%84%E5%BB%BA%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F%E7%9A%84%E9%83%A8%E7%BD%B2/</guid>
      <description>前言 Hexo，Hugo 相较于 Wordpress，Typecho 等一众以 PHP 为基础的 CMS 系统而言，存在内容发布困难的缺点。Typecho 发布新内容只需在后台编辑好内容点击发布即可，而 Hugo 等静态站点生成器需要将</description>
      <content>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;Hexo，Hugo 相较于 Wordpress，Typecho 等一众以 PHP 为基础的 CMS 系统而言，存在内容发布困难的缺点。Typecho 发布新内容只需在后台编辑好内容点击发布即可，而 Hugo 等静态站点生成器需要将内容以 Markdown 格式放入指定文件夹，手动执行命令生成静态站点，再通过其他方式上传至网站目录，过程极为繁琐，且对多客户端用户不是很友善。本文提供一种基于 Hugo+GItHub Actions+Cloudflare Pages 的博客部署方式，能够将该过程大幅度简化。&lt;/p&gt;
&lt;h2 id=&#34;准备工作&#34;&gt;准备工作&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;三个 GitHub 仓库&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Articles 仓库，用于储存 Markdown 格式的文章&lt;/li&gt;
&lt;li&gt;Hugo 仓库，用于储存生成站点所需的 Hugo 配置文件与主题&lt;/li&gt;
&lt;li&gt;Blog 仓库，用于储存生成的静态站点文件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置好的博客，本文不会介绍如何配置 Hugo，请自行寻找网络教程&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;配置-hugo-仓库&#34;&gt;配置 Hugo 仓库&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在 Hugo 文件夹内新建&lt;code&gt;.gitignore&lt;/code&gt;文件，并粘贴如下内容&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/public/
/content/posts/
/themes/terminal/resources/
/resources/
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;删除主题下的&lt;code&gt;.git&lt;/code&gt;文件夹，或者将主题添加为 Git Submodule&lt;/li&gt;
&lt;li&gt;用你精湛的 Git 技术把 Hugo 文件夹内的文件上传到 Hugo 仓库，这里提供一份命令参考&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git init
git branch -M main
git add .
git commit -m &amp;#34;Initial Commit&amp;#34;
git remote add origin YOUR_REPOSITORY
git push -u origin
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;配置-articles-仓库&#34;&gt;配置 Articles 仓库&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;a href=&#34;https://github.com/settings/tokens&#34;&gt;https://github.com/settings/tokens&lt;/a&gt; ，点击 Generate new token -&amp;gt; Generate new token(classic) ，在 Select scopes中 勾选 repo 选项，并记住生成的 Token （Token只会显示一次，请妥善保管！）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开 Blog 仓库，点击 Settings -&amp;gt; Secrets -&amp;gt; Actions -&amp;gt; New repository secret ，Name 填写 TOKEN， Secret 填写在第一步保存的 Token&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Blog 仓库内点击 Actions -&amp;gt; set up a workflow yourself ，在编辑框内粘贴如下内容（部分内容需要更改！）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;CI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;on&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;push&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;branches&lt;/span&gt;: [ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;workflow_dispatch&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;jobs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;build&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;runs-on&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;ubuntu-latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;steps&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;uses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;actions/checkout@v3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Install Hugo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;run&lt;/span&gt;: |&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          sudo apt update -y
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          wget https://github.com/gohugoio/hugo/releases/download/v0.105.0/hugo_0.105.0_linux-amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          wget https://github.com/gohugoio/hugo/releases/download/v0.105.0/hugo_extended_0.105.0_linux-amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          sudo dpkg -i hugo_0.105.0_linux-amd64.deb 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          sudo dpkg -i hugo_extended_0.105.0_linux-amd64.deb&lt;/span&gt;          
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Preprocess Articles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;run&lt;/span&gt;: |&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git clone https://${{secrets.TOKEN}}@github.com/&amp;lt;CHANGE IT TO YOUR HUGO REPOSITORY URI!&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          for i in *.md; do file_basename=$(basename &amp;#34;$i&amp;#34; .md); file_date=$(date -d @$(git log --follow --format=%at --date default &amp;#34;$i&amp;#34; | tail -1) --rfc-3339=seconds | sed &amp;#39;s/ /T/&amp;#39;); metadata=&amp;#34;---\ntitle: $file_basename\ndate: $file_date\n---&amp;#34;; firstline=$(head -n 1 &amp;#34;$i&amp;#34;); if [[ $firstline != -* ]]; then sed -i &amp;#34;1 i $metadata&amp;#34; &amp;#34;$i&amp;#34;; fi; done
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          mkdir &amp;lt;CHANGE IT TO YOUR HUGO REPOSITORY NAME!&amp;gt;/content/posts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          cp *.md &amp;lt;CHANGE IT TO YOUR HUGO REPOSITORY NAME!&amp;gt;/content/posts&lt;/span&gt;          
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Generate Site&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;run&lt;/span&gt;: |&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          cd wol-blog-hugo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          hugo -D&lt;/span&gt;          
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Publish&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;run&lt;/span&gt;: |&lt;span style=&#34;color:#e6db74&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          cd wol-blog-hugo/public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git config --global user.email &amp;#34;&amp;lt;CHANGE IT TO YOUR EMAIL!&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git config --global user.name &amp;#34;&amp;lt;CHANGE IT TO YOUR NAME!&amp;gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git config --global init.defaultBranch main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git init
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git branch -M main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git add .
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git commit -m &amp;#34;Update Site at $(date &amp;#34;+%Y%m%d-%H%M%S&amp;#34;)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git remote add origin https://${{secrets.TOKEN}}@github.com/&amp;lt;CHANGE IT TO YOUR BLOG REPOSITORY URI!&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;          git push --force -u origin main&lt;/span&gt;          
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;&amp;lt;CHANGE IT TO YOUR BLOG REPOSITORY URI!&amp;gt;&lt;/code&gt; 替换为 &lt;code&gt;用户名/仓库名.git&lt;/code&gt; 的形式，例如 &lt;code&gt;WOL/WOL-HUGO.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;CHANGE IT TO YOUR HUGO REPOSITORY NAME!&amp;gt;&lt;/code&gt; 替换为仓库名，例如 &lt;code&gt;WOL-HUGO&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;CHANGE IT TO YOUR EMAIL!&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;CHANGE IT TO YOUR NAME!&amp;gt;&lt;/code&gt; 分别替换为Git应使用的邮箱与名字&lt;/p&gt;
&lt;p&gt;点击 Commit ， Actions 将自动运行，若运行成功即代表配置文件正确，此时可以打开 Blog 仓库检查生成的静态站点文件&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Happened ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个配置文件中最难理解的或许是&lt;/p&gt;
&lt;p&gt;&lt;code&gt;for i in *.md; do file_basename=$(basename &amp;quot;$i&amp;quot; .md); file_date=$(date -d @$(git log --follow --format=%at --date default &amp;quot;$i&amp;quot; | tail -1) --rfc-3339=seconds | sed &#39;s/ /T/&#39;); metadata=&amp;quot;---\ntitle: $file_basename\ndate: $file_date\n---&amp;quot;; firstline=$(head -n 1 &amp;quot;$i&amp;quot;); if [[ $firstline != -* ]]; then sed -i &amp;quot;1 i $metadata&amp;quot; &amp;quot;$i&amp;quot;; fi; done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;一行，这实际上是一个压缩成一行的Bash脚本，展开后是这个样子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i in *.md;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     file_basename&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;basename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$i&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; .md&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     file_date&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;date -d @&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;git log --follow --format&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;%at --date default &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$i&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | tail -1&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; --rfc-3339&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;seconds | sed &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/ /T/&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     metadata&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;---\ntitle: &lt;/span&gt;$file_basename&lt;span style=&#34;color:#e6db74&#34;&gt;\ndate: &lt;/span&gt;$file_date&lt;span style=&#34;color:#e6db74&#34;&gt;\n---&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     firstline&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;head -n &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$i&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; $firstline !&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; -* &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 i &lt;/span&gt;$metadata&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$i&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这是一个自动生成 Metadata 的 Bash 脚本，带有对自定义 Metadata 的检测功能。&lt;/p&gt;
&lt;p&gt;其中，&lt;code&gt;$(basename &amp;quot;$i&amp;quot; .md)&lt;/code&gt; 表示使用文件名作为文章的标题， &lt;code&gt;$(date -d @$(git log --follow --format=%at --date default &amp;quot;$i&amp;quot; | tail -1) --rfc-3339=seconds | sed &#39;s/ /T/&#39;)&lt;/code&gt; 表示以文件创建日期作为文章的创建日期（TOML使用RFC-3339格式表示时间）&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;配置-cloudflare-pages&#34;&gt;配置 Cloudflare Pages&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;也可以使用 Vercel ，Github Pages 等静态站点部署服务&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;a href=&#34;https://dash.cloudflare.com/&#34;&gt;https://dash.cloudflare.com/&lt;/a&gt; ，点击 Pages -&amp;gt; 创建项目 -&amp;gt; 连接到Git -&amp;gt; 添加账户，授权 Cloudflare Pages 应用访问 Blog 仓库，点击 开始设置&lt;/li&gt;
&lt;li&gt;在 设置构建和部署 页面修改项目名称（可选），无需更改下列设置，直接点击 保存并部署&lt;/li&gt;
&lt;li&gt;等待部署完成后，访问Cloudflare提供的 pages.dev 域名，即可看到部署好的博客&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;have-a-try&#34;&gt;Have a try&lt;/h2&gt;
&lt;p&gt;打开 Articles 仓库，上传一篇 Markdown 文章，等待构建完成后打开博客即可看到上传的文章&lt;/p&gt;
&lt;h2 id=&#34;its-not-the-end&#34;&gt;It‘s not the end&lt;/h2&gt;
&lt;p&gt;这套部署方案相比于手动部署而言极大程度降低了工作量，但其仍然存在不足：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将Hugo的安装文件链接硬编码在了配置文件中&lt;/li&gt;
&lt;li&gt;需要手动上传 Markdown 文件，较为繁琐&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;简而言之，就是仍有改进空间，敬请期待&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>使用WSL2&#43;Rust&#43;RustRover&#43;esp-rs进行ESP32嵌入式开发</title>
      <link>/%E4%BD%BF%E7%94%A8wsl2-rust-rustrover-esp-rs%E8%BF%9B%E8%A1%8Cesp32%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/%E4%BD%BF%E7%94%A8wsl2-rust-rustrover-esp-rs%E8%BF%9B%E8%A1%8Cesp32%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/</guid>
      <description>本文创作于2023-10-31，其中所提及的内容在您阅读时可能已发生改变。 最近买了块ESP32，打算入门Rust嵌入式开发。由于Windows上存在最大路径限制： Error: Too long output directory: `**FILTER**`. Shorten your project path down to no more than 10 characters (or use</description>
      <content>&lt;p&gt;&lt;em&gt;本文创作于2023-10-31，其中所提及的内容在您阅读时可能已发生改变。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;最近买了块ESP32，打算入门Rust嵌入式开发。由于Windows上存在最大路径限制：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Error: Too long output directory: `**FILTER**`.
Shorten your project path down to no more than 10 characters (or use WSL2 and its native Linux filesystem). Note that tricks like Windows `subst` do NOT work!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;且命令行提示也推荐使用WSL2，所以试着通过WSL2进行开发。踩的坑实在是太多，特此记录。&lt;/p&gt;
&lt;h2 id=&#34;环境准备&#34;&gt;环境准备&lt;/h2&gt;
&lt;h3 id=&#34;内核准备&#34;&gt;内核准备&lt;/h3&gt;
&lt;p&gt;在Windows Store安装Ubuntu，启动并进行设置后，执行&lt;code&gt;uname -a&lt;/code&gt;：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ uname -a
Linux WOL-Computer 5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;内核版本应大于&lt;code&gt;5.10.60.1&lt;/code&gt;，若未满足需求，于PowerShell中执行&lt;code&gt;wsl --update&lt;/code&gt;以更新内核。&lt;/p&gt;
&lt;h3 id=&#34;usbip安装&#34;&gt;usbip安装&lt;/h3&gt;
&lt;p&gt;在&lt;a href=&#34;https://github.com/dorssel/usbipd-win/releases&#34;&gt;此处&lt;/a&gt;安装最新版本的&lt;code&gt;usbipd-win&lt;/code&gt;，随后在WSL2中执行以下命令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ sudo apt install linux-tools-virtual hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;安装rust及esp-rs所需依赖&#34;&gt;安装Rust及esp-rs所需依赖&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl --proto &amp;#39;=https&amp;#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ source &amp;#34;$HOME/.cargo/env&amp;#34;
$ sudo apt install build-essential libssl-dev libuv1-dev pkg-config libudev-dev # esp-rs crates deps
$ cargo install cargo-generate ldproxy espup
$ cargo install --git https://github.com/SergioGasquez/espflash --branch fix/resets cargo-espflash espflash
$ espup install # be patient
$ . $HOME/export-esp.sh
&lt;/code&gt;&lt;/pre&gt;&lt;style type=&#34;text/css&#34;&gt;
     
    .notice {
        --title-color: #fff;
        --title-background-color: #6be;
        --content-color: #444;
        --content-background-color: #e7f2fa;
    }

    .notice.info {
        --title-background-color: #fb7;
        --content-background-color: #fec;
    }

    .notice.tip {
        --title-background-color: #5a5;
        --content-background-color: #efe;
    }

    .notice.warning {
        --title-background-color: #c33;
        --content-background-color: #fee;
    }

     
    @media (prefers-color-scheme:dark) {
        .notice {
            --title-color: #fff;
            --title-background-color: #069;
            --content-color: #ddd;
            --content-background-color: #023;
        }

        .notice.info {
            --title-background-color: #a50;
            --content-background-color: #420;
        }

        .notice.tip {
            --title-background-color: #363;
            --content-background-color: #121;
        }

        .notice.warning {
            --title-background-color: #800;
            --content-background-color: #400;
        }
    }

    body.dark .notice {
        --title-color: #fff;
        --title-background-color: #069;
        --content-color: #ddd;
        --content-background-color: #023;
    }

    body.dark .notice.info {
        --title-background-color: #a50;
        --content-background-color: #420;
    }

    body.dark .notice.tip {
        --title-background-color: #363;
        --content-background-color: #121;
    }

    body.dark .notice.warning {
        --title-background-color: #800;
        --content-background-color: #400;
    }

     
    .notice {
        padding: 18px;
        line-height: 24px;
        margin-bottom: 24px;
        border-radius: 4px;
        color: var(--content-color);
        background: var(--content-background-color);
    }

    .notice p:last-child {
        margin-bottom: 0
    }

     
    .notice-title {
        margin: -18px -18px 12px;
        padding: 4px 18px;
        border-radius: 4px 4px 0 0;
        font-weight: 700;
        color: var(--title-color);
        background: var(--title-background-color);
    }

     
    .icon-notice {
        display: inline-flex;
        align-self: center;
        margin-right: 8px;
    }

    .icon-notice img,
    .icon-notice svg {
        height: 1em;
        width: 1em;
        fill: currentColor;
    }

    .icon-notice img,
    .icon-notice.baseline svg {
        top: .125em;
        position: relative;
    }
&lt;/style&gt;&lt;div class=&#34;notice tip&#34; &gt;
    &lt;p class=&#34;notice-title&#34;&gt;
        &lt;span class=&#34;icon-notice baseline&#34;&gt;
            &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;300.5 134 300 300&#34;&gt;
  &lt;path d=&#34;M551.281 252.36c0-3.32-1.172-6.641-3.515-8.985l-17.774-17.578c-2.344-2.344-5.469-3.711-8.789-3.711-3.32 0-6.445 1.367-8.789 3.71l-79.687 79.493-44.141-44.14c-2.344-2.344-5.469-3.712-8.79-3.712-3.32 0-6.444 1.368-8.788 3.711l-17.774 17.579c-2.343 2.343-3.515 5.664-3.515 8.984 0 3.32 1.172 6.445 3.515 8.789l70.704 70.703c2.343 2.344 5.664 3.711 8.789 3.711 3.32 0 6.64-1.367 8.984-3.71l106.055-106.056c2.343-2.343 3.515-5.468 3.515-8.789ZM600.5 284c0 82.813-67.188 150-150 150-82.813 0-150-67.188-150-150 0-82.813 67.188-150 150-150 82.813 0 150 67.188 150 150Z&#34;/&gt;
&lt;/svg&gt;

        &lt;/span&gt;提示&lt;/p&gt;&lt;p&gt;由于espflash目前版本存在错误，此处使用了&lt;a href=&#34;https://github.com/SergioGasquez/espflash/tree/fix/resets&#34;&gt;SergioGasquez/espflash&lt;/a&gt;修改版本，详情可参考&lt;a href=&#34;https://github.com/esp-rs/espflash/pull/487&#34;&gt;esp-rs/espflash #487&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此错误预计将在&lt;code&gt;espflash 3.0.0&lt;/code&gt;版本中修复，届时可使用&lt;code&gt;cargo install cargo-espflash espflash&lt;/code&gt;安装官方版本。&lt;/p&gt;&lt;/div&gt;

&lt;h3 id=&#34;安装驱动&#34;&gt;安装驱动&lt;/h3&gt;
&lt;p&gt;WSL2默认内核不预载任何驱动，开发者需自行安装。此处以CH340/CH341芯片驱动为例。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// WSL2 默认无/lib/modules文件夹，需自行配置
$ sudo apt install linux-headers-generic
$ ll /lib/modules
$ ls /lib/modules
5.15.0-88-generic
$ sudo ln -s /lib/modules/5.15.0-88-generic /lib/modules/5.15.90.1-microsoft-standard-WSL2 // kernel name in uanme -a
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// https://www.wch.cn/downloads/CH341PAR_LINUX_ZIP.html 下载CH341驱动
$ sudo apt install unzip
$ unzip CH341SER_LINUX.ZIP
$ cd CH341SER_LINUX/driver
$ make
$ sudo make install
$ ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial/
ch341.ko
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;连接开发板&#34;&gt;连接开发板&lt;/h2&gt;
&lt;h3 id=&#34;挂载串口设备&#34;&gt;挂载串口设备&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PS &amp;gt; usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
1-6    1a86:7523  USB-SERIAL CH340 (COM3)                                       Not attached
PS &amp;gt; usbipd wsl attach --busid 1-6
PS &amp;gt; usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
1-6    1a86:7523  USB-SERIAL CH340 (COM3)                                       Attached - WSL
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;测试连接&#34;&gt;测试连接&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ minicom -b 115200 -D /dev/ttyUSB0
// 按下开发板上的RESET按钮，终端内应出现启动信息
$ espflash board-info
[2023-11-01T07:01:31Z INFO ] Serial port: &amp;#39;/dev/ttyUSB0&amp;#39;
[2023-11-01T07:01:31Z INFO ] Connecting...
[2023-11-01T07:01:31Z INFO ] Using flash stub
Chip type:         esp32 (revision v3.1)
Crystal frequency: 40MHz
Flash size:        4MB
Features:          WiFi, BT, Dual Core, 240MHz, Coding Scheme None
MAC address:       d8:bc:38:e5:1a:4c
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;项目配置&#34;&gt;项目配置&lt;/h2&gt;
&lt;h3 id=&#34;创建项目&#34;&gt;创建项目&lt;/h3&gt;
&lt;p&gt;由于Windows与WSL2文件系统互操作性较差，项目文件应全部置于WSL2中。此处以&lt;code&gt;esp-rs/esp-idf-template&lt;/code&gt;为例：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cargo generate esp-rs/esp-idf-template cargo
$ cd cargo
$ cargo run
I (451) app_start: Starting scheduler on CPU0
I (456) app_start: Starting scheduler on CPU1
I (456) main_task: Started on CPU0
I (466) main_task: Calling app_main()
I (466) esp32_helloworld: Hello, world!
I (466) main_task: Returned from app_main()
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;配置rustrover&#34;&gt;配置RustRover&lt;/h3&gt;
&lt;p&gt;Projects -&amp;gt; Open -&amp;gt; Home Directory in WSL -&amp;gt; 选择项目文件夹 -&amp;gt; OK
&lt;img src=&#34;https://s2.loli.net/2023/11/01/cBKULz9QIAmw4P6.png&#34; alt=&#34;&#34;&gt;
打开项目后，点击 File -&amp;gt; Settings -&amp;gt; Languages &amp;amp; Frameworks -&amp;gt; Rust，将Toolchain location修改为Windows下的Rust路径，点击OK。
&lt;img src=&#34;https://s2.loli.net/2023/11/01/pbyEio8IcklAeRW.png&#34; alt=&#34;&#34;&gt;
等待索引完成后，点击 Run -&amp;gt; Edit cofigurations -&amp;gt; Add new -&amp;gt; Cargo，将Run on修改为WSL，点击OK。
&lt;img src=&#34;https://s2.loli.net/2023/11/01/FZL3q56EKP8TwVS.png&#34; alt=&#34;&#34;&gt;
点击 Run &amp;lsquo;Run&amp;rsquo; 即可自动编译烧录，由于RustRover终端限制，无法显示进度条。&lt;/p&gt;
&lt;h2 id=&#34;参考文档&#34;&gt;参考文档&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/&#34;&gt;https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/dorssel/usbipd-win/wiki/WSL-support&#34;&gt;https://github.com/dorssel/usbipd-win/wiki/WSL-support&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/esp-rs/esp-idf-template#prerequisites&#34;&gt;https://github.com/esp-rs/esp-idf-template#prerequisites&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.elelab.net/linux-ch34x-driver.html&#34;&gt;http://www.elelab.net/linux-ch34x-driver.html&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>世观历史转载文章</title>
      <link>/%E4%B8%96%E8%A7%82%E5%8E%86%E5%8F%B2%E8%BD%AC%E8%BD%BD%E6%96%87%E7%AB%A0/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/%E4%B8%96%E8%A7%82%E5%8E%86%E5%8F%B2%E8%BD%AC%E8%BD%BD%E6%96%87%E7%AB%A0/</guid>
      <description>旧世观 你说，什么是CloudFlare？ 直播/通话实时换脸 键政是一种电子手淫 中文互联网之死 SQLite背后的故事 完全自杀手册 一夜成名的航班追踪网站Flightradar24 什么来头？ 通过手柄控制人类面</description>
      <content>&lt;h2 id=&#34;旧世观&#34;&gt;旧世观&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E4%BD%A0%E8%AF%B4%E4%BB%80%E4%B9%88%E6%98%AFCloudflare-07-20&#34;&gt;你说，什么是CloudFlare？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/iperov/DeepFaceLive&#34;&gt;直播/通话实时换脸&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nmbxd1.com/t/50830075&#34;&gt;键政是一种电子手淫&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/HAOHONG_CFA/status/1549879912559001600&#34;&gt;中文互联网之死&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/leyafo/status/1553752242540257283&#34;&gt;SQLite背后的故事&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Nameless-284/Completely_Suicide_Manual&#34;&gt;完全自杀手册&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/1300187.htm&#34;&gt;一夜成名的航班追踪网站Flightradar24 什么来头？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/maHidaka/ros_face&#34;&gt;通过手柄控制人类面部肌肉&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codechina.org/2022/06/why-you-do-not-need-english/&#34;&gt;为什么你用不到英语呢？这才是最大的问题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://boyter.org/posts/the-three-f-s-of-open-source/&#34;&gt;开源开发的三个F原则&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/733&#34;&gt;自慰中毒成因&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://program-think.blogspot.com/2017/08/Some-Reasons-to-Watch-Less-Videos.html&#34;&gt;为啥俺很少看视频？——兼谈“视频”与“文本”在认知心理学方面的差异&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yystv.cn/p/9561&#34;&gt;穆斯林女孩，黑袍之下的Cosplay&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1Ea411U7L5&#34;&gt;这个标志毁掉了动画？【解释动画01】&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://scrapbook-cyansalt.vercel.app/how-we-record-pictures&#34;&gt;我们是如何记录图片的&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi?o=dnclcdr&amp;amp;s=id=%22103SCU00201013%22.&amp;amp;searchmode=basic&#34;&gt;失能的恐懼 ─ 一個研究生寫不出論文的反思&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/bZXPEf4MlKhzDMDL5FJ6SA&#34;&gt;何时结束疫情，人说了算，科学说了不算&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yystv.cn/p/9590&#34;&gt;台风天也挡不住的音游人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/451374861&#34;&gt;Linux社区已经成为了一个肮脏的泥潭&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pockies.github.io/2022/08/14/i-scream/&#34;&gt;《冰果》与“乡愁”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://dex.zhubai.love/posts/2170932605460406272&#34;&gt;DEX周刊 #152 - 大家都是搬运工，谁也别说谁&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/q1ngyang/status/1558900999854915584&#34;&gt;将Google Voice号码转入Ultra Mobile Paygo美国实体卡步骤记录&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E7%9B%B8%E4%BF%A1%E7%A7%91%E6%8A%80%E5%88%9B%E9%80%A0%E7%BE%8E%E5%A5%BD%E6%9C%AA%E6%9D%A5-08-16&#34;&gt;埃隆·马斯克：相信科技创造美好未来&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.infoq.cn/article/3Ko3rS9t2O18vAoCiqD5&#34;&gt;区块链的用途并不多&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/940&#34;&gt;地狱笑话之论&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://geekplux.zhubai.love/posts/2171646849340497920&#34;&gt;社交网络名存实亡&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/oEqkUrMJfq3RQFztKOImpg&#34;&gt;破产危机下，“被出口”去赚外汇的斯里兰卡家政女工&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/958&#34;&gt;编程之禅&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.guokr.com/article/462029/&#34;&gt;好消息！男用避孕药要来了（可逆，不是激素）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/MineDojo/MineDojo&#34;&gt;AI驱动的Minecraft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/1306225.htm&#34;&gt;我的朋友圈被“折叠”了 微信说是为了我好 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.infoq.cn/article/YEImBIBZHJTT9BOXPvLJ&#34;&gt;为什么在 20 多年后，我仍然爱着 PHP 和 JavaScript&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1041&#34;&gt;如何锻炼自己的牛牛&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/1306799.htm&#34;&gt;你还记得互联网没有“网暴”的日子吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://instant.lvv2.com/html/5eea6d5d65888b408f10ab2d8289fd72.html&#34;&gt;南方蚊子变少了？有的热死，有的北上&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/No51435403-08-22&#34;&gt;牛子文学 Day1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E6%89%93%E6%89%8B%E5%86%B2-08-23&#34;&gt;牛子文学 Day2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hot.cnbeta.com/articles/movie/1307915.htm&#34;&gt;直播间里的“成人识字班”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%97%A6%E7%89%9B%E5%AD%90-08-23&#34;&gt;牛子文学 Day3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/tldr-pages/tldr&#34;&gt;在命令行下为Linux命令提供简洁明了的说明&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/73193&#34;&gt;一张照片，就能知道你在哪里？丨网络迷踪初探&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://citizenlab.ca/2016/12/%E4%B8%80app%E4%B8%A4%E5%88%B6%EF%BC%9A%E5%BE%AE%E4%BF%A1%E5%A6%82%E4%BD%95%E5%8C%BA%E5%88%AB%E5%AE%A1%E6%9F%A5%E4%B8%AD%E5%9B%BD%E5%8F%8A%E6%B5%B7%E5%A4%96%E7%94%A8%E6%88%B7/&#34;&gt;“一APP两制” 微信如何区别审查中国及海外用户&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.36kr.com/p/1884670549011842&#34;&gt;转型的何同学，夹在稚晖君和手工耿之间&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%A4%A7%E5%8B%BE%E5%90%A7-08-23&#34;&gt;牛子文学 Day4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kwm.com/cn/zh/insights/latest-thinking/speech-infidel-line-in-vain-a-comprehensive-interpretation-of-the-internet-user-account-information-management-regulations.html&#34;&gt;“言不信者行不果”——全面解读《互联网用户账号信息管理规定》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%9C%A8%E5%A4%A7%E9%99%86%E5%B7%A5%E4%BD%9C%E7%9A%84%E5%8F%B0%E6%B9%BE%E4%BA%BA%E7%BB%8F%E5%8E%86%E5%B0%81%E5%9F%8E%E6%AD%A6%E7%BB%9F%E5%8F%B0%E6%B9%BE%E4%BB%96%E4%BB%AC%E9%80%89%E6%8B%A9%E7%95%99%E4%B8%8B%E8%BF%98%E6%98%AF%E7%A6%BB%E5%BC%80%E7%AB%AF%E4%BC%A0%E5%AA%92-Initium-Media-08-26-12&#34;&gt;在大陸工作的台灣人：經歷封城、「武統台灣」，他們選擇留下還是離開？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/zh-hans/2022/08/25/world/asia/american-dream.html&#34;&gt;海外华人札记-美国梦，谁的美国谁的梦？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%87%AD%E9%80%BC%E5%85%8B%E6%98%9F-08-23&#34;&gt;牛子文学 Day5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%80%9F%E7%89%9B%E5%AD%90-08-23&#34;&gt;牛子文学 Day6&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/forwardlikehell/2723&#34;&gt;时代已经黑了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/3CVvgtNXpHRF3gQi2Bp_Tg&#34;&gt;中国历史研究院课题组：明清时期“闭关锁国”问题新探&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%B5%9B%E5%8D%9A%E5%A5%B3%E5%90%8C-08-23&#34;&gt;牛子文学 Day7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.right.com.cn/forum/thread-4110060-1-1.html&#34;&gt;OpenWRT IPoE 鉴权保姆级教程（支持动态鉴权、无 Option57 等奇葩环境） &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%90%9D%E8%8E%89%E9%AD%85%E9%AD%94-08-27&#34;&gt;牛子文学 Day8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1309&#34;&gt;阴暗刷屏&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pudding.cool/2022/08/censorship/&#34;&gt;外国影视作品在中国是如何被审查和删减的——以生活大爆炸为例 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1325&#34;&gt;牛子文学 Day9&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/StaZhu/enable-chromium-hevc-hardware-decoding/blob/main/README.zh_CN.md&#34;&gt;为Chromium系浏览器启用HEVC硬解码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E6%B2%92%E6%9C%89%E6%AF%8D%E8%AF%AD%E7%9A%84%E4%BA%BA%E6%96%B0%E9%97%BB%E5%AE%A1%E6%9F%A5%E4%B8%8B%E6%88%91%E4%BB%AC%E9%83%BD%E6%98%AF%E5%9B%BD%E5%AE%B6%E7%9A%84%E5%AE%A3%E4%BC%A0%E6%9C%BA%E5%99%A8%E7%AB%AF%E4%BC%A0%E5%AA%92-Initium-Media-09-02-10&#34;&gt;沒有母语的人：新闻审查下，“我们都是国家的宣传机器”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1344&#34;&gt;急救手册&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://blog.sina.com.cn/s/blog_58daf6670102wlco.html&#34;&gt;“知识改变命运”越来越不适合穷人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bmpi.dev/dev/deep-in-program-language/how-to-implement-generics/&#34;&gt;编程语言是如何实现泛型的&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%B7%A8%E4%B9%B3%E6%81%B6%E9%AD%94-09-03&#34;&gt;牛子文学 Day11&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.aisixiang.com/data/132148.html&#34;&gt;王维佳：“点新自由主义”:赛博迷思的历史与政治&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.wikisource.org/zh-hans/%E7%BD%91%E7%BB%9C%E7%8B%AC%E7%AB%8B%E5%AE%A3%E8%A8%80&#34;&gt;网络独立宣言&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/zhu0588/status/1565815517864005632&#34;&gt;Tank Man照片的起源&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ifanr.com/1509693&#34;&gt;可口可乐最受欢迎的饮料，很快不再是可乐了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.zaobao.com.sg/realtime/china/story20220905-1309998&#34;&gt;浙江宣传部门发文总结“低级红”“高级黑”六种形式&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%88%B0%E5%BA%95%E6%98%AF%E7%94%9A%E4%B9%88%E6%BC%94%E7%AE%97%E6%B3%95%E6%98%AF%E4%B8%8D%E6%98%AF%E6%97%A0%E6%89%80%E4%B8%8D%E8%83%BD%E7%AB%AF%E4%BC%A0%E5%AA%92-Initium-Media-09-06-8&#34;&gt;人脸识别到底是甚么？演算法是不是无所不能？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1451&#34;&gt;Linux性能分析检查表&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.foreignaffairs.com/china/xijinpingderuodian&#34;&gt;习近平的弱点——狂妄与偏执如何威胁中国的未来&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cn.nytimes.com/business/20220909/soho-china-entrepreneurs&#34;&gt;中国富豪涌现出走潮：当企业家成为中国经济的局外人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.swissinfo.ch/chi/%E7%91%9E%E5%A3%AB%E6%94%B6%E7%B4%A7%E5%AE%89%E4%B9%90%E6%AD%BB%E6%94%BF%E7%AD%96-%E5%BC%95%E5%9B%BD%E9%99%85%E6%8B%85%E5%BF%A7/47747030&#34;&gt;瑞士收紧安乐死政策，引国际担忧&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%AF%B4%E7%9A%84%E9%81%93%E7%90%86-09-10&#34;&gt;牛子文学 Day12&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://guoyu.mirror.xyz/bPaDKAcrhJGUbaXu9BWDcdD-F46gBFATTvf_qwZ9Bso&#34;&gt;日本移居指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1522&#34;&gt;欢迎来到芬兰&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/DualSubs/DualSubs&#34;&gt;流媒体平台字幕增强及双语模块&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gamersky.com/wenku/202209/1515917.shtml&#34;&gt;日本动漫制作人痛批电视动态补帧功能：这项技术很“恶心”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E9%B8%A1%E7%94%9F%E8%9B%8B%E8%BF%98%E6%98%AF%E8%9B%8B%E7%94%9F%E9%B8%A1%E8%B0%81%E5%86%B3%E5%AE%9A%E4%BA%86%E6%B8%B8%E6%88%8F%E7%9A%84%E6%80%A7%E5%88%AB%E7%AB%AF%E4%BC%A0%E5%AA%92-Initium-Media-09-11-6&#34;&gt;鸡生蛋还是蛋生鸡，谁决定了游戏的性别？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/7cdqQhlGiQvejNd6Mozg9w&#34;&gt;新冠后遗症：长期COVID能治好吗？|《自然》长文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matthias-buehlmann.medium.com/stable-diffusion-based-image-compresssion-6f1f0a399202&#34;&gt;基于Stable Diffusion的图像压缩&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yystv.cn/p/9756&#34;&gt;为什么福建的神明经常坐飞机出差？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1621&#34;&gt;差距 - 余华&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/WorldObservationLog/1632&#34;&gt;伪科学畅销书&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/adamziel/wordpress-wasm&#34;&gt;wordpress-wasm: Run WordPress in the browser&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://good.news/html/5e057b6eb535410c88d7f69acd00b591.html&#34;&gt;凤羽财经｜小学生人质化，越想越让人害怕&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;新世观&#34;&gt;新世观&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/43998&#34;&gt;论 RSS 的「复兴」&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/73&#34;&gt;幸福家庭&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://on.unesco.org/3CmaLoL&#34;&gt;批判思维是过滤虚假信息的有效屏障&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/video/world/asia/100000008523311/li-wenliang-chinese-video-investigation.html&#34;&gt;视觉调查：李文亮医生的最后时刻&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codechina.org/2022/10/rapper/&#34;&gt;Rapper都去考公务员了？未来会怎么样？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bookfere.com/post/1020.html&#34;&gt;谷歌翻译退出中国后如何恢复 Chrome 翻译的正常使用&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://e-hentai.org/g/2344534/c2aea55609/&#34;&gt;如何鉴别黄色书籍？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2208.08014&#34;&gt;使用预训练模型自动为代码审查生成评论&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[云桌面没有你想象的那么好] (&lt;a href=&#34;https://mjg59.dreamwidth.org/61535.html&#34;&gt;https://mjg59.dreamwidth.org/61535.html&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://kknews.cc/n/gmalbze.html&#34;&gt;人体真的可以用来接通电话线？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/PVDbo_vlPOiLLE98ZSYiFA&#34;&gt;打开离世亲人的手机&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/VSSfqHbsLW42ehiCWLWJpA&#34;&gt;阿伦特诞辰116周年，为什么每个人都必须关注政治？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://good.news/html/c997831641de12ba3ea010cebf07fb53.html&#34;&gt;上海需要年轻人，年轻人需要地摊&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://archive.ph/he1re&#34;&gt;通过分析iOS 15中的sysdiagnose日志确定AirDrop数据的发送电话号码&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://danieljeffries.substack.com/p/why-the-future-of-open-source-ai&#34;&gt;为什么开源AI的未来比Stable Diffusion 1.5大得多，并且为什么它对你很重要&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/W_9XYkF5Y_-M-aLdB-b_Ng&#34;&gt;How Kubernetes Fucked&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/fengyehong123/fengyehong123.github.io/issues/14&#34;&gt;翻墙者和管理者之间的有趣默契和微妙平衡&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codechina.org/2022/10/chinese-girls/&#34;&gt;瑞典新首相，三个养女儿都来自中国，聊聊为什么西方名人喜欢收养中国女童&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.aspi.org.au/report/frontier-influencers&#34;&gt;前沿影响者：中国宣传的新面孔&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/313&#34;&gt;关于政治性抑郁&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhengceku.fun/19-18-3b90cf6b92e04564bb7581c685d6bb14&#34;&gt;二十大党章全文逐句对比&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://world.hey.com/dhh/american-data-spies-will-never-care-where-the-servers-are-371d4016&#34;&gt;美国的数据间谍永远不会关心服务器在哪里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.universiteitleiden.nl/en/news/2022/10/science-technology-and-innovation-is-not-addressing-worlds-most-urgent-problems&#34;&gt;科学、技术和创新并没有解决世界上最紧迫的问题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E4%B8%8B%E5%8D%88%E5%AF%9F%E4%B8%AD%E5%9B%BD%E5%B9%B4%E8%BD%BB%E4%BA%BA%E5%BF%83%E4%B8%AD%E7%9A%84%E9%B9%A4%E5%B2%97%E7%A5%9E%E8%AF%9D-10-28&#34;&gt;下午察：中国年轻人心中的“鹤岗神话”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ted-lu.medium.com/%E6%8E%A2%E8%A8%8E%E6%88%91%E5%9C%8B%E5%AD%B8%E7%94%9F%E6%96%BC%E8%B3%87%E8%A8%8A%E9%A0%98%E5%9F%9F%E4%B9%8B-%E8%86%9C%E6%8B%9C%E6%96%87%E5%8C%96-%E8%88%87-%E8%A3%9D%E5%BC%B1%E6%96%87%E5%8C%96-%E5%B0%8D%E6%96%BC%E8%87%AA%E4%BF%A1%E5%BB%BA%E7%AB%8B%E8%88%87%E5%BF%83%E6%99%BA%E7%99%BC%E5%B1%95%E7%9A%84%E5%BD%B1%E9%9F%BF-2aac6a68ffd8&#34;&gt;探討我國學生於資訊領域之「膜拜文化」與「裝弱文化」對於自信建立與心智發展的影響&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://dwye.dev/post/notion-privacy-concerns/&#34;&gt;為什麼有些人離開 Notion 了—Notion 的隱私問題&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbc.com/2022/11/04/web-inventor-tim-berners-lee-wants-us-to-ignore-web3.html&#34;&gt;万维网发明者蒂姆·伯纳斯-李希望我们“忽略”Web3：“Web3 根本不是网络”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://rsapkf.org/weblog/q2z&#34;&gt;使用RSS来保护隐私和提高效率&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/76637&#34;&gt;如何满足小众的录屏需求？自己配置 FFmpeg 解决问题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.thetimes.co.uk/article/from-persuasion-to-pain-relief-swearing-really-is-damn-useful-7dzbwdp72&#34;&gt;骂人行为并不全是智力低下或词汇量少的标志，而是一种强大的工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.huxiu.com/article/518155.html&#34;&gt;网暴者：线上的混蛋和线下的混蛋是同一类人？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.aisixiang.com/data/130003.html&#34;&gt;书籍装饰文明：图书馆及其荣耀&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/VxlCBVLJ8hsglvgBUs2tLQ&#34;&gt;五百年后，华人教会知道马丁路德当年反对的是什么吗？ 论「赎罪券」的错译&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nature.com/articles/d41586-022-02207-8&#34;&gt;抑郁症和肥胖症的恶性循环 — 是时候将肥胖视为心理健康问题了吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.swyx.io/no-smarter/&#34;&gt;世界是由不比你聪明的人经营的&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/zohDdo5URMrI89R8w-drEQ&#34;&gt;干翻了韩国游管委的《碧蓝档案》玩家，没能改变自己是R18游戏这件事&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.huxiu.com/article/714715.html&#34;&gt;该让B站回到起点了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E4%B8%AD%E5%9B%BD%E5%A4%A7%E5%AD%A6%E7%94%9F%E5%9C%A8%E6%93%8D%E5%9C%BA%E7%88%AC%E8%A1%8C%E5%BD%93%E5%8F%91%E7%96%AF%E6%96%87%E5%AD%A6%E7%85%A7%E8%BF%9B%E7%8E%B0%E5%AE%9E%E7%AB%AF%E4%BC%A0%E5%AA%92-Initium-Media-11-16-8&#34;&gt;中國大學生在操場爬行：當「發瘋文學」照進現實&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.36kr.com/p/2005215189225346&#34;&gt;我在小红书接单修图：3元一张，P到“眼瞎”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kolide.com/blog/github-copilot-isn-t-worth-the-risk&#34;&gt;GitHub Copilot 不值得冒险&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pwnallthethings.com/p/twitter-was-special-but-its-time&#34;&gt;推特很特别，但是时候离开它了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matthewtejo.substack.com/p/why-twitter-didnt-go-down-from-a&#34;&gt;为什么推特还没有倒闭？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://telegra.ph/10%E5%85%83%E4%B8%80%E7%9B%92%E7%9A%84%E6%84%9F%E5%86%92%E8%8D%AF%E6%9C%89%E7%BE%A4%E5%88%9D%E9%AB%98%E4%B8%AD%E7%94%9F%E6%AD%A3%E5%97%91%E5%BE%97%E9%86%89%E7%94%9F%E6%A2%A6%E6%AD%BB-11-24-2&#34;&gt;10元一盒的感冒药，有群初高中生正嗑得醉生梦死&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.zlovezl.cn/articles/chatgpt-and-how-we-programming/&#34;&gt;ChatGPT 正在杀死编程里的乐趣&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pythonspeed.com/articles/stop-using-python-3.7/&#34;&gt;是时候停止使用 Python 3.7 了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cn.gijn.org/2020/06/19/ground-news/&#34;&gt;Ground News：用对观「对冲」媒体偏见&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://plantegg.github.io/2020/11/30/%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%9C%80%E5%A4%9A%E8%83%BD%E5%88%9B%E5%BB%BA%E5%A4%9A%E5%B0%91%E4%B8%AATCP%E8%BF%9E%E6%8E%A5/&#34;&gt;到底一台服务器上最多能创建多少个TCP连接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.aisixiang.com/data/127665.html&#34;&gt;廉思：时间的暴政——移动互联时代青年劳动审视&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/2022/12/15/style/teens-social-media.html&#34;&gt;卢德主义青少年不需要你的点赞&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kawabangga.com/posts/2393&#34;&gt;为什么在编程语言中要要“头开尾闭”？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://restofworld.org/2022/chinese-software-cheat-sat-exams/&#34;&gt;“线上考试就是个笑话”：中国学生是如何在美国高考中作弊的&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/zh-hant/interactive/2022/12/20/technology/china-protests-twitter-bots-elon-musk.html&#34;&gt;Twitter机器人帐号如何用成人内容淹没中国抗议推文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.twreporter.org/a/run-philosophy-chinese-migrants-darien-gap&#34;&gt;「润学潮」下最危险的逃难路径：穿越巴拿马丛林的中国人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://unsafe.sh/go-141529.html&#34;&gt;爆火出圈的chatGPT如何在逆向和恶意软件分析中发挥作用&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://archive.md/pTB1F&#34;&gt;一个河南小村庄，沉默地熬过了“疫情”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sparringmind.com/supernormal-stimuli/&#34;&gt;超常刺激：互联网、垃圾食品和色情如何劫持我们的大脑&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yystv.cn/p/10280&#34;&gt;《我的世界》终末之诗的作者，放弃了诗的版权&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gcores.com/articles/160392&#34;&gt;阴暗女主+非典型制作，《孤独摇滚》为何能让观众共情？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E9%80%9D%E5%8E%BB%E7%9A%84%E4%B8%8D%E5%8F%AA%E6%98%AF%E5%8D%97%E5%91%A8%E8%AE%B0%E5%8D%97%E6%96%B9%E5%91%A8%E6%9C%AB%E6%96%B0%E5%B9%B4%E7%8C%AE%E8%AF%8D%E4%BA%8B%E4%BB%B6%E5%8D%81%E5%91%A8%E5%B9%B4---%E7%AB%AF%E4%BC%A0%E5%AA%92---%E6%9C%80%E6%96%B0-01-02&#34;&gt;逝去的不只是南周，记《南方周末》新年献词事件十周年&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://news.163.com/special/reviews/dumpmilk0113.html&#34;&gt;关于“倒牛奶”，政治书一直在逗你 “资本主义”奶农倒的是别人家的奶，不是自己家的。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://36kr.com/p/2074361436257154&#34;&gt;实探“四天半工作制”的乐视：三点只剩几个人&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/77426&#34;&gt;为什么我们要减少阅读新闻&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/jBVh31Cmw9W0A1SMzCBIJA&#34;&gt;“我这辈子卷够了”：美国博士生大举逃离学术界，PI们遭不住了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://humiaozuzu.github.io/2017/12/06/japan-pr&#34;&gt;说说日本移民 - 紅一葉&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wuyagege.substack.com/p/c51&#34;&gt;外语学习简明指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-windows/issues/293#issuecomment-132253168&#34;&gt;ShadowSocks作者clowwindy的心声&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.readr.tw/post/2932&#34;&gt;两岸开战，台湾惨胜或险输？视觉化24次关键兵推：陆、海、空战果全分析&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hurricane-bracket-7a1.notion.site/Web3-aa5f8e4cf2844500aa921d7ca0493953&#34;&gt;Web3 从业者的日本初体验&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hayami.typlog.io/runrun&#34;&gt;润还是不润，这你管不着&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/EYWR1o-CoDTBvqgIGOl5Ww&#34;&gt;ACM：编程的终结&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://matters.news/@huangzhangji/365614-%E7%BE%8E%E5%9B%BD%E5%AE%AA%E6%B3%95%E7%AC%AC%E4%BA%8C%E4%BF%AE%E6%AD%A3%E6%A1%88%E4%B8%8E%E7%BE%8E%E5%9B%BD%E6%8C%81%E6%9E%AA%E8%87%AA%E7%94%B1-bafybeibusclqrqop2bovquo6vhccykzf553aejazfttdwbzfcn3mu5jkbu&#34;&gt;美国宪法第二修正案与美国持枪自由&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.163.com/dy/article/HSAUHPGO0511WT04.html&#34;&gt;年轻人抛弃了报刊亭&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.toutiao.com/article/7195818624236585531/&#34;&gt;没人再谈疫情，长新冠成了我不敢说出口的隐疾&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kancloud.cn/imxieke/hacker-and-painter/107320&#34;&gt;为什么书呆子不受欢迎&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lifeweek.com.cn/article/191012&#34;&gt;地震、枪击、战争…为什么大家好像不关心世界了？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%92%B2%E5%85%AC%E8%8B%B1%E5%A5%B3%E5%AD%A9-02-12&#34;&gt;蒲公英女孩&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://theintercept.com/2023/02/14/whistleblower-image-crop-document/&#34;&gt;揭密者注意：不要相信裁剪工具&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://nabilalouani.substack.com/p/chatgpt-hype-is-proof-nobody-really&#34;&gt;ChatGPT的炒作和误解&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.caus.com/detail/73951&#34;&gt;为什么中国没有发明ChatGPT？ &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/Vqd2tg0Rlx0bSaPxUYc9Cg&#34;&gt;如此努力的苏联，为什么还是输掉了与美国的“芯片冷战” &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://36kr.com/p/2137546486548612&#34;&gt;ChatGPT中国变形记&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@catmus2048/%E7%B2%BE%E7%A1%AE%E6%8E%A7%E5%88%B6-ai-%E5%9B%BE%E5%83%8F%E7%94%9F%E6%88%90%E7%9A%84%E7%A0%B4%E5%86%B0%E6%96%B9%E6%A1%88-controlnet-%E5%92%8C-t2i-adapter-13dcad0e62ce&#34;&gt;精确控制 AI 图像生成的破冰方案，ControlNet 和 T2I-Adapter &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jiba.plus/&#34;&gt;阴茎锻炼手册&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.levels.fyi/blog/scaling-to-millions-with-google-sheets.html&#34;&gt;Levels.fyi 如何以 Google Sheets 为后端发展出数百万用户 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://icm.moe/165.html&#34;&gt;从零开始创立一个 UK 公司 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/ReYZMjY2WDtjmDRoIiMoWQ&#34;&gt;算法正在谋杀新闻，十亿中国网友却为此狂欢。 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sites.google.com/view/stablediffusion-with-brain/&#34;&gt;基于潜在扩散模型从人类脑活动中重建高清图像&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.chinanews.com.cn/gj/2023/03-04/9965311.shtml&#34;&gt;被遗忘的阿富汗女学生：无学可上，有家难回&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://telegra.ph/%E7%95%99%E7%BB%99%E6%99%AE%E9%80%9A%E4%BA%BA%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E6%89%87%E9%97%A8%E5%BF%AB%E8%A6%81%E5%85%B3%E9%97%AD%E4%BA%86-03-08&#34;&gt;留给普通人的最后一扇门，快要关闭了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1Ee411F7bc&#34;&gt;现实如此，人民群众何以找到“真正”的新闻？【新闻三部曲01】by铲子&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.douban.com/note/844586767/&#34;&gt;我想再听一次千里共良宵的直播&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://charlottebuff.com/unicode/misc/rejected-emoji-proposals/&#34;&gt;被否决的Emoji提案&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chinadigitaltimes.net/chinese/693882.html&#34;&gt;永不赔付的新冠保险&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/ZIlBFlLUj5RM0veNUWskxA&#34;&gt;当孩子遭受校园欺凌后，一个妈妈的“战斗”｜深度报道&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/nanxiaobei/front-end-dev-guide&#34;&gt;前端开发行为指导规范&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://posts.careerengine.us/p/641da6f6dd67d76a4401e032&#34;&gt;全球化丧钟，不仅为张一鸣而鸣&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E8%B7%A8%E6%80%A7%E5%88%AB%E5%A5%B3%E6%80%A7%E5%9C%A8%E4%B8%AD%E5%9B%BD%E5%BD%93%E5%A6%B3%E5%8F%AA%E8%A2%AB%E5%85%81%E8%AE%B8%E6%88%90%E4%B8%BA%E4%BD%A0---%E7%AB%AF%E4%BC%A0%E5%AA%92---%E6%9C%80%E6%96%B0-03-23&#34;&gt;跨性别女性在中国：当“妳”只被允许成为“你”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/1318&#34;&gt;性别霸权的想象、展演与强化——以虚拟偶像组合A-SOUL的男性粉丝为例&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.codingnow.com/2006/08/aiaea.html&#34;&gt;编程的门槛&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/25410433&#34;&gt;关于那些痴汉冤罪&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wainao.me/wainao-reads/living-in-post-COVID-China-03282023&#34;&gt;曾经决绝想润的他们 解封后为何还是犹豫了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/suptir-xjs1GnY0ZTZCKTg&#34;&gt;调查记者已经没了，致敬调查记者的电影也快凉了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://xuanwo.io/2023/01-beyond-storage-why-we-failed/&#34;&gt;BeyondStorage: why we failed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/emSDtzxkX9-CCdDAGYAmKg&#34;&gt;2023以色列宪政危机与“逆现代化”的危险前景｜ 圣地三十年手记&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.toutiao.com/article/7216722487944413700/&#34;&gt;我在县城“喂”AI：曾经家门口就能月入过万，如今面临学历天花板&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://soulogic.com/item/3629&#34;&gt;上床二十周年纪念&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/lilaoshizuikeai/status/1642892292703891460&#34;&gt;李老师对鬼山哥的看法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/BBJ7w8wDGfTXuPc6StdfHQ&#34;&gt;尤伦斯，中国当代艺术，越南或印度&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/1356?comment=3724&#34;&gt;《被牺牲的“局部”：淮北社会生态变迁研究（1680-1949）》马俊亚&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/av647625931&#34;&gt;中国尚未提出能与新自由主义相抗衡的经济理论【赫德森-另类视野】&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theamericanconservative.com/chinese-social-darwinism-chinese-translation/&#34;&gt;社会达尔文主义如何造就了现代中国&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wainao.me/wainao-reads/tech-coding-career-change-success-immigrants-women-04062023&#34;&gt;“转码成功学”真的靠谱吗？那些渴望通过科技大厂“上岸”的新移民和女性都会面临什么？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/read/cv22398988&#34;&gt;来自死人的关照：日本放送法变更事件始末&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.sina.com.cn/tech/roll/2023-04-07/doc-imypqqpz8807877.shtml&#34;&gt;对话“数学之王”丘成桐：AI十年内不会改变社会结构&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1GM4y1m7jb&#34;&gt;中传毕业前，我去报刊亭偶遇了一百种新闻理想&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.lifeweek.com.cn/article/199074&#34;&gt;天门山跳崖：四个决绝赴死的农村青年&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://weibo.com/5992829552/MBM6D63rc&#34;&gt;互联网上的中文正在加速量子化&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://news.sina.com.cn/c/2023-04-12/doc-imyqcpre7107975.shtml&#34;&gt;中国第一代农民工，还在打工&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://media.people.com.cn/n/2015/0420/c225470-26872575.html&#34;&gt;网页敏感关键词匹配技术研究&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/UsXYl-0HqRlL-puZP0WaDg&#34;&gt;夜班骑手心梗倒地后｜深度报道&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://weibo.com/7402181160/4889777877289620&#34;&gt;贤妻良母的陷阱&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/DecentralLife/status/1646170918119518210&#34;&gt;藏传佛教时轮金刚法灌顶仪式真相揭秘&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/av442394078&#34;&gt;业余无线电，我们的乐趣所在——美国蒙大拿州无线电爱好者纪实&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.thepaper.cn/newsDetail_forward_22490407&#34;&gt;亚文化观察｜谁是厕妹：网络暴力、精神疾病与少女的“戾气”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jaylittle.com/post/view/2023/4/low-code-software-development-is-a-lie&#34;&gt;低代码软件开发是个谎言&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.163.com/dy/article/FJCDHNN90541BPL2.html&#34;&gt;从退耕还林又回到“退林还耕”，我们到底经历了什么&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/-eaCoZR9Z5srQ-1YZm1QJA&#34;&gt;分布式数据库是伪需求吗？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/pirrer/status/1649216543597944833&#34;&gt;星舰爆炸，SpaceX 仍有理由开香槟&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://asia.nikkei.com/Politics/International-relations/China-finds-unlikely-allies-in-Germany-s-far-right-and-far-left&#34;&gt;中国在德国极左翼与极右翼政党中找到了看上去不太可能的盟友&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.caus.com/detail/76342&#34;&gt;为何小熊维尼会令中国政府感到不适？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/KsBMg7iJo55bK1QBXBReAA&#34;&gt;没有人的大脑是一座孤岛&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/fZ7K8_WBMwWYuTRDsQhj7g&#34;&gt;然而没有来世&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.newyorker.com/science/annals-of-artificial-intelligence/there-is-no-ai&#34;&gt;没有AI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/manateelazycat/status/1649600428089409536&#34;&gt;曾经的 Haskeller, 说一下我对Rust的感受&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/6bHt6eqaBCujsMXcSMBn1A&#34;&gt;二次元性焦虑？中国式互联网犯贱！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/wkYXe8kkZwxCDXNBJjoztQ&#34;&gt;16岁少年沙漠探险身亡：一次夺命的“留学加分”旅行&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/yb6k3TF2oGPuYfRgr41Ggw&#34;&gt;环保、生意和谎言｜蚂蚁森林环保项目，涉嫌大规模污染自然保护区&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gfw.report/publications/usenixsecurity23/zh/&#34;&gt;GFW如何检测和阻止完全加密的流量？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sxyz.blog/bypass-cloudflare-shield/&#34;&gt;绕过 Cloudflare 指纹护盾&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/_ZvyxRpgIA4L4pqfcQtPTQ&#34;&gt;陆奇最新演讲实录：我的大模型世界观&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.huxiu.com/article/1299511.html&#34;&gt;成都失去性价比？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wainao.me/wainao-reads/controversial-radical-feminism-04252023&#34;&gt;“我是激女”：生于网络夹缝的“极端女权”，和她们与其他女权流派的争议&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/hu1EkQxO7RhOdNZFw_xkRQ&#34;&gt;Nature：揭开罗莎琳德·富兰克林对DNA双螺旋结构的真实贡献，她并非受害者，而是平等贡献者&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://justingarrison.com/blog/2023-04-24-mastodon-is-doomed/&#34;&gt;Mastodon在劫难逃&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://circleid.com/posts/20230127-the-disappointment-of-5g&#34;&gt;5G技术令人失望&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.163.com/dy/article/I35PTB4S0514BE2Q.html&#34;&gt;宫崎骏之后，少数派新海诚何以打动观众&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/79495&#34;&gt;幕后 | 以本土创新的力量，做影响世界的产品：Edge 浏览器中国团队专访&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://quail.ink/lyric/p/bringing-pet-to-japan-process-and-requirements-2023&#34;&gt;带猫赴日指南 2023年版&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/PUw_f42a2R5koVYNl12YpQ&#34;&gt;因延期交房停贷一年后，他们被银行告上法庭&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/1513?comment=4351&#34;&gt;被告人身份差异对量刑的影响：基于1060份刑事判决的实证分析&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.unesco.org/zh/days/press-freedom&#34;&gt;世界新闻自由日&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://file.c-ctrip.com/files/6/yuwa/0R726120009bzjzhb3FD7.pdf&#34;&gt;中国生育成本报告：中国的生育成本相对于人均GDP倍数几乎是全球最高&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/4obgNMKk8-H1iaADpd1aXA&#34;&gt;性骚扰界定，到底该以谁的感受为准？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://telegra.ph/%E5%8F%82%E4%B8%8E%E5%BC%8F%E5%AE%A1%E6%9F%A5%E7%BD%91%E7%BB%9C%E4%B8%BE%E6%8A%A5%E9%85%B7%E5%84%BF%E7%B2%89%E4%B8%9D%E4%B8%8E%E4%B8%AD%E5%9B%BD%E8%80%BD%E7%BE%8E%E6%96%87%E5%8C%96%E5%95%86%E4%B8%9A%E5%8C%96%E7%9A%84%E7%89%B9%E6%AE%8A%E7%BB%93%E5%90%88---%E7%AB%AF%E4%BC%A0%E5%AA%92---%E6%9C%80%E6%96%B0-05-02-2&#34;&gt;参与式审查：网络举报、酷儿粉丝与中国耽美文化商业化的特殊结合&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/Q-3PFOPG8KmH7I9Vvt92nw&#34;&gt;一个青年劳动者的19份痛苦肖像&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sspai.com/post/77376&#34;&gt;无密码、更安全的未来，你该如何登录？通行密钥上手体验&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/UxjiUBTpb1pRUfGtR9V3ag&#34;&gt;公有云是不是杀猪盘？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/20752519&#34;&gt;提问须知&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/626326323&#34;&gt;关于4月29日至5月1日对东北城市内低收入人群的调查总结&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/1533&#34;&gt;镇压革命：美国政府针对其公民的战争&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/627186078&#34;&gt;上海楼市打新，中产们的「修罗场」&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/GxPP9ZphH3APxlOuOr7L-g&#34;&gt;逃离杨永信之后的十五年&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/mEmz8pviahEAWy1-SA8vcg&#34;&gt;微服务是不是个蠢主意？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://manateelazycat.github.io/think/2023/05/08/developer-better.html&#34;&gt;谈研发人员的进步&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/3QD3M6vR3C2bOahk31Mn7w&#34;&gt;致敬青年节：让Z世代“新闻不回避” | 德外视窗&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cuhk.edu.hk/ics/21c/media/articles/c195-202301009.pdf&#34;&gt;中国增长模式的形成、演变和调控格局&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.163.com/dy/article/HBF87HDA0519QIKK.html&#34;&gt;“小天才”手表：腾讯万亿社交帝国上的一条裂缝&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/JuanitoFatas/5894119&#34;&gt;无用知识的有用性&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/1mf4-f0BVECG3mPXgPgfIg&#34;&gt;嫌恶的心情&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/2tLUbRZJQp7D4iUCrCeneg&#34;&gt;在淄博，寻亲家长们希望流量更凶猛一些&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://t.me/NewWorldObservationLog/1564?comment=4760&#34;&gt;青年“断亲”：何以发生？何去何从？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/paKYGq44sLHFkNe3JMRN3A&#34;&gt;一个人可以废物到什么程度？ | 谷雨&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/wVz6HkNH_1sljr_tKxH9eg&#34;&gt;陈皓（@左耳朵耗子）：我的精神家园&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.caus.com/detail/76755&#34;&gt;性与毒品，一位美国科技富翁的隐秘生活&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/jveYavoPqeRFBXz61ewtHg&#34;&gt;马斯克的星舰发射真的失败了吗？给中国的航天产业带来什么启示？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/wOlLDpTMznYqKWKpzbWfzg&#34;&gt;中年失业后，我这三年如何走过&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/G9ay_-suafrop_hKMICboQ&#34;&gt;好不容易考上211，我的专业却消失了&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vxtwitter.com/pirrer/status/1659191017017597952&#34;&gt;窃取可口可乐罐内另一个秘密的阴谋&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bumingbai.net/2023/05/ep-048-program-think/&#34;&gt;不明白博客 EP-048 谁是“编程随想”？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/PkHN7O7-m52gCtXn_WlEag&#34;&gt;脱口秀的“不可能三角”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/izfz2LY_pQGAhS0dGJP3vA&#34;&gt;“民粹”究竟是个什么鬼？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/0h-qITmZGzg7LKVw-5zN-A&#34;&gt;暴跌30%，房东跑路，租客崩溃，这还不是韩国楼市噩梦的全部……&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>谈谈信息茧房</title>
      <link>/%E8%B0%88%E8%B0%88%E4%BF%A1%E6%81%AF%E8%8C%A7%E6%88%BF/</link>
      <pubDate>Sat, 25 May 2024 13:49:01 +0000</pubDate>
      
      <guid>/%E8%B0%88%E8%B0%88%E4%BF%A1%E6%81%AF%E8%8C%A7%E6%88%BF/</guid>
      <description>​ 信息茧房是这几年才有的概念，讲的就是个体在互联网上的认知范围局限在某一区域，同时算法投其所好，使个体的认知区域愈发狭小的事。词新理不新，信息茧房这一现象并非在算法驱动的互联网时代出现后才有，早在互联</description>
      <content>&lt;p&gt;​	信息茧房是这几年才有的概念，讲的就是个体在互联网上的认知范围局限在某一区域，同时算法投其所好，使个体的认知区域愈发狭小的事。词新理不新，信息茧房这一现象并非在算法驱动的互联网时代出现后才有，早在互联网发明之前就已存在，并且程度可能比现在还要严重。那时的信息不像现代如此触手可及，较为高昂的信息获取成本使得对信息的针对性需求极为强烈，也就自然而然的注定了认知范围必然狭小的结果。并且同样由于这种针对性需求，那时的人们可能完全无法意识到处于自己认知范围外的事物，因此更不可能意识到自己认知范围的狭小。&lt;/p&gt;
&lt;p&gt;​	算法在信息茧房的定义中似乎处于罪魁祸首的地位，但其作为一个工具，判它有罪就如同“非我也，兵也”一样荒谬。说到底，在这一定义中占主体地位的是人，而非算法。自己不愿意离开茧房，就算把算法踢到九霄云外，过起Web1.0的生活也无济于事。更何况算法也在改进，例如Youtube的首页推荐中有一栏“令你耳目一新的内容”，就是从算法层面打破信息茧房的一次尝试。&lt;/p&gt;
&lt;p&gt;​	RSS的鼓吹者们一向声称RSS能够“打破信息茧房”，而就我两年以来的使用体验来看，能是能，但是效果微乎其微，得不偿失。信息茧房早在基于某种标准选择RSS源的时候就已产生。而且RSS打破信息茧房的方式，如同大海捞针，有一种不合时宜的粗犷。最主要的是：通过RSS获取信息仍旧是一种低效率的方式，二百五十条信息里可能才有几条你感兴趣的内容。扪心自问一下，你真的有那么多时间筛选信息吗？显然没有。&lt;/p&gt;
&lt;p&gt;​	最好打破信息茧房的方式我个人首推维基百科首页的“你知道吗？”栏目。只用每天花个十分钟的时间浏览一遍其中所提及的条目，就能确实的获取新知，并且其内容完全不会受你个人的影响。&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>我的编程学习之路</title>
      <link>/%E6%88%91%E7%9A%84%E7%BC%96%E7%A8%8B%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/</link>
      <pubDate>Sun, 13 Nov 2022 05:00:00 +0800</pubDate>
      
      <guid>/%E6%88%91%E7%9A%84%E7%BC%96%E7%A8%8B%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/</guid>
      <description>零 大约是在 2018 年，我逛新华书店时看到了一本《从零开始学 Python3.6》，心头一动就买了下来。事后证明这本书就是垃圾中的垃圾，全文几乎照搬菜鸟教程，简直不忍卒读。但当时的我哪里知道这些，硬是抱着它啃了</description>
      <content>&lt;h1 id=&#34;零&#34;&gt;零&lt;/h1&gt;
&lt;p&gt;　　大约是在 2018 年，我逛新华书店时看到了一本《从零开始学 Python3.6》，心头一动就买了下来。事后证明这本书就是垃圾中的垃圾，全文几乎照搬菜鸟教程，简直不忍卒读。但当时的我哪里知道这些，硬是抱着它啃了半年。是的，就是干读，那半年内我连 Hello World 都没写过。当然，最后我也没能读透，死活无法理解面向对象（OO，Object Oriented）那部分的内容，但这不妨碍我写些最基础的代码。&lt;/p&gt;
&lt;p&gt;　　OOP 是自学者的最大门槛，这是很正常的事。从学习一种工具到学习一种思想，说不难是骗人的。David Parnis 曾对此有过精彩的论述：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“答案很简单，因为［OO］和各种复杂语言的联系已经很紧密。人们并没有被告诉 OO 是种设计的方法，并向他们讲授设计方法和原理，大家只是被告知 OO 是一种特殊工具。……”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;　　更何况，理解 IS-A，HAS-A，类，封装，继承，多态之类的概念是一回事，实际编写起来又是另一回事。而大部分语言教学书籍在讲解 OO 时用的都是现实生活的例子，这就导致在实际编写代码时会觉得无从下手，无法抽象出一个本就抽象的类出来，这也是通病。而这病唯一的解药就是多写，让 OO 思想内化成为你自己的思考逻辑，编写代码时才能得心应手。就我自己而言，直到 2021 年我才写出了第一个令我满意的基于 OO 的项目。&lt;/p&gt;
&lt;p&gt;　　有天晚上，我同我朋友讨论最适合新手入门的语言，最终得出的结论果不其然的，是 Python。就我自己的看法来说，新手比起积累知识的喜悦，可能更追求做出什么的成就感，也就是 I know 与 I can 的区别。著名开发者 vczh 讲过一句话，大意是一开始学 C 的时候感觉什么都写不了，学了几年之后发现自己啥都能写。但这“什么都写不了”的状态对初学者而言是最致命的，高投入低产出的模式会让很多人中途放弃。就这一层面来看 Python 的确是最适合初学者的语言。&lt;/p&gt;
&lt;h1 id=&#34;壹&#34;&gt;壹&lt;/h1&gt;
&lt;p&gt;　　我的第一个程序当时其实超出了我的能力范围。那是一个记录 Bilibili 直播间弹幕的程序，所使用库的 Example 涉及重写和异步，当时的我别说会不会，就连听都没听过。没办法，只好硬着头皮写，最后写出来的东西虽然很丑，但也不是不能跑。之后我投身于 QQ 机器人的开发当中，当时 mirai 才刚刚有语音消息支持，Graia 也不叫 Graia，叫 python-mirai。也是因为对 OO 的不熟悉（当时甚至不怎么会用点运算符），还闹出过直接读 &lt;code&gt;__root__&lt;/code&gt; 的笑话。但在这一时期内，我写出了第一个中型项目，尽管代码依旧是坨屎山，但编写这一项目带给我的经验远比阅读基础书籍来得多。&lt;/p&gt;
&lt;p&gt;　　这一时期充满着许多不言之秘，甚至可以说标记着一个编程语言学习者真正成为了程序员。而这一阶段所发生的事情，一言以蔽之就是“熟练”。开始摆脱工具书与资料，只凭IDE就能完成小型程序的开发；逐渐可以感受到代码中的bad taste（坏味道，这个形象的比喻出自经典&lt;em&gt;Refactoring&lt;/em&gt;）；逐渐适应命名风格和代码风格……这些改变是从新手到中手的必由之路，但你会发现你将在这一阶段长期裹足不前。为了打破这一僵局，或许需要一块鲜红的贤者之石来敲敲脑袋。&lt;/p&gt;
&lt;p&gt;　　当然，这时候写出的代码会让半年后的我宁愿找台时光机把写出这段垃圾代码的键盘给砸掉。但此乃必然，每一个开发者都是从这一阶段发展出来的。这时最重要的应该是培养习惯，例如不靠IDE 提示也能遵守PEP-8，有意识的提交等等。这些编程习惯会陪伴我们一辈子，切不可小视。&lt;/p&gt;
&lt;p&gt;　　配套工具的学习也是在这一时期开始。Git，Pip，Npm，WebPack，IDE/Editor……它们或许不是学习编程的必需，但却是成为一个合格程序员的必需。为工具而服务的工具将成为不可或缺的依赖。对于具体的学习过程，我的建议是多用，毕竟不可能把每一条参数给背下来。不要强求自己搞什么“三天掌握Git”，都是假的，一眼就忘，还不如天天用来得真切。&lt;/p&gt;
&lt;h1 id=&#34;贰&#34;&gt;贰&lt;/h1&gt;
&lt;p&gt;　　由于那个项目的代码实在是写得太烂了，我不得不寻找一种方式来提高我的代码力。这也就是上文所提及的“贤者之石”－阅读。我开始死命的去啃一些谈论如何编程的书籍。坦白来说，这一时期我并没有写多少代码，但阅读这些书籍可以让我明显感觉到能力的提升，“眼界始大，感慨遂深”。我不再是能感觉到bad taste却写不出好代码的程序员了。&lt;/p&gt;
&lt;p&gt;　　在学习编程之前，MCBBS软件资源版和编程开发版版主Yanbing Zhao在知乎上的一篇&lt;a href=&#34;https://www.zhihu.com/answer/206584431&#34;&gt;回答&lt;/a&gt;让我印象深刻，铭记在心：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;什么叫“降低门槛”？要我说，我已经很久没见到比国内MC圈的开发门槛还要低的圈子了，软件版和编程版的门槛已经低到不能再低了。至少对于我而言，我已经在无数个场合说过无数次了，学开发插件/Mod的时候，先花上几个月把Java学了，然后再学会很轻松。实际上呢？我接触过的连Java基本语法都没了解清楚就去学写插件/Mod的人，实在是太多太多了。Java实际上，甚至可以说是最简单的现代编程语言之一。至于多了解了解其他的编程语言，多学习学习一些计算机科学的知识，什么数据结构啊，设计模式啊，组成原理啊，这些本来应该是程序猿提升自我理应做的事情，对于他们来说，我真是想都不敢想。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;犀利的言语足以指出这个阶段提升自我的重要性。&lt;/p&gt;
&lt;p&gt;　　到了这个时候，普通的技术书籍已决然无法满足我的需求，我需要一种高于单一语言，能够像一种思维方式般作用于所有语言的书籍。这三本书就是我当时所阅读的：《程序员修炼之道》《Unix编程艺术》和《代码大全》。先讲讲《程序员修炼之道》，书名虽然俗，但内容绝对是字字珠玑。书中提供了70条Tips，而其中的许多都是在这个阶段可以直接上手的。如提示35：要有始有终，讲的是资源分配的事；提示33：如果它不可能发生，用断言确保它不会发生，讲的是意外情况的处理；提示23：总是使用源码控制，讲的是代码管理的重要性……这些Tips看似简单，却可能需要数万甚至数十万行的代码编写经验才能领悟，更何况将其娓娓道来。也因此，这类书籍才显得弥足珍贵。借用徐宥老师的话来说，这些作品“都是高手所写，属于高手指导中手的典范”。我优先推荐给初学者的永远只有这本《程序员修炼之道》。《Unix编程艺术》这本书非常有意思，大可以把它看成是一本程序员的故事书，即使里面所讲述的思想一时半会无法理解，其中的故事也可使人大开眼界，培养出作为程序员的常识。而《代码大全》则是本极其重量级的书，我甚至不推荐购买。它可以看成是《程序员修炼之道》的高级增强版，大约有300＋Tips。尽管这些内容以现在的眼光来看略显老旧，但当你拥有足够的代码编写经验时，这本书将对你有所裨益。&lt;/p&gt;
&lt;p&gt;　　选购编程书籍是门艺术活，国内图书市场编程书籍鱼目混珠，质量参差不齐，并且普遍价格畸高。在被坑过机会后，我总结出了一些经验：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;认准出版社。机械工业出版社与电子工业出版社在编程书籍界绝对是响当当的金字招牌，值得信赖。而清华大学出版社的编程书籍，尤其是近几年出版的是雷区中的雷区，连买电子版的资格都没有。我在文章开头提到的那本书就是清华的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;认准标识。如果书上有O’Reilly，Boardview（博文视点）之类的文字，那这本书的质量再差也不会差到哪去。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;认准国外作者。一本外文编程书籍能够引进大陆，其质量必然受到同行的认可，平均质量会比国内作者的书高很多。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;买全新不如买二手，买二手不如借阅。编程书籍价格昂贵，普遍都在五十元以上，尤其是译制书籍，没有张百元大钞几乎买不到。而一些早年出版的书籍在淘宝上很容易买到盗版，远不如二手实惠。而有的书籍几乎不会再看第二遍，借阅无疑是最好的选择。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;叁&#34;&gt;叁&lt;/h1&gt;
&lt;p&gt;　　《代码大全》中有句Tip我觉得讲得很好：深入你所使用的语言。这是让代码变得优雅的关键。当然，这绝不是说什么都要来点魔法，如果你真的打算这么干，之前在某篇教程里看到的一句话很适合你：“你有点太聪明了”。但适度使用高级特性能够有效减少代码中的bad taste，提高代码质量。总之，深入学习一门语言是绝对没错的。&lt;/p&gt;
&lt;p&gt;　　框架的学习作为深入语言的一部分，同样重要。框架这种东西说直白点就是要求你用一种既定的方式编程，用框架开发者的思考方式来思考。现在很多框架的学习成本其实不怎么高（如Flask），但有的框架由于其设计就是用来构建大型应用的，就需要花费更多时间学习（如Django）。使用什么取决于你的实际需求，所谓“杀鸡焉用牛刀”，为了实现一个小小的事件系统而去部署Apache Kafka 简直就是浪费生命。&lt;/p&gt;
&lt;p&gt;　　另一方面，用Python搞Android 开发或者Minecraft开发绝对是噩梦，甚至是不可能的任务。语言是有极限的，尤其是跨语言编程。这就是我学习新语言的理由。术业有专攻，语言也是如此，每种编程语言都有它的适用范围，试图越过这道界线不会带来什么好结果，且付出的代价比学习一门新语言要大得多。&lt;/p&gt;
&lt;p&gt;　　学习一门新语言真的是什么难事吗？绝非如此，并且还是在拥有编程经验的前提下。现代高级编程语言都有其共同的基础。条件语句，循环语句，赋值，函数，类……这是大部分编程语言所共通的。到了这一阶段，你完全可以在菜鸟教程的帮助下用一门不熟悉的语言编写程序。实际上这才是菜鸟教程真正的用法，它并不是给完全的新人用的，它是为了那些已经有编程基础的人而设计的。真正决定语言差异的不是表层的语法，而是深层的实现。这是菜鸟教程所无法提供的。&lt;/p&gt;
&lt;h1 id=&#34;肆&#34;&gt;肆&lt;/h1&gt;
&lt;p&gt;　　以下就是现在进行时了：每天刷刷业界新闻，打开WebStorm然后破口大骂JavaScript的神奇设计，冥思新创意，构想提高效率的方法，每周去图书馆借点编程书籍阅读，同朋友为了Go的错误处理到底是不是一团糟而对喷。总之，技术上来了，想怎么过都是可以的。&lt;/p&gt;
&lt;p&gt;　　我能够为这一阶段所奉上的最好建议就是：保持好奇心与求知欲。学习是程序员的 Daily Work，绝非是等到需要时才学习。编程技术日新月异，保持好奇心不仅能永立潮头，还能永远保持对编程这一行为的最原初的热情。&lt;/p&gt;
&lt;h1 id=&#34;伍&#34;&gt;伍&lt;/h1&gt;
&lt;p&gt;　　最后，以Fred Brook的不朽名著《人月神话》后记的一段文字作结吧。即使两年已经过去，这些文字仍旧熠熠生辉：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在计算机技术进步的同时，计算机相关学科知识也在飞速发展。当我在20世纪50年代中期刚从学校毕业的时候，能看完当时所有的期刊和会议报告，掌握所有的潮流动向。而我现在只能对层出不穷的学科分支遗憾地说“再见”，对我所关注的东西也越来越难以全部掌握。兴趣太多，令人兴奋的学习、研究和思考的机会也太多－多么不可思议的矛盾啊！这个神奇的时代远远没有结束，它依旧在飞速发展。更多的乐趣，尽在将来。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;世界观察日志&lt;/p&gt;
&lt;p&gt;作于2022.11.9 午&lt;/p&gt;
&lt;p&gt;录入于2022.11.13 晨&lt;/p&gt;
&lt;p&gt;感谢各位关注者的支持&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Thu, 10 Nov 2022 06:58:51 +0800</pubDate>
      
      <guid>/about/</guid>
      <description>魔幻的世界需要一个观察者。 Telegram: https://t.me/NewWorldObservationLog Twitter: https://twitter.com/WorldObLog GitHub: https://github.com/WorldObservationLog Bilibili: https://space.bilibili.com/1747227647</description>
      <content>&lt;p&gt;魔幻的世界需要一个观察者。&lt;/p&gt;
&lt;p&gt;Telegram: &lt;a href=&#34;https://t.me/NewWorldObservationLog&#34;&gt;https://t.me/NewWorldObservationLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Twitter: &lt;a href=&#34;https://twitter.com/WorldObLog&#34;&gt;https://twitter.com/WorldObLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a href=&#34;https://github.com/WorldObservationLog&#34;&gt;https://github.com/WorldObservationLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bilibili: &lt;a href=&#34;https://space.bilibili.com/1747227647&#34;&gt;https://space.bilibili.com/1747227647&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
