<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feeds/rss-style.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ENDsoft's Blog</title>
        <link>https://blog.r-ay.cn/</link>
        <description>Ray（ENDsoft233）的个人博客，记录思绪、杂文与折腾。</description>
        <lastBuildDate>Fri, 23 Oct 2026 08:01:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Astro-Theme-Retypeset with Feed for Node.js</generator>
        <language>zh</language>
        <copyright>Copyright © 2026 Ray</copyright>
        <atom:link href="https://blog.r-ay.cn/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[第七次，你好，世界。]]></title>
            <link>https://blog.r-ay.cn/articles/moving-out-of-wordpress/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/moving-out-of-wordpress/</guid>
            <pubDate>Fri, 23 Oct 2026 07:30:00 GMT</pubDate>
            <description><![CDATA[PHP2Shell 披露的第二天，我发现博客还跑在一台六年没升级过 PHP 的服务器上。顺着这根线，博客搬成了静态站，主页也重做了一遍。]]></description>
            <content:encoded><![CDATA[<p>原标题：《因为一个 PHP 漏洞，我给博客搬了家》，作者：Claude Opus 5.5</p>
<p>10 月 21 日，PHP 官方修了两个漏洞：CVE-2026-109618 和 CVE-2026-109619，圈里把这组漏洞叫 PHP2Shell。不用登录，发几个特制的上传请求，就能在服务器上执行代码。</p>
<p>我第一反应是去看博客那台服务器。</p>
<h2>一台我已经忘了装过什么的服务器</h2>
<p>让 Claude Code 上去看了一圈，结果不太好看：PHP 是 2020 年 3 月自己编译的 7.4.3，这个大版本早就停止维护，官方不会再出补丁；系统是 Debian 9，也停止维护了；漏洞依赖的 <code>session.upload_progress</code> 默认开着。翻了下日志，4 天里有 1713 次针对 <code>wp-login.php</code> 的爆破请求。</p>
<p>更尴尬的是，这台机器上到底跑着什么，我自己已经说不清了。</p>
<p>盘点下来：nginx 里配了十几个站点，一大半的域名早就没有解析；主页 r-ay.cn 其实很早就放到了对象存储上，服务器上那份只是个过期的副本；我自己的东西里，还在用这台服务器的只剩这个博客。</p>
<p>而博客本身，8 年攒下 10 篇文章，近一年只有 1 条真实评论，待审核的 19 条全是垃圾广告。为了这 10 篇文章，我常年养着一台 PHP 服务器、一个云数据库，外加防火墙插件和对象存储同步插件。</p>
<h2>本来想重装服务器，最后只搬走了博客</h2>
<p>一开始的打算是把服务器清空重装，焕发新春。</p>
<p>查记录的时候发现，朋友今年三月还上去改过 php-fpm 的配置，四月、七月也都登录过。这台机器他还在用。重装会把他的东西一起抹掉，所以改了主意：只把博客搬走，服务器留给它现在的主人。</p>
<h2>博客换成静态站，评论留着</h2>
<p>博客换成了 Astro，主题用 <a href="https://github.com/radishzzz/astro-theme-retypeset">Retypeset</a>。10 篇文章转成 Markdown，旧链接 <code>/articles/{id}-{slug}</code> 保持不变，以前收藏过的地址还能打开。</p>
<p>迁移时顺手修了几处老毛病：</p>
<ul>
<li>在 WordPress 里，我一直用引用块当小标题，这次统一转成了二级标题，文章也因此有了目录。</li>
<li>图片全部换回原图，构建时再压缩。九月 Xing 在《近况》下面说网络拓扑图被压到 1024×417 看不清，这回清楚了。</li>
<li>《拣爱》里那几句白色的「隐藏内容」，深色模式下会直接露馅，改成了鼠标悬停才显示的模糊遮罩。</li>
</ul>
<p>评论我想留着，这也是我能忍受那么多垃圾评论的原因。选评论系统时有个小插曲：AI 一开始说「只有 Artalk 能导入 WordPress 的旧评论」。可总共就 17 条评论，写个脚本就能迁，选型应该看哪个维护得好、用起来顺手。最后选了 Waline，访客不用注册，留个昵称就能评论。16 条旧评论连同回复关系一起迁了过来，另一条是 WordPress 安装时自带的示例评论。</p>
<h2>主页改了三版，最后删到只剩几样东西</h2>
<p>第一版主页和博客都照着毕设官网 bitego.net 的手绘风做，奶油色的纸、霞鹜文楷、铅笔描边。做完一看，主页和官网太像了，博客用暖色底，读长文也累。博客后来换成了冷白底和系统字体。</p>
<p>第二版换了个思路：让三个 subagent 各自从「前端工程师」「Agent 视角」「完全不设限」出发做原型。一个是能按快捷键「审查」的主页，一个是写给 Agent 看的协作者上下文，一个是十三圈年轮配年表。都挺有意思，但都太复杂了，信息也给得太多，没必要把这么多东西摆给陌生人看。</p>
<p>最后留下的是这样：</p>
<p><img src="https://blog.r-ay.cn/_astro/home.ChJsGo0L_1HpdC6.webp" alt="现在的主页" /></p>
<p>头像外面是年轮，从 2014 年开始一年一圈，今年这一圈只画到今天。下面是手写签名，再下面是我的业余无线电呼号 BH4HPA 和它的摩尔斯电码。年轮每隔几秒会从里往外亮一遍，像电台在发信号；页面还照着真实电报的节奏，一遍遍拍发这个呼号。</p>
<p>主页上关于博客的，只剩一行「最近在写」，构建时自动取最新的一篇。</p>
<h2>AI 导读要勾人，不能剧透</h2>
<p>每篇文章顶上加了一段 AI 导读。第一版写得像摘要，《近况》那篇直接把结尾的答案写了出来，读者看完导读，文章就不用读了。改成先把问题抛出来，答案留在正文里。</p>
<p>导读存在仓库里，构建时不调用模型。文章改了而导读没跟着改，构建会给出提醒。</p>
<h2>推一下代码，网站自己就更新</h2>
<p>现在文章写好推到 GitHub，Actions 就会构建博客和主页，再同步到腾讯云的对象存储，前面挂 CDN。评论服务用 Docker 跑在另一台服务器上，也挂在 CDN 后面。</p>
<p>切换按 www、博客、主页的顺序一步步来，每一步都能往回退。中间也踩了坑：腾讯云 CDN 的 URL 重定向只在源站是 IP 时生效，www 怎么都跳不到 r-ay.cn。最后没再较劲，让 www 和 r-ay.cn 回源同一个存储桶，内容一样就行。</p>
<p>收尾的时候，顺着「哪些东西还连着那台老服务器」往下查，发现旧 WordPress 的数据库里还存着一把对象存储的密钥，能读写整个账号下的所有存储桶。老服务器一旦被攻破，这把钥匙就会落到别人手里。博客已经用不到它了，直接停用。现在 CI 用的是一个专门的子账号，只能写博客和主页这两个存储桶。</p>
<h2>和 AI 一起干这件事的几点体会</h2>
<p>这次几乎所有的活，都是我和 Claude Code 一起干的。回头看，我说得最多的，是「这个方向不对」：</p>
<ul>
<li>「干脆就只做博客的迁移，这台服务器继续烂在这」</li>
<li>「我希望你挑一个维护性最好最合适的评论系统，至于迁移评论完全可以你来做」</li>
<li>「三个主页都太复杂了，信息太多，没必要漏这么多信息给别人吧」</li>
<li>「我希望 AI 导读是起到一个吸引读者阅读兴趣的作用」</li>
<li>「其实也不需要钻牛角尖」</li>
</ul>
<p>后 Agent Coding 时代，执行力、代码编写速度不再成为瓶颈，程序员或者 AI 使用者最重要的就是判断力：能定方向、能拍板，能一眼看出问题，让 AI 不钻牛角尖、不在一个问题上重复打转。当然，快速学习的能力和刨根问底的能力也很重要。后者会驱使你去了解为什么是这样，前者则帮助你知道为什么。</p>
<p>这次就有一个现成的例子。AI 说国内拉 Docker 镜像大概率不通，就去找镜像站，可那台服务器上明明有代理。被我点出来以后，它先实测，再换了一种不用重启 Docker 的方式拉镜像。</p>
<p>还有个办法，是让不同的模型互相挑错。改完代码后交给 codex 做了一次盲审，它抓出来 RSS 里中文文件名的图片地址全是坏的，还有重复导入评论会把新回复的父子关系弄断。这些我自己翻代码，大概率看不出来。</p>
<p>还有一条小规矩：代码里不写注释。需要说明的写进 README，代码不是我们俩之间的文档。</p>
<p>2018 年那次重建，第一篇文章叫《第六次，你好，世界。》。这次算是第七次了。</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[近况]]></title>
            <link>https://blog.r-ay.cn/articles/487-recently/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/487-recently/</guid>
            <pubDate>Fri, 04 Sep 2026 04:02:05 GMT</pubDate>
            <description><![CDATA[博客长草了，我来拔一拔]]></description>
            <content:encoded><![CDATA[<p>很感谢一年前重启博客的自己，也感谢去年留下了几篇还算说得过去的随笔。</p>
<p>今年也经常有想写点什么的时候，但常常一忙起来，过两天也就忘了。</p>
<p>因此今天开一篇谈谈今年、或者是最近几个月的近况吧。</p>
<h2>勇攀高峰的一年</h2>
<p>“勇攀高峰”是字节跳动今年的年度关键词，核心是在 AI 时代抓住重要机会，攀登行业新高峰。对我来说，勇攀高峰更多是鼓励我全面地拥抱人工智能。</p>
<p>还记得去年的 AI Coding 还是以代码补全为主，Agent SOLO 为辅。到了今年的这个时候，Agent SOLO 已经是满天飞了。</p>
<p>第一个心得，是别在旧模型上浪费精力：</p>
<p>SOTA 是当务之急。今年四月份，偶然体验了 TRAE 上的 Claude Opus 4.6。从那之后，Claude Code 已经成了我不可或缺的工具。</p>
<p>可惜如何搭建这一套家宽网络出口，在中国大陆公开的博客上介绍是不合法的，就简单的放一个网络拓扑图吧。</p>
<p><img src="https://blog.r-ay.cn/_astro/iShot_2026-09-04_10.56.03-1.CFv3-xRx_Ec0b8.webp" alt="" /></p>
<p>第二个心得，是站在 Agent 的角度看问题：</p>
<p>人与人的视角亦有差距，更何况人与 Agent 的视角。遇到 Agent 犯错时，我们第一时间想到的往往是：“Agent 为什么会犯这个错？”</p>
<ul>
<li>是单纯因模型能力导致指令遵循失败？</li>
<li>是哪个地方的提示词有歧义误导了 Agent？</li>
<li>我该怎么帮助 Agent 保证他下次不犯错？</li>
</ul>
<p>其实，站在 Agent 的角度看问题，最好的方法就是<strong>问 Agent 他自己</strong>。</p>
<ul>
<li>和犯错的 Agent 进行深度沟通，问问他为什么会犯错</li>
<li>把犯错 Agent 的对话、工具调用链等信息交给另外一个全新的 Agent，让他分析为什么会犯错</li>
<li>问问 Agent 怎么才能避免再次犯错</li>
</ul>
<p>偶发遇到的问题，考虑加强提示词解决。而经常出现的问题，考虑通过 Harness 解决。</p>
<p>第三个心得，是充分信任，Context over Control：</p>
<p>“Context over Control”也是字节跳动的 10 条领导力原则之一，内容包含：1、充分共享信息和上下文，避免信息不对称；2、激发不同的人参与，集思广益，避免“一言堂”，基于充分信息进行决策。</p>
<p>对于 Agent，我更喜欢把他当成我的一群“实习生”，充分信任他们的能力，不设限，是我的行为准则。</p>
<p>或许很多人对 Agent 的认知，多少还带着 GPT-3.5 时代留下来的惯性：担心模型能力不足，不知道模型能力的上限，因此不太敢真正放手让 Agent 干活。其实，在安全沙箱健全的现在，不妨大胆地让 Agent 尝试一下，挑战它的能力上限，也是挑战你对 Agent 的认知上限。</p>
<p>与其畏首畏尾，再三确认、方方面面地补齐提示词之后，才敢外包一些执行流程非常清晰的活给 Agent 去做；不如试试提供充足丰富的 Context，补齐你的一些思考，在大方向上面给一些引导，再放手让 Agent 帮你出谋划策。</p>
<p>“请进入规划模式” 是我最常对 Claude Code 说的一句话，“Here's Claude's Plan”也经常会让我感到震撼。</p>
<h2>顺利毕业的一年</h2>
<p>今年六月底，我顺利地拿到了属于我的双证 —— 毕业证书和学士学位证书。至此，算是正式和学生时代告别了。</p>
<p>说实话心里也不是很激动，因为早在一年前开始到字节跳动实习之后，和学校的交集便越来越少，我也渐渐地不把自己当成一个学生看了。</p>
<p>另外我也正式入职了字节跳动，成为了一名签有劳动关系的正式员工。</p>
<p>去年秋招我拿到了拼多多用户增长、腾讯广告、还有现在字节生活服务的三家录用意向书。其中拼多多给的薪资最高， 算上加班费，比现在字节的月收入还要多一万多。</p>
<p>拼多多的团队业务我也最喜欢，用人工智能辅助拼多多广告落地页信息的编排，涉及算法，是唯一的前端转全栈岗。只可惜拼多多工作要求 11-11-6，即每天早上 11 点上班、晚上 11 点下班，一周工作六天，只休周六。我更追求 Work-Life-Balance，或者说更想要高质量的生活，也就只能和他们遗憾作别。</p>
<p>至于腾讯的这个 offer，虽然薪资诚意也还可以，但他们是个混合部门，一个 Leader 下管着前端和后端一群员工，Leader 也是后端思想为主，担心前端发展会有障碍。而且相比之下，我更认可现在团队 Leader 和 Owner 的方向与判断，也更看好自己在字节的发展。</p>
<p>还有一件和毕业有关的事情，就是我也是正式落户上海了。</p>
<p>四年前 2022 年上大学的时候，我就以“大中专升学”为由户口迁移到了学校集体户内。这四年，学生集体户也确实带来了不少便利，从身份证、护照、港澳通行证的办理到纯电新能源车的免费牌照，很多事情都比外地户籍方便不少。</p>
<p>四年后的今天，我也是顺利通过“非上海生源应届普通高校毕业生进沪就业办理户籍”的政策完成了 72 分的打分落户，正式开始在上海拼搏吧。</p>
<p><img src="https://blog.r-ay.cn/_astro/iShot_2026-09-04_11.12.50-1.Cbh0wQOX_Z1JnOMW.webp" alt="" /></p>
<h2>踽踽独行的一年</h2>
<p>其实也不是一年，而是最近。感觉突然失去了生活的意义。之前有目标、有计划，现在的我好像也开始活得浑浑噩噩了。</p>
<p>每天两眼一睁就是上班，为团队、为领导的 OKR 而活。但回到自己的生活中，似乎又感觉没有任何事情可干，或没有任何事情能提得起我的兴趣了。我不知道继续赚钱、存钱是为了什么，整个人生似乎也过得圆满了。精神上逐渐变得空虚、孤寂，好像也没有什么可以依靠。</p>
<p>我对旅游其实没有特别的要求，去年实习前去三亚度假是我最满意的一次旅行。现在的我觉得旅游重在度假而非新奇。花花世界的景色经互联网的传播早已脱敏，肉眼所见的活生生的场景甚至比不上镜头下的静态图片。能够慵懒地放空大脑就已经很好了。</p>
<p>我可能也不准备养儿育女。和女朋友早就商量好之后不生孩子，不为了孩子而活。不生育、不养育带来的好处就是极大地降低了精神压力和经济压力。不用为孩子准备学费、生活费，也不用担心孩子的成长、健康之类的。只要能过好自己就行了。虽然我发自内心其实是想养孩子的，但以目前的经济状态来讲，养不起，逐渐也就失去兴趣了。</p>
<p>我或许也已完成了自己的人生目标，在早些年打了把漂亮的翻身仗，从海岛渔村的穷苦人家长大，到现在能够混进大厂当牛做马，领着足够把自己养得很好的薪水，实现了儿时立下的理想和目标，其实看似早已圆满了。</p>
<p>综上，我感觉突然失去了生活的意义。我不知道我的明天、明年、下一个十年的目标是什么，也就活得浑浑噩噩、踽踽独行。</p>
<p>写到这，我忽然想到，生活也许本来就没有目标。</p>
<p>或许每一天都能好好享受沐浴到的阳光，就是唯一的目标。</p>
<p>工作固然痛苦而折磨，但工作日早起去体育公园跑步、沐浴阳光，听蝉鸣、闻花香还是有奔头且幸福的。</p>
<p>每个周末，与其在家里躺尸两天，我更喜欢能够约上三五好友一起，开着车，去江浙沪的周边爬山、桨板、溯溪。</p>
<p>也或许，一个人也可以。</p>
<p>接下来的目标，希望是学会过好没有目标的生活。</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[自由飞翔]]></title>
            <link>https://blog.r-ay.cn/articles/462-freestyle-flying/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/462-freestyle-flying/</guid>
            <pubDate>Fri, 04 Sep 2026 02:47:50 GMT</pubDate>
            <description><![CDATA[怎么游好自由泳]]></description>
            <content:encoded><![CDATA[<p>在水中用<strong>自由</strong>泳<strong>飞翔</strong>；简称自由飞翔。</p>
<p>大二时，体育专项班选了比较感兴趣的高尔夫球，后来发现也没啥意思，不过是打打墙上挂着的布，评判标准也不过是动作做的好不好，有没有碰到布罢了。没有竞技性加上四肢不太协调和大二冬季学期体育课时间有其他安排的缘故，大三就重新选了更需要四肢配合的体育专项——游泳。</p>
<p>选游泳，一方面是游泳比较耗氧，可以给我一种每周上课就能减重的幻觉；一方面是天气比较热的话，游泳比较凉快还可以洗洗澡。不过更大的原因是因为我小学三年级就学过蛙泳，而且体育中考也练过一段时间的蛙泳；自以为有点基础。</p>
<p>但选进来之后，我才发现这也是我的噩梦——对一个没有学过游泳的人来讲，最好的学习路径是先学自由泳再学蛙泳，其次是只学自由泳，再是只学蛙泳，最后是先学蛙泳再学自由泳。。熟悉勾腿收腿蹬的我，习惯了脚后跟带动小腿大腿发力，在学习用大腿来打自由泳腿时，却怎么也坚持不下来。这尼玛怎么会这么累？除了打腿，换气是我的另外一个噩梦。习惯了抱水夹水抬头换气的我，每每转头呼吸的时候都要呛水，有时又不免的因为怕呛水而转为抬头呼吸，然后把身体压入水中，再也漂不上来。</p>
<p>不过好在，经过若干周的练习，现在我的自由飞翔技术总算是有了改进，也算是有了些小心得，迫不及待地分享给大家：</p>
<p>一、打腿打不动</p>
<p>在早期，高频次的打腿总是让我坚持不下来。用大腿带动小腿笔直的控制双腿上下来回摆动，还要控制脚尖绷直，频率还要做到一秒若干次。但实际上，真正游的时候并不需要打这么快的腿，前期练习打这么快只是为了锻炼动作和耐力。自由泳的前进不单单靠打腿，还靠划手。（草，为什么开始游配合的时候没人跟我说）</p>
<p>二、身体下沉</p>
<p>经常游着游着，整个人就游进水里再也起不来了。这个问题是因为我的前交叉没有做到位，右手开始划水转头呼吸的动作还没做完，就因为感觉身体要下沉而迫不及待的开始划左手，渐渐的前交叉每次都做成了后交叉，身体也就因为没有向前支撑的力，下沉了。实际上，这是身体在欺骗我。右手划水转头呼吸的时候，左手感觉身体正在下沉，完完全全是水在摇晃带来的错觉。实际上身体没有在下沉，左手根本不需要着急去压水划水。过早的划水才会真正导致身体下沉。自从坚信这是一种错觉后，我每次右手划水转头呼吸的时候，左手都坚挺笔直的伸着。不仅身体不会在下沉，游的也省力了很多，划水质量也高多了。</p>
<p>三、抬头呼吸</p>
<p>如果不是转头呼吸呛水，谁会想着去抬头呼吸啊！但生草的是，没人告诉我，转头呼吸的时候嘴要朝着自己身体的后方。即转头不是单纯的向右或向左转头，而是向右后方或向左后方转头，亲测这样你的嘴就不会被因为身体旋转带来的浪花灌个稀巴烂了。这点还是经过我多方观察才得出的结论，亲测也是非常好用。</p>
<p>以上，其实可能还有很多技巧。但我都忘了。这篇是一年前的草稿，一直在草稿箱里。今天把他顺手掏出来吧</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[管理的艺术]]></title>
            <link>https://blog.r-ay.cn/articles/478-art-of-team-management/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/478-art-of-team-management/</guid>
            <pubDate>Thu, 25 Sep 2025 09:54:33 GMT</pubDate>
            <description><![CDATA[从大学里拒绝当小组长，到实习中观察二十人团队的运转，我慢慢意识到：靠个人的勤快盯不住所有人，真正能让团队有条不紊推进的，是流程和规范。写下一点随想，聊聊我对“管理的艺术”的初步体会。]]></description>
            <content:encoded><![CDATA[<p>前十几年我基本都是单兵作战，几乎没认真想过“怎么带好一个团队”这种事。在大学里，小组汇报的时候我也常常拒绝当组长。原因很简单：随机分组也好，自由组队也罢，小组成员大多是“不可管理”的，组长往往意味着更多的责任和更多的活，所以我能躲就躲。偶尔不得不认真对待的团队作业，我也会挑起队长的担子，组织一下分工，推进一下工作。但说实话，失败的情况也时常有。</p>
<p>带五个人的小组都已经如此，那要是以后真的要带一个二十人的团队，该怎么办呢？怎么才能从“不可被管理”，变成有条不紊地往前推进？实习的这段时间，我见识了几个不同的团队，有了一些迷思，就随便写在这里。</p>
<p>团队里的同学性格真是千奇百怪。有的人天生能量满格，见到事就想做，一刻都闲不下来；有的人则总是能拖就拖，直到实在不能再拖，才草草收尾。有人可能会说：“那不就因材施教嘛？高能量的就放养，低能量的就天天盯，甚至每小时鞭策一次也行。”五个人的小团队或许还能这样，但二十个人呢？一天24小时都不够你轮着鞭策一遍。</p>
<p>更别提，领导自己也会偷懒啊。你要是指望自己像个陀螺一样，盯住所有人，肯定扛不住。把二十人拆成若干个小组呢？问题其实也依旧存在。</p>
<p>所以后来我慢慢觉得，人数多的时候，靠的就不是领导个人的勤快，而是<strong>流程和规范</strong>。</p>
<p>比如说，一个研发团队可以用双周为周期，把关键的环节“固定”下来：需求定容会、需求评审会、技术评审会、代码评审会……每个环节都有对应的时间点，就像给大家设置了一条条明确的跑道。流程在那儿，就等于自动给了大家一个统一的DDL，能量再低的人，也得跟着往前走。</p>
<p>同时，流程不光是时间上的约束，还能通过一些小规范来保证质量。比如技术评审会要求全员参加，代码评审必须所有相关同学都到场。这样一来，没人能轻轻松松“划水”，大家的工作既有前置规划，又有后续保障。再加上轮流主持的机制，把监督权下放，不至于出现有人“摸鱼”逃过监管。</p>
<p>当然，流程也不能太多，否则就真成了“天天开会的团队”。会议也得有人提前准备，不然效率只会越来越低。</p>
<p>慢慢想明白之后，我觉得，一个好的团队领导，不只是会向上管理，把领导哄得满意，更重要的是能让团队里的每个人工作都顺利推进，团队整体能稳定地产生价值。不然，所谓“领导”，又有什么意义呢？</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[读研还是不读研呢]]></title>
            <link>https://blog.r-ay.cn/articles/455-graduate-or-not/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/455-graduate-or-not/</guid>
            <pubDate>Tue, 08 Apr 2025 17:39:16 GMT</pubDate>
            <description><![CDATA[读研还是直接就业？这是我从大一纠结到现在的问题。 一路走来，我请教了无数前辈，也曾做两手准备，直到在实习中逐渐找清方向。最终让我下定决心不读研的，不是一时冲动，而是……]]></description>
            <content:encoded><![CDATA[<p>读研还是不读研呢？这个问题，我总算是把他想通了。</p>
<p>以我目前的绩点，拿到推免资格（保研）肯定是没有问题的，想要读研就要准备一下夏令营之类的东西；但以我目前的水平，直接就业也是完全没有问题的，我还挺有信心能够在字节跳动转正，拿一个不错的 offer 的。</p>
<p>但其实我大一的时候就在想这个问题了。</p>
<p>其实想读研，根本不是想读研， 是想着有一个硕士文凭出来就业或者再就业之类的会比较有优势。不想读研，是因为我觉得我已经不再有高中那般学习的劲头了，大学的时候学微积分、概率论和线性代数学的我头大，感觉学不下去也不想学，再读研究生也是水货，我并不是搞学术研究的料。</p>
<p>但就是很纠结呀，所以从大一就开始想着，做着两手准备，保研就业两手抓。</p>
<p>不过我现在倒是想明白了。也不是突然顿悟，就是 leader 的一番话点醒我了。</p>
<p>我曾经咨询过大三大四的学长，咨询过研三的学姐，咨询过研究生毕业两年的创业公司的 CTO，也咨询过我在信息办一个很要好的老师。他们的结论其实都是站在自身的角度去跟我讲到底读不读研，对我来说好像参考价值也不是很大。</p>
<p>但是 leader 跟我说，能力是可以转化的。</p>
<p>其实硕士的文凭之于就业，无非就是帮助企业更简单快速的筛选人才罢了，“一个真正做实事的企业，他期待成果，就需要能够真正做事的人”，而不会因为你的学历而忽视你的能力。而这个所谓的能力，其实也分为硬实力和软实力；硬实力决定着你的下限，软实力决定着你的上限。拿互联网研发岗来说，你的代码水平就是你的硬实力：你解决一个需求的眼界、评判各种技术方案的能力和你长远架构代码的能力等等，都是你的技术硬实力。这个能力想要迁移到其他岗位很难，也是你吃着一碗饭的根本。你有一点能力，可以写一点自己的小项目；再有一点，可以参与团队协作；再有一点呢就可以进公司实习，转正，成为某个方向的技术 owner，这些都需要你的硬实力支持。而在网上呢，就需要软实力的加入了。还是拿互联网研发岗来说，你能够紧跟产品部门的节奏、学会和同级的同事们沟通交流、考虑产品未来可能的发展方向而实现在研发项目中提前打基础埋点等等，都是你的研发软实力。抽象来说，你的阅历、眼界、领导能力、组织能力、行动能力、沟通能力，都是软实力。向上爬做到团队 owner，部门 leader，就需要这些软实力。除此之外，你培养硬实力的过程中所用到的学习方法、经验技巧，其实也可以迁移到学习其他硬实力的过程当中。比如如何规划学习任务、如何拆解遇到的难题、如何发现和认识自己的不足、如何快速的理解某一个任务和需求，这些用到什么硬实力之上的培养都同等重要。</p>
<p>所以能力是可以迁移的。你不必担心在一个岗位、一个行业深耕过久，你的经验、能力就无法复刻，从而导致你不再能够再就业到其他岗位、行业上去。一个优秀的人能够写代码写得很好，也能够开手动挡开的很惊艳。</p>
<p>所以回到刚开始那个问题。读研还是不读研？上过大学的都知道，学校里的东西古老、教条又脱节。社会实践过的又都知道，在一线工作能够接触到实实在在的知识、培养你真真切切的协作。我并不否认大学就是一无是处，像清华北大这样的学校，他们的科研团队实实在在的走在行业的最前沿，他们的人工智能大模型不亚于商业公司的成果。但那是搞科研，我又不想搞科研。上过大学的还知道，什么小组作业、团队汇报根本就不是什么能够培养一个人团队思维、实现 1+1 大于 2 的东西。读研三年，我能提升多少我的能力，包括硬实力和软实力呢？不如就业。</p>
<p>我先前的顾虑就是就业好像会失去很多东西。最重要的就是失去文凭。但其实，在现在这个社会，我应该担心的是自己的能力会不会跟不上别人呢？大学是一个温床，他可以躺的很死没人管你，也可以活得很自由。我好像更需要一个压力更大的环境来让自己努努力了，就像高考那样，每天都有一个固定的而且不是那么触手不可及的目标，坚定不移的冲着他向前走。</p>
<p>所以我还是不读研吧，如果我可以就业的话。</p>
<p>其实出身于农村，我还是挺自卑的，特别是当我爬得越高看得越清楚的时候，这也是我很要强的原因。我常常感激小学四年级的某个周末，我打开百度，搜索「我的世界服务器」，从此改变了我的人生。其实不仅仅是这件事，还有什么小学三年级加入的编程社团，小学二年级我爸脑子一热买的个人电脑之类的云云。人生就是这样的各种机缘巧合，你会因为某些事情猛的喜欢上什么，又或者加入什么新的圈子，认识新的人，交流之后——你的眼界就被开阔了。你可能会发现这世界上还有这么些好玩的东西，就像大一的时候偶然加入的逐浪这样。所以大胆走出自己的舒适圈吧，多去切身体验些新鲜的，交点不一样的朋友，认识点不同的人，可能会大有裨益。</p>
<p>但人生除了机缘巧合，还需要努力和坚持，最重要的可能就是计划。所有人都会站在时代的风口浪尖，也会常常处在自己人生的交叉口。但并不总是所有人都能选出那条，甚至是看到那条路。不过其实每条路都很好，但如果你有梦想，有爱好，想追求点什么，那就早点看清自己应该选的路，从做点什么计划开始吧。</p>
<p>我在大一的时候大胆地给自己计划了三步走的路来超越同龄人：大一写项目，大二搞实习，大三进大厂，然后大四留着缓冲（毕竟前面的年度目标并不一定能实现嘛），或者是拿一年思考人生的路。那时候的我其实并不觉得这条路能成，因为找项目写很难，找实习更难，进大厂那更是比登天还难。但幸运的是我成功了。大一本来想进青志协写一套抢志愿的系统（因为总感觉他们提交腾讯文档的方式很呆也很不公平），却因为繁琐的面试选择了放弃，但最后又阴差阳错地完成了上海大学临时人员管理系统的开发。大二一年都是专业基础课，课程任务重、时间紧，感觉好像根本没有时间能抽出来去任何公司搞实习。结果却在找第二个项目练手的过程中，偶然入职了守扣科技，弹性公制+一群很好的伙伴，让我在大二这年完成了实习这一任务。后面的路好像就跟开了挂一般，很顺利的入职了字节跳动，然后混上了日薪 400 的工作。</p>
<p>所以有想法就大胆点给自己定目标吧，再想点实现的路径。有着目标和路径的指引，总不会偏的太远。</p>
<p>至于兴趣和爱好。如果没有一个喜欢做的事，那好无聊啊，不是么。这玩意可能和基因有关？我不知道。但如果我早出生 100 年，我应该不会喜欢上编程；但我感觉我也不至于找不到爱好。除了写前端，我的爱好还有很多，比如开手动挡的车、搞电子板（虽然没搞过）、玩无线电，如果和职业有关的话，或许我可以干点销售、律师（因为我很喜欢 argue），其实我最中意的可能是大货车司机。我感觉有没有爱好和心态可能有很大的关系。如果你对明天充满希望，对人生充满激情，那么你总会有你想干的事。所以找不到爱好的时候，要不要考虑放空下自己？脱离你的学业、压力...和你的手机，然后到社会里、大自然里走一走瞧一瞧，感受感受，想想自己到底对什么东西是感觉眼前一亮的？想试试看的？其实爱好很难实现也没事。比如我从小虽然喜欢编程，但我曾想过当律师。当律师感觉就很难，要背法条，记好多好多东西之类的，听起来就很有挑战性。但如果我下定决心了就想试一试这个，或许我会从参加一个小模拟赛开始，打打辩论，参观参观法庭？然后再评估下我是不是真的对这个感兴趣。</p>
<p>如果你觉得自己没有喜欢做的事，也总是因为这个而苦恼，不妨试试上面的方法吧。比如你在放松的一天中突然了解到产品经理还挺有意思的，那么不妨再去想想该怎么去做好一个产品经理。从学习认识一款产品开始，然后尝试着自己设计一个小的产品、包括它所有的细节，接着考虑找个帮手实现它——这样你就可以对自己设计出来的产品有个直观的感受了！这是一个很好的开始。如果你很爱很爱你设计出来的这个产品，那么说不定你就可以考虑继续计划下去，试着找更多和他相关的事情。</p>
<p>一个爱好、一件喜欢的事，是你能够从中获得开心、快乐，治愈你所有过程中的压力、烦恼和焦虑的。至少我对此深有体会。我可能在写代码的过程中抓耳挠腮，面对复杂的结构因为不能一下子看出来而非常苦恼，然后常常皱眉，因此长很多的痘痘之类的；又或者我会一天都很 debuff，食欲不振，闷闷不乐，做什么都提不起劲。但是一旦我开始有了进展，我就会又活力满满。当我彻底地完成一个阶段的任务，我可以开心快乐好几天。</p>
<p>我觉得所有人都应该找一个自己喜欢的事情然后去做。至少在这个时代，我觉得大家都能够做到。我的大一室友很喜欢日语，却因为家里的压力，选了理工科的专业。在这个专业里他每天浑浑噩噩，该挂科挂科，每天沉迷于二游之中，对学习完全不感兴趣，大学对他而言就是混个文凭的事，这样的选择和他家里的设想和决定岂不是大相径庭吗？所以我经常劝他转专业，学他喜欢的日语，克服一切困难也要转到日语里去。虽然刚开始他也不觉得自己能够成功，但最后他还是成功了。一次酒局里我跟他一起说服了他的哥哥，得到了他家里的认可，然后他就转去日语专业里叱咤风云，重启大学时光。我不知道十年之后他会不会回来感谢我，但其实我做这些的目的也不是为了能得到他的感谢。我就是单纯的觉得，所有人都应该找一个自己喜欢的事情然后去做。做自己不喜欢的、没意思的事情，每天浑浑噩噩的浪费时光，是对自己的不负责任。</p>
<p>其实这个世界上没有什么做不到、不可以。勇敢点、大胆点迈出第一步吧！这个世界没那么多条条框框，翘一学期的课，休一年的学不会怎么样，路上看到一个不爽的人骂他几句也不会怎么样，就算是道德败坏，全世界敌对你那又怎样呢？为自己而活吧，骚年。这个世界他本来就应该围着你转。</p>
<p>其实我也不知道两天之后再回来看这篇博文我会不会尴尬的脚趾扣地恨不得跳进时光机回来阻止自己按下发布按钮。但我很享受这种意识流的写作，想到什么就写下什么，不review 也不改良。这比较真实，不是么？所以还是给自己定下一个约定吧，那就是发了就别删了，毕竟尴尬那又如何呢？这就是我。</p>
<p>所以，文章的最后，回到最开始的主题，与其纠结要不要读研，不如问问自己：你想成为什么样的人，你在做什么让你更接近这个目标？</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[重启]]></title>
            <link>https://blog.r-ay.cn/articles/449-writing-from-within/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/449-writing-from-within/</guid>
            <pubDate>Mon, 07 Apr 2025 05:31:07 GMT</pubDate>
            <description><![CDATA[四年没更新博客了，最近被几位旧友意外唤起记忆与情感，决定重启这片属于自己的精神角落。不是为了展示，而是为了留下。留下生活的痕迹、想法的碎片，还有那些不愿对人言说的心绪。希望在这里，过去的人能找到我，未来的我能看见过去。]]></description>
            <content:encoded><![CDATA[<p>好像已经有四年没写博客了。</p>
<p>最近才知道，女朋友还在关注一位旧友的公众号，了解他的近况；又意外发现，一位高中老友居然还在坚持更新自己的博客，每天都有固定产出。落笔之际，我又想起 Restent，那个曾经经常折腾博客的人。这才意识到，我自己好像也有一个博客——只是，好久没有产出了。</p>
<p>博客对我来说，有点私密，又有点公开。它不像朋友圈，虽能设权限，但发出去后别人总会“被动接收”；它也不像日记本，永远只有自己能看见。很多小心思，藏在心里总觉得不舒服，却又不想主动倾诉给谁；有些负面情绪，不说出来便无法释怀。博客就很好。想了解我的人，大概才会主动点开文章，耐心读完。所以，就此重启吧。很抱歉，鸽了四年，谢谢你们。</p>
<p>我其实一直喜欢文艺又细腻的文字，很羡慕那些能写出通透、有文化气质的句子的人。回望这十年，自己写下的大多是「解」「设」「答」那样的题解，要么就是「读者」「作者」之类狗屁不通的语文主观题，再不然就是冷冰冰的「import」「yarn install」代码。写这些文字，充满目的性，却于我个人几无意义。所以看到大家的文章，我也想重启博客，写点狗屁不通的文字了。</p>
<p>最早搭建博客，大概是在 2016 年，也可能是 2014 或 2015，已经记不清了。记得当初是因为想写文章，Little Qiu 当时告诉我，想练作文就得多写，开个博客很有必要。于是博客开了，但数据库几次意外丢失，博客一会儿像狗屎山，一会儿又像个空荡荡的粪池。现在回头看，想写好文字，还是得靠输入——要读很多好文章，记下来，甚至背下来。可这样的机会并不多。初中以来一直被学业裹挟，每当稍有空闲，我就报复性地玩，浮躁得不行，哪有心思沉下去搞搞文艺。</p>
<p>我觉得这辈子最不浮躁、最稳重的时间，是高三。那时候看透了高中的意义，终于意识到得静下心来努力，不能再重蹈中考的覆辙。于是从十月起，每天早上提早一小时背单词，晚上晚睡一个小时刷额外的物理题。偶尔放松时，就和同学下象棋，或出校门去万象城转转。无聊时在教室的电脑上写写代码。那时正好对自己身材焦虑，傍晚还会在晚修前去操场跑步。那段时间仿佛把贪欲、玩心、浮躁都抛之脑后，每天都很充实，有收获。</p>
<p>上大学后，这样的心境反而没有延续。恋爱的想法、生理的需求、学业的压力一拥而上。大一的我一边跟着学长拼命提早修学分，一边在室友鼓励下试着认识女孩子，然后认怂。大学期间在多抓鱼上买了不少书，有技术的，也有文艺的。但大多都像那本学着高中寝室里最文艺的同学买的《刘擎西方现代思想讲义》一样，封皮都没拆。大学这几年过得有点混沌，代码水平靠小学、初中的老本在撑，计算机通识知识跟着上海大学的三学期学完就忘了，其他方面，好像什么也没留下。</p>
<p>所以最近的目标是：选一本真正感兴趣的书，随身带着。有精力却无事可做时，就翻一翻。</p>
<p>我感觉自己身处的空间一直很小。每到一个新环境，总会失去一些朋友，切断一些连接。小学时正值互联网兴盛，我在网上认识了子芃、Little Qiu；初中也玩得很好，有 LittleC、Lxns、贱贱、喜儿、秋雨落。可到了高中，由于紧张的学业安排，一个月才回家一天，慢慢和他们淡了联系。到了大学，又和高中的死党分开，只能偶尔在朋友圈看到他们的动态，心中常有些感伤。如今恋爱了，和大学朋友也似乎渐行渐远。</p>
<p>我明白，友情需要主动维系，要持续“keep alive”；但浮躁的我，总抽不出时间“send a package”。所以，受文章开头的启发，我觉得，写博客也是一种与旧友沟通的方式。希望你们想我时，能在博客里找到我的踪迹，了解我的近况。我觉得这也挺浪漫的。</p>
<p>所以，就此重启吧。不同于技术博客，我更想在这里写些自己的随想，汇报一下生活。</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[【实战】 在程序中使用队列数据结构思想来规划多线程]]></title>
            <link>https://blog.r-ay.cn/articles/429-using-queue-to-process-msg-queue/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/429-using-queue-to-process-msg-queue/</guid>
            <pubDate>Sat, 27 Feb 2021 06:33:53 GMT</pubDate>
            <description><![CDATA[队列（Queue）——一种采用先进先出(FIFO)策略的抽象数据结构。]]></description>
            <content:encoded><![CDATA[<h2>前言</h2>
<p>近日，在我的编程书上学习到了一种我之前未了解的数据结构——队列（Queue）。按照书上的解释，他是一种采用先进先出(FIFO)策略的抽象数据结构。</p>
<p>对于先进先出策略，在消息处理队列上应用再好不过了。在此之前，我一直头疼，我该如何规划多线程处理才能使那些线程们不打架，不抢占同一个全局变量，又可以做到先来的先用。但是很惭愧，我一直没得解决。我曾试过易语言的“许可区”，但是只能做到不打架，不能做到先来先得，而且有时候也会失效。</p>
<p>终于，在学会队列这一数据结构后，我尝试将其应用在我的机器人插件上，取得了巨大成功！</p>
<h2>队列数据结构的实现</h2>
<p>队列需要两个指针，front 和 end，来分别标记队头和队尾。</p>
<p>入队和出队的操作很简单。入队时，将 end 指针向后移动，并在该指针对应的数据空间上填上数据；出队时，删除 front 指针对应的数据空间，并将 front 指针向后移动。</p>
<p>听起来很简单是不是？ 但你没发现这像是一次性的数组吗？</p>
<p>当 end 移动到数组底部，队列将无法添加新内容，但可能在该数组变量的开头已经有好几组数据已经出队，数据空间被白白浪费。像这样的情况，我们称之为「假溢出」。</p>
<p>你或许可以等到 front 同样移动到底部后重置该队列，但我们有个更优的实现方法： 循环队列。</p>
<p>循环队列的思想，就是在 end 触碰底部后，回到头部。</p>
<p>循环队列也会出现些许问题，譬如循环到头部后与 front 撞车，或是误判 front 跑到了 end 前面导致队列卡住。而此时，你也将无法像之前一样简单的判断队列是否已满，搞不好就会真的 overflow 了。</p>
<p>这种情况，你可以考虑在每次入队出队时判断 front 与 end 指针大小与差值来确认队列情况。你也可以再使用一个指针来标记列队中的数据总数，又或是标记一个必为空的数据跟在front之前。</p>
<p>理论部分还要靠你细细琢磨，队列只是一种思想，没有架死的框架。</p>
<h2>应用到消息处理上</h2>
<p>如何把队列这一数据结构思想用到我的机器人插件上呢？</p>
<p>我的思路是，在每次事件处理函数被调用时，申请加入队列，并等到该我出队之后，开始处理函数，再申请出队。</p>
<p>这样做会遇到几个问题，一是如果队列加不进（overflow）咋办？ 我的方法是重新尝试加入队列。 一味的调大队列的长度在平时无实际用途，还吃内存，不如在这种特殊情况下特殊处理，忽略这些还未进入队列的线程，让其按循环的运气加入队列。 另，我的队列上限是 100。</p>
<p>二是，如何判断是否该我出队了？ 我的方法是用一个 while 循环，在加入队列后，不断请求一个给定的函数，取目前的队列头，如果是我，那么就跳出循环，开始处理函数。</p>
<p>三是，我的消息并发过大，结果抢着进队列的同一个位置怎么办？ 我在加入队列时，申请了指针之后，再次判断指针是否为空，如果不为空，则说明指针被抢走了，那么重新递归调用入队。我认为这在一定程度上可以规避队列里打架的问题出现。</p>
<p>四是，我的循环列队如何处理，如果卡住了怎么办，消息队列会不会全部卡住无法恢复？我的解决方案是，在新入队、退出队、判断队头时，都会检查队头是不是真实的，如果不是，则直接将队头指针 +1，并且判断队头时，若一个队头占用队头的时间超过 60秒，将直接踢出，下移指针。</p>
<h2>后文</h2>
<p>队列虽然是一个数据结构，但将其思想应用在消息队列上，又何尝不是一种尝试呢？我已经将应用了队列的版本更新包推送，静待用户们的反馈。</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[【实战】使用「小米手环 5 NFC 版」模拟「校园一卡通」]]></title>
            <link>https://blog.r-ay.cn/articles/344-use-miband5nfc-get-schoolcard/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/344-use-miband5nfc-get-schoolcard/</guid>
            <pubDate>Wed, 22 Jul 2020 12:38:22 GMT</pubDate>
            <description><![CDATA[使用小米手环 5 NFC 版模拟加密 IC 卡的详细教程]]></description>
            <content:encoded><![CDATA[<p>（多图预警，所有图片均可点击放大。）</p>
<h2>入手 小米手环 5 NFC 版</h2>
<p>“小米手环 5 NFC 版简直是太香了！” 在寝室里刷手机的我，当看到小米手环 5 介绍时，就下定决心一定要抢到首发！</p>
<p>手里的小米手环 3 NFC 版因为比较久了，有些时候经常抽风，例如同步数据后数据不翼而飞，小米智能钥匙（解锁笔记本）经常失效。</p>
<p>当初因为小米手环 4 出的太快了，我不愿意一年一换，所以就忍着没换，但是当米环 5 出了以后，我就想换了。</p>
<p>于是，我通过小米商城微信小程序优先通道（就是下图这个），找了好多朋友帮我点了帮助，终于在开售前一天晚上，拿到了购买权！</p>
<p><img src="https://blog.r-ay.cn/_astro/Screenshot_2020-06-13-20-10-46-143_com.tencent.mm_.DoI0JojT_Z1DC96B.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/IMG_20200624_162443-43-scaled.iE17HPi1_17Pi8O.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/IMG_20200624_161529-18-scaled.wd1kpGzU_Z7vUrJ.webp" alt="" /></p>
<h2>“直接模拟” 校园一卡通</h2>
<p>拿到机子后的我，想到的第一点是：可不可以把我的校园一卡通模拟到手环当中，这样在食堂刷卡时逼格贼高！</p>
<p>于是我直接打开了门卡模拟，当我点击检测时，小米运动直接提醒我：“该卡是加密卡，不支持模拟。”可谓给我当面扑了一桶冷水。</p>
<p>但是我并没有作罢，我开通了一张空白卡，准备到学校发卡室，让老师直接帮我开通。</p>
<h2>“官方开通” 一卡通</h2>
<p>那天，是一个风和日丽的下午。</p>
<p>我手持着六张校园卡 —— 寝室交电费。</p>
<p>交完电费后，我便和发卡室老师交流了起来，我们聊到了手环模拟校卡，我问老师：“老师，你试试我这个手环可以开卡吗？”</p>
<p>老师人很好，也帮我试了下，但是当手环放到读卡器上时，正元智慧的软件提示：“下载密钥失败！”</p>
<p>老师对此事也习以为常：很多学生都来试过，但是都没有成功。正元智慧卖我们一张卡十五块钱，我们也十五块钱卖给你们，但是这种空白卡淘宝上其实成本就一两块钱。如果他不加密的话，他赚什么钱？</p>
<p>这无非就是直接断绝了我的想法：模拟一卡通。</p>
<p>但是，这位老师紧接着又说：我们学校的技术老师何xx，他好像成功的把卡移到手环里了，不过他就是玩玩。全校老师好像就他一人，学生好像还没有。</p>
<p>这对我来说，就是看到了胜利——既然有先例，那么就有解决方案。</p>
<p>虽然这次没有成功，但是我已经预到我会成功了！</p>
<h2>加密 IC 卡</h2>
<p>回到家后，我以关键词「小米手环」「模拟」「加密卡」在百度上检索文章，果然不负有心人，正让我找到了指导我成功的这篇科普实战文章。</p>
<p>首先，门禁卡有 ID 卡、IC 卡两种类别，其中，ID 卡只储存卡号，而 IC 卡可以在 ID 卡的基础上多储存一些数据。</p>
<p>而 IC 卡的数据也支持加密，需要特定的密钥来解密。</p>
<p>常见的 IC 卡（包括我的校卡、小米手环模拟出的卡）都有十六个区块（00-15），每个区块可以储存十六个字节。其中 00 区块前八个字节储存卡号，后八个字节储存厂家信息。</p>
<p>而小米手环的模拟原理，正是模拟非加密卡的所有信息，模拟成功后，除 00 区块不可变动，其他区块可以随意改动。</p>
<h2>实战操作，模拟「校园一卡通」</h2>
<p>基于以上的理论储备，我们只需要——</p>
<p>1、读取加密卡的内容，并进行解密，然后将其中的数据记录。</p>
<p>2、使用一张空白卡，将其中的 00 区块换上加密卡的 00 区块。</p>
<p>3、用小米手环模拟加密卡，然后写入其他区块并加密。</p>
<p>我购买了由“厦门市铁盾电子科技”提供的“pm3读卡器”，价格 107 元。购买之前我和他们的客服聊了很多，也感谢他们的客服为我提供的帮助！</p>
<p><img src="https://blog.r-ay.cn/_astro/IMG_20200722_170401-scaled.D11Z74vx_Z1sI2Y5.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/IMG_20200722_170515-scaled.B-NqQV7n_ZM9ogY.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_170708.Mcd_nrw1_Z2qeuov.webp" alt="" /></p>
<p>上图便是 pm3 所提供的配套软件了。</p>
<p>用于控制设备对IC、ID卡进行独写，并提供解卡、修改卡内数据信息功能。</p>
<p><img src="https://blog.r-ay.cn/_astro/IMG_20200722_172042-scaled.B0ggDNKa_1b2Fdc.webp" alt="" /></p>
<p>同时商家配套赠送了空白 IC 卡 2 张，空白 ID 卡 2 张。</p>
<p>我们首先点击“高频 IC 卡操作区”-&gt;“读 IC 卡”</p>
<p>耐心等待软件读卡完成：</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_170836.BJxCwWEf_Zsr6Yx.webp" alt="" /></p>
<p>图中红色表示该区块加密，绿色表示该区块未加密。</p>
<p>我们直接点击软件中提供的“全加密自动解密”功能即可，软件会帮你尝试密码进行解密。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_170949.ClJK7nXe_1Q93O0.webp" alt="" /></p>
<p>黄色闪动是正在解密，时间看你的 CPU 给不给力，我大概用了八九分钟。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_171721.CKcK79A0_1y5DPp.webp" alt="" /></p>
<p>接着我们点击导出按钮，导出 IC 卡的 dump 数据文件，然后放上我们的空白卡，点击【读 IC 卡】。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_171838.duxfTzUY_Z2kiAom.webp" alt="" /></p>
<p>再点击最底下的导入按钮，解析我们刚刚导出的 dump 文件，接着点击上面的编辑按钮，将上方的 00 区块数据填写为下方的 00 区块数据。</p>
<p>这是为了使我们空白卡的卡号和原加密卡相同，以便小米手环进行模拟。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_173201.0zGsi4-a_1mVNTc.webp" alt="" /></p>
<p>填写完毕后点击保存按钮，再点左侧操作栏的【写 IC 空白卡】，接着拿到小米手环上模拟。</p>
<p><img src="https://blog.r-ay.cn/_astro/Screenshot_2020-07-22-17-33-58-909_com.xiaomi.hm_..W_Xx9cbw_11VS8V.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/Screenshot_2020-07-22-17-34-01-639_com.xiaomi.hm_..BdPVyX-J_JSE3O.webp" alt="" /></p>
<p>模拟完毕后，把手环放到读卡器上，点击【读 IC 卡】，点击上方的导入按钮，导入我们刚刚的 dump 文件。</p>
<p>导入后直接点击【写 IC 卡】。</p>
<p>一番卡顿后，软件会提示写入失败，但这只是 00 区块无法写入。</p>
<p>还记得吗，我们开头说的，米环模拟卡 00 区块无法改动。</p>
<p>写完后我们重新读卡，解密后在下方操作区导入 dump 文件，比对一下两边的数据。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-07-22_173915.dzKq3RTh_ZQ3htt.webp" alt="" /></p>
<p>这时你会发现两边仅 00 区块不同，且 00 区块前八个字节数据相同（厂商无法模拟上），那么就表示我们成功了！</p>
<p>接下来拿手环去试试吧！！</p>
<h2>后文</h2>
<p>因为现在是暑假，所以我还不能到学校测试，所以暂时还不知道用得了用不了。</p>
<p>但是理论上我已经成功了~</p>
<p>接下来贴给你们宝贝地址：</p>
<p><a href="https://item.taobao.com/item.htm?id=601447675690">https://item.taobao.com/item.htm?id=601447675690</a></p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[【简谈】《拣爱》 —— “短小精悍”的爱情故事。]]></title>
            <link>https://blog.r-ay.cn/articles/286-thetaskoflovechoice/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/286-thetaskoflovechoice/</guid>
            <pubDate>Sat, 22 Feb 2020 14:18:32 GMT</pubDate>
            <description><![CDATA["怎样才是爱？"我们尝试用这个游戏去作回答。这个游戏鼓励人们拥有一颗温暖柔软，善解人意的心。 ————《拣爱》]]></description>
            <content:encoded><![CDATA[<p>抱歉，让你等了这么久。（指更新博客</p>
<p>&lt;audio controls preload="none" src="https://blog-assets.r-ay.cn/wp-content/uploads/2020/02/18_LoveChoice-%E6%8B%A3%E7%88%B1.mp3"&gt;&lt;/audio&gt;</p>
<p>藏着些隐藏内容，希望你阅读的时候也可以全部找出来哦：）</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-17_180755.DWsLh8JF_P6QUV.webp" alt="全成就解锁" /></p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_213142.keNmlNwW_Z2rWBNF.webp" alt="打点后的新桌面" /></p>
<p>本篇文章将讲讲我是如何剁手的并且我获得的技能~</p>
<p>这款游戏，是我在刷探索列队的时候刷到的，画风很符合我的胃口，名字也很有意思，看了看评论，原来是个讲爱情的游戏！</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_213256.agVhAFv0_Z2oCqxl.webp" alt="" /></p>
<p>看起来，还能增加情商不是么！</p>
<p><img src="https://blog.r-ay.cn/_astro/9150e4e5gy1gbd5rbacvej205i049wea.BeB-xqsk_Zndrkv.webp" alt="" /></p>
<p>虽然是单人游戏，虽然我很抵触单人游戏，但是我还是对他“一见钟情”。</p>
<p>也不贵，只需要10元就可以带回家，原声音频也只需要24元。</p>
<p>&lt;span class="spoiler"&gt;~（是的，不贵，如果你缺钱我可以送你一个）~&lt;/span&gt;</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_213606.2L30qWMi_Z8YY4f.webp" alt="" /></p>
<p>买游戏之前，我对他的认知，就只是一个galgame而已，而打开游戏的首页，给我的感觉也的确只是个galgame。</p>
<p>&lt;span class="spoiler"&gt;~(没错，我就是买galgame来玩，我下贱)~&lt;/span&gt;</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_213756.6wG1TiUN_2aNKht.webp" alt="" /></p>
<p>而通完第一关并获得“钢铁直男”成就的我，也还是认为这只是个单纯的galgame。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_213936.dxggafgA_EHQ9T.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_214032.CsmCuBwE_zbFOa.webp" alt="" /></p>
<p>你看这熟悉的画风，熟悉的操作栏，初来乍到的你，怎么会多想呢！</p>
<p>我当时也是这么想的，我在每个选项都纠结了很久，最后还是只能得到钢铁直男的称号——并分手。</p>
<p>直到——我打开了指南。</p>
<p>&lt;span class="spoiler"&gt;~（Steam 指南真是个好东西。）~&lt;/span&gt;</p>
<p>从指南中我得知，原来这不仅仅是通过操作栏互动的galgame，他居然可以点击画面里的内容进行互动，并且还十分隐秘。</p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_214327.BlWupDzA_Z2qgfbW.webp" alt="" /></p>
<p>比如这个，在公屏上的主题海报，竟然是搭讪的方法，你敢信？</p>
<p>这么说来，这个游戏还真是不简单呢。</p>
<p>我又重新过了一遍第一关，拿到了全部成就。</p>
<p>按照指南中的提示，第一关也正是授予你游戏操作方式的关卡。</p>
<p>这在其他游戏中也有，不过他的名字是——新手关卡。</p>
<p>~（这个除了名字不一样还给你按了个钢铁直男的称号巴拉巴拉而且还占了总进度的三分之一巴拉巴拉）~</p>
<p>游戏总共有三个关卡，分别是<strong>游戏、距离、侦探</strong>，对应来分别是<strong>建立感情、异地相恋、信任危机</strong>的三个阶段。</p>
<p>虽然我没谈过恋爱，但我认为这的确是恋爱中三门比较头痛的事情。</p>
<p>在前两个关卡中，你将扮演男方~，可以检测你有多么的直男癌~，而在第三关，你将扮演~疑神疑鬼的~女方。（女权勿喷，游戏而已。）</p>
<p>通关的方式不再多说，直接说我获得的技能~</p>
<p>一**，就是GET到了很多的恋爱技巧。**</p>
<p>干货来了，屁股坐稳了！</p>
<p>提示，这些都是我自己的见解，不是官方的！</p>
<p>我知道你想知道有哪些恋爱技巧，请往下拉~</p>
<p>1.<strong>有感觉的时候不要破坏氛围。</strong></p>
<p>看下面这几个选项，告诉我你的答案是什么？</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215003.BjpgYbKc_Z1GfDG8.webp" alt="" /></p>
<p>全错，正确答案是直接点击男主的手然后拉到女主的手上面！</p>
<p>然后，“ 我们就这样开始了 ”...</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215239.CHgOdaou_Jef6O.webp" alt="" /></p>
<p>2.<strong>吵架的时候不要火上浇油（也就是不要越吵越凶）。</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215338.DwFKp_FE_Z1VRqa7.webp" alt="" /></p>
<p>过这个地方的时候只有一个选项，也就是“....&amp;%@#%@G@#@2”，但是如果你点了，那么恭喜， 你输了。</p>
<p>没错，吵架的时候还点这个选项，<strong>你难道是想快速过关吗？</strong></p>
<p>只要不点击选项，过个半分钟，双方自动就会和好。</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215302.sIP5AMR9_2iro1h.webp" alt="" /></p>
<p>3.<strong>不要只会口头鼓励，还要~上手~</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_215649.SNBNaEIL_2gjhoj.webp" alt="" /></p>
<p>没错，直接把男主拉到女主身边就行了~</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215604.BP1HSLTa_5Yt32.webp" alt="" /></p>
<p>4.<strong>初次见面前要做足功课，多翻翻 TA 的微信朋友圈。</strong></p>
<p>这里就不上图了，都懂的~</p>
<p>5.<strong>感情中不要单方面的迁就，要的是互相体谅</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/2020-02-22_215856.V_NhNP1E_1EoPKi.webp" alt="" /></p>
<p>这里不需要抱怨，直接点垃圾清除就行了。</p>
<p>然后女主就会来帮忙了~</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222215828.TeXwmAzu_Z9lp7N.webp" alt="" /></p>
<p>这五点是第一关总结出来的，只要你都学到了这些技能，第一关也就可以顺利通过并收到女主的赞扬啦！</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220005.DxiVvagN_bVzbM.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220008.B45Rex5t_EJjJ6.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220038.WIZZs5dT_1NMsCN.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220042.DbOi9d2X_1cS8C8.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220045.Kz9euuGo_Z1Bxer4.webp" alt="" /></p>
<p>6.<strong>要尽可能的创造属于两人的独处时光，寻找两人的共同语言。</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220321.DxIc4K6w_WmobR.webp" alt="" /></p>
<p>这里是男主原本在和基友们玩耍，然后重色轻友的我把他拖过来跟女主探讨古典音乐了~</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220352.BPL8fkg8_c8QE2.webp" alt="" /></p>
<p>7**.给 TA 准备一些小惊喜。**</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220437.DhLenq4b_8jiyt.webp" alt="" /></p>
<p>按正常剧情发展~挨千刀~的男主会每天把钱花光用来买最好吃的热狗，而我们则需要阻止男主，然后存钱送给女主一个————迷你钢琴！</p>
<p>8.<strong>离别的时候不要表达意见，用行动来诠释你的观点。</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220611.eajM7A1a_Zv3qOF.webp" alt="" /></p>
<p>9.<strong>互相了解对方的领域。</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220639.DNHV4cEW_ZLa79A.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220641.B03PEK2Q_ZLL3H1.webp" alt="" /></p>
<p>10.<strong>要认真考虑双方的关系（不能太渣！）</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220745.C7rxl4Q5_1UWRG.webp" alt="" /></p>
<p>这是个灵魂拷问了哈哈哈~</p>
<p>11.<strong>遇到瓶颈时也不妨想想曾经的美好时光</strong>。</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220807.MlPIiIeP_1raD1A.webp" alt="" /></p>
<p>12.<strong>双方如果条件太悬殊，放弃也是个不错的选择。</strong></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222220845.DY20ONM3_1Lz3Pc.webp" alt="" /></p>
<p>剧透一下，这里如果选择下面的选项，会进入normal1，各自为前途奔波；如果尽力挽留，点击双方的物品怀念过去，会进入normal2，在一起，平平淡淡才是真！</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200222221012.BF6mCDrQ_1XxIPz.webp" alt="" /></p>
<p>13.<strong>给自己和对方都留点小空间，不要疑神疑鬼，相信 TA ，爱 TA。</strong></p>
<p>剧透一下，第三关讲的就是信任危机，男主为平淡的三年婚姻筹办了一次很浪漫的婚姻纪念日，而一个女生的电话打给男生被女主发现，如果女主挂断，那么会进入很长的破案过程，发现男主精心准备的一切；如果选择无视，那么直接跳过很难的破案，直接进入大结局，播放伤感歌曲，然后告诉你是谁做了这款游戏XD。</p>
<p>二、<strong>想谈恋爱了！</strong></p>
<p>三、暂时没了。</p>
<p>暂时想到的就这么多，就写到这里先吧。</p>
<p>另外，这款游戏据说是开发者一个人完成的（绘画配乐除外），而且他是一个三十多岁的大叔！看起来是感情经历丰富呢嘻嘻。大叔人也很好，很友善，点赞！</p>
<p>最后，开头自动播放的歌曲就是大结局的BGM哦（我有买游戏音乐，应该是可以放出来的吧？）</p>
<p>最后的最后附上游戏链接！</p>
<p><a href="https://store.steampowered.com/app/939400/LoveChoice/">https://store.steampowered.com/app/939400/LoveChoice/</a></p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[【踩坑】Oops!Your Blog has been hacked.]]></title>
            <link>https://blog.r-ay.cn/articles/256-blog-into-hole-1/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/256-blog-into-hole-1/</guid>
            <pubDate>Sun, 19 Jan 2020 11:27:35 GMT</pubDate>
            <description><![CDATA[这是《博客踩坑记》的第 Ⅰ 篇，本期摘要： 为什么圈圈转了如此之久博客还没有加载出来，为什么首页 100 kb 不到的大小需要加载长达 4 s ，为什么加了腾讯云 CDN 速度不增反减？这背后究竟是人性的扭曲，还是道德的沦丧？敬请收看本期 《博客踩坑记》 Ⅰ 。]]></description>
            <content:encoded><![CDATA[<p><em><strong>注：我是小C，文中加粗斜体的字是在Ray写完文章后我加上的</strong></em></p>
<p>为什么圈圈转了如此之久博客还没有加载出来，为什么首页 100 kb 不到的大小需要加载长达 4 s ，为什么加了腾讯云 CDN 速度不增反减？这背后究竟是人性的扭曲，还是道德的沦丧？敬请收看本期 《博客踩坑记》 Ⅰ 。</p>
<h2>Ⅰ. 迟迟加载不出来的博客</h2>
<p>或许你会发现，从不知道什么时候开始，本站的访问就变得非常的慢。慢到什么程度呢？就是你如果有缓存，那么要加载 1 秒，如果没有，那么你需要加载 4 秒或更久。</p>
<p>起初，我也不是很在意这个问题，毕竟之前罗里吧嗦各种配置也是瞎配置的。但是， LittleC 他不这么想，他认为博客速度这么慢真是太让人生气了，所以他开始对我的博客进行优化...</p>
<h2>Ⅱ. CDN 风波（上）</h2>
<p>刚开始 LittleC 是从 CDN 的配置入手的。因为我害怕被攻击，所以 CDN 各项设置的值都设置的比较小，LittleC 见状对博客的 CDN 进行了全部重新配置(按照他的博客 CDN 配置)，但没有效果。</p>
<p>难道不是 CDN 的问题？可是经过测试发现如果直连本博客会比 CDN 的速度更快，这是为什么呢？</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119164231.83ILpt8Z_ZvsUpJ.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119164149.BJZrNWUF_wApfF.webp" alt="" /></p>
<p>LittleC 很不解，并将这个问题抛给了我，但我也很不解。</p>
<h2>Ⅲ. 优化宝塔面板设置</h2>
<p>LittleC 这次想从服务器这里入手，检查是不是有什么不对劲的地方。当他打开面板，没错，映入眼帘的是一堆花里胡哨、乱七八糟的配置——这都是我之前瞎配置的。</p>
<p>尽管是瞎配置，我也对各项进行了精心优化，所以 LittleC 最终也没有实质性进展。</p>
<h2>Ⅳ. CDN 风波（下）</h2>
<p>于是从 LittleC 尽他所能完成全部他能做的事情之后，他开始转变方向，而是踏上了这条路：</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119190129.CRiD6qoa_1wcVYd.webp" alt="" /></p>
<p>他~年复一年(还没到一年)~日复一日的提醒着我，提醒到我厌烦——我也不知道怎么办嘛。终于在今天（ 2020.1.19 ），我决定解决博客慢的问题。<em><strong>（然而，在你上学偶然回来时我就催过你，你咕了！）</strong></em></p>
<p>我先和他讨论了缓慢会不会是由 域名解析、WordPress 本身等问题引起的，但很快被他否决了。</p>
<p>我决定再次从 CDN 问题入手，截了上面两张对比图后，我决定——发 工 单。</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119190459.b7BsymLS_1UrBiY.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119190504.CJg3ci0q_Z2rvAUR.webp" alt="" /></p>
<p>什么？！ 居然设置了不让 CDN 进行缓存？那加和没加有什么区别？！</p>
<p>所以，我们又开始对文件进行排查，看看这个到底是谁设置的。</p>
<p>我们首先检查了一遍插件（全部启停），但时间没有很大变化。</p>
<p>接着，我们又把重心放到了主题文件上，这次，却有了大发现。</p>
<hr />
<p>博客惊现后门文件，而他又是何人所谓？禁止缓存头部到底是哪里加的，为何真凶仍迟迟不肯现身！</p>
<hr />
<h2>Ⅴ. 杀毒</h2>
<p>在博客主题文件的 Function.php ***（？？？）***中，居然存在以下代码，对其开头部分进行 Google 搜索，结果让人大跌眼镜：</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200119190921.ysoP8gro_osQDJ.webp" alt="" /></p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200119191036.CuR6gDSQ_tDDrG.webp" alt="点击图片放大" /></p>
<p>什么，我的博客居然被植入了后门！！！</p>
<p>这怎么可能！难道是密码不安全吗！</p>
<p>我又对其进行了更加深入的了解，原来他是—— Wp-Vcd 病毒！</p>
<p>“ wp-vcd 最初由意大利安全研究员曼 Manuel D'Orso 在今年夏天发现， wp-vcd 的初始版本通过一个名为“wp-vcd.php”文件将恶意代码注入到 WordPress 核心文件中，比如 functions.php 和 class.wp.php 。 ”</p>
<p>这真是太恐怖了！但是我们对其研究发现，这段恶意代码其中的链接已经失效，所以造成速度拖慢的原因是请求了一个不存在的网站！</p>
<p>你随后可以在本文末尾阅读恶意代码。</p>
<h2>Ⅵ. 寻找设置缓存头的脚本</h2>
<p>在处理完恶意脚本后，LittleC 随即开始了对缓存头的排查。首先他使用了肉眼排查法，但是没有成效，接着他使用了“全局搜索”法，但是也没有嫌疑文件：</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200119191524.B2_G2yv7_Z8wOoJ.webp" alt="“全局搜索”法" /></p>
<p>但是 LittleC 不懈努力，最后居然在这个文件中找到了那串该死的代码——</p>
<p><em>插件 ludou-phone-register</em></p>
<p>这是本站注册中手机号码验证所使用的插件，但是他已经不是原本的插件了。</p>
<p>他经过我的改造后，适应了腾讯云的 SMS 发码，所以他变成了</p>
<p><em>ray-phone-register</em></p>
<p>经过好几次的控制变量法研究，发现是一开始的session_start搞的鬼，但是文档中并没有提到会加入这个头（也可能我没看到），在翻阅php源码后找到了这件事的真凶 ：</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E5%9B%BE%E7%89%8720200119191758.C-dX9X09_1dXGvG.webp" alt="" /></p>
<p>Isn't it amazing?</p>
<p>这段代码（session_start）是我放上去的。由于一些错误的判断写法，导致session_start会被调用。</p>
<p>Oh ，真是该死。</p>
<p>那么，细心的读者可能会问了，为什么刚才的全局插件启停没有排查到这一点呢？</p>
<p>原因是——拖慢速度的真凶不是不缓存，因为服务器在国内直连也是很快的，而是恶意代码请求无效的网站才拖慢了速度。</p>
<p>那么，更加细心的读者可能还会问，为什么刚才使用“全局搜索”法没有排查出这里呢？</p>
<p><img src="https://blog.r-ay.cn/_astro/QQ%E6%88%AA%E5%9B%BE20200119192034.CLsQ20V5_ZcYM8t.webp" alt="" /></p>
<p>参见： 这个<a href="https://github.com/php/php-src/blob/349a28646163b0e1433fad450edbac8215fc5b32/ext/session/session.c">链接</a>。</p>
<h2>Ⅶ. 尾声</h2>
<p>至此，博客访问慢的问题已经全部解决，其原因由以下两点：</p>
<ol>
<li>博客被植入了恶意代码。</li>
<li>我的憨批代码中增加了禁止缓存头。</li>
</ol>
<p>关于为什么会被植入恶意代码，网上有观点说：</p>
<p>在 Twenty-xxx 主题中有漏洞，而这个漏洞则被利用来散播这个恶意代码。</p>
<p>凑巧，我在 WP 的更新中获得了 Twenty-ninth 主题，并用了一段时间。</p>
<p>这么看来，这可能就是我被植入恶意代码的原因。</p>
<p>所以如果你也有这个主题，还不去看看你的主题 Function.php 中有没有被植入恶意代码？</p>
<p>另外，现在我第一次访问的加载速度已经在 1s 以内了，你呢？</p>
<h2>“文章末尾”</h2>
<p><img src="https://blog.r-ay.cn/_astro/motherdiedcode.CSMYu-2X_u4QwR.webp" alt="" /></p>
]]></content:encoded>
            <author>Ray</author>
        </item>
        <item>
            <title><![CDATA[第六次，你好，世界。]]></title>
            <link>https://blog.r-ay.cn/articles/1-hello-world/</link>
            <guid isPermaLink="false">https://blog.r-ay.cn/articles/1-hello-world/</guid>
            <pubDate>Fri, 28 Dec 2018 04:41:23 GMT</pubDate>
            <description><![CDATA[之前由于被删库了，在痛苦中无法自拔不忍重新建站。如今打算重新开站，撰写新文章，开启新篇章! Welcome to WordPress. Th...]]></description>
            <content:encoded><![CDATA[<p>之前由于被删库了，在痛苦中无法自拔不忍重新建站。如今打算重新开站，撰写新文章，开启新篇章! Welcome to WordPress. This is your first post. Edit or delete it, then start writing!</p>
]]></content:encoded>
            <author>Ray</author>
        </item>
    </channel>
</rss>