<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Mias&apos; blog</title><description>我憧憬那闪烁永夜的天光</description><link>https://mias.moe/</link><language>zh_CN</language><item><title>golang随笔备忘录</title><link>https://mias.moe/posts/golang-learn-tour/</link><guid isPermaLink="true">https://mias.moe/posts/golang-learn-tour/</guid><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;为什么不做前端了？well...这个问题涉及的个人原因有些多，纯技术角度解释也很复杂，可以参考&lt;a href=&quot;https://hdu-cs.wiki/s/751b2a65&quot;&gt;杭电某 wiki&lt;/a&gt;，特指其中评价后端的某句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这些概念在不同的语言和框架之间是通用的。而核心的业务逻辑甚至基本可以脱离特定的 Web 框架而存在。你会学习到通用的 “道”，而不是仅仅某一个工具的 “术”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总之对如今/后来的我，前端已经：不适合，不够擅长，使用范围重合低&lt;/p&gt;
&lt;p&gt;为什么是 Go？很多人吐槽其控制流面条，不爽，OOP 弱，ORM 奇怪，巴拉巴拉，xxx&lt;/p&gt;
&lt;p&gt;少关注太多别人的见解，每个人有自己的需求立场，不同的立场和角度得到的结论往往差别较大，乃至难以理解。关注自己的需求就好。就这么简单。&lt;/p&gt;
&lt;p&gt;web 后端需求+朋友项目+杭州找饭吃+语言生态对我需求便利&lt;/p&gt;
&lt;p&gt;完&lt;/p&gt;
&lt;p&gt;看什么：go.dev + pkg.go.dev + 适当 llm + Google&lt;/p&gt;
&lt;p&gt;为什么不是各种 blog/教程/视频？&lt;/p&gt;
&lt;p&gt;太老/太旧/八股 or 面试题为主/缺乏引导/中文过量/卖课过量/中文圈 go 匮乏/go 特殊性，原因很多&lt;/p&gt;
&lt;p&gt;本篇目的？&lt;/p&gt;
&lt;p&gt;没有目的，也不是给其它人看的。我的记性很差，故备忘录随笔糊个几下。老实说我已经越来越懒于写 blog 了，意义不足&lt;/p&gt;
&lt;h2&gt;大纲&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Kafka&lt;/li&gt;
&lt;li&gt;gRPC&lt;/li&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;li&gt;Grafana&lt;/li&gt;
&lt;li&gt;OpenTelemetry&lt;/li&gt;
&lt;li&gt;Gin&lt;/li&gt;
&lt;li&gt;GORM&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;阶段 A — 语言基础（语法、模块、并发）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 安装 Go 并运行第一个程序
&lt;ul&gt;
&lt;li&gt;文档：https://go.dev/doc/install&lt;/li&gt;
&lt;li&gt;练习：hello world、&lt;code&gt;go run&lt;/code&gt;、&lt;code&gt;go build&lt;/code&gt;、&lt;code&gt;go env&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 完成 &lt;strong&gt;A Tour of Go&lt;/strong&gt;（交互式）
&lt;ul&gt;
&lt;li&gt;文档：https://go.dev/tour/&lt;/li&gt;
&lt;li&gt;重点：slices、maps、methods、interfaces、defer、panic/recover&lt;/li&gt;
&lt;li&gt;练习：跑完所有章节并做题&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 阅读 &lt;strong&gt;Effective Go&lt;/strong&gt;（风格）
&lt;ul&gt;
&lt;li&gt;文档：https://go.dev/doc/effective_go&lt;/li&gt;
&lt;li&gt;练习：把常见 idiom 写成小样例（命名、接口、错误处理）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 学习 Go Modules (&lt;code&gt;go mod&lt;/code&gt;)
&lt;ul&gt;
&lt;li&gt;文档：https://go.dev/ref/mod&lt;/li&gt;
&lt;li&gt;练习：&lt;code&gt;go mod init&lt;/code&gt;、添加依赖、查看 &lt;code&gt;go.sum&lt;/code&gt;、配置 proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 并发基础（goroutine / channel / context）
&lt;ul&gt;
&lt;li&gt;参考文章：https://go.dev/blog/pipelines&lt;/li&gt;
&lt;li&gt;练习：实现 worker pool、并发爬虫（限制并发）、用 &lt;code&gt;context&lt;/code&gt; 管理取消/超时&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;阶段 B - Web 后端必备（目标：能独立实现 REST API + 数据持久化 + 测试）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] 学习标准库 HTTP（优先）
&lt;ul&gt;
&lt;li&gt;文档：https://pkg.go.dev/net/http&lt;/li&gt;
&lt;li&gt;练习：实现最小 HTTP server（路由、JSON I/O、日志 middleware、graceful shutdown、请求超时与 context）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] JSON 编码/解码与请求处理
&lt;ul&gt;
&lt;li&gt;文档：https://pkg.go.dev/encoding/json&lt;/li&gt;
&lt;li&gt;练习：实现 &lt;code&gt;POST /users&lt;/code&gt;、&lt;code&gt;GET /users/{id}&lt;/code&gt;、输入校验、错误返回&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 可选：用轻量框架重写（对比实现）
&lt;ul&gt;
&lt;li&gt;Gin 文档：https://gin-gonic.com/en/docs/&lt;/li&gt;
&lt;li&gt;练习：用 Gin 改写并比较两种写法的优劣&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 数据库基础（以 PostgreSQL 为推荐）
&lt;ul&gt;
&lt;li&gt;PostgreSQL docs：https://www.postgresql.org/docs/&lt;/li&gt;
&lt;li&gt;Go &lt;code&gt;database/sql&lt;/code&gt;：https://pkg.go.dev/database/sql&lt;/li&gt;
&lt;li&gt;推荐驱动 / 示例库：&lt;code&gt;pgx&lt;/code&gt; 或 &lt;code&gt;lib/pq&lt;/code&gt;（在 github 搜索最新驱动）&lt;/li&gt;
&lt;li&gt;练习：设计 &lt;code&gt;users&lt;/code&gt; 表，写 CRUD、事务、索引、分页&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 可选 ORM（理解其代价）
&lt;ul&gt;
&lt;li&gt;GORM docs：https://gorm.io/docs/index.html&lt;/li&gt;
&lt;li&gt;练习：用 GORM 实现 CRUD，并查看生成的 SQL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 并发模式与后台任务
&lt;ul&gt;
&lt;li&gt;练习：实现异步任务（邮件/图片处理）、保证安全关闭与没有 goroutine 泄露&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 测试（单元/集成）与基准
&lt;ul&gt;
&lt;li&gt;文档：https://pkg.go.dev/testing&lt;/li&gt;
&lt;li&gt;练习：表驱动测试、集成测试（用 Docker Compose 启动 DB）、&lt;code&gt;go test -bench&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 性能剖析（pprof）
&lt;ul&gt;
&lt;li&gt;文档：https://pkg.go.dev/runtime/pprof&lt;/li&gt;
&lt;li&gt;练习：在服务暴露 &lt;code&gt;/debug/pprof/&lt;/code&gt;，采集 CPU/heap 分析热点&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;阶段 C — 工程化与生产能力（目的：把服务做成可运维的系统）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Redis 缓存与缓存策略
&lt;ul&gt;
&lt;li&gt;文档：https://redis.io/docs/latest/&lt;/li&gt;
&lt;li&gt;Go client（示例）：https://github.com/redis/go-redis&lt;/li&gt;
&lt;li&gt;练习：为 &lt;code&gt;GET /users/{id}&lt;/code&gt; 添加缓存，设计缓存失效与一致性方案&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 消息与事件（Kafka / NATS 等）
&lt;ul&gt;
&lt;li&gt;Kafka docs：https://kafka.apache.org/documentation/&lt;/li&gt;
&lt;li&gt;练习：实现 &lt;code&gt;user_created&lt;/code&gt; 事件生产/消费，处理幂等与重试&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] RPC 与接口定义（gRPC + Protobuf）
&lt;ul&gt;
&lt;li&gt;gRPC Go：https://grpc.io/docs/languages/go/&lt;/li&gt;
&lt;li&gt;练习：用 protobuf 定义接口，搭建简单的 gRPC 服务并互相调用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 容器化（Docker）
&lt;ul&gt;
&lt;li&gt;文档：https://docs.docker.com/&lt;/li&gt;
&lt;li&gt;练习：编写高质量 Dockerfile（multi-stage）、构建并在本地运行镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 编排与部署（Kubernetes）
&lt;ul&gt;
&lt;li&gt;文档：https://kubernetes.io/docs/&lt;/li&gt;
&lt;li&gt;练习：用 minikube/kind 或云集群部署应用，熟悉 Deployment/Service/ConfigMap/Secret、滚动更新与探针&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 监控、可视化与追踪
&lt;ul&gt;
&lt;li&gt;Prometheus：https://prometheus.io/docs/introduction/overview/&lt;/li&gt;
&lt;li&gt;Grafana：https://grafana.com/docs/&lt;/li&gt;
&lt;li&gt;OpenTelemetry（Go）：https://opentelemetry.io/docs/languages/go/&lt;/li&gt;
&lt;li&gt;练习：导出指标，搭建 Grafana 面板，实践分布式追踪分析 P99&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] CI/CD 与自动化流水线
&lt;ul&gt;
&lt;li&gt;GitHub Actions docs：https://docs.github.com/actions&lt;/li&gt;
&lt;li&gt;练习：实现 build → test → image → deploy 的流水线&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[ ] 安全与运维要点
&lt;ul&gt;
&lt;li&gt;练习：Secrets 管理、TLS/HTTPS、依赖漏洞扫描、速率限制、日志审计、认证（JWT/OAuth）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;随笔&lt;/h3&gt;
&lt;p&gt;Go 的 gc 和内存自动管理，导致 runtime 停机时间不可测，使得其无法做硬实时平台，与 java 和 py 类似&lt;/p&gt;
&lt;p&gt;每个 go 项目为一个 module，每个 module 下，通常按惯例，每个 directory=package=library，package(except main)/lib can be imported by others who can access the module.others can use the func of the pack, like &lt;code&gt;fmt.Println()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;btw, in &quot;import&quot; process, the statement like &quot;math/fmt&quot;,it means the pack u import is &quot;fmt&quot;,like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;math/rand&lt;/code&gt; -&amp;gt; rand&lt;/p&gt;
&lt;p&gt;&lt;code&gt;net/http&lt;/code&gt; -&amp;gt; http&lt;/p&gt;
&lt;p&gt;and,module is unique. eg: github.com/gin-gonic/gin . it represent &quot;module path + directory&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;module
  ├─ directory
  │     └─ package
  ├─ directory
  │     └─ package
  └─ directory
        └─ package
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;the pack/dirc is a kind of &quot;namespace&quot;.&lt;/p&gt;
&lt;p&gt;蚌，发现自己 en 讲比 cn 貌似还顺畅些。&lt;/p&gt;
&lt;p&gt;:::tip
Go Tour and the other similar, many exercises of them are CS-style learning, not production backend.&lt;/p&gt;
&lt;p&gt;Don&apos;t get stuck thinking:&lt;/p&gt;
&lt;p&gt;&quot;If I can&apos;t solve this, I can&apos;t be a backend dev.&quot;&lt;/p&gt;
&lt;p&gt;That is false.
:::&lt;/p&gt;
</content:encoded></item><item><title>往日旧事总结-回忆录篇</title><link>https://mias.moe/posts/memoir/</link><guid isPermaLink="true">https://mias.moe/posts/memoir/</guid><description>终有一日，愿遂彼空</description><pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;各位新年好，这是我第一次从头写这么长的 年末总结。我知道定期写总结对个人复盘 督促 警惕徘徊陷阱等有好处，但我实在不善组织言语来长篇逻辑性表达，以及我的文法确实很糟糕。&lt;/p&gt;
&lt;p&gt;让我从头介绍下吧：&lt;/p&gt;
&lt;p&gt;你们可以叫我 mia,米垭 都行，现如今是一个正在努力的后端开发者，倾向于 infra 的&lt;code&gt;PaaS&lt;/code&gt;&amp;amp;&lt;code&gt;SRE&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我是个很普通 也很平庸的人。我既没有无与伦比的天赋，也并非出生在大城市，也没有高知宽容的幸福家庭，像样的朋友 曾经往日里都没几个。或许如今在部分人的眼里，会觉得我是大佬 很厉害 计算机知道很多 研究员 跨阶层等等什么的，但我自己始终 也无比清楚的知道：我很平庸，我攀爬的速度仍然太慢。&lt;/p&gt;
&lt;p&gt;我与计算机的开始。。。老实说，我也不知道什么才是真正的起点。非要说的话，或许是小学四年级吧。我的家庭并不关心我，或许他们工作从未偷懒，但他们确实不是合格的父母。那时在那个穷乡僻壤的破学校里，欺负我的教师子女不少，毕竟谁会拒绝一个没有家人在乎的沙包呢（笑。没有人会帮我的，在那个偏远小地方里，教育畸形 思想愚昧 可笑的“关系”遍布，一群互保的乡间野猴，谁会在乎我呢，没有人会拯救我。那时四年级有机房课，其实也就是小孩子玩玩 4399 页游的。我已经不记得 那时到底是什么启蒙我了。大致是利用了 arp 缓存的缺陷，改变全机房的网关 ip-&amp;gt;MAC 映射，使得网关 ip 实际指向为不转发流量的我，从而让所有人断网。那时的我很开心，发自心底的开心。因为没有教师 亲人 同学愿意帮助的 一无所有的我，被计算机帮助，报复了他们。&lt;/p&gt;
&lt;p&gt;当然，这在现在行不通，当时是因为 老旧协议+windows 安全缺陷+破地方机房设施草台班子 等各种因素叠加下，才能诞生的侥幸。如今是不可能行得通的。&lt;/p&gt;
&lt;p&gt;后来。。。自然也不是一些轻小说中那样一路展现天赋的剧情。我只是个平庸的 穷乡僻壤的孩子，当时的我没有见识到广袤的天地，多彩的世界，也没有愿意支持我的开明家庭，帮助我的诸多前辈。我被寄养到了另一个穷乡僻壤的亲戚家完成小学六年级至高一的学业，这家亲戚的认知环境稍微高些，但依旧畸形、愚昧、短视。我在这期间偶尔会展现兴趣，偷偷用他们的电子设备去搜索各样的知识，满足些对小孩子而言再正常不过的爱好，用一个破烂的杂牌平板去鼓捣类 unix 新奇小玩具，甚至做到了些 在那些乡间人事看来不可思议的 所谓的奇迹。隐私考虑，不展开了（笑 当时的我过的一点也不开心，因为我总是要写一些永远写不完的亲戚孩子不用的破书，总是要忍受这家亲戚生活中的不顺 谩骂 自我发泄的虐待 自我感动的 pua 和畸形观念。那时什么都不知道的我，将周遭的一切视作正常，毕竟那时我只是个没什么见识面的普通人，活在一个扭曲而 toxic 的囚笼中。可笑而卑微的我努力的获取这些野猴的认可，就和那些可怜的小镇做题家似的 追求着一些无关紧要的考试成绩自我慰藉 自我感动，期待能被那些也挺扭曲的同学和教师认可，能证明：我并非一无所有&lt;/p&gt;
&lt;p&gt;呵，在如今的 完整的我看来，他真是个可笑 可怜 可悲的孩子。不过，我依然会同情 悲悯那时无力而麻木的“自己”。&lt;/p&gt;
&lt;p&gt;btw,我毕业后后来所经历的人性，也阴暗 唯利是图的多。与之相比，这些可能完全只算是宝宝巴士了（苦笑&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;我学到了不少曾经好奇 没能细究的技术，与能上电视屏幕的人鼓捣东西&lt;/p&gt;
&lt;p&gt;我去了很多的学术会议，看到了接近巅峰的光景，被一些过去遥不可及的人带去参会和吃饭，听他们有趣的过去时光和见闻，去了好多好多地方&lt;/p&gt;
&lt;p&gt;我被很多阶层很高的前辈 朋友帮助，极大拉高了眼界见识面，填补了信息差，并见识到了。。“真实的世界”&lt;/p&gt;
&lt;p&gt;我的所长所好被真正厉害的人所认可，发挥了价值。我赚到了米，买了曾经自己想要需要的电子设备，吃到了好吃的，看到了好多好多&lt;/p&gt;
&lt;p&gt;www,如果是你的话，在有一天离开阴暗可怖的马厩，迈向了广袤无垠的草原，被一匹匹千里马向前推，向上行后&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;因为那时的我觉得，包括过去的我在内，所有这些的一切，不过都只是群 穷乡僻壤 自欺欺人 认知配得上苦难的，假山上的野猴。&lt;/p&gt;
&lt;p&gt;但如今，我既行过云霄之上那璀璨的天宫 见到了那或是沉沦或是问道的仙，也踩过群山之间那污浊的泥沼 见到了那或是挣扎或是无力的人。&lt;/p&gt;
&lt;p&gt;在方今的我来看，无论是天上仙 沼间人 笼中鸟，都有自己活法的权利。我或许会以傲慢的眼光看一些认知匮乏的人，也或许会忽视他们，但当我看见时，不再会鄙夷他们了。因为他们是泥沼间挣扎的人，笼子里囚徒终生的鸟，他们无力改变一切，我们也帮不了他们。&lt;/p&gt;
&lt;p&gt;我很幸运，因为我的人生因为一些愿意主动帮我的“天上仙”和“计算机/Web”这条道而改变了&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;&amp;lt;pre&amp;gt;&amp;lt;b&amp;gt;
To follow the path:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;look to the master,

