Jekyll
2021-05-09T13:31:15+08:00
https://soaked.in/feed.xml
咸湖的盐鱼
一条在盐滩上弹跳的咸鱼留下的痕迹。
微信公众号文章URL的种类与结构
2020-08-23T00:25:00+08:00
2021-05-09T13:30:00+08:00
urn:uuid:54a724c8-2666-4d30-9a09-0c4d2f1d5737
<p>微信公众号是微信围墙花园的一部分。外界想访问其中内容时,往往需要面对一个很长的URL——其过分的长度与不甚清晰的含义给使用者带来了不小的困扰,有时携带的跟踪参数还会给分享者带来泄露身份的风险。本文将对微信公众号文章URL的三种类型进行简单的描述,并记录相关的发现。</p>
<p>背景部分较为琐碎,赶时间可<a href="#url-formats-overview">按此跳至正题</a>。</p>
<h2 id="background">背景</h2>
<p>微信公众平台上线于2012年8月17日,伴随着微信用户量的增长,与其余社交功能紧密整合的公众号逐渐成为不少人获取信息的主要渠道,众多新兴的“自媒体”将传统媒体打得落花流水。开设一个公众号成了接触国内各类受众的方式中最有效的一种,还在建站的恐怕只剩些老古板了。相信称微信公众号是近些年来中国大陆最主要的在线信息发布渠道都不为过,其中不乏许多仅在公众号中发表的优秀内容。然而,微信公众号对外界极为封闭,使用正常的浏览器仅能通过文章的URL访问文章页,无法了解这个公众号的其他内容。搜狗的微信搜索是它们在微信客户端外唯一公开的访问渠道,然而腾讯对它仍限制重重:可以用它查看某个公众号的简介资料,早前还会在简介页列出它最新的十篇文章,但此功能最晚在2020年初已经失效了;可以进行全局的文章搜索,但效果实在差强人意,有时换用许多关键词也只能得到充斥着垃圾内容的结果。更糟糕的是,从这里得到的文章链接一段时间后(目前为6小时)就会<a href="#sogou-temp-link">过期失效</a>。纵使<a href="https://www.v2ex.com/t/553855?p=1">不少用户</a>对微信公众号有<a href="https://www.v2ex.com/t/609985?p=1">各种怨言</a>,目前它在国内内容领域的霸主地位,似乎是不可撼动的。</p>
<p>首次接触微信公众号的时候,觉得它那时的一些特性使它有成为一个历史信息存档库的潜质:内容全都储存在腾讯自己的服务器上,服务可靠且持久,内容发布者无需承担储存过去文章的成本;文章发布后无法修改,删除重发代价较大(一般的订阅号每日只能推送一次消息),能忠实地记录文章首次发表时的模样。不过,微信平台随后进行的一些规则变动则使当时的期待有些站不住脚了。对于后一点,微信于<a href="https://mp.weixin.qq.com/s/TdNOUjkWzJYVtwZ6YOUlrA">2018年2月7日</a>上线了修改文章错别字的功能,不过这个功能还是较为“克制”的,其允许修改的字数不多(目前为20个),作用恐怕确实如<a href="https://mp.weixin.qq.com/s/19pMfMJx7uBPXP7SBrsWqA">微信团队“微信派”所说</a>,<a href="https://36kr.com/p/1722263142401">只限于修改错别字</a>了。</p>
<p>20字的变动或许已经足以让作者删去文章中存在争议的句子,可好歹文章还在。但关乎文章保存时限的前一点,根据微信公告里的说法,则是应监管方的一纸文件而不再成立了:援引网信办于2017年9月7日印发的<a href="http://www.cac.gov.cn/2017-09/07/c_1121624269.htm">《互联网用户公众账号信息服务管理规定》</a>第七条中“互联网用户公众账号信息服务提供者应当对同一主体在同一平台注册公众账号的数量合理设定上限”的规定,微信在2018年先后两次将原先企业50个、个人5个公众号的<a href="https://www.ifanr.com/minapp/1128973">限额缩至企业2个,个人1个</a>。在首次调低开设公众号限额后,我便遇到了个人运营的公众号被迁移至新“主体”,先前内容均被删除的情况(原帐号似乎是个人为了企业号的权限而向他人买来的)。此外,微信还宣布将<a href="https://tech.qq.com/a/20180317/010454.htm">自动注销210天内不活跃的非认证公众号</a>(目前个人号与企业号均可进行“微信认证”)。对于一般的免费UGC平台,只要平台还在,用户发布的内容就能一直留在网上,即是用户已经淡出,或因疾病等不可抗力无法访问网站。说实话,他们恐怕本就没打算让微信公众平台成为一个适合长期保存内容的地方,否则它就不会是个只可用自家的搜狗来搜索、对帐号的历史文章列表不提供日期选择器,仅可在微信里不停地往下翻才能列出文章的围墙花园了。</p>
<p>话说回来,国内的地方政府与传统新闻媒体网站有一个通病:更换CMS时往往会更改URL的格式,过去保存在收藏夹里的链接一夜之间就失效了;有的可能还会顺带清理早期的内容,想要寻找的旧资料在新网站里连影子都没有。此时只能在搜索引擎里换着关键词来寻找转载与快照页,或是去 <a href="https://archive.org/web/">Wayback Machine</a> 和 <a href="https://archive.is/">archive.is</a> 这类存档网站来碰运气了。相比之下,那些不会被随意清理的微信公众号发布的内容则显得可靠很多。再者,目前许多机构会将微信公众号和新浪微博作为主要的公关渠道进行运营,网站往往疏于打理、更新较缓,甚至已经荒废、连域名都已被菠菜网站抢注了,使用开放互联网中的搜索引擎根本无法及时获得信息。微信,是不得不用的。</p>
<p>然而,微信公众号文章的URL始终为人诟病。在“PC时代”,再三流的CMS系统也不至于生成形如<code class="language-plaintext highlighter-rouge">https://mp.weixin.qq.com/s?__biz=MjM5NjM4MDAxMg==&mid=2655090139&idx=1&sn=7516984a032cb031ce73577fe0ae5366</code>这样令人凌乱的URL。可是,微信(以及不少现代社交网站与IM)会将用于跟踪用户的参数掺进本来足以定位一篇文章的URL里,并把这一长串吓人的东西藏在漂亮的消息气泡内,再贴上一张诱人的缩略图。在它们的围墙花园里,这些ugly detail都被掩盖在华丽的界面之下。但当用户想把文章分享到围墙花园之外,就不得不面对它们的底层实现——URL。在当前版本的微信中,选择“复制链接”会得到形如<code class="language-plaintext highlighter-rouge">https://mp.weixin.qq.com/s/ruYM6tbU06iI4zfeQDTuLA</code>的短链接,而如果选择“在浏览器打开”,便会在浏览器的地址栏中看到形似段首例子的长URL,并带有多项可以起跟踪作用的参数。</p>
<p>网上有一些爬取微信公众号文章的经验介绍,不过在下面的文章中,我仅将尝试介绍微信公众号文章URL的三种类型,并描述哪些参数是必须的。(其实是水平太差了,不想研究如何爬取)</p>
<h2 id="url-formats-overview">三种URL格式</h2>
<p>这里使用新华社的公众号“新华网”于北京时间2021年5月8日18:36:40发表的<a href="https://mp.weixin.qq.com/s/-rwvHhqYbKGCVFeXRNknYQ">《注意!疫苗接种第二针不能这样打!》</a>作为例子。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://mp.weixin.qq.com/s/-rwvHhqYbKGCVFeXRNknYQ
https://mp.weixin.qq.com/s?__biz=MzA4MjQxNjQzMA==&mid=2768628484&idx=1&sn=93dcc54ce807f7793739ee2fd2377056
https://mp.weixin.qq.com/s?src=11&timestamp=1620536401&ver=3057&signature=vCDI8FQcumnNGv4ScvFP-swQRlirdQSqTfjS8m-oFzgHMkqlNM3ljzjSevcjXLC-z-n0RzzMkNt-lwKMUaskfaqFFrpYZNq4ZCKkFFGj8L*KvH780aEUBJFvWTGmMGLC
</code></pre></div></div>
<p>为了下文叙述方便,会将以上三种URL分别称为“短链接”、“完整链接”与“搜狗临时链接”。观察上述三种URL,可以判断公众号文章链接具有的共同点是第一级路径为”s”,而其后跟随的参数则没有明确的语言含义。</p>
<p>微信公众平台使用的域名是mp.weixin.qq.com。它使用了mp这个子域名,而“微信公众平台”目前的官方英文名为”WeChat Official Accounts Platform”,即“微信官方号平台”,其中没有可以缩写出mp的单词。起初我由“公众”这个词猜测它可能指”mass platform”,不过根据下文<a href="#ref-list">“参见”</a>中列出的一些介绍微信历史的文章,微信公众平台曾被称为“媒体平台”与“官号平台”。域名中mp这个缩写是“媒体平台”(media platform)留下的,而它目前使用的英文名则是“官号平台”留下的。</p>
<p>直接访问mp.weixin.qq.com会跳转至微信公众平台管理后台的登录页,该页面内还有一些指向微信公众平台开发文档与帮助文档的链接。</p>
<h3 id="full-link">完整链接</h3>
<p>这种链接应当是最为经典的公众号文章链接了。目前版本的微信中,浏览文章时在菜单栏內选择“在浏览器打开”,便可在浏览器的地址栏内见到此种风格的URL。这也是将文章转发给好友时,气泡类型的链接实际使用的URL种类。</p>
<p>公众号文章会设置一个全局的JavaScript变量<code class="language-plaintext highlighter-rouge">msg_link</code>,它的值就是完整链接格式的文章URL。这个变量可直接在文章的HTML代码中找到。(使用时需要对其进行HTML entity decode,将&amp;替换为&)</p>
<p>在Android版微信中使用“在浏览器打开”会把微信Webview内使用的URL直接传给浏览器应用,这样得到的URL会比上面例子中提到的更长,其中含有不少非必要的参数,其中部分相信可用于追溯出生成这个链接的微信用户的身份。</p>
<p><code class="language-plaintext highlighter-rouge">__biz</code>,为business的缩写,对该公众号发布的所有文章均相同。参数值使用base64编码,解码后为一串数字,相信是公众号的ID。<br />
<code class="language-plaintext highlighter-rouge">mid</code>,相信指”message id”,对应到公众号后台中“素材库”里的“图文消息”,它的值对于某一个公众号似乎是自增的。如果一条群发的“图文消息”内有多篇文章,那么其中各篇文章的mid值均相同。公众号支持的消息类型可参见<a href="https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html#2">微信公众平台群发接口的文档</a><br />
<code class="language-plaintext highlighter-rouge">idx</code>,指”index”,值为该篇文章在某次群发中的顺序。若只发布了一篇文章,这个值就为1。<br />
<code class="language-plaintext highlighter-rouge">sn</code>,指”signature”(下文详述),相信其格式为一个32位的16进制数,也即128位的2进制数。它应该是通过某种校验和算法生成的,而常用的128位散列算法只有MD5吧。当然,这个值是微信公众平台后端生成的,访问者只能将其原封不动地保存下来。</p>
<p>大致于2016年底某时开始,新文章的<code class="language-plaintext highlighter-rouge">msg_link</code>变量会带上<code class="language-plaintext highlighter-rouge">chksm</code>参数,显然指”checksum”。它的值为一76位的16进制数,即304位的2进制数。它可能是由多个散列值拼接而成,或是由较长的散列结果截短得到的。但实际访问时将其略去亦不会报错,且与其他几个必要的参数一样是恒定的,不知道有何作用。从链接长度方面考虑,分享链接时不妨将其略去,保留上述4个参数即可。</p>
<p>考虑到校验和常被用于确认下载到的文件内容是否与发布者的一致,我曾猜想这个值或许与修正文章错别字的功能有关,用于标记生成这个链接时文章的版本。但借用一位老友的公众号进行修改文字的实验后发现<code class="language-plaintext highlighter-rouge">chksm</code>并未改变,因此相信可以认为chksm也是文章发布后就不再变化的。</p>
<p>关于链接中的<code class="language-plaintext highlighter-rouge">sn</code>参数,一篇发布于2014年9月的文章<a href="https://mp.weixin.qq.com/s/laVLXBVG_qNWuCdoDk8AUg">《解读微信公众平台图文消息的链接组成》</a>提到,早期的公众号文章链接没有<code class="language-plaintext highlighter-rouge">sn</code>参数。从上述的规则亦可以发现,凭<code class="language-plaintext highlighter-rouge">__biz</code>, <code class="language-plaintext highlighter-rouge">mid</code>, <code class="language-plaintext highlighter-rouge">idx</code>三个参数足以定位到某篇文章,<code class="language-plaintext highlighter-rouge">sn</code>的作用似乎有些多余。这篇文章的作者认为,这么做是为了防止未经授权的用户通过修改mid的方式查看素材库内尚未发布的图文消息,而<code class="language-plaintext highlighter-rouge">sn</code>是文章推送时生成的。记忆中生成预览链接时也会得到一个此种性质的参数,不过我暂时没有条件确认。</p>
<p>值得一提的是,这篇文章提到早期<code class="language-plaintext highlighter-rouge">mid</code>, <code class="language-plaintext highlighter-rouge">idx</code>, <code class="language-plaintext highlighter-rouge">sn</code>三个参数分别会被叫做<code class="language-plaintext highlighter-rouge">appmsgid</code>, <code class="language-plaintext highlighter-rouge">itemidx</code>, <code class="language-plaintext highlighter-rouge">sign</code>,这一点亦可由其文中举出冯大晖公众号“小道消息”于2013年发布的<a href="http://mp.weixin.qq.com/s?__biz=MjM5ODIyMTE0MA==&mid=10000382&idx=1">《业绩考核》</a>一文的<code class="language-plaintext highlighter-rouge">msg_link</code>得到验证:<code class="language-plaintext highlighter-rouge">https://mp.weixin.qq.com/s?__biz=MjM5ODIyMTE0MA==&appmsgid=10000382&itemidx=1</code>。实验确认这两种参数名可以随意替换,互为别名。这些早期的文章仅需要前三个参数即可访问,不需要也没有<code class="language-plaintext highlighter-rouge">sn</code>。</p>
<p>如果某个公众号进行了保留原始内容的“主体迁移”,迁移后的文章的这四个参数均会改变。</p>
<h2 id="short-link">短链接</h2>
<p>对于用户来说,<code class="language-plaintext highlighter-rouge">sn</code>的加入并不能带来什么好处,反倒拉长了URL,使体验恶化。这个改动保持了原有的链接结构,但着实给用户带来了一些麻烦。</p>
<p>根据一些 <a href="http://wpweixin.com/post/17424/">报</a> <a href="https://news.mydrivers.com/1/509/509217.htm">道</a> ,微信大致于2016年11月中旬启用了一种短链接——其实并不短,但相比于完整链接的长度,确实短不少。链接的值或许为某种变种的base64,其长度恒定为22个字符。其中不带有可用与追踪用户身份的参数。</p>
<p>不过,要想获得这种链接,只能使用微信客户端(手机和电脑版)内的“复制链接”功能,HTML中并无这种链接的痕迹。此外,“复制链接”似乎不是在WebView层实现的,研究这种短链接的生成应该需要对native代码进行逆向工程。个人怀疑它可能是对<code class="language-plaintext highlighter-rouge">sn</code>进行某种编码得到的,但这仅是猜想,没有依据。</p>
<p>对于早期那些没有<code class="language-plaintext highlighter-rouge">sn</code>的文章,“复制链接”的行为与在微信中直接点击文字链接打开的中“复制链接”似乎相同,无法得到这种短链接。但那些早期文章的链接本来就不算太长,无伤大雅。</p>
<p>考虑到可以由短链接得到完整链接(通过<code class="language-plaintext highlighter-rouge">msg_link</code>),且短链接在长度上显著较短,更符合一般用户对链接格式的认识(有人认为带有query string的URL较为不美观),我认为在分享微信公众号文章时应当尽量使用“复制链接”得到的这种短链接。</p>
<h2 id="sogou-temp-link">搜狗临时链接</h2>
<p>这种链接可谓是臭名昭著了。搜狗是腾讯自家的玩意儿,只有搜狗能索引微信里的文章。用户找到了搜狗的微信搜索,偶尔还得输好几个验证码,终于读到几篇文章,它们可能会被存进收藏夹或者发到其他地方。六小时后,这些好端端的页面突然就“链接过期”了。将这些链接复制到微信内打开,便能跳转到正常的文章页面。但我亦发现,将网上一些几年前的这种临时链接复制进微信,也只能得到“参数错误”,无法访问原文。或许是他们后端有调整,又或者这种链接与永久链接的对应关系仅会保留不多于半年的时间,我不得而知。</p>
<p><code class="language-plaintext highlighter-rouge">src</code>,显然指”source”。目前发现的值有3和11两种,含义未知。<br />
<code class="language-plaintext highlighter-rouge">timestamp</code>,生成这个链接时的UNIX Timestamp,在服务器返回查询结果时便已确定,即按下搜索键或翻页的时刻。<br />
<code class="language-plaintext highlighter-rouge">ver</code>,显然指”version”。可能是生成下面<code class="language-plaintext highlighter-rouge">signature</code>使用的算法版本,每个数字会使用一段时间,可能不超过一天。<br />
<code class="language-plaintext highlighter-rouge">signature</code>,某种签名。长度恒定为128个字符,其中带有星号。</p>
<p>有效期应为6小时,到期后只能通过微信客户端才能查看。</p>
<p>曾经这些页面里也有<code class="language-plaintext highlighter-rouge">msg_link</code>,可以在它还没过期时<a href="https://www.zhihu.com/question/26084813/answer/101302798">通过这个变量得到文章的正常URL</a>。然而,微信在2016年底某时将这个变量的值以及其他提到<code class="language-plaintext highlighter-rouge">sn</code>的地方都抹掉了。</p>
<p>他们这么做的主要目的或许是为了反爬吧。但这种行为实在恶心用户,把用户产生的内容当作是自家的宝贝,捂在怀里,生怕见光。</p>
<h2 id="ref-list">参见</h2>
<ul>
<li>爱范儿 <a href="https://www.ifanr.com/1039481">不一样的微信发展简史(2011-2018)</a></li>
<li>南华早报 <a href="https://www.scmp.com/tech/article/2159831/how-wechat-became-chinas-everyday-mobile-app">How WeChat became China’s everyday mobile app</a><br />
(阮一峰<a href="http://www.ruanyifeng.com/blog/2018/08/weixin.html">微信的历史</a>一文对其进行了概括)</li>
<li>蚂蚁蚂蚁 <a href="http://www.woshipm.com/pd/224359.html">微信是怎样炼成的—微信产品的发展历程</a></li>
<li>newhappy2008 <a href="https://blog.csdn.net/newhappy2008/article/details/53489239">微信公众平台的发展历史</a></li>
</ul>
微信公众号是微信围墙花园的一部分。外界想访问其中内容时,往往需要面对一个很长的URL——其过分的长度与不甚清晰的含义给使用者带来了不小的困扰,有时携带的跟踪参数还会给分享者带来泄露身份的风险。本文将对微信公众号文章URL的三种类型进行简单的描述,并记录相关的发现。
Hello, World!
2020-08-09T18:00:00+08:00
2020-08-09T18:00:00+08:00
urn:uuid:f36cc96e-2bf1-4ec2-9c93-f57fd46f1546
<p>在网上冲浪了好多年,遇到过许多有趣的博客,也在阅读器里订阅了一些,但一直没能下定决心为自己搭建一个。正在发生的 COVID-19 疫情打乱了习以为常的生活节奏,面对突如其来的空闲时间,继续拖延便说不过去了。期待能在这里留下自己的思考与发现,并记录一些经历吧。</p>
<p>小时候觉得搭个 Blog 是件很酷的事。在那个诺基亚正如日中天的时代,如今的这些互联网巨头还远没现在这么一手遮天,Google 还算是个朝气蓬勃的 startup,电脑是正常人访问互联网的唯一选择——毕竟许多手机上的浏览器连 HTML 都显示不了,只支持 <a href="https://en.wikipedia.org/wiki/Wireless_Application_Protocol">WAP</a>。当时 3g.qq.com 提供了一个 WAP 上的 QQ,只能文字聊天,十分清爽。只是,靠那样简单的协议无法实现 push,用户想获取新消息还得自己按页面上的一个链接来刷新。</p>
<p>扯远了。建立一个博客并不难,先不说国内曾繁荣一时的诸多博客托管商提供的便捷服务,想要自行搭建博客亦有一些免费的途径:跟着教程,在网上找到能放 PHP 的免费空间,用 FileZilla 把汉化好的 WordPress 拖进 FTP 空间,把空间提供的 MySQL 配置粘贴进配置向导,“Hello world! - Just another WordPress site”就上线了。然而,免费空间不仅有各种限制还用不久。当时中文互联网上流行用 micolog<sup id="fnref:micolog" role="doc-noteref"><a href="#fn:micolog" class="footnote" rel="footnote">1</a></sup>,背靠 Google 家的新鲜玩意儿 GAE,似乎比一般的免费空间可靠多了,于是我也没有免俗,装 Python、找主题……让博客上线并不难,可然后呢?</p>
<p>作为一个从小就语言贫乏、不爱读文学作品、肚子里没有半滴墨水的粗人,那时只能写出些自己都“不忍卒读”的流水账——涉世未深、“少年不识愁滋味”嘛。再者,常说半瓶子醋摇得响,可要是瓶子里只有浅浅的一薄层醋,那再使劲摇也晃不出什么动静来。无奈,只能将这事搁置了。</p>
<p>那样的日子过去了很久吗?我这辈子都才过了两个十年,一个十年应该算很长吧。可在此回首,又好像转瞬即逝。在国内,<a href="https://zh.wikipedia.org/wiki/%E8%B0%B7%E6%AD%8C%E9%80%80%E5%87%BA%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E4%BA%8B%E4%BB%B6">谷歌退出中国</a>,微博等社交媒体进入主流,智能手机的浪潮击溃了传统功能机大厂和山寨机,并飞入寻常百姓家,移动设备流量早已超过桌面设备许久;自2015年起微信、支付宝渐渐成了生活必需品,到如今国内疫情缓解之际,已借各地强推<a href="https://zh.wikipedia.org/wiki/%E5%81%A5%E5%BA%B7%E7%A0%81">健康码</a>的政策覆盖了绝大多数的城镇居民。简体中文互联网也慢慢地变成一个充斥着 <a href="https://www.v2ex.com/t/649011?p=1#r_8638165">内</a> <a href="https://www.v2ex.com/t/666991?p=1#r_8896397">容</a> <a href="https://tsb2blog.com/google-chinese-results-blocklist">农场</a> 、<a href="https://matters.news/@yama/%E5%B0%8F%E7%B2%89%E7%B4%85vs%E6%B3%B0%E5%9C%8B%E7%B6%B2%E5%8F%8B-%E5%AE%8C%E6%95%97%E8%83%8C%E5%BE%8C%E7%9A%84%E9%82%8F%E8%BC%AF-bafyreie7bkdstnvxh7lvozkqe7eckmbl3wms4uykwcthqomo2qfmuvw3bm">文</a> <a href="https://theinitium.com/article/20190829-opinion-what-makes-pink-totalitarianism-possible/">革</a> <a href="https://theinitium.com/article/20200515-opinion-fangfang-people-war-national-socialism/">语</a> <a href="https://matters.news/@disincurable/%E5%B1%81%E8%82%A1-%E8%AE%A4%E7%88%B9%E5%92%8C%E6%8D%B6%E6%AD%BB-%E4%B8%BE%E6%8A%A5%E8%80%85%E7%9A%84%E4%B8%96%E7%95%8C%E8%A7%82-bafyreicjuipukjwzusia7mgyzuiddx2ht4sadsklu2hmky5xzjq3emvpve">言</a> 和 <a href="https://matters.news/@disincurable/%E7%99%BD%E5%B7%A6-%E6%B1%A1%E5%90%8D%E5%8C%96%E4%B8%8E%E7%A4%BE%E4%BC%9A%E8%BE%BE%E5%B0%94%E6%96%87%E4%B8%BB%E4%B9%89-bafyreib7ckuzofszmjzheftb7wmkmai2wb4xjzzqwvxjrw5el5gsmskj4i">仇</a> <a href="https://theinitium.com/article/20200301-internet-observation-foreign-permanent-residence/">恨</a> <a href="https://theinitium.com/article/20200420-mainland-coronavirus-african-guangzhou/">言论</a> 的 <a href="https://theinitium.com/article/20180910-mainland-censorship-journalist-in-china/">毒</a> <a href="https://matters.news/@philosophia/%E5%AF%B9%E6%9C%AC%E6%AC%A1%E7%96%AB%E6%83%85%E7%9A%84%E7%BB%93%E6%9E%84%E6%80%A7%E5%8F%8D%E6%80%9D-%E8%B0%A3%E8%A8%80-%E5%AE%98%E5%83%9A%E5%92%8C%E5%9B%BD%E5%AE%B6%E4%B8%BB%E4%B9%89-%E4%B8%8A-zdpuAzU8UUWBV3sB7c9h6FVbGZSrsc9L9qUEdHBBpDRJzTHzu">性</a> <a href="https://matters.news/@DunesWorkshop/%E4%B8%AD%E6%96%87%E4%BA%92%E8%81%94%E7%BD%91%E4%B8%AD-%E8%AE%A8%E8%AE%BA-%E7%9A%84%E6%B6%88%E4%BA%A1-bafyreibmdo43v35az6rspj7ghypebxghoahcqg2crjxf4naditmfok5wzy">荒</a> <a href="https://matters.news/@juniperdeee/%E5%86%99%E7%BB%99%E7%BB%88%E5%B0%86%E9%80%9D%E5%8E%BB%E7%9A%84%E8%B1%86%E7%93%A3%E5%92%8C%E6%9B%BE%E7%BB%8F%E7%9A%84%E6%88%91%E4%BB%AC-bafyreibetv5nfimk2kifkz6pabuv2hriw7zy76nqbb4ljtmh54qzcw5vka">漠</a> ,许多内容仅存在于微信公众平台这个只允许自家的搜狗索引的 <a href="https://zh.wikipedia.org/wiki/%E5%B0%81%E9%96%89%E5%B9%B3%E8%87%BA">围墙<s>花园</s></a> <a href="https://matters.news/@disincurable/%E8%87%AA%E5%AA%92%E4%BD%93%E7%95%8C%E7%9A%84%E6%80%AA%E8%83%8E%E6%98%AF%E8%A2%AB%E6%B8%B8%E6%88%8F%E8%A7%84%E5%88%99%E5%82%AC%E7%94%9F%E7%9A%84-%E6%98%AF%E6%97%B6%E5%80%99%E6%94%B9%E6%94%B9%E5%AE%83%E4%BA%86-bafyreifckcbis24jqthtjxq7b52h7s2os5oszlkrhb4pdrzl3i53avdgma">dystopia</a> 里,连一些政府服务都只在微信中提供。这个顶着绿色图标、异常臃肿却连聊天功能都做得为人诟病的手机通讯应用,竟俨然已成为中国大陆互联网的“操作系统”。且不论它对言论的<a href="https://en.wikipedia.org/wiki/WeChat#State_surveillance_and_intelligence_gathering">监视和审查</a>,其对国内“微信”与海外”WeChat”用户在<a href="https://nova.moe/some-finding-on-wechat-privacy-policy/">隐私政策上的差异</a>便足以令人侧目。十几年间,沧海桑田。</p>
<p>写上面这段话时觉得,自己的口吻仿佛是个顽固不化的遗老,在怀念过去那个“黄金时代”中一些早已消失在时间的河里的东西。然而,那个时代其实只是童年的一个背景罢了,自己那时根本没有关注过任何公共讨论,也没收集整理过什么信息。就凭些零散模糊的回忆,哪称得上经历了一个时代呢。那个博客的黄金年代想必一去不复返了,但在互联网上拥有一小片能发发牢骚的地方这个想法,倒是一直没有忘记。做这个博客,也算了却了童年一个未尽的愿望了。</p>
<p>慢慢地,有些想写的东西了,可随着学业压力的增长,空闲的时间却少多了。现在的我和过去相比,有了哪些变化呢?“尝尽愁滋味”这种话当然是不配讲的,可这么些年里,好歹也尝过了一些,又正挣扎于不少,还清楚前面仍有一片接一片的苦海在等着我。这时候,写点东西的储备还是有的。再没个地方能把脑子里的浆糊倒出来,万一以后掉进海里没爬出来,或者走在路上被车撞了,那白在这世上转了一圈什么痕迹也没留下来,可就太亏了。然而,曾经那个不折腾活不下去的少年已经长成了一条懒癌晚期的大咸鱼,糟糕的时间管理使它在摸鱼时谋划了很久的博客一直停留在嘴上,连一张设计稿都没有。不过,2020年 <a href="https://zh.wikipedia.org/wiki/2019%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92%E7%97%85%E7%96%AB%E6%83%85">COVID-19 疫情</a>的乌云给了它一个免受学校琐事折磨的机会,最终一天打渔五天晒网地糊出了这个网站。</p>
<p>博客现在托管在 GitHub Pages 上,使用 Jekyll 生成。考虑到 GitHub 使用的 Fastly CDN 目前对中国电信用户的连接质量时不时和断线无异,便加上了 Cloudflare。GitHub 被 Microsoft 收购之后运作得似乎不错,再考虑到隔壁 SourceForge 都提供了这么多年的免费 PHP 空间,Github Pages 这个静态页面托管服务相信在可预见的时间内是比较稳定的。这样的话,就算存在 <a href="https://en.wikipedia.org/wiki/Bus_factor">bus factor</a> 等不可抗力,这里的内容也应该能在互联网上多存在一段时间,不会因为服务没人续费就消失在历史的河里。这算是使用免费平台的一个优势吧。若有需要,迁移到 Netlify 等托管平台或 self-host 也不难。</p>
<p>这个博客总算上线了。希望多年后翻阅这里的文章时,能庆幸过去的自己留下了一些不错的脚印。但愿这里不会很快就长草了😂</p>
<p>路漫漫其修远兮,吾将上下而求索。</p>
<p>(初稿于2019年9月7日夜)</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:micolog" role="doc-endnote">
<p><a href="https://code.google.com/archive/p/micolog/">micolog</a> 是一个模仿 WordPress,在 Google App Engine 上运行的 Django 程序。后来随着 GAE 被墙、GAE 降低免费额度使未配置缓存的 micolog 站点动不动就因超额被暂停、博客在社交网站兴起后式微、项目使用老旧的 Django 0.96 / Python 2.5 等原因慢慢销声匿迹了。 <a href="#fnref:micolog" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
在网上冲浪了好多年,遇到过许多有趣的博客,也在阅读器里订阅了一些,但一直没能下定决心为自己搭建一个。正在发生的 COVID-19 疫情打乱了习以为常的生活节奏,面对突如其来的空闲时间,继续拖延便说不过去了。期待能在这里留下自己的思考与发现,并记录一些经历吧。