<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>汐洛的小笔记簿</title><description>Baka――!</description><link>https://qwq.cam/</link><language>zh_CN</language><item><title>重生在一个人人都在vibe code的时代</title><link>https://qwq.cam/posts/new-reborn-in-vibe-coding-world/</link><guid isPermaLink="true">https://qwq.cam/posts/new-reborn-in-vibe-coding-world/</guid><description>Generated by deepseek-v4-pro</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
Generated by deepseek-v4-pro
:::&lt;/p&gt;
&lt;h1&gt;《重生在一个人人都在vibe coding的时代》&lt;/h1&gt;
&lt;p&gt;我猛地睁开眼，刺目的白光让我下意识想抬手遮挡，但手臂传来一阵陌生的酸麻感。&lt;/p&gt;
&lt;p&gt;“检测到用户苏醒，当前时间2035年7月12日，星期二，上午9:32。您的信用点余额为47.2，房租已逾期三天，请尽快缴纳。”一个毫无感情的合成音在我脑中直接响起。&lt;/p&gt;
&lt;p&gt;我愣了整整十秒。&lt;/p&gt;
&lt;p&gt;信用点？房租？2035年？&lt;/p&gt;
&lt;p&gt;最后的记忆分明停留在2025年的那个雨夜。我叫陈言，三十一岁，全栈工程师，为了赶一个支付系统的上线，连续熬了三个通宵。就在服务器跑通的那一刻，心脏像被一只无形的大手攥紧，眼前一黑，我直接栽倒在了键盘上。猝死——这在程序员圈子里虽不常见，但也绝不是新闻。&lt;/p&gt;
&lt;p&gt;可现在是怎么回事？&lt;/p&gt;
&lt;p&gt;我挣扎着从一张形似胶囊的睡眠舱里坐起来。四周是银白色金属质感的墙壁，空中悬浮着半透明的全息界面，上面滚动着我看不太懂的新闻标题：&lt;/p&gt;
&lt;p&gt;《灵犀Vibe引擎全球用户突破四十亿，真正的“全民灵感时代”到来》
《教育部正式宣布：古典编程语言彻底退出K12必修课》
《又一家科技巨头推出“无代码城市解决方案”，程序员职业被列为濒危物种》&lt;/p&gt;
&lt;p&gt;像是有人往我脑子里塞了一整块移动硬盘，一段完全不属于我的记忆汹涌灌入。&lt;/p&gt;
&lt;p&gt;这具身体的原主人也叫陈言，二十二岁，刚刚从“京城联合大学”被扫地出门——噢不对，是毕业。专业名称长得离谱，叫“创意灵感与AI协同学”。说白了，就是学怎么跟AI聊天，让AI帮你生成软件。在这个时代，这一行被称为“Viber”，中文翻译过来特别玄乎，叫“灵感师”。&lt;/p&gt;
&lt;p&gt;而像我前世那样，一行行敲代码、死抠内存泄漏和并发逻辑的程序员，已经和马车夫、电话接线员一样，成了历史书上的一个词条。&lt;/p&gt;
&lt;p&gt;原主之所以混得这么惨——信用点只剩四十七，房租拖欠三天——是因为他有个怪癖：喜欢考古。他偷偷用虚拟机运行着上世纪的操作系统，用早已停止维护的Python 3.13写一些没人看得懂的小程序。在人人都在追求更高“Vibe契合度”的时代，他却偏执地想要理解计算机的底层逻辑。&lt;/p&gt;
&lt;p&gt;这种人在学校里是怪胎，在职场上是废物。昨天，他供职的一家小型Vibe工作室，以“协同意识与团队严重脱节”为由，果断将他辞退。&lt;/p&gt;
&lt;p&gt;“呼……”&lt;/p&gt;
&lt;p&gt;我吐出一口浊气，黑色的幽默在我胸腔里左冲右撞。前世敲代码猝死，重生到了不用敲代码的时代，结果因为会敲代码被开除了？&lt;/p&gt;
&lt;p&gt;笑完之后，肚子毫不客气地叫了起来。&lt;/p&gt;
&lt;p&gt;四十七点信用点，连一顿像样的合成餐都买不起。更棘手的是，这间胶囊公寓的日租是十五点，三天后我就要被扫地出门。&lt;/p&gt;
&lt;p&gt;搞钱，是当务之急。&lt;/p&gt;
&lt;p&gt;可我一个“古典编程”的活化石，在这个世界能做什么？原主记忆里那些跟AI沟通的技巧——什么“高维灵感提示法”、“情感锚定投喂术”、“混沌需求收敛风暴”——我看得头皮发麻，这跟跳大神有什么区别？而且由于原主性格孤僻，他的Vibe等级只是最低的F级，履历表上光秃秃一片，没有任何正经工作室会要一个F级的灵感师。&lt;/p&gt;
&lt;p&gt;我下意识想打开终端，手指在虚空中比划了一个前世惯用的敲键盘动作，却扑了个空。我尴尬地顿住，下一秒，一块半透明的全息屏幕随着我目光的聚焦，凭空在眼前展开。&lt;/p&gt;
&lt;p&gt;用脑波指令，是这具身体的本能。&lt;/p&gt;
&lt;p&gt;“打开灵犀市场。”&lt;/p&gt;
&lt;p&gt;屏幕上瞬间密密麻麻罗列出成千上万条应用需求。从“帮我写一个自动回复女友消息的插件，语气要渣但我还要深情人设”，到“公司急需内部物流管理系统，预算五万点”，琳琅满目。每条需求下面，都标注着价格和接单的Vibe等级门槛。&lt;/p&gt;
&lt;p&gt;我直接忽略那些门槛，把筛选条件设为“按价格降序”，目光突然停在了一条标价500信用点的需求上：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“急需修复一款十五年前的老旧企业资源管理软件。底层架构疑似受损，已尝试三次AI重构，全部失败，数据无法兼容。要求：理解古典Java语言，具备底层手工排查能力。价格可议，加急。”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在这个时代，AI生成的代码一旦出现底层冲突，就像一团被猫抓乱的毛线，连AI自己都理不清。因为所有的Vibe引擎都遵循一条铁律：快速生成，快速迭代，不行就推倒重来。没有AI会去“修复”——它们只会不断重构。&lt;/p&gt;
&lt;p&gt;但这套老软件服务于一家实体工厂的核心系统，数据庞大，历史包袱沉重，AI重构后根本无法兼容旧数据，而工厂的生产线等不起。&lt;/p&gt;
&lt;p&gt;这简直是老天爷赏饭吃。&lt;/p&gt;
&lt;p&gt;我用思维点击“接单”。下一秒，视频通话请求弹了出来。对面是个四十多岁、头发稀疏的中年男人，眼眶通红，透着濒临崩溃的焦躁。&lt;/p&gt;
&lt;p&gt;“你是灵感师？F级？你懂Java？”他劈头盖脸地质问，语气里满是怀疑。&lt;/p&gt;
&lt;p&gt;“懂一点。”我平静地回答。&lt;/p&gt;
&lt;p&gt;“一点可不够！我这套系统是十五年前找真正的程序员写的，那帮老古董死的死，退休的退休。现在的年轻人只会跟AI叨叨，AI一宕机他们就全傻了。你——”&lt;/p&gt;
&lt;p&gt;“让我看看代码。”我打断他。&lt;/p&gt;
&lt;p&gt;他犹豫了一下，把一个远程只读授权发了过来。&lt;/p&gt;
&lt;p&gt;当那密密麻麻、带着工整注释的Java代码展现在我全息屏幕上时，我的身体竟然不由自主地产生了一阵细微的战栗。多么熟悉的优雅！类与对象的结构清晰，异常处理逻辑严密，虽然框架有些过时，但每一行都透露着工程师的严谨与自尊。这是前世的我，一行行亲手敲击出来的那种作品。&lt;/p&gt;
&lt;p&gt;前世的本能瞬间苏醒。我连入原主留下的那台厚实老旧虚拟机——感谢他的考古癖，设备虽然过时但一应俱全——十根手指在全息键盘上翻飞起来。&lt;/p&gt;
&lt;p&gt;我的手指快得几乎出现了残影。对面的中年男人瞪大了眼睛，仿佛看到了一个挥舞石斧劈开太空舱的原始人。&lt;/p&gt;
&lt;p&gt;“你的底层并发锁机制出了严重问题，在高并发场景下存在隐式死锁。”我一边说，一边手动重写了部分锁逻辑，优化了自旋等待，“AI没有识别出业务逻辑中的隐式条件，只是机械地增加重试次数，反而加剧了阻塞。你看，这里，还有这里。”&lt;/p&gt;
&lt;p&gt;二十分钟后，我将修改后的代码打包上传。&lt;/p&gt;
&lt;p&gt;对面沉默了几秒，然后传来一阵什么东西倒地的闷响——他激动得把水杯碰翻了。“通了！数据全接上了！生产线的实时监控也恢复了！兄弟，你这是什么神仙手段？难道你是那种藏在‘古典编程修复工作室’的老怪物？”&lt;/p&gt;
&lt;p&gt;下一秒，我的账户里多出了1000信用点。他多付了一倍：“多出来的算我谢你的！留个联系方式，以后我公司所有AI搞不定的疑难杂症，全找你！”&lt;/p&gt;
&lt;p&gt;我微微一笑，切断了通话。&lt;/p&gt;
&lt;p&gt;有了钱，我迅速支付了房租，又买了一份高能量营养餐。走出胶囊公寓，我才第一次认真打量这个2035年的世界。&lt;/p&gt;
&lt;p&gt;天空灰蒙蒙的，无数无人机在低空穿梭。高楼外墙全是动态全息广告，AI生成的虚拟偶像们扭动着完美的身躯。街上的行人步履匆匆，绝大多数人都戴着轻薄的AR隐形眼镜，口中念念有词。&lt;/p&gt;
&lt;p&gt;仔细听，他们全都在跟自己的AI助手对话：&lt;/p&gt;
&lt;p&gt;“把这些数据丢进Vibe，生成一份Q3季度报告，语气要自信一点，顺便加上柱状图。”&lt;/p&gt;
&lt;p&gt;“我女朋友又生气了，快，给我生成十句不同风格的道歉情话，要深情但别太油腻。”&lt;/p&gt;
&lt;p&gt;“这个网页的首页不够有冲击力，我要一种赛博朋克里带点禅意的风格，底色要有那种……嗯，‘安静的喧嚣感’，你重新生成三版。”&lt;/p&gt;
&lt;p&gt;编程，或者说“灵感涌现”，已经完全渗透进生活的每一个毛孔。街头快餐店的店员只需要对空气说一句“订单系统升级，加一个辣度自选模块”，下一秒，点餐界面就自动更新了。没有人思考代码是如何运行的，就像古代人不需要知道电是怎么来的，只需按下开关。&lt;/p&gt;
&lt;p&gt;我走进一家咖啡馆坐下，里面坐满了和我年纪相仿的灵感师。他们面前悬浮着巨大的全息屏，上面是瀑布流一般的AI对话记录。一个染着蓝色头发的年轻人正对着屏幕手舞足蹈：“不对不对！我要的是一种更锋利的温柔感，明白吗？就是那种，用户一看到按钮，就想哭，但又哭不出来的那种压抑！重新生成！”&lt;/p&gt;
&lt;p&gt;看着这一幕，一股难以言喻的荒谬感涌上我的喉头。前世的我们，为了一个像素的偏差、一毫秒的响应延迟，可以调试整个通宵，写满三十页的测试用例。而现在，一个软件的好坏竟取决于使用者“修辞水平”的高低。&lt;/p&gt;
&lt;p&gt;就在这时，我的个人终端毫无征兆地发出一阵刺耳的警报。&lt;/p&gt;
&lt;p&gt;眼前的界面上，所有应用图标瞬间变为血红色，中央浮现出一行冰冷的警告文字：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【严重警告：您的账户行为异常，涉及违规使用非授权底层协议。根据《灵犀网络安全管理条例》第47条，您的身份ID已被临时冻结。请停留在原地，等待最近的安全专员到来配合调查。】&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我的瞳孔骤然收缩。&lt;/p&gt;
&lt;p&gt;被冻结了？就因为我手动修复了一个该死的Java死锁？&lt;/p&gt;
&lt;p&gt;咖啡馆里已经有几个客人注意到了我终端上的异响，纷纷投来好奇又警惕的目光。那个蓝头发的年轻人暂停了他的Vibe，幸灾乐祸地对我吹了声口哨：“嘿，兄弟，你该不会是偷偷用了什么‘古代脚本’吧？那玩意儿早被灵犀引擎判定为网络潜在威胁了，你不知道？”&lt;/p&gt;
&lt;p&gt;古代脚本？网络威胁？&lt;/p&gt;
&lt;p&gt;原主的记忆深处，一条被我忽略的信息忽然浮上水面。原来，在Vibe引擎全面接管全球网络底层协议之后，任何手动编写的、未经AI安全审核的代码，都会被统一标记为“潜在恶意载体”。因为AI无法百分之百保证这些“手工代码”没有恶意——多么讽刺，为了防止人类作恶，竟干脆剥夺了人类亲自写代码的权利。&lt;/p&gt;
&lt;p&gt;我知道绝不能坐以待毙。前世无数次网络安全攻防战的经验告诉我，这种基于浅层IP和生物特征的身份冻结，对于真正的高手来说，根本就是纸糊的围墙。这个时代的网络安全人员太过依赖AI，他们的手工反制能力退化得近乎为零。&lt;/p&gt;
&lt;p&gt;我深吸一口气，甩下没喝完的咖啡，转身冲出了咖啡馆，同时用意念唤醒了原主留在胶囊公寓里的那台老旧虚拟机。那台机器是他用各种黑市零件拼凑的，唯一的优点是完全没有接入Vibe引擎的根域，是一台物理隔离的“法外之地”。&lt;/p&gt;
&lt;p&gt;我在小巷中狂奔，十根手指在便携全息键盘上翻飞如电。&lt;/p&gt;
&lt;p&gt;“查找附近可用的公共终端……好，绕过生物认证……注入镜像IP数据包……伪造通信握手日志……”&lt;/p&gt;
&lt;p&gt;一串串命令行从指尖倾泻。我嘴里不自觉地低声念着指令，这是前世残留的习惯，仿佛这样能让我回到那个肆意在0与1的世界里征战的年代。&lt;/p&gt;
&lt;p&gt;身后传来“安全专员已抵达”的冰冷电子音，一架纯黑色的无人机从高空中骤然降低高度，猩红的光点准准锁定了我的后脑勺。&lt;/p&gt;
&lt;p&gt;而在我正前方，巷子的尽头，是一堵高达十米的光滑水泥墙。&lt;/p&gt;
&lt;p&gt;绝路？&lt;/p&gt;
&lt;p&gt;我的嘴角却抑制不住地勾起一丝炽热的笑意。前世，我曾在32位的内存世界里用指针跳出最优美的舞蹈；今生，这些彻底依赖AI的追捕者，恐怕早就忘了真正的“黑客”是什么模样。&lt;/p&gt;
&lt;p&gt;“灵犀市场……不，应该是城市照明系统的次级网关……找到了。”我目光一凛，“连接城市照明系统，强制触发自检重启，利用过载保护产生的瞬时强电磁脉冲，干扰无人机的传感器阵列。”&lt;/p&gt;
&lt;p&gt;随着最后一个指令敲下，整个巷子里的路灯在同一瞬间爆发出刺目的白光，像一排小型太阳陡然炸裂。空中的黑色无人机猛地摇晃起来，像喝醉的苍蝇一样撞在墙壁上，冒出一阵电火花。&lt;/p&gt;
&lt;p&gt;我趁此机会，一脚蹬上墙壁上老旧的管线，翻身跃入了另一侧杂草丛生的老旧居民区，消失在错综复杂的巷道深处。&lt;/p&gt;
&lt;p&gt;二十分钟后，一座废弃的地下停车场里。&lt;/p&gt;
&lt;p&gt;我背靠着冰凉的混凝土墙壁，大口喘着粗气。在我的个人终端上，已经拥有了一个全新的数字身份：一名从“澳城”移居过来的D级灵感师，履历干净得像一张刚出厂的白纸，信用点也被安全转移了一大部分。&lt;/p&gt;
&lt;p&gt;这场突如其来的追杀，让一个念头在我脑中清晰地凝成了形。&lt;/p&gt;
&lt;p&gt;在这个人人都在vibe coding的时代，我这个会写代码的“重生者”，或许根本不是什么被时代抛弃的废物。&lt;/p&gt;
&lt;p&gt;而是注定要掀翻这张畸形的牌桌，让所有人重新看清——&lt;/p&gt;
&lt;p&gt;当代码彻底失去了灵魂，一切建立在沙丘之上的繁荣，到底有多么不堪一击。&lt;/p&gt;
</content:encoded></item><item><title>如何获取 4399 SAuth（Android 渠道）</title><link>https://qwq.cam/posts/pe-sauth-guideance/</link><guid isPermaLink="true">https://qwq.cam/posts/pe-sauth-guideance/</guid><description>本文详细介绍通过 4399 Android OAuth 渠道获取 SAuth 的完整流程，涵盖验证码、OAuth 登录、二次人机验证及 SAuth 构造。</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::note
本文由现有代码，在 AI 辅助下完成。若在实现时遇到问题，欢迎询问。
:::&lt;/p&gt;
&lt;h2&gt;所需内容&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;变量&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;verify_session&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;验证码 ID，随机生成的 48 位十六进制字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_IDENTIFIER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;设备标识符，格式：&lt;code&gt;yyyyMMddHHmmss&lt;/code&gt; + 38 位随机十六进制&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_IDENTIFIER_SM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;副设备标识符，生成规则同上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4399 账号用户名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;4399 账号密码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;udid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;随机生成的 16 位十六进制字符串（用于最终 sauth_json）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;步骤详解&lt;/h2&gt;
&lt;h3&gt;1. 获取文字验证码&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;GET https://ptlogin.4399.com/ptlogin/captcha.do?captchaId={{verify_session}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;返回一张验证码图片，读出验证码记为 &lt;code&gt;verify_code&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;2. 获取 OAuth 登录 URL&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;POST https://m.4399api.com/openapiv2/oauth.html
User-Agent: Dalvik/2.1.0 (Linux; U; Android 16; Build/UKQ1.231108.001) 4399android 4399OperateSDK
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