follow the master,

walk with the master,

see through the master,

become the master.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;/b&amp;gt;&amp;lt;/pre&amp;gt;&lt;/p&gt;
&lt;p&gt;当你成为了 master,回首一瞥&lt;/p&gt;
&lt;p&gt;或许，只会剩下一声无奈的叹息，一个饱含沧桑的苦笑&lt;/p&gt;
&lt;p&gt;再见了，过去&lt;/p&gt;
&lt;p&gt;终有一日 愿遂彼空。&lt;/p&gt;
</content:encoded></item><item><title>课题组AiCE使用记录</title><link>https://mias.moe/posts/%E8%AF%BE%E9%A2%98%E7%BB%84aice%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://mias.moe/posts/%E8%AF%BE%E9%A2%98%E7%BB%84aice%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/</guid><description>好难</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;施工（吐槽）中。。。&lt;/h2&gt;
</content:encoded></item><item><title>课题组EvolvePro使用记录</title><link>https://mias.moe/posts/%E8%AF%BE%E9%A2%98%E7%BB%84evolvepro%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://mias.moe/posts/%E8%AF%BE%E9%A2%98%E7%BB%84evolvepro%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/</guid><description>这帮做科研的人真的会写文档和代码吗（</description><pubDate>Sun, 26 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;抱怨&lt;/h2&gt;
&lt;p&gt;**我c你m的科研代码，你m写的是什么sb玩意，依赖是不全的，文档是一笔带过的，paper是只写数学/生物学术理论的，产品是不打算教人用的，就连nm的连个pip包单词拼写都nm是错的，你写你m呢写，这是什么傻x玩意，多写点是要扣你的经费么？ntm就当写写开发日记或者llm帮你写都jb写的比这好，你这sb文档最好不是什么傻鸟kimi/豆包之类的玩意写的，在学术上您值得受敬，代码可用性上ntm就是个 *的s*，cnm的💩文档，照着你这s*玩意能做出来就有你*的鬼了，您才是该被linus竖中指的coding毒瘤，s* ! **&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;言归正传，这篇文章我本来想拿个llm写的文档糊一下了事的，没什么好写的，引用下某群u的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;因为搞科研的就没两个会写代码的&lt;/p&gt;
&lt;p&gt;会写代码的那两个也懒得在这种地方认真写&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;此言有理乎，我感觉自己正在coding上经受莫大的折磨&lt;/p&gt;
&lt;p&gt;如果说写/看vue的文档是被开发者们拖着皮鼓，百般讨好让你看看它们最新的努力成果和对使用者的宽容&lt;/p&gt;
&lt;p&gt;那用/看这种扫码科研项目的文档简直就是在舔写文档/写💩项目的人的皮燕子&lt;/p&gt;
&lt;p&gt;这玩意从头到尾就不是让人用的，就差把提防写脸上了，它根本就是一个给业内评委看一眼的展示品，甚至这个展示品不能独立的从头到尾自包含的跑一次&lt;/p&gt;
&lt;p&gt;还有学校给的服务器，“我们学校图书馆最强的服务器”，2015年出产的8代E7，还没有gpu，让我训练一个现代5090见了都倒头就拜的模型，每个时代有每个时代自己的长生不老仙丹妙药，笑死我了&lt;/p&gt;
&lt;p&gt;60g显存，用dr3的1.5t memory硬跑那个paper原作推荐的15B model，第二天早上起来一看日志，动都不带动一下的，难绷。最后还是用自己的设备去强跑650M的，提取了一下午的plm训练用向量&lt;/p&gt;
&lt;h2&gt;什么是蛋白质进化？&lt;/h2&gt;
&lt;h3&gt;用日常例子理解&lt;/h3&gt;
&lt;p&gt;想象您有一把钥匙（蛋白质），但它开锁（功能）不够顺畅。您想改进它。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;传统方法&lt;/strong&gt;：随机换零件，一个个试 → 太慢了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;钥匙有 562 个零件（氨基酸）&lt;/li&gt;
&lt;li&gt;每个零件可以换成 19 种其他零件&lt;/li&gt;
&lt;li&gt;总共有 10,678 种可能&lt;/li&gt;
&lt;li&gt;一个个试，写这项目的人试到经费耗尽也试不完&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;EvolvePro 方法&lt;/strong&gt;：让 LLM/AI 帮您预测 → 快多了&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先试 20 把钥匙，记录哪个好哪个坏&lt;/li&gt;
&lt;li&gt;LLM/AI 学习这 20 个的特征&lt;/li&gt;
&lt;li&gt;LLM/AI 预测剩下 10,658 个哪些最有希望&lt;/li&gt;
&lt;li&gt;您只试 LLM/AI 推荐的最好的 20 个&lt;/li&gt;
&lt;li&gt;重复这个过程，越来越接近完美的钥匙&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;流程概览&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;第一阶段：准备工作（1-2 小时，计算机完成）
┌─────────────────────────────────────────────┐
│ 输入：您的蛋白质序列（562 个氨基酸）          │
│   ↓                                          │
│ 生成所有可能的单点突变体（9,482 个）          │
│   ↓                                          │
│ 用 AI 给每个突变体&quot;拍照&quot;（提取特征）          │
│   ↓                                          │
│ 输出：9,482 个突变体的&quot;数字指纹&quot;              │
└─────────────────────────────────────────────┘

第二阶段：实验 + 预测循环（2-3 个月，多轮迭代）
┌─────────────────────────────────────────────┐
│ 【第 1 轮】                                   │
│  1. 选择 10~20 个突变体（随机或理性选择）         │
│  2. 实验室测试（1-2 周）                         │
│  3. 记录数据：哪些好坏以及activity活性相对值（假设wt野型为1.0） 
│   (activity可以选用任意期望权重，包括但不限于酶活性，结合亲和度，只需要除以野型蛋白的数据得到比例即可)
│  4. LLM/AI 学习并预测剩下的 9,462 个              │
│  5.LLM/AI 推荐 Top 50 个最有希望的               │
│                                              │
│ 【第 2 轮】                                   │
│  1. 从 Top 50 里选 10~20 个测试                  │
│  2. 实验室测试（1-2 周）                      │
│  3. 累积数据：现在有 20~40 个数据点了             │
│  4. LLM/AI 重新学习，预测更准确                   │
│  5. 推荐新的 Top 50                          │
│                                              │
│ 【第 3-5 轮】                                 │
│  重复上述过程...                              │
│  数据越来越多，LLM/AI 越来越聪明                  │
│  通常 3-5 轮后找到显著改进的突变体             │
└─────────────────────────────────────────────┘

第三阶段：收获成果
┌─────────────────────────────────────────────┐
│ 获得：                                        │
│   改进的蛋白质突变体                         │
│   性能提升 50%-200%（典型）                 │
│   只用了 60-100 个实验（vs 9,482 个全试）    │
│   节省了 95% 的时间和成本                    │
└─────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;详细步骤&lt;/h2&gt;
&lt;h3&gt;阶段一：前期准备工作&lt;/h3&gt;
&lt;h4&gt;Step 1：生成突变体序列&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;做什么：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从您的原始蛋白质序列出发&lt;/li&gt;
&lt;li&gt;把每个位置的氨基酸都换一遍&lt;/li&gt;
&lt;li&gt;生成所有可能的单点突变体&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;打个比方：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;原始序列：MADKLN...（562 个字母）
         ↓
突变体 1：AADKLN...（第1位 M→A）
突变体 2：DADKLN...（第1位 M→D）
突变体 3：EADKLN...（第1位 M→E）
...
突变体 9482：MADKLA...（最后一位 N→A）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;技术细节：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个位置可以换成 19 种其他氨基酸（除了它自己）&lt;/li&gt;
&lt;li&gt;562 个位置 × 19 种可能 = 10,678 种理论可能&lt;/li&gt;
&lt;li&gt;实际生成 9,482 个（某些不合理的会被排除）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;输出文件：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;output/exp_results/your_protein/
  ├── your_protein.fasta           ← 原始序列（WT）
  └── your_protein_mutants.fasta   ← 9,482 个突变体
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;耗时：&lt;/strong&gt; 几秒钟&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Step 2：提取 LLM/AI 特征（嵌入向量）&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;做什么：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 ESM2 语言模型给每个突变体&quot;拍照&quot;&lt;/li&gt;
&lt;li&gt;每张&quot;照片&quot;是 1,280 个数字（向量）&lt;/li&gt;
&lt;li&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;MADKLN&lt;/code&gt; 这样的字母，但认识数字。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;打个比方：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;人类看蛋白质：MADKLN（一串字母）
                ↓ ESM2 模型
电脑看蛋白质：[0.23, -0.15, 0.89, ..., 0.47]（1,280 个数字）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这 1,280 个数字包含了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;蛋白质的结构信息&lt;/li&gt;
&lt;li&gt;氨基酸之间的相互作用&lt;/li&gt;
&lt;li&gt;功能相关的特征&lt;/li&gt;
&lt;li&gt;...等等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;使用的模型：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ESM2-650M&lt;/strong&gt;（您本地勉强可用的）：6.5 亿参数，本地 CPU 运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESM2-15B&lt;/strong&gt;（可选）：150 亿参数，需要服务器 GPU，且至少60g&lt;strong&gt;显存&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;技术细节：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ESM2 是 Meta（Facebook）开发的蛋白质语言模型&lt;/li&gt;
&lt;li&gt;在 2.5 亿个蛋白质序列上训练&lt;/li&gt;
&lt;li&gt;能&quot;理解&quot;蛋白质的语法和结构&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;输出文件：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;output/plm/esm/
  └── your_protein_esm2_t33_650M_UR50D.csv
      ├── 9,483 行（9,482 突变体 + 1 WT）
      └── 1,280 列（1,280 维向量）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;耗时：&lt;/strong&gt; 3-4 小时（本地 CPU）或 1-2 小时（服务器 GPU）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;阶段二：实验与预测循环&lt;/h3&gt;
&lt;p&gt;这是整个流程的核心，重复多轮，每轮包含 4 个步骤：&lt;/p&gt;
&lt;h4&gt;Step 3：准备实验数据&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;做什么：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;创建一个 Excel 表格，记录实验结果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;表格格式：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;variant&lt;/th&gt;
&lt;th&gt;activity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WT&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;N58V&lt;/td&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y250N&lt;/td&gt;
&lt;td&gt;1.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y268V&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L230G&lt;/td&gt;
&lt;td&gt;1.15&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;&lt;strong&gt;字段说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;variant&lt;/strong&gt;（突变体名称）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WT&lt;/code&gt;：Wild Type = 野生型 = 原始蛋白质&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N58V&lt;/code&gt;：第 58 位的 N（天冬酰胺）→ V（缬氨酸）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Y250N&lt;/code&gt;：第 250 位的 Y（酪氨酸）→ N（天冬酰胺）&lt;/li&gt;
&lt;li&gt;格式：&lt;code&gt;原氨基酸 + 位置 + 新氨基酸&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;activity&lt;/strong&gt;（活性值）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;实验测得的性能指标&lt;/li&gt;
&lt;li&gt;可以是任意单位（只要能比较大小）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数值越大表示越好&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;建议以 WT 为基准（WT = 1.0）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;活性值示例：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;酶活性：
  WT = 100 U/mL  → 标准化为 1.0
  突变体 A = 125 U/mL → 1.25（提升 25%）
  突变体 B = 80 U/mL  → 0.80（下降 20%）

结合亲和力（Kd 越小越好）：
  WT = 100 nM    → 取倒数 → 0.01 → 标准化为 1.0
  突变体 A = 50 nM → 取倒数 → 0.02 → 2.0（提升 100%）
  突变体 B = 200 nM → 取倒数 → 0.005 → 0.5（下降 50%）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;第一轮要测试多少个？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;最少&lt;/strong&gt;：WT + 10 个突变体（11 个数据点）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推荐&lt;/strong&gt;：WT + 20-30 个突变体（21-31 个数据点）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更多更好&lt;/strong&gt;：数据越多，模型越准确&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;如何选择突变体？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一轮（没有 AI 推荐时）：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法 1：随机选择 20-30 个&lt;/li&gt;
&lt;li&gt;方法 2：基于结构/功能知识选择（活性位点、关键残基等）&lt;/li&gt;
&lt;li&gt;方法 3：&lt;strong&gt;混合策略&lt;/strong&gt;（推荐）：一半随机，一半理性选择&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;后续轮（有 AI 推荐时）：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 AI 推荐的 Top 50 里选择&lt;/li&gt;
&lt;li&gt;可以全选 Top 20&lt;/li&gt;
&lt;li&gt;或者混合：Top 10 + 随机 10（避免过拟合）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;操作步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 打开我创建的模板
libreoffice data/exp/rounds/your_protein_Round1_template.xlsx

# 2. 填写数据
#    - 第一列：突变体名称
#    - 第二列：活性值

# 3. 保存为
data/exp/rounds/your_protein_Round1.xlsx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;耗时：&lt;/strong&gt; 实验 1-2 周，填表 10 分钟&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Step 4：训练模型并预测&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;做什么：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AI 学习您的实验数据&lt;/li&gt;
&lt;li&gt;对所有 9,482 个突变体进行预测&lt;/li&gt;
&lt;li&gt;推荐最有希望的 Top 50&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;技术原理：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用**随机森林（Random Forest）**机器学习模型：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;输入：
  - 9,482 个突变体的&quot;数字指纹&quot;（1,280 维向量）
  - 您测试的 20 个突变体的活性值

训练：
  AI 学习：&quot;哦，这些特征的突变体活性高，那些特征的活性低&quot;

预测：
  AI 预测剩下 9,462 个突变体的活性值

输出：
  按预测活性排序，推荐 Top 50
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;为什么用随机森林？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;简单有效，不容易过拟合&lt;/li&gt;
&lt;li&gt;对小样本数据（20-30 个）效果好&lt;/li&gt;
&lt;li&gt;不需要大量调参&lt;/li&gt;
&lt;li&gt;训练速度快（几秒钟）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;操作步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 编辑快速启动脚本
nano scripts/exp/your_protein_quickstart.py

# 2. 找到 Round 1 代码块（第 93-110 行左右）
#    删除前面的 # 号（取消注释）

# Round 1
ROUND = 1
evolve.evolve(
    ROUND,
    wt_fasta_file=WT_FASTA_FILE,
    mutant_fasta_file=MUTANT_FASTA_FILE,
    rounds_data_file=ROUNDS_DATA_FILE,
    embeddings_file=EMBEDDINGS_FILE,
    output_dir=OUTPUT_DIR,
    model=MODEL,
    scaler=SCALER,
    hyperparameter_tune=HYPERPARAMETER_TUNE,
    cv=CV,
    selection=SELECTION,
    n_top=N_TOP,
)

# 3. 保存并运行
conda activate evolvepro
python scripts/exp/your_protein_quickstart.py evolve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;输出文件：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;output/exp_results/your_protein/Round1/
  ├── your_protein_Round1_predicted_variants.csv
  │   ├── 所有 9,482 个突变体的预测结果
  │   └── 按预测活性排序
  │
  ├── your_protein_Round1_predicted_variants_top50.csv
  │   └── 推荐的 Top 50（用于下一轮测试）
  │
  ├── your_protein_Round1_model_performance.png
  │   └── 模型性能图（预测 vs 实际）
  │
  └── your_protein_Round1_feature_importance.csv
      └── 哪些特征最重要
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;查看结果：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看 Top 50 推荐
head -20 output/exp_results/your_protein/Round1/your_protein_Round1_predicted_variants_top50.csv

# 查看模型性能图
xdg-open output/exp_results/your_protein/Round1/your_protein_Round1_model_performance.png
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;耗时：&lt;/strong&gt; 10-30 分钟&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Step 5：第二轮实验&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;做什么：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从 Top 50 推荐里选 20 个突变体&lt;/li&gt;
&lt;li&gt;实验室测试&lt;/li&gt;
&lt;li&gt;创建 Round 2 数据文件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;重要：Round 2 数据包含所有前几轮的累积数据&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Round 1 数据：WT + 20 个突变体（21 个数据点）
              ↓
Round 2 数据：WT + 20 个（Round 1）+ 20 个（Round 2）= 41 个数据点
              ↓
Round 3 数据：WT + 40 个（Round 1-2）+ 20 个（Round 3）= 61 个数据点
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Excel 格式：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;data/exp/rounds/your_protein_Round2.xlsx

variant  | activity
---------|----------
WT       | 1.0       ← 每轮都要包含
N58V     | 0.85      ← Round 1 数据
Y250N    | 1.25      ← Round 1 数据
...      | ...       ← Round 1 数据
L299F    | 1.38      ← Round 2 新数据
L313W    | 0.78      ← Round 2 新数据
...      | ...       ← Round 2 新数据
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;操作步骤：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 创建 Round 2 数据文件
#    - 复制 Round 1 的数据
#    - 添加 Round 2 的新数据
#    - 保存为 your_protein_Round2.xlsx

# 2. 编辑快速启动脚本
nano scripts/exp/your_protein_quickstart.py

# 3. 取消注释 Round 2 代码块

