SMTP
2025-05-31
stateDiagram-v2
[*] --> Connected
Connected --> AwaitingGreeting: TCP连接建立
# 协议握手阶段
AwaitingGreeting --> HelloCommand: 收到220后发送EHLO
HelloCommand --> TLS_Decision: 解析250扩展
# 加密与认证决策
TLS_Decision --> TLS_Handshake: 需要STARTTLS
TLS_Handshake --> HelloCommand: 加密后重发EHLO
TLS_Decision --> Auth_Decision: 无需TLS
Auth_Decision --> AUTH_Login: 需要认证
AUTH_Login --> MailFromCommand: 认证成功
Auth_Decision --> MailFromCommand: 无需认证
# 邮件传输流程
MailFromCommand --> RcptToCommand: 收到250后发送RCPT TO
RcptToCommand --> DataCommand: 收到250(最终收件人)后发送DATA
DataCommand --> Data: 收到354后发送邮件内容
Data --> QuitCommand: 收到250后发送QUIT
QuitCommand --> Disconnected: 收到221断开连接
Disconnected --> [*]
# 统一错误处理
state ErrorHandler <<choice>>
HelloCommand --> ErrorHandler: 错误响应
MailFromCommand --> ErrorHandler: 错误响应
RcptToCommand --> ErrorHandler: 错误响应
DataCommand --> ErrorHandler: 错误响应
Data --> ErrorHandler: 错误响应
ErrorHandler --> RSETCommand: 可恢复错误
RSETCommand --> MailFromCommand: 重置到发件人状态
ErrorHandler --> Disconnected: 致命错误
Git
2025-05-26
看了 《How Core Git Developers Configure Git》,作者建议配置应该尽可能简单一些,不要使用 alias 定义别名。
最后作者也提供了一些他建议配置的条目,我在这个基础上做了一点调整(想要原版去上面的链接里面找),如下:
# clearly makes git better
[column]
# 自动分栏(比如列出分支的时候,会按照屏幕宽度自动分栏显示)
ui = auto
[branch]
# 按照最新提交时间排序
sort = -committerdate
[tag]
# 默认按字母排序不是好的选择,比如:
# v0.1
# v0.10
# v0.2
sort = version:refname
[init]
defaultBranch = master
[diff]
algorithm = histogram
colorMoved = plain
mnemonicPrefix = true
renames = true
[push]
default = simple
autoSetupRemote = true
followTags = true
[fetch]
prune = true
pruneTags = true
all = true
# why the hell not?
[help]
autocorrect = prompt
[commit]
verbose = true
[rerere]
enabled = true
autoupdate = true
[core]
excludesfile = ~/.gitignore
[rebase]
autoSquash = true
autoStash = true
updateRefs = true
# a matter of taste (uncomment if you dare)
[core]
# fsmonitor = true
# untrackedCache = true
[merge]
# (just 'diff3' if git version < 2.3)
# conflictstyle = zdiff3
[pull]
# rebase = true
WebDev
2025-05-26
开发工具
2025-05-24
几年前就用过 sunny,这次因为一些特殊场景又要用到网络穿透,又捡起来了。
- 先在他们官网上创建隧道(选择本地地址,还有远程端口)
- 下载 sunny 程序(他们定制的 ngrok 客户端)
- 执行他们隧道管理页面提供的命令 sunny --server=free.idcfengye.com:4443 --key=xxxx 就行了
如果临时使用一下的话,nuhup + & 就够:
nuhup sunny --server=free.idcfengye.com:4443 --key=xxx &
如果要求更高,那就用 systemd 保活:
sudo vim /etc/systemd/system/sunny-eqr.service
sudo chmod 644 /etc/systemd/system/sunny-eqr.service
sudo systemctl enable sunny-eqr.service
sudo systemctl start sunny-eqr.service
sudo systemctl status sunny-eqr.service
需要吧把注删除
[Service]
ExecStart=/home/catroll/Documents/Mine/sunny --server=free.idcfengye.com:4443 --key=xxx
Restart=always
RestartSec=3
# 每10秒检查一次 (程序不支持 watchdog 协议)
# WatchdogSec=10
# 启动前等待2秒
ExecStartPre=/bin/sleep 2
# 自定义停止命令
ExecStop=/usr/bin/pkill -f sunny
# 限制最大内存使用
MemoryMax=512M
# 限制CPU使用率
CPUQuota=80%
先配置 ssh 证书信任,然后就关闭密码登录,后续就通过证书认证。
# 将自己的公钥配置到服务器上(在本地执行)
ssh-copy-id -i /path/to/id_rsa -p 10022 admin@free.idcfengye.com
# 修改服务器 ssh 配置(在服务器执行)
# PermitRootLogin no
# PasswordAuthentication no
sudo vim /etc/ssh/sshd_config
sudo systemctl restart sshd
# 测试链接情况(在本地执行)
ssh -i /path/to/id_rsa -p 10022 admin@free.idcfengye.com
DB
2025-05-22
个人
2025-05-19
抖音上刷到一个视频(心理医生老秦):
家庭的第一原理是经济,而不是感情
职场的第一原理是功劳,而不是苦劳
人脉的第一原理是资源互换,而不是卑微讨好
爱情的第一原理是筛选,而不是培养
健康的第一原理是自我管理,而不是医疗
养老的第一原理是金钱,而不是医疗
我又搜索到了这一篇 人性的第一性原理
结合我自己的认知,总结如下:
最重要的事:
- 家庭 -> 经济基础 + 感情经营
- 爱情 -> 互相尊重、互相理解
- 职场 -> 功劳 + 苦劳,我的定位是什么,我为团队带来了什么,我是不是不可替代
- 人脉 -> 价值互换(可能有点功利,但是确实比真诚、善良等优秀品质更可靠、更持久)
- 养老 -> 提前规划(财务储备) + 健康管理 + 心态调整(知足常乐)
- 健康 -> 自律 + 医疗
- 教育 -> 不迷信(独立思考) + 知识积累 + 实践迭代(实践->总结->改进 循环)
我认为好的做事方法:
- 用心做事,以诚待人。
- 要深入思考事情的核心,不要被表面上不那么重要的事情所蒙蔽。
- 方法论:
- 制度设计:要能够围绕一个目标形成一个正向循环,而不是指望单方面持续投入。
- 优先级管理。
第一原理
又叫第一性原理,希腊哲学家亚里士多德提出,指那些不言而喻的真理,整个理论系统的基础。
希腊哲学家亚里士多德提出。
马斯克在采访中提到“第一原理思维”(first principle thinking),是一种从根本出发,追问事物本质的思维方式。
大概是指人们做事总是习惯看着前人的脚步,在其基础之上做一些小的创新。
而在做革命性事业时,需要抛开前人的经验,不要被那些“前提条件”所阻碍,从最根本的问题开始思考。
“电池组太贵了,每千瓦时要 600 美元。但如果根据构成电池的原料价格计算成本,你会发现其实只需每千瓦时 80 美元。那么一定有办法把这些材料组合成电池,并大幅降低成本。”
“火箭是由什么材料组成的?航空级铝合金、钛、铜、碳纤维… 如果把这些材料按市场价计算,成本只有传统火箭价格的 2%。所以问题在于,如何将这些材料组装成一枚火箭。”
阅读 管理
2025-05-07
原则读后感 - 如何考核?
以考核为关键词,搜索到 “用对人” 这一章中 9.5 / 9.6 两小节,笔记如下:
- 必须建立在数据的基础上,不要做主观判断
- 问题是缺少数据支撑 -- 重要改进方向!!!
- 在长期累积的数据中寻找规律,不要依据孤立的事件给人下定论
- 规则透明、数据公开
- 持续反馈、持续考核(不要事后算总账) -- 重要改进方向!!!
- 员工自评与管理者评价对比,共同确认之间的 Gap,通过数据和第三方来验证
- 以帮助者,而非审判者的心态,在考核中协助员工找到问题,获得解决方法
- 每周周会上让大家对本周最重要的工作进行分享,至少 5 分钟,然后以此作为后续的考核依据
- 针对这项工作必须当面给出评价,当场记录
- 指出的问题要有配套的改进措施
历史
2025-05-01
案件背景:1931年底,因顾顺章等高级领导人叛变,上海临时中央处境危险。于是,井冈山苏区(毛泽东任主席)向上海第二临时党中央紧急支援120两黄金(来自瑞金中央苏区“打土豪”没收的黄金首饰)作为"特别经费"。这笔经费由地下交通员秘密转运,采用分段交接、凭"快"字木刻笔画为凭证的方式运送。
1935年,顾顺章因涉及中央调查统计局与军事委员会调查统计局矛盾、组建“新共产党”触犯蒋中正忌讳而被中国国民党处死。
案件发生:1931年12月,经费在松江至上海段的转运中神秘失踪,负责最后一程的地下交通员梁壁纯连同黄金一起消失。这导致上海临时中央经费严重短缺,九名被捕同志未能及时营救而牺牲,多项革命工作受挫。
初期调查:苏区政治保卫局发现"快"字最后一笔未送达,判断问题出在松江至上海段。但由于当时处于白色恐怖环境,调查难以开展,案件不了了之。
重启调查:1949年新中国成立后,公安部罗瑞卿按毛主席要求调查这桩历史悬案。上海市公安局成立"悬案调查办公室",第三组负责此案。侦查员通过走访林伯渠、高自立等老同志,逐步追踪到交通线各环节。
侦查过程:侦查员找到杭州交通员刘志纯,确认他在松江将黄金交给一个穿黑色棉袍的男子(梁壁纯)。经调查发现梁壁纯是上海"祥德源"药铺的药工,1931年12月出差松江后神秘失踪。
真相大白:1950年3月,侦查员在浦东洋泾镇找到化名申继谷的梁壁纯。梁壁纯交代:他在曹家渡桥头被两个推车人用迷药毛巾捂晕,醒来后发现装黄金的小皮箱丢失。因担心无法向组织交代,他伪造失踪,隐姓埋名成为钟表匠。
案件侦破:通过提篮桥监狱在押犯冯安宝的检举,侦查员锁定嫌疑人吉良贵(冯安宝表哥,当年大额财产来路不明)。1950年5月,吉良贵被捕,交代了与同伙刘阿古、庄克(三人是发小)作案经过。他们在曹家渡桥头假装帮推黄包车,用迷药抢劫了梁壁纯。他们当时不知道梁壁纯身上有这么大笔钱,也更不清楚这笔钱的来路,后面三人平分了这 12 根金条。
案件结局:1950年11月,吉良贵、刘阿古以抢劫罪被判处死刑;梁壁纯以"历史反革命罪"被判十年徒刑(两年后释放);检举人冯安宝和提供线索的旧刑警曾某因立功获释。这起历时十九年的悬案最终告破。
被劫的黄金去向:
- 吉良贵手上的 4 根黄金挥霍了。
在对吉良贵的住所和店铺进行搜查时,发现了白铜盒一个,经梁壁纯与刘志纯辨认,正是当年装纳“特费”黄金的容器。
- 庄克参加国军,30 年代末死于抗日战争,他手上的 4 根黄金不知去向。
- 刘阿古手上的 4 根黄金都还在,被打造为首饰,最后被公安机关予以没收。
1931年4月24日,中央特科重要领导人之一,顾顺章在汉口被国民政府抓获并叛变。
由于顾顺章自恃握有大批中共机密,要求面见国民党高官后,方可透露,用以自抬身价。国民政府汉口当局不得已用军舰将顾顺章送往南京,并且发电文至上海通知徐恩曾。
恰好此时徐恩曾不在,钱壮飞利用其掌握的密码本译出电文,立即派人赶往上海,在顾顺章供出中共所有重要领导人名单,住址,活动地点之前,将消息通知在上海的中共中央;此举使得中共中央避免了毁灭性的打击。
钱壮飞因顾顺章事件而暴露身份,转移去中央苏区。
在长征途中,钱壮飞失踪,有说法称其在侦察途中被当地民团杀害,有说法称被国民党特工认出而遭杀害,甚至有说法称其因故遭中共内部谋杀。说法不一而足,现史学界比较倾向于采用第一种说法。
1931年5月,核实顾顺章叛变后,特科对顾顺章全家9口实施了灭门处决,尸体被秘密掩埋,仅留下3岁的女儿和12岁的妻弟张长庚。
9月,特科人员王世德在街上骑车,被张长庚认出,揪住不放,旋即被跟踪的特务逮捕。被捕后王世德招供出顾家下落,并带上海法租界人员和国民党特务去掘尸,成为轰动上海乃至国内的“爱棠新村掘尸案”。
TLS
2025-04-24
硬件
2025-04-18
苹果电脑的芯片发展可以分成三个阶段:
- 1994 年到 2005 年:使用 IBM 的 PowerPC 架构
- 2006 年到 2020 年:改用 Intel 的 x86 架构
- 2020 年底开始:全面转向自研的 ARM 架构 M 系列芯片(M1 ~ M4)
苹果肯定是觉得 Intel 做的不好,然后选择更加开放的 ARM 标准做魔改。
看到网上的评价,应该是非常成功的,移动设备的功耗 + 桌面设备的性能,并且比传统的 CPU 更加面向未来。
1. 架构不同:ARM vs x86
M 系列基于 ARM 架构,强调低功耗高效能;而传统 Intel / AMD 芯片是 x86 架构,更强调通用计算能力。
ARM 原本是移动端主流架构,苹果通过深度优化,做出了媲美甚至超越传统 PC 的性能,同时拥有更长续航。
拓展阅读:网易号,Apple M4 成为新单核性能冠军,击败英特尔的 Core i9-14900KS
2. SoC 设计:高度集成
M 系列采用 SoC(System on a Chip)设计,把 CPU、GPU、NPU(神经网络引擎)、内存控制器等都集成在一颗芯片中,减少延迟、提高带宽。传统 PC 芯片大多是分散式设计,效率和功耗控制上不如 SoC。
3. 统一内存架构(UMA)
M 系列的 CPU 和 GPU 共享同一套高速内存,数据无需来回搬运,适合图形、视频、AI 场景。传统 PC 中,CPU 和 GPU 使用不同内存,需要频繁复制数据。
阮一峰的《科技爱好者周刊(第 345 期)》中是这么说的:
大芯片指的是 CPU、GPU、内存封装在一块芯片里面,典型代表是苹果的 M 系列芯片。
这种设计使得 CPU 和 GPU 共享内存,并且有极大的内存带宽,这就是为什么苹果电脑不需要 Nvidia 显卡,也能运行 AI 模型。
4. 软件生态的适配和进化
苹果在 2020 年 M1 发布时推出了 Rosetta 2 翻译层,用于兼容旧的 x86 应用。现在,大量主流 macOS 应用已经原生适配 ARM,性能更强、能耗更低。开发者也逐步转向以 ARM 为主的架构优化。
5. M4 的新特性
M4 是第五代 Apple Silicon,主要升级包括:
- 采用台积电第二代 3nm 工艺,性能与能效进一步提升
- 神经网络引擎更强,面向 AI 原生支持(如生成式模型、照片处理)
- 新一代 GPU 架构,支持动态缓存和光线追踪
- 加强视频编解码引擎,更适合 4K/8K 视频处理