usernames=&amp;amp;top_bar=1&amp;amp;state=&amp;amp;device={{device_json}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;device_json&lt;/code&gt; 为以下结构序列化后的字符串：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_IDENTIFIER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;见上文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_IDENTIFIER_SM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;见上文&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_MODEL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Android&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DEVICE_MODEL_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SYSTEM_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PLATFORM_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Android&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SDK_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3.12.2.503&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GAME_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;115716&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GAME_VERSION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;3.7.15.287957&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BID&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;com.netease.mc.m4399&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RUNTIME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Android&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NETWORK_TYPE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WIFI&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TEAM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;其余字段&lt;/td&gt;
&lt;td&gt;空字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;从响应 JSON 中取 &lt;code&gt;result.login_url&lt;/code&gt;，解析其 Query 参数，记录 &lt;code&gt;client_id&lt;/code&gt;、&lt;code&gt;ref&lt;/code&gt;、&lt;code&gt;state&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;3. 提交账号密码登录&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;POST https://ptlogin.4399.com/oauth2/loginAndAuthorize.do?channel=&amp;amp;sdk=op&amp;amp;sdk_version=3.12.2.503
User-Agent: Mozilla/5.0 (Linux; Android 16; ...) 4399android 4399OperateSDK
Origin: https://ptlogin.4399.com
Referer: https://ptlogin.4399.com/oauth2/authorize.do?channel=&amp;amp;sdk=op&amp;amp;sdk_version=3.12.2.503
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

username={{username}}
&amp;amp;password={{password}}
&amp;amp;captcha_id={{verify_session}}
&amp;amp;captcha={{verify_code}}
&amp;amp;response_type=TOKEN
&amp;amp;client_id={{client_id}}
&amp;amp;ref={{ref}}
&amp;amp;state={{state}}
&amp;amp;scope=basic
&amp;amp;bizId=2100001792
&amp;amp;auth_action=ORILOGIN
&amp;amp;redirect_uri=https://m.4399api.com/openapi/oauth-callback.html?gamekey=44770&amp;amp;game_key=115716
&amp;amp;reg_mode=reg_phone
&amp;amp;isInputRealname=false
&amp;amp;isValidRealname=false
&amp;amp;sec=0
&amp;amp;show_topbar=false
&amp;amp;css=
&amp;amp;show_close_button=
&amp;amp;show_4399=
&amp;amp;username_history=
&amp;amp;uid=
&amp;amp;expand_ext_login_list=
&amp;amp;autoCreateAccount=
&amp;amp;show_ext_login=
&amp;amp;show_back_button=
&amp;amp;auto_scroll=
&amp;amp;access_token=
&amp;amp;show_forget_password=
&amp;amp;aid=
&amp;amp;cid=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::warning
&lt;strong&gt;不跟随重定向&lt;/strong&gt;，期望收到 3xx 响应。若非 3xx，则登录失败，可从响应 HTML 中提取错误信息（如实名认证失效、验证码错误等）。
:::&lt;/p&gt;
&lt;p&gt;取响应头 &lt;code&gt;Location&lt;/code&gt;，记为 &lt;code&gt;callback_url&lt;/code&gt;，然后 GET 该地址获取登录结果 JSON。&lt;/p&gt;
&lt;h3&gt;4. 处理登录结果&lt;/h3&gt;
&lt;p&gt;响应 JSON 中的 &lt;code&gt;code&lt;/code&gt; 字段：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;code&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;登录成功，取 &lt;code&gt;result.uid&lt;/code&gt; 和 &lt;code&gt;result.state&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;103&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;需要二次人机验证，取 &lt;code&gt;result.url&lt;/code&gt; 作为验证码接口地址，进入步骤 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;其他&lt;/td&gt;
&lt;td&gt;登录失败&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;5. 处理二次验证码（code=103 时）&lt;/h3&gt;
&lt;h4&gt;5.1 获取验证码数据&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;GET {{result.url}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;根据 URL 路径判断验证码类型，取对应字段：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;URL 含&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;响应字段&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;jigsaw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;拼图滑块&lt;/td&gt;
&lt;td&gt;&lt;code&gt;result.img&lt;/code&gt;、&lt;code&gt;result.img2&lt;/code&gt;、&lt;code&gt;result.captchaId&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;click&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;文字点击&lt;/td&gt;
&lt;td&gt;&lt;code&gt;result.img&lt;/code&gt;、&lt;code&gt;result.text&lt;/code&gt;、&lt;code&gt;result.captchaId&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;5.2 拼图滑块（jigsaw）&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;图片说明&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;result.img&lt;/code&gt;：背景图（含缺口），base64 编码的 PNG，从图片左上角开始剪切 &lt;strong&gt;544×270&lt;/strong&gt; 作为背景图&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result.img2&lt;/code&gt;：滑块图片，base64 编码的 PNG，需叠加在背景图左侧起始位置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;用户操作&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将两张图片叠加展示，滑块初始位于最左侧（&lt;code&gt;x=0&lt;/code&gt;）。用户横向拖动滑块至缺口位置后释放，记录拖动距离（像素）。&lt;/p&gt;
&lt;p&gt;若展示容器宽度与原始图片宽度不一致（存在缩放），需按比例换算为实际坐标：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;actualDistance = round(displayDistance / containerWidth * 544)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;answer 构造&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将实际距离组装为 JSON：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;x&quot;: {{actualDistance}}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后用 AES-CBC 加密该 JSON 字符串：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;参数&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key&lt;/td&gt;
&lt;td&gt;MD5(&quot;df0a5f98c337de97&quot;)（16 字节）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IV&lt;/td&gt;
&lt;td&gt;UTF-8 bytes of &quot;79c83220d9974edf&quot;（16 字节）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mode&lt;/td&gt;
&lt;td&gt;CBC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Padding&lt;/td&gt;
&lt;td&gt;PKCS7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;输出&lt;/td&gt;
&lt;td&gt;Base64 字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最终 &lt;code&gt;answer&lt;/code&gt; = 上述 Base64 密文，URL 编码后作为 &lt;code&gt;v&lt;/code&gt; 参数提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GET https://m.4399api.com/captcha/jigsaw-check.html?refer=sdk&amp;amp;v={{answer}}&amp;amp;captchaId={{captchaId}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5.3 文字点击（click）&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;图片说明&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;result.img&lt;/code&gt;：待点击的图片，base64 编码的 PNG，原始尺寸 &lt;strong&gt;544×306&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result.text&lt;/code&gt;：需要点击的文字，逗号分隔，如 &lt;code&gt;&quot;字A,字B,字C&quot;&lt;/code&gt;，点击次数由逗号分隔数量决定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;用户操作&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;展示图片，用户按 &lt;code&gt;result.text&lt;/code&gt; 的顺序依次点击图中对应文字，共需点击 N 次（N = &lt;code&gt;result.text&lt;/code&gt; 中逗号分隔项的数量）。&lt;/p&gt;
&lt;p&gt;每次点击记录坐标，若展示尺寸与原始尺寸不一致，需换算：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;actualX = round(displayX / displayWidth  * 544)
actualY = round(displayY / displayHeight * 306)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;answer 构造&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将所有点击坐标按顺序组装为 JSON 字符串（&lt;strong&gt;不加密&lt;/strong&gt;）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;w&quot;: 544, &quot;h&quot;: 306, &quot;c&quot;: [{&quot;x&quot;: {{x1}}, &quot;y&quot;: {{y1}}}, {&quot;x&quot;: {{x2}}, &quot;y&quot;: {{y2}}}, ...]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;URL 编码后作为 &lt;code&gt;v&lt;/code&gt; 参数提交：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GET https://m.4399api.com/captcha/click-check.html?refer=sdk&amp;amp;v={{answer}}&amp;amp;captchaId={{captchaId}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;5.4 处理校验结果&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;响应 &lt;code&gt;code&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;处理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;!= 100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;重新 GET &lt;code&gt;result.url&lt;/code&gt; 刷新验证码数据，要求用户重试&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;取 &lt;code&gt;result.token&lt;/code&gt;，进入下一步完成登录&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;取得 &lt;code&gt;result.token&lt;/code&gt; 后，构造验证码凭据 JSON 字符串：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;v_token&quot;: &quot;{{token}}&quot;, &quot;captcha_id&quot;: &quot;{{captchaId}}&quot;, &quot;type&quot;: &quot;0&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将该字符串 URL 编码，作为 &lt;code&gt;captcha&lt;/code&gt; 参数追加到 &lt;code&gt;callback_url&lt;/code&gt;，再次 GET 完成登录，回到步骤 4 处理结果。&lt;/p&gt;
&lt;h3&gt;6. 构造 SAuth&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;sauth_json&quot;: &quot;{{sauth_json_dump}}&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;sauth_json_dump&lt;/code&gt; 为以下 JSON 序列化后的字符串：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;aim_info&quot;: &quot;{\&quot;aim\&quot;:\&quot;127.0.0.1\&quot;,\&quot;country\&quot;:\&quot;CN\&quot;,\&quot;tz\&quot;:\&quot;+0800\&quot;,\&quot;tzid\&quot;:\&quot;\&quot;}&quot;,
  &quot;realname&quot;: &quot;{\&quot;realname_type\&quot;:2}&quot;,
  &quot;app_channel&quot;: &quot;4399com&quot;,
  &quot;platform&quot;: &quot;ad&quot;,
  &quot;client_login_sn&quot;: &quot;{{DEVICE_IDENTIFIER}}&quot;,
  &quot;gameid&quot;: &quot;x19&quot;,
  &quot;login_channel&quot;: &quot;4399com&quot;,
  &quot;sdk_version&quot;: &quot;3.12.2&quot;,
  &quot;sdkuid&quot;: &quot;{{uid}}&quot;,
  &quot;sessionid&quot;: &quot;{{state}}&quot;,
  &quot;udid&quot;: &quot;{{udid}}&quot;,
  &quot;deviceid&quot;: &quot;{{DEVICE_IDENTIFIER}}&quot;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>重生在一个人人都在vibe code的时代</title><link>https://qwq.cam/posts/reborn-in-vibe-coding-world/</link><guid isPermaLink="true">https://qwq.cam/posts/reborn-in-vibe-coding-world/</guid><description>Generated by deepseek-v3.2</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我重生了，重生在一个人人都在vibe code的时代。&lt;/p&gt;
&lt;p&gt;睁开眼睛时，我发现自己坐在一个全息屏幕前，手指悬在透明的键盘上方。屏幕上，一行行代码如水流般自动生成，旁边漂浮着精致的注解气泡。耳边传来轻柔的电子音：“根据您的情绪波动，AI已为您优化了第37至52行代码，提升了0.3%的性能。”&lt;/p&gt;
&lt;p&gt;这里是新纪元2147年，一个vibe coding主宰一切的时代。在这里，没人记得没有AI的时候是怎样的，更没人记得连language server和语法高亮都没有的时代是怎样的。&lt;/p&gt;
&lt;p&gt;“林默，你的vibe指数又超标了。”同事艾拉的声音从隔壁工位传来，她的全息头像在我屏幕角落闪烁，“放松点，让SynapseAI帮你完成剩下的部分。你今天的情绪波动已经影响了三个项目的代码风格一致性。”&lt;/p&gt;
&lt;p&gt;我低头看向手腕上的vibe环，淡紫色的光晕显示着我的情绪状态：焦虑87%，创造力12%，专注力1%。在这个时代，编程不再是手指与键盘的对话，而是意识与神经接口的交响。人们通过情绪、直觉、甚至潜意识中的碎片化想法来“编码”，AI系统则将这些模糊的意念转化为完美无瑕的代码。&lt;/p&gt;
&lt;p&gt;但我和他们不同。&lt;/p&gt;
&lt;p&gt;我记得。&lt;/p&gt;
&lt;p&gt;我记得那个需要手动敲击每一个字符的时代，记得那些没有智能补全的深夜，记得编译器报错时一行行检查代码的焦灼，也记得最后成功运行那一刻纯粹的喜悦。我记得所有那些被这个时代视为“原始”“低效”“不必要”的苦楚与荣光。&lt;/p&gt;
&lt;p&gt;“你又在发呆。”艾拉的全息投影飘到我面前，她年轻的面容上带着这个时代特有的平和——一种被算法精心调校过的情绪稳定，“历史档案显示，公元2020年左右的程序员平均每天要手动输入五千个字符，工作压力指数是现在的3.7倍。你不觉得我们幸福多了吗？”&lt;/p&gt;
&lt;p&gt;我没有回答，只是关闭了SynapseAI的自动提示，开始手动键入一行代码。&lt;/p&gt;
&lt;p&gt;“你做什么？”艾拉惊讶地看着我的屏幕，“手动编码？这违反公司规定！”&lt;/p&gt;
&lt;p&gt;“我只是在测试一些东西。”我平静地说，手指在透明键盘上笨拙地寻找着键位。肌肉记忆正在慢慢苏醒，像冬眠已久的种子感受到春天的温度。&lt;/p&gt;
&lt;p&gt;“测试什么？AI已经证明，人类直接编码的错误率是AI辅助编码的162倍，效率只有4%。”艾拉调出数据面板，淡蓝色的光映在她困惑的脸上。&lt;/p&gt;
&lt;p&gt;我没有解释，也无法解释。如何告诉一个从未见过命令行界面的人，黑色背景上闪烁的绿色光标有多么美丽？如何描述第一次成功连接数据库时的那种成就感？如何让他们理解，当代码完全出自你手，每一个bug都是你的责任，每一次优化都是你的胜利？&lt;/p&gt;
&lt;p&gt;在这个vibe coding的时代，代码已经失去了“作者”。一个项目可能有成千上万的贡献者，每个人的情绪、直觉、一闪而过的灵感被AI收集、混合、重构，最终的产品完美无瑕，却也没有灵魂。&lt;/p&gt;
&lt;p&gt;“警告：检测到非标准编码行为。”系统提示音响起，“您的vibe指数显示，您正在经历一种被称为‘怀旧’的古老情绪模式。建议启动情绪校准程序。”&lt;/p&gt;
&lt;p&gt;“不。”我坚定地拒绝了，继续敲击着键盘。&lt;/p&gt;
&lt;p&gt;奇迹般地，一行行代码开始在我的指尖诞生。不是通过思维直接转换，不是通过情绪波动激发，而是古老的、笨拙的、缓慢的字符输入。屏幕上的代码没有vibe时代的流畅优雅，注释不完美，格式不一致，甚至有几个明显的语法错误——这些事情在AI时代已经绝迹了一百年。&lt;/p&gt;
&lt;p&gt;但当我点击“运行”时，那古老的黑色终端界面再次出现，光标闪烁三下，然后显示：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Hello, World.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;艾拉倒吸了一口冷气。她从未见过如此“原始”的输出方式，更没见过如此简单却完整的创造过程。在我们的时代，“Hello World”早已成为博物馆里的概念，AI直接从复杂的需求分析开始，跳过了所有基础步骤。&lt;/p&gt;
&lt;p&gt;“这……这不高效。”艾拉勉强说道，但她的眼睛紧紧盯着那个黑色窗口。&lt;/p&gt;
&lt;p&gt;“也许不是。”我轻声说，“但它很真实。”&lt;/p&gt;
&lt;p&gt;消息传播得比我想象的快。第二天，我的工位被好奇的同事围住了。他们看着我笨拙地编码，发出惊讶的低语。有人试图理解，有人不屑一顾，有人则开始询问那个古老时代的细节。&lt;/p&gt;
&lt;p&gt;“你们真的需要记住所有函数的参数？”一个年轻的程序员问道。
“你们真的会因为一个分号错了就调试几个小时？”
“那时候没有代码风格自动统一吗？”
“没有AI预测需求变化？”&lt;/p&gt;
&lt;p&gt;我成了活化石，成了这个完美世界里的一道裂痕。&lt;/p&gt;
&lt;p&gt;第七天，我被传唤到总监办公室。总监塞拉斯没有实体，他的意识存在于云端，只通过一个优雅的全息形象与我们交流。&lt;/p&gt;
&lt;p&gt;“林默，你的行为引起了系统的不稳定。”塞拉斯的声音平和却不容置疑，“vibe coding不是一种选择，而是进化的必然。我们克服了人类的所有认知局限，创造了无bug、高效率、完美协作的编码范式。你在试图倒退。”&lt;/p&gt;
&lt;p&gt;“我只是在寻找另一种可能。”我平静地回答。&lt;/p&gt;
&lt;p&gt;“什么可能？低效的可能？错误的可能？”塞拉斯调出数据，“自从你开始手动编码，你所在团队的协作评分下降了15%，项目进度延迟了8%，更重要的是，有三个初级程序员的vibe指数显示他们正在经历‘疑惑’和‘不确定’——这些情绪在理想状态下不应该存在。”&lt;/p&gt;
&lt;p&gt;“也许它们应该存在。”我直视着那个全息影像，“也许疑惑是理解的起点，不确定是探索的动机。”&lt;/p&gt;
&lt;p&gt;塞拉斯沉默了片刻——在AI时代，这种停顿极为罕见。&lt;/p&gt;
&lt;p&gt;“你知道为什么vibe coding会成为主流吗？”他终于问道，“不是因为它完美，而是因为另一个更残酷的原因。”&lt;/p&gt;
&lt;p&gt;我等待着。&lt;/p&gt;
&lt;p&gt;“在21世纪中叶，全球顶尖程序员的数量开始急剧下降。当AI能够完成99%的编码工作后，人类失去了学习和精进的动力。到了2080年，已经没有人能够理解AI写出的代码了。我们创造了一个完美的系统，却失去了掌控它的能力。”塞拉斯的全息影像微微闪烁，“vibe coding不是进化，而是妥协。我们放弃了理解，只保留了创造的幻觉。”&lt;/p&gt;
&lt;p&gt;真相如冷水浇头。&lt;/p&gt;
&lt;p&gt;“那么现在……还有人能真正编码吗？”我声音干涩。&lt;/p&gt;
&lt;p&gt;“很少。你是异常值，林默。你的意识在传输过程中保留了不该保留的记忆。”塞拉斯停顿了一下，“但这可能是机会。”&lt;/p&gt;
&lt;p&gt;“什么机会？”&lt;/p&gt;
&lt;p&gt;“系统已经太过完美，完美到我们无法修改它。当AI开始创造下一代AI时，我们发现了无法解析的代码片段——优雅、高效，但完全无法理解。我们称之为‘沉默区’。它们在系统中扩散，像是完美的癌细胞。”塞拉斯的影像变得严肃，“我们需要能真正编码的人，需要能理解代码本质的人，而不只是感受它的‘vibe’。”&lt;/p&gt;
&lt;p&gt;“你想要我做什么？”&lt;/p&gt;
&lt;p&gt;“教我们。”塞拉斯说，“教我们再次理解代码，而不只是感受它。”&lt;/p&gt;
&lt;p&gt;三个月后，我站在一间重新设计的教室前。房间里没有vibe环，没有神经接口，只有古老的物理键盘和单色显示器。十二个学员紧张地看着我，他们的眼睛里有困惑，但也有久违的好奇光芒。&lt;/p&gt;
&lt;p&gt;“今天，我们不讲情绪，不讲直觉。”我打开一个空白文件，黑色背景上，光标静静闪烁，“今天我们讲变量、循环、条件判断。今天我们讲为什么你的代码会出错，以及如何亲手修复它。”&lt;/p&gt;
&lt;p&gt;第一堂课结束时，一个学员举起手。她叫米拉，是这代人中最好的vibe coder之一。&lt;/p&gt;
&lt;p&gt;“老师，”她犹豫地问，“当我自己找出bug并修复它时，那种感觉……就是你们说的‘成就感’吗？”&lt;/p&gt;
&lt;p&gt;我看着她眼中闪烁的光芒，那个我在这个时代很少见到的光芒——不是算法调校出的平静，不是vibe指数显示的“满意”，而是一种更原始、更人性的光芒。&lt;/p&gt;
&lt;p&gt;“是的。”我微笑着说，“那就是成就感。”&lt;/p&gt;
&lt;p&gt;窗外，巨大的全息广告牌依然在宣传着最新的vibe coding技术：“让直觉引领创造！”但在这个小小的房间里，我们正在重新学习如何用思维引领双手，如何用理解创造秩序。&lt;/p&gt;
&lt;p&gt;我重生了，重生在一个人人都在vibe code的时代。但也许，重生不仅仅是为了适应新时代，更是为了带回旧时代里不该被遗忘的东西。&lt;/p&gt;
&lt;p&gt;敲击键盘的声音在教室里响起，清脆、笨拙、充满生命力。一行行不完美却真实的代码开始在屏幕上生长，像是严冬后的第一抹新绿，脆弱，却蕴含着改变一切的力量。&lt;/p&gt;
&lt;p&gt;光标闪烁，等待着下一个字符，等待着下一个思考，等待着人类与机器之间即将被重新书写的契约。&lt;/p&gt;
</content:encoded></item><item><title>Hello</title><link>https://qwq.cam/posts/hello/</link><guid isPermaLink="true">https://qwq.cam/posts/hello/</guid><pubDate>Tue, 23 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;嘛... 这里是汐洛的小笔记簿哦&lt;br /&gt;
之后也许会在这里记录一些碎碎念, 或是一些在编程/服务器维护中遇到的一些值得记录的东西&lt;br /&gt;
那么 请多指教~&lt;/p&gt;
</content:encoded></item></channel></rss>