# 4. 运行
conda activate evolvepro
python scripts/exp/your_protein_quickstart.py evolve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;耗时：&lt;/strong&gt; 实验 1-2 周，计算 10-30 分钟&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Step 6-N：继续迭代&lt;/h4&gt;
&lt;p&gt;重复 Step 5，直到找到满意的突变体。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;何时停止？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;活性不再显著提升（收敛了）&lt;/li&gt;
&lt;li&gt;达到目标性能&lt;/li&gt;
&lt;li&gt;预算/时间用完&lt;/li&gt;
&lt;li&gt;通常 3-5 轮后收敛&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;每轮的变化：&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;轮次&lt;/th&gt;
&lt;th&gt;数据量&lt;/th&gt;
&lt;th&gt;模型准确度&lt;/th&gt;
&lt;th&gt;发现好突变体的概率&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Round 1&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Round 2&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Round 3&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Round 4&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;很高&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Round 5&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;极高&lt;/td&gt;
&lt;td&gt;90%+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h3&gt;阶段三：分析与验证&lt;/h3&gt;
&lt;h4&gt;Step 7：性能提升分析&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;查看最佳突变体：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 查看最终推荐的突变体
head -10 output/exp_results/your_protein/Round5/your_protein_Round5_predicted_variants_top50.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;绘制进化曲线：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import pandas as pd
import matplotlib.pyplot as plt

# 读取所有轮次的数据
rounds = []
for i in range(1, 6):
    df = pd.read_excel(f&apos;data/exp/rounds/your_protein_Round{i}.xlsx&apos;)
    df[&apos;round&apos;] = i
    rounds.append(df)

all_data = pd.concat(rounds)

# 绘制每轮最佳活性
best_per_round = all_data.groupby(&apos;round&apos;)[&apos;activity&apos;].max()
plt.plot(best_per_round.index, best_per_round.values, marker=&apos;o&apos;)
plt.xlabel(&apos;Round&apos;)
plt.ylabel(&apos;Best Activity&apos;)
plt.title(&apos;Evolution Progress&apos;)
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;典型结果：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Round 1：发现 1.5x WT 的突变体
Round 2：发现 2.0x WT 的突变体
Round 3：发现 2.5x WT 的突变体
Round 4：发现 3.0x WT 的突变体（收敛）
Round 5：仍是 3.0x WT（确认收敛）
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h4&gt;Step 8：组合突变&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;单点突变体不够 -&amp;gt; 试组合&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;找到几个单独都好的突变体，组合在一起：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;单点突变：
  Y250N：1.5x WT
  L299F：1.8x WT
  R307N：1.6x WT

组合突变：
  Y250N + L299F：2.3x WT？
  Y250N + L299F + R307N：3.5x WT？
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 组合效果不一定是简单叠加，需要实验验证。&lt;/p&gt;
&lt;h2&gt;实际案例&lt;/h2&gt;
&lt;h3&gt;案例 1：T7 RNA 聚合酶&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 提升转录效率&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;流程：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Round 1：测试 24 个随机突变体，发现最好的是 1.4x WT&lt;/li&gt;
&lt;li&gt;Round 2：测试 Top 24，发现 2.1x WT&lt;/li&gt;
&lt;li&gt;Round 3：测试 Top 24，发现 2.8x WT&lt;/li&gt;
&lt;li&gt;Round 4：测试 Top 24，发现 3.0x WT（收敛）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最佳突变体：&lt;/strong&gt; Y639F, L746M, Q732R
&lt;strong&gt;组合突变：&lt;/strong&gt; Y639F + L746M = 4.2x WT（协同效应）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总测试：&lt;/strong&gt; 96 个突变体（vs 9,000+ 个全试）&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;案例 2：Cas12f 核酸酶&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 提升切割效率&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;流程：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Round 1：测试 32 个（一半随机，一半活性位点附近）&lt;/li&gt;
&lt;li&gt;Round 2：测试 Top 32，发现 1.8x WT&lt;/li&gt;
&lt;li&gt;Round 3：测试 Top 32，发现 2.3x WT&lt;/li&gt;
&lt;li&gt;Round 4：测试 Top 32，发现 2.5x WT&lt;/li&gt;
&lt;li&gt;Round 5：测试 Top 32，发现 2.6x WT（收敛）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;最佳突变体：&lt;/strong&gt; N282D, L355F, K412R&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总测试：&lt;/strong&gt; 160 个突变体&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;案例 3：抗体亲和力优化&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 降低 Kd（提升亲和力）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;挑战：&lt;/strong&gt; Kd 是越小越好，需要取倒数&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据处理：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WT：Kd = 10 nM → activity = 1/10 = 0.1 → 标准化为 1.0
突变体 A：Kd = 5 nM → activity = 1/5 = 0.2 → 2.0
突变体 B：Kd = 2 nM → activity = 1/2 = 0.5 → 5.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;结果：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 轮后找到 Kd = 0.5 nM 的突变体（提升 20 倍）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;上述内容我已经经过review，在650M模型下向量提取等工作流没问题&lt;/p&gt;
&lt;p&gt;15B参数等esm2 plm没法试，也别指望自己能跑得动，建议直接找老板。Google可知其显存需求至少60g needs，在模型启动的一瞬间，显存内存就会双双过载，&lt;code&gt;dmsg&lt;/code&gt;可知发生  oom &lt;code&gt;out-of-memory&lt;/code&gt; ，进程直接panic。超256g的内存勉强可以保持不发生panic，但速度非常慢，cpu硬算就更慢了，这并不是你的cpu有什么性能缺陷（当然也可能有），而是图计算和模型训练这种活就不是cpu擅长的范围，犹如让重卡车和超跑比赛车一样&lt;/p&gt;
&lt;p&gt;一言以蔽之，科研codebase在功能上或许一个比一个神异，但在代码结构和用户友好性上那是一个比一个沟式，拒开发者于千里之外&lt;/p&gt;
&lt;h2&gt;转机&lt;/h2&gt;
&lt;p&gt;well...由于AiCE本身无法被直接用于活性推断，RF diffusion 3 对显卡显存要求极为严苛，12GiB+都是至少了，故回到 evolvePro的 esm2-650MiB 这边，思考有没有什么转机之法&lt;/p&gt;
&lt;p&gt;教授那边一共就39个现存的突变体的活性数据，理论上来说，如果要从活性推断吻合的角度来收敛模型，得到高精的 嵌入向量提取 那是远远不可能够的（）巧妇亦难为无米之炊（&lt;/p&gt;
&lt;p&gt;但考虑到这就是个本科毕设，应该不需要那么精确的预估范围，于是转换思路：&lt;/p&gt;
&lt;p&gt;如果我只判断趋势，不追究最高效数值呢？然后尝试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;改写evolvePro的流程，不再是以十次为单位的交互式训练，而是再第一次初始化嵌入提取后，一次性给它30个作训练集&lt;/li&gt;
&lt;li&gt;以剩下9个数据为测试集，不再是「预估具体的活性程度和大小」，而是「判断活性增减趋势与实验侧数据是否符合」&lt;/li&gt;
&lt;li&gt;调整训练集与测试集的数据分配，测个四五次 五六次&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;um，结果出乎意料的好，准确率高达77.8%，意味着 7/9 的高额准确率，都能拿来投入实际产出来缩减实验侧的试剂开销了貌似（）&lt;/p&gt;
&lt;p&gt;再次吐槽，这科研代码的作者就差把“别研究我”写在注释里了，bro是有多怕被后人钻研才能把代码架构和流程间的交互烂到这种地步（&lt;/p&gt;
</content:encoded></item><item><title>软路由配置记录</title><link>https://mias.moe/posts/soft-router-gl-mt3000/soft-routing-config/</link><guid isPermaLink="true">https://mias.moe/posts/soft-router-gl-mt3000/soft-routing-config/</guid><description>gl-mt3000 + openwrt分支iStore</description><pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;背景&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;学校校园网网关限制了每个带宽账号2个&lt;code&gt;mac&lt;/code&gt;——这对我的超过7个设备是极大的阻碍。&lt;/li&gt;
&lt;li&gt;AP隔离使得内网设备间不可通信。&lt;strong&gt;AP/Client Isolation 在 L2 层面拦截站对站流量&lt;/strong&gt;，这意味着它阻止了无线客户端之间直接交换以太网帧（ARP、IPv4/IPv6 unicast）。因为没有 L2 通道，基于直接 IP 的会话（比如 SSH/TCP 连接、UDP 单播、广播）通常无法建立，这是帧 Frame 级别的阻拦，不可绕过——这对我多设备通信极不友好。&lt;/li&gt;
&lt;li&gt;我有些设备不便于在本地代理，或者其l3/4无法被捕获/转发。&lt;/li&gt;
&lt;li&gt;我没玩过软路由，&lt;s&gt;给自己找点罪受，&lt;/s&gt;，体验实践一遍软路由整套部署的大致工作流。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;普及下 router-based proxy 和 device-based proxy 的区别&lt;/p&gt;
&lt;p&gt;router-based：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;例子&lt;/th&gt;
&lt;th&gt;OSI 层&lt;/th&gt;
&lt;th&gt;原理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NAT（网络地址转换）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenWrt、iptables MASQUERADE&lt;/td&gt;
&lt;td&gt;L3 / L4&lt;/td&gt;
&lt;td&gt;直接改写 IP 头和 TCP/UDP 端口，不看应用层内容。纯粹的数据包转发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TProxy / REDIRECT 透明代理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clash、Surge、OpenClash、Xray 透明代理&lt;/td&gt;
&lt;td&gt;L3 / L4&lt;/td&gt;
&lt;td&gt;捕获所有目的端口流量，把 TCP/UDP 流导入本地监听的代理进程（例如 HTTP/SOCKS）。代理进程再在 L7 层解析。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;防火墙规则/路由策略&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;iptables、nftables、ip rule、ip route&lt;/td&gt;
&lt;td&gt;L3 / L4&lt;/td&gt;
&lt;td&gt;依据 IP 和端口做流量重定向或丢弃，不理解 L7 内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;软路由中的代理核心&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clash、Xray、V2Ray、Sing-box&lt;/td&gt;
&lt;td&gt;L7&lt;/td&gt;
&lt;td&gt;在路由器中运行的代理引擎本身理解 HTTP、TLS、QUIC、SOCKS 协议。属于应用层代理，但它接收的流量是从内核 L4 转发来的。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;device-based：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;th&gt;OSI 层&lt;/th&gt;
&lt;th&gt;原理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HTTP 代理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;系统设置中的 HTTP Proxy、Surge、Quantumult&lt;/td&gt;
&lt;td&gt;L7&lt;/td&gt;
&lt;td&gt;应用发送 HTTP 请求给代理，代理解析并转发。处理的是应用层 HTTP 协议。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SOCKS5 代理&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Shadowsocks、Clash 本地模式&lt;/td&gt;
&lt;td&gt;L7&lt;/td&gt;
&lt;td&gt;代理客户端封装 TCP/UDP 连接请求，通过 SOCKS 协议转交代理服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VPN App / Tun 驱动&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clash Tun、WireGuard、Outline、OpenVPN&lt;/td&gt;
&lt;td&gt;L3~L4（虚拟网卡）+ L7（代理引擎）&lt;/td&gt;
&lt;td&gt;虚拟网卡捕获 IP 包（L3），然后交给 L7 的代理协议（如 Shadowsocks、Vmess、Trojan）处理。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;然后这个 &lt;a href=&quot;https://openwrt.org/toh/gl.inet/gl-mt3000&quot;&gt;gl-mt3000&lt;/a&gt; 在硬路由上性价比和社区名声不错，但单纯就软路由来说，并不算是性价比很好的选择，而是个妥协。既要天线2.4g+5g高频宽、usb-device + 2.5g wan口 接入等硬路由需求，又要openwrt supporting list &quot;榜上有名&quot;，还要有轻便小巧+售后兜底，那肯定是有代价的（&lt;/p&gt;
&lt;p&gt;友善系列可玩度高，但价格太抽象了，且仅能做软路由用途，不考虑（）而且我很 &lt;s&gt;实用主义&lt;/s&gt; 懒，着实不想在工作流外的事情上花太多时间，我没那么多闲空。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MediaTek MT7981BA&lt;/code&gt; 这个CPU作为arm平台，那转发处理肯定是性能远不如E5等便宜好用x86平台的，但没办法，我总不能为了个软路由在宿舍单独放个itx+ups堆箱 or 裸露开发板+线缆放在宿舍小的可怜的桌面上，那也太抽象了。&lt;/p&gt;
&lt;p&gt;这里鸣谢下 &lt;a href=&quot;https://moliyue.xyz/&quot;&gt;molinyue&lt;/a&gt; 。没有这位在网工上很厉害的朋友，面对软路由这个完全陌生的领域，我可能要自己摸索个少说三天往上（）时间高低得翻个四五倍不止（&lt;/p&gt;
&lt;h2&gt;过程&lt;/h2&gt;
&lt;h3&gt;前置部分&lt;/h3&gt;
&lt;p&gt;首先，我们需要明白的是，openwrt的本质就是linux，是个特化适配了路由器相关软硬件包的轻量&lt;code&gt;distro&lt;/code&gt;，因此您可以用您对macos（cli）和对linux常规distro共通的常识去对待它。把它当成一个比较好伺候的linux server即可。&lt;/p&gt;
&lt;p&gt;它的pack manager是&lt;code&gt;opkg&lt;/code&gt;，&lt;s&gt;听说不太好用&lt;/s&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh gl-mt3000.local || ssh 192.168.8.1 #出厂默认ipv4是这个  
cat /etc/openwrt_release
cd /etc/opkg
ls -la
cat distfeeds.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;如果您发现ssh出现问题，那大概率是&quot;host indentification has changed&quot;，清理下残留host记录就好&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -f &quot;$HOME/.ssh/known_hosts&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果您配置过&lt;code&gt;.ssh/config&lt;/code&gt;，看到诸如&quot;permission error&quot;，那大概率是ssh配置文件的权限设置问题，openssh对此有着严格的安全要求，如果您是 macOS/linux 用户，那非常简单，只需如下，但如果是windows，umm请自行llm/Google&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod 600 ~/.ssh/config
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;给不太清楚这个config是做什么的萌新普及下，你可以理解成这是个openssh的配置文件，它是描述性的，而且日常用的话其实配起来很简单，可以省去每次输入完整ipv4以及ssh protocol断链的烦恼，以下为示例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host *
    AddKeysToAgent yes       # 自动将密钥添加到 ssh-agent
    UseKeychain yes          # macOS 使用 Keychain 管理密码,其他os用户可忽略
    IdentityFile ~/.ssh/id_rsa  # 默认私钥存储文件
    ServerAliveInterval 60   # 每60s尝试一次相应，避免断链
    ServerAliveCountMax 5    # 服务器无响应时，5*60=300s后断链

Host gl-mt3000
    HostName 192.168.8.1     # ipv4
    User root								 # login user
    Port 22                  # ssh开放端口
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt;查看信息后，可以清楚的看到这个路由器出厂内置的就是openwrt的一个snapshot, 这点毫无疑问，其区别只是引入了厂商特调的ui和 opkg 源等部分。既然内核完善，具备openwrt luci，是linux且可被ssh，那事情将会变得非常简单&lt;/p&gt;
&lt;p&gt;首先摆在您面前的有三个选项 ：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接前往 &lt;a href=&quot;https://openwrt.org/toh/gl.inet/gl-mt3000&quot;&gt;openwrt supported device&lt;/a&gt; 下载&lt;strong&gt;Firmware OpenWrt Upgrade URL&lt;/strong&gt;(直接进openwrt的 luci ui-web 安装新固件)或者下载&lt;strong&gt;Firmware OpenWrt Install URL&lt;/strong&gt;(通过Uboot刷入安装固件)，两者没区别，前者方便的多&lt;/li&gt;
&lt;li&gt;前往 &lt;a href=&quot;https://site.istoreos.com/firmware/download?devicename=mt3000&quot;&gt;iStore&lt;/a&gt; 搜索您的设备型号 gl-mt3000 然后下载tar打包固件，然后同上的第一种安装新固件方式。关于iStore和openwrt的关系/区别请自行llm/Google。不过要说明的是iStoreOS的openwrt内核往往落后官方一些，比如这里是24&lt;/li&gt;
&lt;li&gt;自行下载openwrt提供的，包含编译源码ci流程的container，并使用docker或其他容器工具启动/部署，自行选择自己的平台/设备进行编译（）不过放心，gl-mt3000是“榜上有名”的受支持设备，一般不会碰上离谱问题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;./openwrt-compile-container1.png&quot; alt=&quot;container1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./openwrt-compile-container2.png&quot; alt=&quot;container2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我是实用主义者&lt;s&gt;懒狗&lt;/s&gt;，于是在经过多方征询实践经验&lt;s&gt;摇人&lt;/s&gt;后我选择2（&lt;/p&gt;
&lt;p&gt;然后就等待固件刷入就行，&lt;strong&gt;记得期间不要断路由器电，不碰它最好）&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;完善部分&lt;/h3&gt;
&lt;p&gt;好，那么现在您已经得到了纯的不能再纯的软路由了，您可为自己达成了世上99.99%的普通人都没做到的事感到由衷的自豪（？&lt;/p&gt;
&lt;p&gt;接下来就不算什么特别重要的事情了，只是一些诸如&lt;code&gt;openclash&lt;/code&gt;，镜像源配置，一些小坑的注意点等细枝末节，根据个人需求完善即可，本文只介绍我的 personal practice，不然一篇post写着实在太费力了（&lt;/p&gt;
&lt;p&gt;题外话：在 2025-10-18 更新本文上传图片时碰上了怪事，vercel部署的webapp url正常，被cf dns解析至vercel部署所在的域名则第一张图片加载失败。怪。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openclash&lt;/code&gt;的配置其实很简单，只是有几个可能需要留意的小坑。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在github下载ipk，并通过&lt;code&gt;scp&lt;/code&gt;上传至openwrt/iStore中的&lt;code&gt;/tmp&lt;/code&gt;缓存区（把它当linux server轻量服务器就好&lt;/li&gt;
&lt;li&gt;ssh，补齐作者readme中所写的依赖项，&lt;code&gt;opkg&lt;/code&gt;直装&lt;/li&gt;
&lt;li&gt;补齐openclash所需要的内核部分，clash、meta、verge，自选。这里有个要注意的地方就是关于内核安装，项目本身提供了三个镜像源和github url，但这四个有时都会因为网络问题要么不行要么curl下一半断掉。这时您可以多试几次&lt;s&gt;大力出奇迹&lt;/s&gt;，或者干脆去github源址下完内核，然后同理scp上传，并安装至openclash内&lt;/li&gt;
&lt;li&gt;余下就是subscribe file，自动生成代理组/策略组config，然后享受您的软路由了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;btw，arm平台的软路由确实存在转发能力瓶颈的问题。能用，但有时反应有点慢（tcp握手过程&lt;/p&gt;
&lt;h3&gt;2025-10-25 17:15&lt;/h3&gt;
&lt;p&gt;补充碰上的小问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[/tmp/clash_latest_version] Download failed: [curl xxxxx]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具体表现为日志里不断滚出此报错，且无法正常测速代理文件内的各个节点&lt;/p&gt;
&lt;p&gt;判断为疑似dns问题&lt;/p&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh
vim /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后发现其中包含字段如下&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search lan
namerserver 127.0.0.1
nameserver ::1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这玩意一看就不太对劲。。。尝试改为阿里的dns&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;search lan
nameserver 223.5.5.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;问题解决。&lt;/p&gt;
&lt;h3&gt;2025-12-9 16:30&lt;/h3&gt;
&lt;p&gt;首先arm平台存在同价格同功率下低人一等的劣势，软路由用户层转发上先天不足&lt;/p&gt;
&lt;p&gt;其次当用它做wifi中继时，我感觉在无线扫描和接口转发配置上经受了莫大的折磨。这似乎和iStoreOS对MT3000的无线固件适配存在一些问题，在更替接口配置时，会出现无法激活/关联无线的窘境（（（&lt;/p&gt;
&lt;p&gt;不得不承认，特供有特供的道理（（（&lt;/p&gt;
&lt;p&gt;赤了半下午史，发现纯硬路由还是原厂特供的openwrt固件好用（  istore对天线的激活本来就有毛病，死磕不明智&lt;/p&gt;
&lt;p&gt;引用某前辈的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;（不用管，这些就是能 work 就行&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>常见命名范式</title><link>https://mias.moe/posts/naming-spec/</link><guid isPermaLink="true">https://mias.moe/posts/naming-spec/</guid><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;现代项目常见命名范式&lt;/h2&gt;
&lt;p&gt;我相信不少萌新在接触完整项目时，会发现在代码中各个元素的命名都是有规律、成体系的。它们有规律，而且很简单。&lt;/p&gt;
&lt;p&gt;规范范式的命名很重要，在社区/商企的实际项目中，遵循统一的命名规范可以极大地提高代码的可读性和可维护性。“统一度量衡” ，这是连秦始皇都明白的道理。只有组成的零部件在互通上不成障碍，才能加速主干部分的发展。&lt;/p&gt;
&lt;p&gt;不同的命名法有各自的特点和常见的应用场景，通常在不同的编程语言或代码元素（如变量、函数、类）中会有所偏好，下表将对此大致介绍。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;命名规范&lt;/th&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;主要应用对象&lt;/th&gt;
&lt;th&gt;常用语言/场景&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;lowerCamelCase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;myVariableName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;变量、函数、方法&lt;/td&gt;
&lt;td&gt;Java, JavaScript, C#, C++&lt;/td&gt;
&lt;td&gt;&lt;code&gt;userName&lt;/code&gt;, &lt;code&gt;calculateTotal&lt;/code&gt;, &lt;code&gt;getUserInfo&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UpperCamelCase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MyClassName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;类、接口、组件、构造函数&lt;/td&gt;
&lt;td&gt;Java, C#, Python, JavaScript (用于类)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UserProfile&lt;/code&gt;, &lt;code&gt;ServiceManager&lt;/code&gt;, &lt;code&gt;HttpRequest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;snake_case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;my_variable_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;变量、函数、文件名、数据库字段&lt;/td&gt;
&lt;td&gt;Python, Ruby, C/C++ 标准库, SQL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;user_name&lt;/code&gt;, &lt;code&gt;calculate_total&lt;/code&gt;, &lt;code&gt;first_name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SCREAMING_SNAKE_CASE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MY_CONSTANT_NAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;常量、全局配置&lt;/td&gt;
&lt;td&gt;Java, Python, PHP 等多种语言&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MAX_CONNECTIONS&lt;/code&gt;, &lt;code&gt;API_KEY&lt;/code&gt;, &lt;code&gt;DEFAULT_TIMEOUT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;kebab-case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;my-variable-name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CSS 类名、HTML 属性、URL 路径、文件名&lt;/td&gt;
&lt;td&gt;CSS, HTML, Lisp&lt;/td&gt;
&lt;td&gt;&lt;code&gt;main-container&lt;/code&gt;, &lt;code&gt;user-profile-card&lt;/code&gt;, &lt;code&gt;primary-button&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content:encoded></item><item><title>一条 SE 自学之路</title><link>https://mias.moe/posts/path-for-se-learning/</link><guid isPermaLink="true">https://mias.moe/posts/path-for-se-learning/</guid><description>平庸者的咏叹调</description><pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;最最普通的自学之路/心路&lt;/h1&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在此致敬湊老师的 &lt;a href=&quot;https://asukaminato.notion.site/CS-4b9f59acd3a64bf8916f834d0c7f25ea#f4345eee71bc4f69bf6e3c307c448613&quot;&gt;一条CS自学之路&lt;/a&gt; ,给了一开始小小的我大大的启蒙，虽然那时候因为混淆我期望的道路，因而导致花了很多时间走歪路，但那是我的问题不是湊老师那篇文章的www。我是个很普通很平庸的人，因此我很清楚，90%的萌新都会极度的缺少&quot;常识&quot;。我看过很多被推荐的blog, article, turorial，看到了那宛若繁星难以理清的概念和技术，见到了那大大的、难以触及的世界。我相信很多其他真正想走在这条路上的人都会有着难以下手的错乱和矛盾感。&lt;/p&gt;
&lt;p&gt;在这篇文章中，我将以我，一个平庸者的视角，向您拉开计算机那难以透过的帷幕。&lt;/p&gt;
&lt;h2&gt;误区&lt;/h2&gt;
&lt;p&gt;在现代社会里，包括曾经的小萌新时期的我在内，很多人会混淆计算机的各个方向，对这个巨大的世界认知往往模糊不清，认为一个人能完成整套业务需求、做web的一定会写数学算法、做理论的一定能写好项目代码等等，这些都是由于认知高度和信息来源极度匮乏、没有清晰教育和&quot;隔行如隔山&quot;等造成的结果。&lt;/p&gt;
&lt;p&gt;首先，在学习开始前，您需要清晰的思考和认知到，自己希望走的道路是什么样的&lt;/p&gt;
&lt;p&gt;在现代-2025年，以我个人的视角大致可以将除了硬件之外的，您目之所及的软&quot;计算机&quot;分为两大类：&lt;code&gt;CS&lt;/code&gt;和&lt;code&gt;SE&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;一、计算机科学（Computer Science, CS）&lt;/h2&gt;
&lt;p&gt;计算机科学的核心目标是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;研究“计算”本身的本质与规律。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它更偏理论、底层和抽象，强调“为什么能工作”,“如何更快/更优地计算”等。&lt;/p&gt;
&lt;p&gt;主流研究与应用方向（从理论到系统）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层次&lt;/th&gt;
&lt;th&gt;方向&lt;/th&gt;
&lt;th&gt;包括&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;理论层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;计算理论（Theory of Computation）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究可计算性、复杂度、NP问题、图灵机模型。属于CS最理论的分支。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;算法与数据结构（Algorithms &amp;amp; Data Structures）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究高效求解问题的算法设计与分析。ICPC核心内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;数理逻辑与离散数学&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;支撑算法、语言理论、形式化验证等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;系统层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;操作系统（Operating Systems）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究进程管理、内存管理、调度机制。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;编译原理（Compiler Design）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究语言解析、优化、中间代码生成。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;计算机体系结构（Computer Architecture）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究CPU结构、并行计算、硬件抽象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;数据库系统（Database Systems）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;探讨存储结构、事务、索引、分布式一致性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;网络与分布式系统（Networking &amp;amp; Distributed Systems）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;涉及协议、容错、共识算法、P2P架构。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;智能层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;人工智能与机器学习（AI &amp;amp; ML）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;研究计算学习理论、深度神经网络、强化学习。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;自然语言处理（NLP）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;模型语言、语义理解、对话系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;计算机视觉（CV）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;图像识别、视频理解、生成模型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;量子计算、密码学、安全理论&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;数学逻辑、计算复杂度与安全算法。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果您完整的在CS的道路上走下去，您大概率会走在这些方向上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;算法工程师（Algorithm Engineer）&lt;/li&gt;
&lt;li&gt;系统工程师（OS、Compiler、Kernel、Network）&lt;/li&gt;
&lt;li&gt;研究员 / 博士（AI/LLM、理论计算、复杂度分析）&lt;/li&gt;
&lt;li&gt;安全专家 / 密码分析师&lt;/li&gt;
&lt;li&gt;数据科学/分析、机器学习&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们几乎都是&lt;strong&gt;理论&lt;/strong&gt;性、&lt;strong&gt;抽象&lt;/strong&gt;性、研究导向、底层性的&lt;/p&gt;
&lt;p&gt;如果您希望走的是这条路上的内容，我推荐您看一位对我启蒙很大的恩师的&lt;a href=&quot;https://asukaminato.notion.site/CS-4b9f59acd3a64bf8916f834d0c7f25ea#f4345eee71bc4f69bf6e3c307c448613&quot;&gt;文章(点此)&lt;/a&gt; ,我对CS只有系统层稍微了解些，因为SE会不可避免的触及到“本质”&lt;/p&gt;
&lt;h2&gt;二、软件工程（Software Engineering, SE）&lt;/h2&gt;
&lt;p&gt;软件工程的核心目标是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;研究“如何高效地构建、维护、迭代和交付大型软件系统”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它更偏实践、系统、工程与协作，强调“让系统能运行、能扩展、能维护”。&lt;/p&gt;
&lt;p&gt;主流研究与应用方向（从架构到管理）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;层次&lt;/th&gt;
&lt;th&gt;方向&lt;/th&gt;
&lt;th&gt;包括&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;开发层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;前端开发（Frontend Engineering）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Web、移动端、UI/UX、React、Vue、Flutter 等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;后端开发（Backend Engineering）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;业务逻辑、数据库、API设计、微服务、Spring Boot、Gin、Flask 等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;全栈开发（Full-stack）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;同时承担前后端。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;架构层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;软件架构（Software Architecture）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MVC、微服务、DDD、分层架构、消息队列等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;系统设计（System Design）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;大规模系统、高并发、负载均衡、缓存一致性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;云计算与容器化（Cloud/DevOps）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker、Kubernetes、CI/CD、监控、部署自动化。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;质量层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;测试与质量保证（QA / Testing）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;单元测试、自动化测试、集成测试。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;软件维护与重构（Refactoring）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;管理技术债、重构架构、版本控制（Git）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;管理层&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;项目管理（Project Management）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;敏捷开发、Scrum、Kanban、需求分析。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;团队协作与工程文化（Engineering Culture）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Code Review、文档、规范、可维护性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果您完整的在SE这条路上走下去，您大概率会走在这些方向上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前端 / 后端 / 全栈工程师&lt;/li&gt;
&lt;li&gt;软件架构师（Software Architect）&lt;/li&gt;
&lt;li&gt;DevOps / SRE（Site Reliability Engineer）&lt;/li&gt;
&lt;li&gt;测试工程师 / QA&lt;/li&gt;
&lt;li&gt;项目经理（PM）&lt;/li&gt;
&lt;li&gt;系统分析师（System Analyst）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们多数都是&lt;strong&gt;工程&lt;/strong&gt;性、系统性、协作性、&lt;strong&gt;落地&lt;/strong&gt;性的。&lt;/p&gt;
&lt;p&gt;一言以蔽之：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;计算机科学(CS)&lt;/strong&gt; 研究“计算的规律与底层机制”&amp;lt;br&amp;gt;
&lt;strong&gt;软件工程(SE)&lt;/strong&gt; 研究“如何得到可靠、可维护、可用的产品”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;只有理清了您想做什么，您才能形成清晰的认知然后找到学习的路线，并极大化减少自己方向外的，不需要的庞大知识树。当然，CS需要部分SE，SE也需要部分CS，这点在之后您都会慢慢接触到。&lt;/p&gt;
&lt;p&gt;当时候到了，您自然而然就会接触到您需要的内容。&lt;/p&gt;
&lt;p&gt;如果您也和我一样打算走engineer方向，那应该把重心放在自己需要的知识树和实践上。&lt;/p&gt;
&lt;p&gt;未完待续...&lt;/p&gt;
</content:encoded></item><item><title>小萌新装大系统的奇遇记</title><link>https://mias.moe/posts/install-linux-in-laptop/</link><guid isPermaLink="true">https://mias.moe/posts/install-linux-in-laptop/</guid><pubDate>Sun, 12 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;这是篇关于我为什么如今选择使用&lt;code&gt;Kubuntu&lt;/code&gt;，以及期间一些经历和解决方案的文章&lt;/p&gt;
&lt;p&gt;我不喜欢windows，当然我也不是那种在desktop上堆一堆folder，连&lt;code&gt;brew&lt;/code&gt;包管理和shell都不会用的果粉。&lt;/p&gt;
&lt;p&gt;Windows遮掩了很多东西，过度的gui，冗余的组件，难堪其用的权限分配和目录树，见鬼一样的sh &lt;code&gt;env&lt;/code&gt;等等都是我不用它干活的理由。您会不得不需要大量的&lt;code&gt;虚拟化环境&lt;/code&gt;，啥都整合的&lt;code&gt;IDE&lt;/code&gt;，以及大量的兼容性，版本管理问题。&lt;/p&gt;
&lt;p&gt;那破目录树简直是什么考古垃圾堆...&lt;code&gt;Program Files&lt;/code&gt;、&lt;code&gt;Program Files (x86)&lt;/code&gt;、&lt;code&gt;AppData&lt;/code&gt;、&lt;code&gt;System32&lt;/code&gt;，再加上点盘符和反直觉路径名...一个库装完是要在四五个路径里找残骸的。后台进程是要抢IO的。cli tool是东拼西凑的。包管理&lt;code&gt;winget&lt;/code&gt;、&lt;code&gt;choco&lt;/code&gt;、&lt;code&gt;scoop&lt;/code&gt;是三国割据的。脚本好像还互不兼容🤔？权限分配(UAC)像是大陆的学校门卫——平时谁都随便过，一旦你想干点大的，立刻把门锁死装眼瞎耳聋的（&lt;/p&gt;
&lt;p&gt;PATH更神秘。用户级、系统级、session级，左右脑互搏各管各的，解析展开和合并生效也模糊不清。python装几遍、node装几遍，语言包管理和被管理主体永远指向不同版本。最后一看生效path和link，后宫宫斗这一块。&lt;/p&gt;
&lt;p&gt;最后还有最爱的&lt;strong&gt;遮羞布&lt;/strong&gt;：&lt;code&gt;GUI&lt;/code&gt;。点开N层窗口才能找到真正的配置选项。日志散在十几个角落，想看端口还得&lt;code&gt;netstat&lt;/code&gt;。这不是在开发，是在做考古。这些“外壳”都掩盖了DEV需要的透明度。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;它不希望你理解它，只希望你别碰它。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;Windows&lt;/code&gt;像是个被强行封装的黑盒系统，它允许你&apos;&apos;运行程序&apos;&apos;，却不鼓励乃至阻碍你&quot;理解系统&quot;。一言以蔽之：&lt;strong&gt;Windows很适合日常消费者民用，但不适合多数触及本质的开发&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;以及：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;wsl2有着众所周知的跨文件系统极其拉垮的读写性能&lt;/li&gt;
&lt;li&gt;vmware有着神秘非常的网络配置问题&lt;/li&gt;
&lt;li&gt;hyper-v的网桥数次让我Windows主体的&lt;code&gt;DE&lt;/code&gt;崩溃。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我是个高度的实用主义者，我不在乎是&lt;code&gt;MacOS&lt;/code&gt;还是&lt;code&gt;Linux&lt;/code&gt;的哪个distro，方便好用就行。当然，如果您是做基架/计算机科学向(理论算法除外)的，那需要额外的考量。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;安装 - 1. Arch Linux&lt;/h2&gt;
&lt;h3&gt;背景&lt;/h3&gt;
&lt;p&gt;我想您曾在数次在各个社区/info上看到这句 &quot;&lt;s&gt;btw, i use arch&lt;/s&gt;&quot;&lt;/p&gt;
&lt;p&gt;Hey,bro,我想其中还有不少使用来自东方的二次元纸片小人，其中又有不少背景是彩虹或🍥（）&lt;/p&gt;
&lt;p&gt;不可否认的是，&lt;code&gt;Arch wiki&lt;/code&gt;在如今社区处理问题的便携性(对比以前)上可谓功不可没，such as:你在&lt;code&gt;debian&lt;/code&gt;/&lt;code&gt;ubuntu&lt;/code&gt;/&lt;code&gt;open suse(Tumbleweed)&lt;/code&gt;等其他distro上碰上nvidia或者其他毛病，搜出来往往google SEO榜首是&lt;code&gt;Arch wiki&lt;/code&gt;的某篇post ( ) 它写下了从零构建整个现代gnu/linux您所需要的近乎一切，看不懂/不会看是您的问题，不是它的（笑&lt;/p&gt;
&lt;p&gt;但就我个人平心而论，我真不觉得complete newcomer用Arch是啥好主意，您会以至少6t/h的速率去高频骚扰agnet/llm，然后又使用更多的时间去问询关于linux基础架构和底层实现的知识，您会淹没在庞杂的command里，延伸出十几个、几十个、近百个问题及其分支中。不是每个人都做计算机科学的系统层方向，也不是所有人都会在乎哪个犄角旮旯的包是崩溃的罪魁祸首。您修/问等折腾的时间将会远远超过您在特定环境下完成期望的工作/学习的时间，请牢记：&lt;strong&gt;You are just a newcomer,not long-term open-source contributor or scientist.&lt;/strong&gt; &amp;lt;span id=&quot;self-awareness&quot;&amp;gt;很多知识/技能不是您当下该学的，您也学不会，就算学会也要花费很多不值得的时间精力。&amp;lt;/span&amp;gt;&lt;/p&gt;
&lt;p&gt;时间到了，您自然会需要，会根据自己的需求接触到。&lt;/p&gt;
&lt;h3&gt;过程&lt;/h3&gt;
&lt;p&gt;我使用&lt;code&gt;Ventory&lt;/code&gt;来创建&lt;code&gt;bootable USB drive&lt;/code&gt;，u盘是Samsung 64g的闪存盘，我喜欢稳定和适量的冗余余地，同时我对镜像损坏和盘读写锁死有阴影。同样，因为我实用主义&lt;s&gt;懒&lt;/s&gt;。这个工具创建&lt;code&gt;USB driver&lt;/code&gt;可以同时放入多个镜像文件，而且只需要把iso拖入进存储分区就行，不需要反复formant，而且除了&lt;code&gt;UEFI&lt;/code&gt;外的存文件的分区可以当作正常u盘来放文件，我可不想买个u盘只能当安装介质。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;screen_uefi.png&quot; alt=&quot;UEFI&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我使用&lt;code&gt;archinstall&lt;/code&gt;来安装，这是一个helper library，很多人抱怨它不能手动分区（这一点其实新版的镜像附带的&lt;code&gt;archinstall&lt;/code&gt;已经解决了）以及失去了手动学习arch的机会。但我不在乎这个，我只想有个合适的工作环境。&lt;s&gt;&lt;strong&gt;工具做出来就是给人用的嘛。&lt;/strong&gt;&lt;/s&gt; 不过当然了，以后有机会/空闲时我会&quot;朝圣&quot;一番拜读纯手工安装的arch wiki的，但现在不是时候。然后就是非常固定的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;code&gt;bios&lt;/code&gt;，关闭&lt;code&gt;Secure Boot&lt;/code&gt;(安全启动)，调整efi顺序为ventory优先&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;联网和配置临时代理:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export http_proxy=&quot;http://proxy-host-address:proxy-lan-port&quot;
export https_proxy=&quot;$http_proxy&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入&lt;code&gt;archlive&lt;/code&gt;， &lt;code&gt;pacman -Sy archinstall&lt;/code&gt;更新&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;archinstall&lt;/code&gt;，然后把它要求您必填的字段全处理好，包括Partition，Time zone，镜像下载来源，nvidia driver，root/user账密等等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入kde后，再次配置临时代理，安装yay，字体，fx5 input source，&lt;code&gt;fish shell&lt;/code&gt;，您喜欢的proxy cli/gui&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::tip
这里有个小坑，一些游戏本会在新live环境自动启动飞行模式以禁用网卡，造成您在iwconfig时看不到网卡存在，您只需要用键盘的Fn key关闭飞行模式即可&amp;lt;br&amp;gt;
强烈建议您用rj45网线链接路由器lan口，然后用手机clash系代理app进行LAN Proxy，以最大化减少不必要的麻烦
:::&lt;/p&gt;
&lt;p&gt;:::warning
请给&lt;code&gt;/&lt;/code&gt;和&lt;code&gt;/root&lt;/code&gt;划入不同的分区，便于您后续修&lt;code&gt;/root&lt;/code&gt;时保留自己的用户数据&amp;lt;br&amp;gt;
请务必选择nvidia的闭源专有驱动，以及在这之后禁用自带的nouveau开源驱动（让你看个亮的）
:::&lt;/p&gt;
&lt;p&gt;至此主体安装以及结束了，但剩下的细枝末节实在是难以数尽，包括但不限于:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;部分app window在&lt;code&gt;Wayland&lt;/code&gt;下字体渲染模糊&lt;/li&gt;
&lt;li&gt;内置网卡上下行速率奇慢无比(树外驱动)，&lt;s&gt;这里特指联发科某些偏门/邪门玩意&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;nvidia睡死，桌面环境渲染输出崩溃&lt;/li&gt;
&lt;li&gt;明明支持&lt;code&gt;Wayland&lt;/code&gt;但默认不启用，查arch wiki：u need add the flag &lt;code&gt;--ozone-platform-hint=auto --enable-wayland-ime &lt;/code&gt;to the launch file for Chrome (often located in &lt;code&gt;/usr/share/applications/google-chrome.desktop&lt;/code&gt; ) &lt;a href=&quot;https://wiki.archlinux.org/title/Chromium#2.9:~:text=Xwayland%2Drelated%20crashes.-,Native%20Wayland%20support,-Chromium%20140%20supports&quot;&gt;&lt;strong&gt;Native Wayland support&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;滚挂（设置下timeshort在每次-Syu之前备份快照，其实修起来还好）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是乎，我放弃arch了。因为 &amp;lt;a href=&quot;#self-awareness&quot;&amp;gt;上文所提&amp;lt;/a&amp;gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;安装 - 2. Kubuntu&lt;/h2&gt;
&lt;h3&gt;背景&lt;/h3&gt;
&lt;p&gt;在被Arch拷打半个月后，感觉自己的的怒气值和跟llm间的亲密度，尤其是日用期间修问题时与日俱增😡(这也可能与我双硬盘双系统设备本身有关)，因而转头被&lt;code&gt;Kubuntu&lt;/code&gt;捞走了。一开始其实期望是&lt;code&gt;open suse&lt;/code&gt;，但我对ubuntu这边的包管理熟悉度好些(以前用&lt;code&gt;Kali&lt;/code&gt;的)。契机：暑假时偶然认识到了一位叫做 &lt;a href=&quot;https://github.com/Glavo&quot;&gt;Glavo&lt;/a&gt; 的猫猫，得知其居然是大名鼎鼎的 &lt;a href=&quot;https://github.com/HMCL-dev/HMCL&quot;&gt;HMCL&lt;/a&gt; 的唯一maintainer以及 &lt;a href=&quot;https://github.com/plctlab&quot;&gt;PLCT&lt;/a&gt; 的疑似lv5前辈，感到十分震惊。看了几天他在bili上的日常issue、code、pr&amp;amp;merge以及我最头大的config env都是在&lt;code&gt;Kubuntu 24LTS&lt;/code&gt;下进行。几日观察+和群u聊天提问后选择了这个distro，因为——它真的很懒。&lt;/p&gt;
&lt;h3&gt;过程&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&amp;lt;u&amp;gt;遭罪，非常的遭罪。&amp;lt;/u&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我一开始为了图更新的包而选择了&lt;em&gt;Latest&lt;/em&gt;而不是&lt;em&gt;&lt;strong&gt;LTS&lt;/strong&gt;&lt;/em&gt;，相信我，这简直是赛博酷刑。&lt;/p&gt;
&lt;p&gt;我的所有config都是接近最优最简解的&lt;strong&gt;Best Practice&lt;/strong&gt;，和Arch以及多数distro类似的前置配置，config proxy，apt update&amp;amp;upgrade，然后最恶心的来了: &lt;code&gt;ubuntu-drivers&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这个cli本身没有任何问题，它同时也是被社区共同认可/设计的、面对 &lt;em&gt;&quot;Which proprietary graphics driver to install?&quot;&lt;/em&gt; 时的Best Practice，详情可见&lt;a href=&quot;https://askubuntu.com/questions/543325/how-to-download-all-required-ubuntu-drivers&quot;&gt;Community&lt;/a&gt;。可以说你压根不用动脑子，直接:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ubuntu-drivers install   
sudo reboot   
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可解君愁。&lt;s&gt;一开始我就是如此相信的（&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;但直到我花了整整八次去重装并输出内核报错结果以及显卡硬件信息反馈后我发现：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Best practice is NOT ALWAYS the BEST (&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我用了2次尝试在best practice下查明问题所在和发生了什么：情况一. 网卡部分内核级崩溃，别说无线，连rj45有线网卡，usb网卡都不识别。 情况二. Nvidia经典一睡不醒，这是安装过程中的随机事件，但我日志看了半天看不明白为什么发生。控制变量完全一致。但如果您使用了大陆高校/大厂镜像源的话可能性疑似更大&lt;/p&gt;
&lt;p&gt;然后用了5次尝试了所有&lt;code&gt;sudo ubuntu-drivers devices&lt;/code&gt;下的所有drivers，open kernel的，proprietary的，新的老的全试了一遍，最后得到结论：在我的设备环境下(CPU：amd R9-7945HX，GPU：RTX 4060 Laptop，Wireless LAN Card：&lt;strong&gt;&amp;lt;u&amp;gt;MediaTek Wi-Fi 6E MT7922 (&lt;em&gt;RZ616&lt;/em&gt;)&amp;lt;/u&amp;gt;&lt;/strong&gt; ，Lenovo R900P 2024)，安装&lt;code&gt;Kubuntu latest&lt;/code&gt;（KDE 6.x , Wayland）将会100%复现情况一，概率复现情况二。且reddit社区对联发科(MediaTek)的这位邪门网卡驱动表现可谓&lt;a href=&quot;https://www.reddit.com/r/MSI_Gaming/comments/1bbq600/amd_wifi_rz616_mediatek_crappy_wifi_drivers/&quot;&gt;骂声一片&lt;/a&gt;, linux上&lt;a href=&quot;https://www.reddit.com/r/linuxquestions/comments/1n17dhs/slow_and_unstable_wifi_on_mediatek_rz616_mt7922/&quot;&gt;同样&lt;/a&gt;, 感兴趣可自行goggle search下这位神秘网卡。&lt;/p&gt;
&lt;p&gt;然后红温了，直接照搬Glavo&lt;s&gt;猫猫大人&lt;/s&gt;的配置，成为究极懒狗。1. &lt;code&gt;Kubuntu 24LTS&lt;/code&gt; 2. &lt;code&gt;sudo ubuntu-drivers install&lt;/code&gt; 3. Install &lt;code&gt;fish shell&lt;/code&gt;, 啥都不改，&lt;code&gt;WM&lt;/code&gt;也是24LTS的&lt;code&gt;X11&lt;/code&gt;，&lt;code&gt;DE&lt;/code&gt;也是default &lt;code&gt;KDE 5.x&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后过上了幸福的日子，解决了我近乎一切烦恼，除了💩的 &lt;strong&gt;&amp;lt;u&amp;gt;MediaTek Wi-Fi 6E MT7922 (&lt;em&gt;RZ616&lt;/em&gt;)&amp;lt;/u&amp;gt;&lt;/strong&gt; ，它在linux下的速率和信号接收仍然是依托答辩，不负它在社区的显赫骂名（&lt;/p&gt;
&lt;p&gt;后续：我又重装了两三次确认，在24LTS下无论装那种devices optional下的Nvidia drivers，都没有出现任何问题。&lt;/p&gt;
</content:encoded></item><item><title>一个普通人的全栈学习日记</title><link>https://mias.moe/posts/diary-full-stack/full-stack-learning/</link><guid isPermaLink="true">https://mias.moe/posts/diary-full-stack/full-stack-learning/</guid><description>我为仰望炽阳之蚍蜉，憧憬那闪烁永夜的天光</description><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;记录着，叹息着，期盼着&lt;/h1&gt;
&lt;h2&gt;建立缘由&lt;/h2&gt;
&lt;p&gt;我是个很普通的人，自然也会有偷懒，迷茫，恍惚的时光。写这份日记是为了记录自己，看着自己一天天，一点点向上攀爬的样子。希望多年后自己能成为很厉害的人，回首时一边看着自己的来时路，一边哑然失笑。&lt;/p&gt;
&lt;h2&gt;对看这份日记的人，一些想说的&lt;/h2&gt;
&lt;p&gt;如果您是个很厉害的，已经在半山腰或是临近山巅的成熟开发者，这只不过是个小萌新步履蹒跚的玩具日记罢了。但如果您也是个对计算机，对前端有些兴趣，但却患得患失，不知从何入手的普通人，或许它给您心中的困惑带来些答案。&lt;/p&gt;
&lt;p&gt;老实说我是个很懒的人，也不喜欢写文档，写文章。我一直秉持着“不是同一个世界的人，再怎么接近，也终究无法重合”和观点。因此我其实对docs持悲观态度，这份日记也主要是为了我自己而已。&lt;/p&gt;
&lt;p&gt;不过每个人都有自己的局限性，我也不例外。这份日记基本算我的备忘录和流水账日常，因此只是一份参考。同时屏幕对面的您要做好一个准备就是：&lt;strong&gt;&amp;lt;u&amp;gt;您不一定能完全复刻我的道路&amp;lt;/u&amp;gt;&lt;/strong&gt;。这不是对您的看轻，不屑或是歧视，而是字面意思上的陈述。我是个很平庸但比较幸运的孩子，在我的一路有很多对我影响深刻的人，或是前辈或是朋友也或是陌路，都对我帮助了很多很多。&lt;s&gt;某种意义上，我是个百家理念的集成品（？&lt;/s&gt; 可以说是拾人牙慧，也可以说是被“托举而上”的。同时我的专业技术虽然不怎么样，但我对软工&lt;code&gt;SE&lt;/code&gt;的很多现代技术栈/架构/产品都有较明晰的大致认知，且我对计算机软工&lt;code&gt;SE&lt;/code&gt;有较高的亲和度，从源头追溯可以到小学三四年级乃至幼儿园时期，不过对计算机科学&lt;code&gt;CS&lt;/code&gt;尤其是理论层，比如DSA那种直指数学的东东就不怎么样也谈不上喜欢了。我喜欢code，喜欢engineering，但不大擅长scientific。&lt;/p&gt;
&lt;p&gt;在当今社会环境下，我见过太多太多在大陆国行手机和低俗短视频平台下，失去对计算机基本理解和亲和的孩子了。傻瓜式的手机阻碍了基本的系统操作能力，无用的庞杂信息流妨碍了自主的探究思考，“民用”化的Windows遮掩了计算机的本质。&lt;/p&gt;
&lt;p&gt;每个人都有各自的方向，烧菜的厨子不一定需要了解生火需要的热力学理论，也不一定需要学习如何生出更好用的火，但不能太离谱，至少TA得知道火是什么。&lt;strong&gt;您可以在 计算机科学/软件工程 基础上薄弱，但不能完全被蒙蔽双眼。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./math.png&quot; alt=&quot;math&quot; /&gt;&lt;/p&gt;
&lt;p&gt;btw，我如今几乎所有工作环境都在&lt;code&gt;mac&lt;/code&gt;和&lt;code&gt;gnu/linux&lt;/code&gt;下完成，后者选个您顺眼的，(k)ubunttu就不错。我不喜欢Windows，原因有点罄竹难书，不过如果一路走下去的话，未来您自然会知道的。&lt;/p&gt;
&lt;p&gt;:::warning
However，&lt;strong&gt;DONT USE Arch IF U ARE A COMPLETE NEWCOMER&lt;/strong&gt;
:::&lt;/p&gt;
&lt;h2&gt;环境介绍&lt;/h2&gt;
&lt;p&gt;我主要使用&lt;code&gt;MacOS&lt;/code&gt;作为主要开发设备。使用&lt;code&gt;iTerm2&lt;/code&gt;作为terminal，使用&lt;code&gt;zsh&lt;/code&gt;和&lt;code&gt;oh-my-zsh&lt;/code&gt;三件套插件为shell，我现在主要方向在web上，所以我使用&lt;code&gt;vsc&lt;/code&gt;，同时样式环境是&lt;code&gt;Vitesse Theme&lt;/code&gt;+&lt;code&gt;Material Icon Theme&lt;/code&gt;, linter上我使用&lt;code&gt;SonarQuobe&lt;/code&gt;。agent上我使用&lt;code&gt;copilot(vsc)&lt;/code&gt;并多数情况下用Claude4sonnet, &lt;strong&gt;但是我不喜欢vibe coding和大陆市场部推出的agent产品，在面对配置和样式设计时它是💩，您可以拿它来问，但我始终不建议您用它写完整的东西&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在Kubuntu上我比较懒，用的是kubuntu lts24，但这是有原因的，和我笔记本的联发科偏门网卡以及nvidia有关，这部分未来会在另一篇文章中详谈。&lt;code&gt;WM&lt;/code&gt;上我使用&lt;code&gt;x11&lt;/code&gt;，&lt;code&gt;DE&lt;/code&gt;上我用&lt;code&gt;kde plasma5&lt;/code&gt;，使用&lt;code&gt;fish&lt;/code&gt;为shell，因为我懒。当然您大可用&lt;code&gt;Debian 13&lt;/code&gt;什么的，喜欢啥distro都可以。我们是engineer，不是scientist或社区宗教信徒。&lt;/p&gt;
&lt;p&gt;:::important
我始终建议您使用Google，reddit，overflow，gpt/gemini model等，我个人拒绝使用且不建议您使用baidu,csdn,douyin,deepseek,doubao等玩意。我不喜欢大陆的软件生态。
:::&lt;/p&gt;
&lt;p&gt;:::warning
不要在学习和练手时用vibe coding，那对教育意义是灾难性的。
:::&lt;/p&gt;
&lt;p&gt;补充：后来用 &lt;code&gt;EndeavourOS&lt;/code&gt;(一个贴近arh原生的分支)去了，以及对vibe。。时代不同了，应该辩证的使用，后面会详谈&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;预期roadmap&lt;/h2&gt;
&lt;p&gt;:::tips
我个人建议您使用&lt;code&gt;OSX(MacOS)&lt;/code&gt;或任意发行版的&lt;code&gt;gnu/linux&lt;/code&gt;去尝试参照我的路线，因为这可以帮助您触及很多本质上的东西。正如我上文所述，windows会遮掩本质，以及windows其实在很多地方很麻烦。
:::&lt;/p&gt;
&lt;p&gt;大致预期路线：&lt;/p&gt;
&lt;h3&gt;语言/框架&lt;/h3&gt;
&lt;p&gt;前端部分：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;HTML&lt;/code&gt; -&amp;gt; &lt;code&gt;CSS&lt;/code&gt; -&amp;gt; &lt;code&gt;Tailwind css&lt;/code&gt; 写静态web -&amp;gt; &lt;code&gt;JS&lt;/code&gt; -&amp;gt; 写手搓web -&amp;gt; &lt;code&gt;npm&lt;/code&gt;(大致了解包管理即可) -&amp;gt; &lt;code&gt;Vue&lt;/code&gt; -&amp;gt; &lt;code&gt;TS&lt;/code&gt; -&amp;gt; 写现代webapp -&amp;gt; &lt;code&gt;Nuxt&lt;/code&gt; -&amp;gt; &lt;code&gt;React&lt;/code&gt; -&amp;gt; &lt;code&gt;Next&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Branch: Vue   -&amp;gt; scss
        React -&amp;gt; css-in-js, css modules
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后端部分：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Nodejs&lt;/code&gt; -&amp;gt; 写CLI app -&amp;gt; &lt;code&gt;PostgreSQL&lt;/code&gt; -&amp;gt; 写简单的CRUD app -&amp;gt; &lt;code&gt;RESTful API&lt;/code&gt; -&amp;gt; &lt;code&gt;JWT Auth&lt;/code&gt; -&amp;gt; &lt;code&gt;Redis&lt;/code&gt; -&amp;gt; 写一个完整的app&lt;/p&gt;
&lt;p&gt;DevOps部分；&lt;/p&gt;
&lt;p&gt;未完待续......&lt;/p&gt;
&lt;h3&gt;工具链&lt;/h3&gt;
&lt;p&gt;Build tool: &lt;code&gt;Vite&lt;/code&gt; &lt;code&gt;Webpack&lt;/code&gt;, serving to bundle and optimize web applications.&lt;/p&gt;
&lt;p&gt;Bundler: &lt;code&gt;ESBuild&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Deploy: &lt;code&gt;Vercel&lt;/code&gt;, &lt;code&gt;Netlify&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Linter: &lt;code&gt;ESlint&lt;/code&gt;, &lt;code&gt;SonarQuote&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;&lt;s&gt;流水账&lt;/s&gt;&lt;/h2&gt;
&lt;h3&gt;2025-10-9  00:20&lt;/h3&gt;
&lt;p&gt;W3S tutorial, &lt;code&gt;HTML&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, Chapter : &lt;code&gt;Forms&lt;/code&gt; Section : &lt;code&gt;HTML Input Attributes&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2025-10-9  09:00&lt;/h3&gt;
&lt;p&gt;W3S tutorial, &lt;code&gt;HTML&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finish &lt;code&gt;Forms&lt;/code&gt; chapter learning&lt;/p&gt;
&lt;p&gt;Now, Chapter : &lt;code&gt;Media&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2025-10-10  02:18&lt;/h3&gt;
&lt;p&gt;W3S tutorial, &lt;code&gt;CSS&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finish &lt;code&gt;HTML&lt;/code&gt; part learning&lt;/p&gt;
&lt;p&gt;预期学习概况：&lt;/p&gt;
&lt;p&gt;必学：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择器：基础（&lt;code&gt;#id&lt;/code&gt;, &lt;code&gt;.class&lt;/code&gt;, &lt;code&gt;tag&lt;/code&gt;），组合选择器，伪类（&lt;code&gt;:hover&lt;/code&gt;, &lt;code&gt;:focus&lt;/code&gt;），伪元素（&lt;code&gt;::before&lt;/code&gt;, &lt;code&gt;::after&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;盒模型：&lt;code&gt;margin&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;width/height&lt;/code&gt;, &lt;code&gt;box-sizing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;布局：&lt;code&gt;display&lt;/code&gt;（block, inline, inline-block, flex, grid），&lt;code&gt;position&lt;/code&gt;（static, relative, absolute, fixed, sticky）&lt;/li&gt;
&lt;li&gt;字体与文本：&lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;line-height&lt;/code&gt;, &lt;code&gt;font-family&lt;/code&gt;, &lt;code&gt;text-align&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;背景与颜色：&lt;code&gt;background&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;opacity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;响应式：媒体查询（&lt;code&gt;@media&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;动画/过渡：&lt;code&gt;transition&lt;/code&gt;, &lt;code&gt;transform&lt;/code&gt;, &lt;code&gt;animation&lt;/code&gt;（了解即可，常用在按钮 hover 等场景）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初学阶段可以不学：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSS 自定义属性（&lt;code&gt;--var&lt;/code&gt;）→ 初学不常用&lt;/li&gt;
&lt;li&gt;CSS 函数（&lt;code&gt;calc()&lt;/code&gt;, &lt;code&gt;clamp()&lt;/code&gt; 等）→ 可后面补&lt;/li&gt;
&lt;li&gt;CSS 高级选择器（&lt;code&gt;nth-child&lt;/code&gt;, &lt;code&gt;nth-of-type&lt;/code&gt;）→ 先不碰复杂情况&lt;/li&gt;
&lt;li&gt;CSS Grid 高级特性（自动布局区域命名）→ 学基础网格即可&lt;/li&gt;
&lt;li&gt;CSS 高级动画（关键帧复杂动画）→ React/Tailwind 常用库替代&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2025-10-10 23:30&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[x] 字体与文本：&lt;code&gt;font-size&lt;/code&gt;, &lt;code&gt;line-height&lt;/code&gt;, &lt;code&gt;font-family&lt;/code&gt;, &lt;code&gt;text-align&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[x] 盒模型：&lt;code&gt;margin&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;width/height&lt;/code&gt;, &lt;code&gt;box-sizing&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2025-10-11 8:30&lt;/h3&gt;
&lt;p&gt;看文档/视频是在获取知识，亲手写code是在训练技能。&lt;/p&gt;
&lt;p&gt;:::important
切记，减少陷入&quot;知识幻觉&quot;的情况！
Coding是一种技能，而不是纯粹的知识。如果您采取了先看完很长篇部分的文档(期间不动手)，然后再尝试写example，这时您的脑子往往会一片空白，反应不过来该怎么做。We are engineers , not scientists.
您应该在学到每个(几个)可以独立起效的概念时，尝试动手去进行 复现-&amp;gt;改造-&amp;gt;观察 这样的重复过程。这就是我的best practice。
:::&lt;/p&gt;
&lt;p&gt;这也是我一次次强调，避免在newcomer时用agent写东西的缘故之一，vibe写出的不是您自己的。&lt;/p&gt;
&lt;h3&gt;2025-10-12  23:45&lt;/h3&gt;
&lt;p&gt;今日休战，写了篇关于&lt;code&gt;Linux&lt;/code&gt;安装历程和不喜欢windows原因的&lt;a href=&quot;https://www.mias.moe/posts/install-linux-in-laptop/&quot;&gt;post&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;同时在纠结要不要写个用于页内bookmark跳转后暂时高亮:target的css/js，llm不好用，问厉害的前辈不太搭理我，难过&lt;/p&gt;
&lt;p&gt;可能是我的问题太低端了吧，可是我也问不出什么更厉害的问题了呀，唉。。。&lt;/p&gt;
&lt;p&gt;给校内的教授写了邮件，不知道我一个做软工&lt;code&gt;SE&lt;/code&gt;的能不能被转专业，我不想干两三年的牛马活和写生化论文毕设。&lt;/p&gt;
&lt;p&gt;今天是不太开心的一天。&lt;/p&gt;
&lt;h3&gt;2025-10-13 3:20&lt;/h3&gt;
&lt;p&gt;理解概念，梳理构造，分剥问题，书写实现，整合连结&lt;/p&gt;
&lt;p&gt;工程的本质是一次又一次类似操作流程的完成，互相契合的齿轮互相带动，形成了完整的大厦。&lt;/p&gt;
&lt;p&gt;这也是&lt;code&gt;SE&lt;/code&gt;每天都在做的事情。我喜欢这样的重复，虽然它一眼望得到头hhh&lt;/p&gt;
&lt;h3&gt;2025-10-13 13:00&lt;/h3&gt;
&lt;p&gt;第一次给大大的repo &lt;a href=&quot;https://github.com/langgenius/dify/pull/26745&quot;&gt;Dify&lt;/a&gt;提 PR，被merged了，虽然没什么难度，但很开心。很感谢湊老师ww&lt;/p&gt;
&lt;h3&gt;2025-10-15 21:30&lt;/h3&gt;
&lt;p&gt;因为一些事，想起来之前被一位很厉害的朋友带去和一群很厉害的CS方向的人吃饭，被其他人问自己的学校和专业是什么时的情景了hhh&lt;/p&gt;
&lt;p&gt;感觉自己所在的 “位置” 说出口都是一种，莫大的自卑和丢人。他们那才配称之为真正的“大学”，至于我嘛... ww，多说无益。&lt;/p&gt;
&lt;h3&gt;2025-10-16 01:36&lt;/h3&gt;
&lt;p&gt;看一篇某校的面向新人wiki有感，发觉自己犯了个很大的错误&lt;/p&gt;
&lt;p&gt;我太多的用被一些厉害的人，潜移默化/耳濡目染下的，学&lt;code&gt;CS&lt;/code&gt;的态度去学&lt;code&gt;SE&lt;/code&gt;。 纠结没什么鸟用的&lt;code&gt;css property&lt;/code&gt; rendering顺序等等类似的事情，每小时十几次问llm旁枝末节，这些都太冗余和拖慢进度了，应该是一切以“写”和“做”为导向才对。&lt;/p&gt;
&lt;p&gt;我纠结太多没用的细节了，那种“先做了再说，细节回头补”的做法才是更合适的（ 这才是Software Engineer该有的、更合适的做法。&lt;/p&gt;
&lt;p&gt;被湊老师喂饭+1 ：面对 &lt;a href=&quot;ai,dev&quot;&gt;gemini2.5p&lt;/a&gt; 需要调整temperature为 0 ，会得到更好用和专业的结果。湊老师说我需要看 &lt;a href=&quot;https://github.com/karpathy/llm.c/blob/f1e2ace651495b74ae22d45d1723443fd00ecd3a/train_gpt2.py#L273&quot;&gt;这个&lt;/a&gt; ，唉他昨天就发我了，结果昨天一整天都在不知道做什么，拖拖拉拉的没看。&lt;/p&gt;
&lt;p&gt;我有好多好多要做的事情，永远也做不完、堆积如山的需要 看/学 的docs内容，却总是想着偷闲。真的好羡慕那些可以无虑过完“青春年华”的人生啊。。。或许我该进一步的减少和 室友/本校同学 以及这个无用学校的交互了，对正事毫无帮助。&lt;/p&gt;
&lt;h3&gt;2025-10-16 02:20&lt;/h3&gt;
&lt;p&gt;唉。。看到了 &lt;a href=&quot;https://hdu-cs.wiki/&quot;&gt;杭电HDU的wiki&lt;/a&gt; 越发觉得无力，我这种从一开始一无所有的人真的最后能在 SE 上成功吗...&lt;/p&gt;
&lt;p&gt;“他们”无一不是有着庞大的校院优异资源，大量的社区支持，一代代难以数尽的先辈经验和支持，上位阶层兜底的初始认知高度etc...我有什么，我又能付出什么,,,现实中的全部吗？隔着屏幕能抱上大腿的数来数去也就那几位，方向还多数是不同的，现实里能帮到我的一个人也没有。&lt;/p&gt;
&lt;p&gt;我没有项目/课题组/导师，我没有学校社区足以喂饭的wiki，我没有衣食无忧的阶层背景。我，，，除了计算机，早就什么都没有，也什么都不剩了hhh。没有人能帮我垫底，也没有人能在现实中的当下帮到我。&lt;/p&gt;
&lt;p&gt;当下，一切只能靠我自己了。好在，&lt;code&gt;SE&lt;/code&gt;对背景/资格的需求是最低的，不过与此同时，对个人的剥夺也是最大的www&lt;/p&gt;
&lt;p&gt;果然，还是好羡慕，好羡慕啊...我真的能在最后胜出吗？即使能，为此我又会付出多大的现实呢...?&lt;/p&gt;
&lt;h3&gt;2025-10-17 21:30&lt;/h3&gt;
&lt;p&gt;终于配完软路由了。从十点半配到现在饭没吃屁股没挪过，坐牢。&lt;/p&gt;
&lt;p&gt;写篇post&lt;/p&gt;
&lt;h3&gt;2025-10-18 14:50&lt;/h3&gt;
&lt;p&gt;学习源有问题，我想我应该修正下自己的学习工作流...&lt;/p&gt;
&lt;p&gt;正在参考御守老师发的 https://wangdoc.com 和 杭电的 https://hdu-cs.wiki/&lt;/p&gt;
&lt;p&gt;我之前居然把csdiy忘记了。。。好蠢（&lt;/p&gt;
&lt;p&gt;太慢了，太慢了。我必须得更快点，必须得把现实压缩出更多的时间才行。。。&lt;/p&gt;
&lt;h3&gt;2025-10-19 14:55&lt;/h3&gt;
&lt;p&gt;来看了下学校的百团（社团聚集/招新 演艺活动）&lt;/p&gt;
&lt;p&gt;嘛...有时看着这些出着各色服饰的coser，看着在社团和活动中洋溢青春笑容的人，我总是会不禁在想：&lt;/p&gt;
&lt;p&gt;“这才是大学生活呀...与之相比，我仿佛是在大学上班一样”&lt;/p&gt;
&lt;p&gt;哪怕想跨越的只是知识的阶层，所长之处和卑微的出身，也会成为壁垒，成为包裹自己的最大的隔阂&lt;/p&gt;
&lt;p&gt;我该怎么做。我必须得做。想起了一句歌剧台词：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;汝欲许下跨越常轨，跻身天穹的愿望？&lt;/p&gt;
&lt;p&gt;那意味着要付出除愿望外的一切，&lt;/p&gt;
&lt;p&gt;才能填补那浊沼与高天间的隔断&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;原本想着能不能通过给学校一个叫电医的社团提供对萌新/客户的 软件/环境 配置+水群+分享工作流/工具链，来借此获得在社团活动室的久居坐班权，看来不大行。排班已经满了。&lt;/p&gt;
&lt;p&gt;我不算特别喜欢宿舍，或许没有什么特别的矛盾，但终究不是一个世界的人，没有交互性，也没有共同的语言。我需要更多的时间去做自己的事。无论是技术，还是生活。&lt;/p&gt;
&lt;p&gt;不是一个世界的人，终究不会有交集的，哪怕看上去的关系再好也一样，毫无意义。&lt;/p&gt;
&lt;p&gt;预计给一个学校动漫社web的立项，其中涉及到了数据存储问题，我在思考该和前人一样py+numpy操作csv表格，还是使用正统的方式去存储数据信息，比如&lt;code&gt;SQLite&lt;/code&gt;或者&lt;code&gt;postgreSQL&lt;/code&gt;，然后再单独设计个页面去用于数据库的CRUD。这是个很麻烦的问题，因为这其中的功能逻辑期望是不确定和易变的。&lt;/p&gt;
&lt;p&gt;web上我预计会用 vue ，并使用&lt;code&gt;Tailwind&lt;/code&gt;来处原子化样式，&lt;code&gt;pnpm&lt;/code&gt;来对node包管理，vite构建，因为这在学习路线上。我听说过&lt;code&gt;UnoCSS&lt;/code&gt;的引擎更佳，但我这个学期可能学不到。&lt;/p&gt;
&lt;p&gt;后端上我预计会用&lt;code&gt;Golang&lt;/code&gt;的&lt;code&gt;Gin&lt;/code&gt;来做routing和后端逻辑，并对sqlite数据库进行CRUD，以此达到需求。&lt;/p&gt;
&lt;h3&gt;2025-10-20&lt;/h3&gt;
&lt;p&gt;出于人际关系和学业问题，终止立项。我对“社团”这样的组织很失望，并且也不打算再与自己本科学校的所有学生自发组织有任何交集。&lt;/p&gt;
&lt;p&gt;这篇日记还是回到全栈开发的正题上好了&lt;/p&gt;
&lt;p&gt;找到校内的某教授当背书毕导，开心。终于不用为了毕业担惊受怕了。不过我需要为课题组处理一些信息上的问题，这个小问题。&lt;/p&gt;
&lt;h3&gt;2025-10-22 20:30&lt;/h3&gt;
&lt;p&gt;在教授导师那边蹭到了一个课题组的工位，没想到困扰/期望了这么久的校内工作环境居然能以如此简单的方式解决。。。该说不愧是正教授/博导吗，恐怖如斯（）&lt;/p&gt;
&lt;p&gt;早知道就不去掺合社团之类的没啥用学生组织了，现在想想自己当时好蠢，浪费时间精力。。。（&lt;/p&gt;
&lt;p&gt;或许只有更高的地方才能发挥出我的价值。&lt;/p&gt;
&lt;h3&gt;2025-10-23 00:43&lt;/h3&gt;
&lt;p&gt;记录一段可能会影响余生的对话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A1 : 说话卡哇伊的人,或许正忙着拉小团体/圈子背后嘲笑你&lt;/p&gt;
&lt;p&gt;A2 : 重要吗
嘲笑你会让你亏钱吗&lt;/p&gt;
&lt;p&gt;A1 : 上一分钟还在萌萌表情包,下一分钟地雷后开始嘲笑&lt;/p&gt;
&lt;p&gt;A2 ：好事啊
说明这关系有问题，断掉就行
他们对我的意义都没有 llm 大，为什么我要期望他们。。。&lt;/p&gt;
&lt;p&gt;A1 ：您的情感/对人的期望好像很淡ww. 如果是我的话可能要膈应个少说半个月往上
或许情感淡漠有时并不是坏事&lt;/p&gt;
&lt;p&gt;A2 :  llm 能放大我的能力，有几个人也能，一般路过的我哪有精力管&lt;/p&gt;
&lt;p&gt;A1 : 您会有和人打自心底的分享烦恼/寻求情感帮助吗？&lt;/p&gt;
&lt;p&gt;A2 : 有，不多
没有情感就不需要了
人是会分道扬镳的，习惯就好了&lt;/p&gt;
&lt;p&gt;A1 ：这一周内经历了很多，很多。仿佛把“人走茶凉” “人情冷暖” “时过境迁”，一次性看了四五年的份一般。&lt;/p&gt;
&lt;p&gt;A2 ：你会对着 llm 生气吗，他们连 llm 都不如（&lt;/p&gt;
&lt;p&gt;A1 ：我感觉自己的热忱正在一年年的消退，漠然，沉默。对游戏的，对现实里“周边人”的认知的，对家庭的，对现实的朋友的，对隔着屏幕的“朋友们”的。&lt;/p&gt;
&lt;p&gt;A2 ：好事&lt;/p&gt;
&lt;p&gt;A1 ：向往，印象，记忆，认知高度。一切仿佛都成了莫大的隔阂，把自己隔阂在现实中的周围人之外，成了脑海中不断回荡的洪钟，无时无刻的催促自己向前，向上。&lt;/p&gt;
&lt;p&gt;A2 ：我从来没在意过别人比我早学编程
也没在意过别人本科拿各种奖学金
现在他们在哪呢.jpg
既然不是一条路上的为啥要在意（&lt;/p&gt;
&lt;p&gt;A1 ：比如一些人在很小时就能接触到coding并能继续维持下去，而我接触时间很早但那时只能写题和做题家&lt;/p&gt;
&lt;p&gt;A2 ：你都只喜欢技术了，自己给技术多交点 pr
有啥嫉妒的。。你现在也可以 coding（&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;没有价值的交际圈不重要，不必理睬太多的辱殆，看清自己的前路就好。&lt;/p&gt;
&lt;p&gt;我该继续向前了，谢谢您。&lt;/p&gt;
&lt;h3&gt;2025-11-10 17:55&lt;/h3&gt;
&lt;p&gt;久违&lt;/p&gt;
&lt;p&gt;当了两周的科研牛马，发现这并不是我应该走的路，以及这条路对我这种大陆下层阶层的人来说是走不通的。既不是不够努力，也不是没有能力，而是很简单也很现实的...“你不行”。世界上有很多光辉的路，但那并不是给你我准备的，从出生开始，就没有走那些路的“资格”。&lt;/p&gt;
&lt;p&gt;听到了室友昨天关于出国旅游的一些聊天www...出身终究是出身，投胎也是门技术。我出生到现在，似乎一次完整的旅游都没有过，唉。。。缩在小小的工位，睡着小小的床，抱着小小的电子设备。说的好听点，是计算机大佬，是明确己道。说的直白点，就是这辈子只配，也只能配活在数字构建的虚拟中，一辈子也没有离开的资格，唉。。。朋友终是狼藉散尽的宴席；亲人在高阶层时是“亲情”，低阶层时连交流的必要都没有；恋人...至少我或许没有资格吧。&lt;/p&gt;
&lt;p&gt;我心眼很小，当我看到他人获得了自身“德不配位”的好东西时，脑海中总会忍不住的盘旋：“凭什么...？”。我敬仰羡慕那些凭借自己，达到自己应得成就的人，但极端畸形的嫉妒、怨憎那些得到不该有享受的人，明明我如今得到的很多东西也是“幸运”的一部分，但至少是真正的“幸运”。&lt;/p&gt;
&lt;p&gt;想法发生了一些改变：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A1: 这些近乎于系统层和架构的东东，如果我不满足于仅仅只“照猫画虎，llm照着做”，而希望明白自己在这期间做了什么，对整个架构有什么意义，在其中发挥了什么作用，我该从哪里开始学起或者了解起（？&lt;/p&gt;
&lt;p&gt;A1: 怎么说呢。。。有一种，这才是计算机和软件架构的本质的感觉，而不是那种web冗余的样式，和用框架去写一个又一个思路近乎一致的webapp&lt;/p&gt;
&lt;p&gt;A1: ww，想法发生了些改变，不过似乎没有用，因为我的现实境况似乎只能从前端开始攒简历，没什么选择余地&lt;/p&gt;
&lt;p&gt;A2: 有个叫 llm.c 的项目&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ww，与同一个世界的人际交际毫无意义，与同世界不同阶层的人交际不是为了获利就是为了讨好，与同世界同阶层的人交际可遇不可求，往往碰上也只是提防和警惕。&lt;/p&gt;
&lt;p&gt;「我思我想皆为过去所定，我行我为尽是未来所鸣」&lt;/p&gt;
&lt;p&gt;啧，颈肌痉挛的问题对长坐的影响太大了，周三还得去做磁共振&lt;/p&gt;
&lt;p&gt;家庭的漠视与无能，却要我自己的身体留下病根来弥补，到头来谁会关心我hh，只不过会嘲笑我缺乏运动和偷懒罢了，说的好像他们愿意交出自己幸福轻松的中学和温馨体贴的家庭似的，可笑。天宫上的天龙人，怕是这辈子都没见过什么是真正的“下水道”和无能为力吧。真想全部夺走啊。。那些遥不可及，每次噩梦中都羡慕的幸福。&lt;/p&gt;
&lt;p&gt;HDU-CS-WIKI&lt;/p&gt;
&lt;p&gt;Chapter: CSS basic&lt;/p&gt;
&lt;h3&gt;2025-11-13 22:05&lt;/h3&gt;
&lt;p&gt;哦天，让我一个大二直接速通毕设+论文吗（）&lt;/p&gt;
&lt;p&gt;不知道该说感谢这位博导能记得我需要大三四跑路实习 还是该说他对我期望有点离谱了（x&lt;/p&gt;
&lt;p&gt;git graph一下子空了好几周，有点难受&lt;/p&gt;
&lt;h3&gt;2025-11-17 21:56&lt;/h3&gt;
&lt;p&gt;时间过得好快（&lt;/p&gt;
&lt;p&gt;每天不刷下git graph总感觉缺了点什么（）不过这几天学校琐碎事务太多，都没啥空好好耐下心来完整的看doc,唉。。。&lt;/p&gt;
&lt;p&gt;感觉越来越缺“时间”了&lt;/p&gt;
&lt;h3&gt;2025-11-19 21:41&lt;/h3&gt;
&lt;p&gt;complete &lt;code&gt;CSS at-rules&lt;/code&gt; in mdn&lt;/p&gt;
&lt;p&gt;follow hdu-wiki frontend fast-completion tutorial&lt;/p&gt;
&lt;p&gt;coding by hand is more important then reading, maybe i need try self-test project of roadmap.sh&lt;/p&gt;
&lt;h3&gt;2025-12-8 17:43&lt;/h3&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;读完了一篇近七十岁活化石级别hacker的&lt;a href=&quot;http://www.catb.org/~esr/faqs/hacker-howto.html&quot;&gt;文章&lt;/a&gt;，与某些前辈交流，反思了很多自己不足的地方。我不得不承认的是，我此前的很多想法有些肤浅了，在 llm 高速发展的现状下，我或许不应该用那么多不必要的时间和精力去细究于使用各式各样花俏的框架，而应当去沉思「框架的如何去优化和底层如何实现某个功能」，「如何更好的编程」，「整套业务逻辑是由什么组成的」，只学原理，不背语法(syntax)/标准(spec)。&lt;/p&gt;
&lt;p&gt;&amp;lt;details&amp;gt;
&amp;lt;summary&amp;gt;对于路线的一些变更&amp;lt;/summary&amp;gt;&lt;/p&gt;
&lt;p&gt;给初学者的建议：不要只学“语法”，要学“体系”&lt;/p&gt;
&lt;p&gt;许多人对前后端 尤其前端感到的“失去意义”，是因为把前端理解为 UI切图 (Styling &amp;amp; Layout)。没错，写CSS、调布局、写简单的点击事件，这部分工作确实会被AI吞噬90%。&lt;/p&gt;
&lt;p&gt;前端真正的未来在哪里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;向深处走： 钻研语言底层、浏览器原理、安全攻防。做那个能解决AI解决不了的Hardcore Bug的人。&lt;/li&gt;
&lt;li&gt;向宽处走： 学习Node.js、数据库、部署。把自己变成一个能独立完成产品的工程师，而不仅仅是“写界面的”。&lt;/li&gt;
&lt;li&gt;向高处走： 学习编译原理、工程化架构。搭建高效的开发环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;AI看不懂混淆代码 -&amp;gt; 所以逆向工程依然值钱。&lt;/p&gt;
&lt;p&gt;AI不会设计新的工具链 -&amp;gt; 所以造轮子依然值钱。&lt;/p&gt;
&lt;p&gt;AI不懂业务怎么拆分微服务 -&amp;gt; 所以架构设计依然值钱。&lt;/p&gt;
&lt;p&gt;AI写的代码性能一般 -&amp;gt; 所以底层优化依然值钱。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:::important
如果你只学怎么“开车”（写代码语法），那自动驾驶来了你就失业了。但如果你学的是机械原理（底层/工具链）、交通规划（架构/全栈）或者特种驾驶（安全/逆向），那你永远是控制方向盘的那个人。
:::&lt;/p&gt;
&lt;p&gt;总结：&lt;/p&gt;
&lt;p&gt;不要再去学怎么“手写一个导航栏”了，那是上个时代的技能。&lt;/p&gt;
&lt;p&gt;现在的学习路径应该是：用AI帮你快速把页面搭起来，然后把节省下来的时间，全部投入到 JS运行机制、浏览器原理、网络协议、算法、以及复杂的业务架构设计中去。&lt;/p&gt;
&lt;p&gt;LLM（尤其是Gemini3p、Claude4.1、GPT-codex等）并没有让前端消失，但它极其残忍地铲除了前端开发中那些“只靠记忆和体力”就能完成的领域。&lt;/p&gt;
&lt;p&gt;对于初学者和就业者来说，以下这四个曾经可以用来谋生的领域，现在已经基本被&lt;strong&gt;摧毁&lt;/strong&gt;了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;“切图仔”模式 (The PSD-to-HTML Era is Over)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;曾经的价值： 设计师给一张Figma/PSD图，开发者手写HTML/CSS把它还原出来，处理一下Margin、Padding、Flex布局。&lt;/li&gt;
&lt;li&gt;现在的状况： 彻底毁灭。
&lt;ul&gt;
&lt;li&gt;工具如 v0.dev、Screenshot-to-Code 甚至直接把截图扔给 Claude/Gemini，它们能在几秒钟内生成完美的 Tailwind CSS 代码。&lt;/li&gt;
&lt;li&gt;就业影响： 如果你的作品集里还在展示“我能完美还原一个静态网页”，这在面试官眼里约等于毫无价值。因为老板一个月花20美元订阅AI，干得比你快100倍。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;“API 搬运工” (CRUD Boilerplate)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;曾经的价值： 写一个表单，验证一下手机号格式，调用一下后端API，把数据显示在列表里。这是过去初级前端80%的工作内容。&lt;/li&gt;
&lt;li&gt;现在的状况： 极度贬值。
&lt;ul&gt;
&lt;li&gt;现在的IDE（如Cursor）可以直接根据注释生成整个 fetch 请求、Loading状态处理、错误捕捉。&lt;/li&gt;
&lt;li&gt;就业影响： 公司不再愿意招一个初级员工来写这些“样板代码”。以前招初级是为了给高级打下手，写写简单的页面；现在高级工程师+AI，一个人就能把这些杂活干完。“初级工程师”这个岗位的坑位正在剧烈收缩。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;“文档背诵型”技能 (Syntax Memorization)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;曾经的价值： 面试时问“CSS居中有几种写法？”“JS数组去重怎么写？”“Webpack怎么配置？”&lt;/li&gt;
&lt;li&gt;现在的状况： 毫无意义。[4][6]
&lt;ul&gt;
&lt;li&gt;没人需要背这些了。以前你必须是个活字典，现在AI是全知全能的百科全书。哪怕你忘了怎么写 Reduce，敲两个字母AI就给你补全了。&lt;/li&gt;
&lt;li&gt;就业影响： 面试考察重点从“你会写这个语法吗？”变成了“这段AI生成的代码为什么跑不通？”或者“这段代码有性能陷阱，你能看出来吗？”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;低端的外包与仿站 (Low-end Outsourcing)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;曾经的价值： 接私活，帮小餐馆做一个点餐页，帮小公司做一个展示站。&lt;/li&gt;
&lt;li&gt;现在的状况： 被SaaS和AI生成器吞噬。
&lt;ul&gt;
&lt;li&gt;以前需要找你花几千块钱做的事，现在用无代码平台+AI文案+AI配图，普通人一下午就能搞定。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对初学者的残酷真相：你需要跨越“新手村陷阱”&lt;/p&gt;
&lt;p&gt;现在最可怕的不是AI能写代码，而是AI给初学者制造了一种“我会写代码”的幻觉。&lt;/p&gt;
&lt;p&gt;新手村陷阱： 你用AI生成了一个看起来很酷的网站，你觉得你入门了。
现实： 一旦业务逻辑变得复杂（比如涉及到权限管理、复杂的并发处理、Canvas绘图），或者代码出了诡异的Bug，AI就开始“胡说八道”了。这时候如果你没有深厚的功底，你连改都不知道从哪改。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;“跳过html/css”不等于“不学”，而是从“学习如何手写”转变为“学习如何原理性理解和调试”。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你完全跳过 HTML/CSS/Tailwind，直接去搞 JS/TS 和业务，你不会成为“架构师”，你会成为一个**“跛脚的盲人”**。因为 AI 生成的界面一旦稍微错位（比如 flex 布局挤压了，z-index 遮挡了），如果你不懂 CSS 盒子模型和层叠上下文，你连让 AI 怎么改都描述不清楚。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;你要跳过的不是“知识本身”，而是“机械记忆的过程”。&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;1. HTML/CSS：从“手写”转为“审视/review”&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;以前的笨办法（要跳过）：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;花费两周时间死记硬背 &lt;code&gt;grid-template-areas&lt;/code&gt; 的语法。&lt;/li&gt;
&lt;li&gt;手写几千行 CSS 来练习如何实现一个复杂的导航栏动画。&lt;/li&gt;
&lt;li&gt;背诵 Tailwind 的所有类名（比如 &lt;code&gt;pt-4&lt;/code&gt; &lt;code&gt;mx-auto&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;现在的加速法（必须学）：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;核心概念必须懂：&lt;/strong&gt; 什么是&lt;strong&gt;盒子模型 (Box Model)&lt;/strong&gt;？什么是&lt;strong&gt;文档流 (Flow)&lt;/strong&gt;？&lt;code&gt;flex&lt;/code&gt; 和 &lt;code&gt;grid&lt;/code&gt; 的布局逻辑是什么（主轴/交叉轴）？&lt;code&gt;position: absolute/relative/fixed&lt;/code&gt; 的参照物是谁？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习方式：&lt;/strong&gt; 让 AI 生成一个布局，然后打开 &lt;strong&gt;Chrome DevTools（开发者工具）&lt;/strong&gt;。
&lt;ul&gt;
&lt;li&gt;去点选那个元素，看它的 &lt;code&gt;Computed&lt;/code&gt; 属性。&lt;/li&gt;
&lt;li&gt;试着在控制台里开关那些 CSS 属性，看页面怎么崩坏，又怎么恢复。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;目标：&lt;/strong&gt; 你不需要能凭空写出完美的 CSS，但当 AI 生成的代码出现“文字溢出”、“元素无法对齐”时，&lt;strong&gt;你能一眼看出是因为漏了 &lt;code&gt;flex-shrink: 0&lt;/code&gt; 还是 &lt;code&gt;overflow: hidden&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind：&lt;/strong&gt; 了解它的&lt;strong&gt;设计哲学&lt;/strong&gt;（原子化 CSS），至于具体类名？装个插件让 IDE 提示，或者让 AI 写，不用背。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2. JS/TS：这是核心，不能跳过&lt;/h4&gt;
&lt;p&gt;JS 是逻辑的载体，&lt;strong&gt;这部分不能跳过，反而要加倍学，但侧重点不同。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;以前的笨办法（要跳过）：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;背诵 &lt;code&gt;Date&lt;/code&gt; 对象的所有格式化方法（AI 会写）。&lt;/li&gt;
&lt;li&gt;默写正则表达式来验证邮箱（AI 写得比你好）。&lt;/li&gt;
&lt;li&gt;死磕怎么用原生 JS 操作 DOM（&lt;code&gt;document.getElementById&lt;/code&gt;），现在都用框架了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;现在的加速法（必须深挖）：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;异步与事件循环 (Event Loop)：&lt;/strong&gt; 这是 AI 最容易写出 Bug 的地方。如果你不懂 &lt;code&gt;Promise&lt;/code&gt;、&lt;code&gt;async/await&lt;/code&gt;、宏任务/微任务的执行顺序，你根本修不了“数据为什么没加载出来”的问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;作用域与闭包 (Scope &amp;amp; Closure)：&lt;/strong&gt; AI 经常会写出变量污染或者内存泄漏的代码，你不懂原理就查不出来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript 类型系统：&lt;/strong&gt; &lt;strong&gt;这是重中之重。&lt;/strong&gt; 你现在不需要自己写复杂的逻辑，但你必须能定义清晰的 &lt;code&gt;Interface&lt;/code&gt; 和 &lt;code&gt;Type&lt;/code&gt;。&lt;strong&gt;TS 是你约束 AI 不乱写的契约。&lt;/strong&gt; 如果你能写出完美的类型定义，AI 就能填充出完美的逻辑代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;3. 浏览器原理与网络：&lt;/h4&gt;
&lt;p&gt;初学者往往忽视这部分，觉得“能跑就行”。但在 AI 时代，&lt;strong&gt;由于代码生成变得极其容易，性能优化和原理分析就成了稀缺能力。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;必学内容：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;渲染原理：&lt;/strong&gt; 浏览器是怎么把 HTML 变成像素的？什么是重排 (Reflow) 和重绘 (Repaint)？（懂了这个，你才能看出 AI 生成的动画是否卡顿）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络协议：&lt;/strong&gt; HTTP 缓存策略（强缓存/协商缓存）、跨域问题 (CORS)、WebSocket。当 AI 写的请求报错“CORS Error”时，你得知道这是服务器配置问题还是请求头问题，而不是只会傻傻地问 AI“为什么报错”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;4. 所谓的“业务”到底是什么？&lt;/h4&gt;
&lt;p&gt;你说“指向业务”，对于初学者来说，不要空谈“商业逻辑”，你应该关注的是**“应用架构逻辑”**。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;实战训练法（Project-Based Learning 2.0）：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;以前：&lt;/strong&gt; 对着视频教程，从头敲一个“待办事项列表”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;现在：&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;让 AI 生成一个“待办事项列表”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提出复杂需求刁难 AI&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;“我要支持本地存储，刷新不丢失。”&lt;/li&gt;
&lt;li&gt;“我要支持拖拽排序。”&lt;/li&gt;
&lt;li&gt;“如果网络请求慢了，怎么防止用户重复点击？”&lt;/li&gt;
&lt;li&gt;“如果有 10000 条待办事项，页面卡死了，怎么用虚拟滚动 (Virtual Scrolling) 优化？”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你的工作&lt;/strong&gt;：把 AI 给出的零散代码，&lt;strong&gt;组装&lt;/strong&gt;进你的项目中，处理它们之间的冲突，解决出现的 Bug。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;总结：你的新身份&lt;/h4&gt;
&lt;p&gt;不要把自己当成&lt;strong&gt;搬砖工&lt;/strong&gt;（从零堆砌代码）。&lt;/p&gt;
&lt;p&gt;要把自己当成&lt;strong&gt;包工头&lt;/strong&gt;（Code Reviewer &amp;amp; Architect）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;你需要跳过的是“搬砖的动作”，但你必须懂“砖头怎么砌才不会倒”。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML/CSS：&lt;/strong&gt; 懂原理，能读懂，能调试，不硬背。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JS/TS：&lt;/strong&gt; 精通异步、作用域、类型系统，这是你的内功。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具/原理：&lt;/strong&gt; 熟练使用 DevTools，理解浏览器和网络，这是你的透视眼。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当你看到 AI 生成的一段代码，心里想的不是“哇好神奇”，而是&lt;strong&gt;这里用 &lt;code&gt;map&lt;/code&gt; 可能会有性能问题，建议改成 &lt;code&gt;for&lt;/code&gt; 循环，而且这个样式在 Safari 上可能会错位，我得加个前缀&lt;/strong&gt;——这时，你就走出了新手村陷阱。&lt;/p&gt;
&lt;p&gt;不要因为名词多就害怕。前端其实就三块大石头：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;JS 语言本身（闭包、原型、异步）&lt;/li&gt;
&lt;li&gt;浏览器环境（DOM、事件、渲染、存储）&lt;/li&gt;
&lt;li&gt;网络协议（HTTP、跨域）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其他的（如虚拟滚动、Webpack、Axios）都只是基于这三块石头长出来的花草。先把石头摸透，花草随用随学。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;关于CSS：&lt;/p&gt;
&lt;p&gt;如果你完全不懂 CSS，AI 生成的代码一旦布局错乱（比如按钮被挡住了、手机上排版炸了），你连问题出在哪里都不知道，更别提让 AI 修复了。&lt;/p&gt;
&lt;p&gt;你需要“大致看”的 20% 核心内容（能解决 80% 的问题）：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;盒模型 (Box Model) —— 必看
&lt;ul&gt;
&lt;li&gt;搞懂： &lt;code&gt;margin&lt;/code&gt;（外边距）、&lt;code&gt;padding&lt;/code&gt;（内边距）、&lt;code&gt;border&lt;/code&gt;（边框）、&lt;code&gt;content&lt;/code&gt;（内容）。&lt;/li&gt;
&lt;li&gt;为什么： 这是网页布局的原子。不懂这个，你永远调不对元素的大小和间距。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;布局 (Layout) —— 必看
&lt;ul&gt;
&lt;li&gt;搞懂： &lt;code&gt;Flexbox&lt;/code&gt;和 &lt;code&gt;Grid&lt;/code&gt; 。&lt;/li&gt;
&lt;li&gt;重点： 只要懂 &lt;code&gt;justify-content&lt;/code&gt; (主轴对齐) 和 &lt;code&gt;align-items&lt;/code&gt;(交叉轴对齐) 以及 &lt;code&gt;flex-direction&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;为什么： 现代网页 99% 的排版都是靠这两个实现的。AI 经常会把对齐搞反，你得能一眼看出来。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;定位上下文 (Positioning) —— 选看
&lt;ul&gt;
&lt;li&gt;搞懂： &lt;code&gt;relative&lt;/code&gt; (相对) 和 &lt;code&gt;absolute&lt;/code&gt; (绝对) 的关系。&lt;/li&gt;
&lt;li&gt;为什么： 当你要做“右上角的关闭按钮”或者“悬浮弹窗”时，不懂这个就会导致元素满屏幕乱飞。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;单位 (Units) —— 扫一眼
&lt;ul&gt;
&lt;li&gt;内容： &lt;code&gt;px&lt;/code&gt; (像素)、&lt;code&gt;rem&lt;/code&gt; (相对于根元素字体)、&lt;code&gt;vh/vw&lt;/code&gt; (视口百分比)。&lt;/li&gt;
&lt;li&gt;理由： 知道 100vh 就是“占满整个屏幕高度”就行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tailwind CSS —— 推荐作为“默认语言”
&lt;ul&gt;
&lt;li&gt;怎么处理： 不需要刻意去学 CSS 原始语法，直接上手 Tailwind。&lt;/li&gt;
&lt;li&gt;理由： Tailwind 本质上是把 CSS 变成了“语义化的类名”（比如 &lt;code&gt;flex&lt;/code&gt; &lt;code&gt;items-center&lt;/code&gt; &lt;code&gt;p-4&lt;/code&gt;）。这非常适合 AI 生成，也适合人类阅读。你只需要让插件在编辑器里提示你就行，不用背。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;坚决不需要看的内容&lt;/strong&gt;（让 AI 做）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;复杂的 CSS 动画 (@keyframes)。&lt;/li&gt;
&lt;li&gt;媒体查询的具体断点写法 (Media Queries)。&lt;/li&gt;
&lt;li&gt;为了兼容 IE 浏览器的各种 Hack 写法。&lt;/li&gt;
&lt;li&gt;CSS 预处理器 (Sass/Less) 的复杂函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以直接跳过（让 AI 做）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grid 布局（初学者用 Flex够了，复杂的给 AI）。&lt;/li&gt;
&lt;li&gt;float 浮动（过时了，别看）。&lt;/li&gt;
&lt;li&gt;animation / transition 动画细节（AI 写得比你顺滑）。&lt;/li&gt;
&lt;li&gt;复杂的选择器权重计算（碰到样式不生效再查）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于后端切入：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;绝对不要&lt;/strong&gt;在初学阶段并行学习 golang 或 jv。直接死磕 JS -&amp;gt; ES6 -&amp;gt; TS，然后用 Node.js 切入后端。&lt;/p&gt;
&lt;p&gt;为什么不要并行学 Golang？&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;认知过载： JS 是基于原型的异步语言，Golang 是强类型的同步并发语言。两者的编程思维（Paradigm）完全不同。初学者同时学两套，会导致你“走火入魔”，最后两边都学不精。&lt;/li&gt;
&lt;li&gt;JS 的全栈红利： JavaScript 是目前唯一一门**既能写前端（浏览器），又能写后端（Node.js），还能写数据库脚本（MongoDB）**的语言。&lt;/li&gt;
&lt;li&gt;效率最大化： 您现在的目标是“懂业务架构”。用 Node.js (NestJS/Express) 写后端，您可以复用你刚刚学会的 JS/TS 语法，把精力集中在“数据库设计、API 鉴权、微服务架构”这些核心业务逻辑上，而不是浪费在学习 Golang 的语法（如 &lt;code&gt;if err != nil&lt;/code&gt;）上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重原理，轻记忆：&lt;/strong&gt; 语法（Syntax）可以通过 AI 生成，但运行机制（Runtime Mechanism）和内存模型必须通过人脑理解。不懂原理将无法调试 AI 产生的复杂 Bug。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工程化思维：&lt;/strong&gt; 从学习的第一天起，就要以“构建系统”而非“编写脚本”的思维要求自己。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;阶段一：JavaScript 核心机制（ES6+ 现代标准）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 跳过过时语法，直接掌握现代写法，理解数据在内存中的表现。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;变量与内存模型：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;let&lt;/code&gt; 和 &lt;code&gt;const&lt;/code&gt;，彻底废弃 &lt;code&gt;var&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心难点：&lt;/strong&gt; 引用类型与堆栈内存。理解为什么修改一个对象的属性会导致引用的源对象也发生变化（浅拷贝与深拷贝的区别）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据处理：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;放弃低效的 &lt;code&gt;for&lt;/code&gt; 循环，熟练掌握数组的高阶方法：&lt;code&gt;map&lt;/code&gt; (转换)、&lt;code&gt;filter&lt;/code&gt; (筛选)、&lt;code&gt;reduce&lt;/code&gt; (聚合)。这是数据驱动开发的核心。&lt;/li&gt;
&lt;li&gt;解构赋值：熟练使用 &lt;code&gt;const { data } = response&lt;/code&gt; 提取数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;函数与作用域：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;对比普通函数与箭头函数 (&lt;code&gt;=&amp;gt;&lt;/code&gt;)。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心难点：&lt;/strong&gt; 理解 &lt;code&gt;this&lt;/code&gt; 指针的动态绑定机制，以及闭包 (Closure) 产生的变量生命周期问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;阶段二：异步编程与事件循环（攻坚重点）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 跨越新手与工程师的分水岭。这是 AI 最容易出错、最难调试的领域。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;运行机制：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;理解 JavaScript 的单线程特性与 Event Loop (事件循环)。&lt;/li&gt;
&lt;li&gt;区分宏任务 (Macro-task) 与微任务 (Micro-task) 的执行顺序。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;异步工具：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Promise：&lt;/strong&gt; 理解 Pending、Fulfilled、Rejected 三种状态流转。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Async/Await：&lt;/strong&gt; 必修课。学习如何用同步的代码结构编写异步逻辑，消除回调地狱。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实战场景：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;fetch&lt;/code&gt; 进行网络请求，处理竞态问题（Race Condition）和错误捕获（Try/Catch）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;阶段三：TypeScript 工程化（职业护城河）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 给代码加上强类型约束。从这一刻起，停止编写脚本，开始构建工程。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类型系统基础：&lt;/strong&gt; 掌握 string, number, boolean 等基本类型，尽量避免使用 &lt;code&gt;any&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;接口与类型别名：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;Interface&lt;/code&gt; 描述数据结构（例如后端返回的 JSON 格式）。&lt;/li&gt;
&lt;li&gt;利用 IDE 的智能提示减少拼写错误和逻辑漏洞。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;泛型 (Generics)：&lt;/strong&gt; 理解 &lt;code&gt;Array&amp;lt;T&amp;gt;&lt;/code&gt; 和 &lt;code&gt;Promise&amp;lt;T&amp;gt;&lt;/code&gt; 的含义，即“参数化的类型”。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;阶段四：浏览器环境与运行时&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 理解代码运行的“容器”。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DOM 与事件：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;理解事件冒泡 (Bubbling) 与事件捕获 (Capturing) 机制，掌握事件委托 (Event Delegation)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据持久化：&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;区分 &lt;code&gt;localStorage&lt;/code&gt; (持久)、&lt;code&gt;sessionStorage&lt;/code&gt; (会话) 和 &lt;code&gt;Cookie&lt;/code&gt; 的应用场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;阶段五：后端架构与全栈延伸（Node.js）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;目标：&lt;/strong&gt; 利用语言同构优势，切入后端业务架构。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;技术栈迁移：&lt;/strong&gt; 不学习新语言，直接使用 TypeScript 配合 &lt;strong&gt;NestJS&lt;/strong&gt; 或 &lt;strong&gt;Koa&lt;/strong&gt; 框架开发后端。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务核心：&lt;/strong&gt; 将精力集中在 HTTP 协议理解、数据库设计 (SQL/NoSQL)、API 鉴权 (JWT) 以及 Docker 容器化部署上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;架构思维：&lt;/strong&gt; 学习如何设计高可用的微服务架构，而非纠结于简单的 CRUD 实现。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;小巧思：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;每一个概念（如闭包、原型链），先让 AI 举生活中的例子建立直观认知，然后立刻在浏览器控制台中编写代码验证，最后分析内存和执行栈的变化。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;认知陷阱：&lt;/strong&gt; 在未精通 JS/TS 体系前，切勿分心学习其他后端语言，以免造成思维混乱和效率降低。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;/details&amp;gt;&lt;/p&gt;
&lt;p&gt;大学转专业成功，转行去web后端了。&lt;/p&gt;
&lt;p&gt;本篇至此封章，一路走来 学了不少又似乎什么都没学。&lt;/p&gt;
&lt;p&gt;老师说，我不喜欢前端，尤其不喜欢样式。&lt;/p&gt;
&lt;p&gt;望读者谨记：&lt;/p&gt;
&lt;p&gt;&amp;lt;pre&amp;gt;
&amp;lt;b&amp;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;
&lt;p&gt;你想做什么&lt;/p&gt;
&lt;p&gt;你做这一切的目的是什么&lt;/p&gt;
&lt;p&gt;在这直通皓月的深海里，唯有你所欲所求，才能作为灯塔，定下前行的道标
&amp;lt;/b&amp;gt;
&amp;lt;/pre&amp;gt;&lt;/p&gt;
&lt;p&gt;Best wishes.&lt;/p&gt;
</content:encoded></item></channel></rss>