#1088 WARNING: connection is not using a post-quantum key exchange algorithm
SSH 2026-01-06#1087 武汉大学校史
Wuhan 2025-11-29#1086 阅读:坚持主见(公司越大,越容易做出复杂的产品)
个人 阅读 阮一峰 2025-11-19Being Opinionated (坚持主见)
https://hugo.writizzy.com/being-opinionated/57a0fa35-1afc-4824-8d42-3bce26e94ade
大公司容易做出复杂的产品,这主要有两个原因。
(1)公司的人越多,产品复杂度就越高,因为每个人都想留下自己的印记。
大公司的规则是,当你贡献了某种新功能,就会得到晋升。
哪怕这些功能是多余的,十个月后就会发现它们毫无用处,它们的开发者也会收到奖励,所以所有人总是热衷于添加新功能。
(2)公司规模越大,客户越多,就越需要应对具体的用例。
销售人员会告诉你,一些客户需要这个功能;客户支持人员则会告诉你,另一些用户提出了那个需求。
除非你有足够的远见,指出它们不符合软件发展的愿景,否则你就不得不按照那些人的要求,不停地添加功能。
现实中,大公司内部有各种压力,程序员几乎没有自己的立场,必须取悦所有上级部门,在各种压力之间搞平衡,最终就做出具有巨大复杂性的软件。
#1085 MongoDB 命令行工具安装
MongoDB 2025-11-10#1084 B2B 企业销售与服务漏斗模型
营销 2025-11-06#1083 Golang 插件化
Golang 2025-10-13
这篇文章《Plugins in Go》深入探讨了在 Go 语言中实现插件机制的多种方式,尽管 Go 本身不支持运行时加载动态库。以下是文章的核心要点汇总:
🧩 为什么在 Go 中使用插件
- 虽然 Go 编译速度快,但某些应用仍需在运行时加载插件。
- 插件机制可以扩展应用功能,提升灵活性和可维护性。
✅ 理想插件架构的标准
- 速度:调用插件方法应尽可能快。
- 可靠性:插件应稳定运行,支持故障恢复。
- 安全性:防止篡改,例如通过代码签名。
- 易用性:插件 API 应简洁易懂。
🔄 插件运行方式对比
| 插件类型 | 优点 | 缺点 |
|---|---|---|
| 进程内插件 | 快速调用、部署简单、无需额外管理 | 插件崩溃可能影响主程序、语言受限(通常只能用 Go 编写) |
| 独立进程插件 | 崩溃隔离、安全性高、支持多语言、可动态启用/禁用 | 通信复杂、性能略低、需额外管理(如健康检查) |
🔧 Go 中的插件实现方式
-
通过 stdin/stdout 使用 RPC 通信
- 主程序启动插件进程,通过标准输入输出进行 RPC 通信。
- 示例:Pie 插件框架。
-
通过网络使用 RPC 通信
- 使用
net/rpc在本地网络中连接插件。 - 示例:HashiCorp 的 go-plugin,功能强大,适合企业级应用。
- 使用
-
通过消息队列通信
- 使用如 nanomsg 的 ReqRep 或 Survey 协议进行插件交互。
- 虽未有现成框架,但架构灵活,适合自定义实现。
-
编译时集成的进程内插件
- 插件作为 Go 包编译进主程序,常见于 HTTP 中间件。
- 优点是性能高,缺点是需重新编译主程序以更新插件。
-
脚本插件(解释执行)
- 使用嵌入式脚本语言(如 Lua、JavaScript)在运行时加载插件。
- 示例:GopherLua、Otto、Agora。
- 性能较低,但灵活性高。
🧪 示例代码概览
文章提供了一个基于 net/rpc 的简单插件系统示例,包括:
- 插件定义与注册
- 主程序启动插件进程并通过 RPC 调用方法
- 插件方法包括字符串反转和退出操作
#1082 ffmpeg 视频压缩命令
ffmpeg 2025-10-12#1081 5 个 Systemd 加速的方法
Linux 2025-09-305 个提升 Linux 系统启动速度的 systemd 优化技巧,来自《5 systemd tweaks that really boost my boot time》。
不仅是减少启动秒数,更能提升系统响应速度,减少等待时间;通过分析、禁用、屏蔽和调优服务,可打造符合个人需求的流畅启动体验,且调整可逆,适合长期使用。
一、通过 systemd-analyze 定位启动慢的原因
- 工具作用:
systemd-analyze:显示内核和用户空间初始化的总时间,提供启动时间的宏观概览。systemd-analyze blame:按服务启动耗时排序,列出具体服务的耗时明细,定位低效服务(如配置错误或无用的守护进程)。systemd-analyze critical-chain:展示服务依赖关系链,识别阻塞关键任务的服务,为调整启动顺序提供依据。
- 操作建议:
- 多次运行分析工具,区分偶发异常(如硬件检测延迟)和持续低效服务,优先优化问题最突出的服务;保存分析结果以便对比优化效果。
二、禁用不必要的后台服务
- 优化逻辑:
- 许多 Linux 发行版默认启用冗余服务(如无打印机时的打印守护进程、无蓝牙硬件时的蓝牙管理器),禁用这些服务可减少启动耗时。
- 操作方法:
systemctl disable [服务名]:禁止服务随系统启动,需用时可手动启动;systemctl mask [服务名]:彻底屏蔽服务(适用于确定完全不需要的服务),防止被意外启动。
- 注意事项:
- 避免盲目禁用服务,先确认服务功能及依赖关系;每次仅修改一项并测试,防止系统功能损坏。
三、利用 systemd 并行启动优化依赖关系
- 原理优势:
- systemd 支持服务并行启动(区别于传统 init 系统的串行启动),合理配置依赖可提升 CPU 和磁盘利用率。
- 优化方法:
- 通过
systemctl list-dependencies或查看单元文件,检查服务依赖关系,移除不必要的依赖(如使用After=或Requires=指令调整启动顺序); - 启用“套接字激活”(socket activation):仅在套接字被访问时启动服务,减少启动时的服务加载量。
- 通过
四、屏蔽可能被重新启用的服务
- 适用场景:
- 部分服务可能因软件更新或依赖关系被重新启用,屏蔽(mask)可确保其持续禁用(如与现有网络管理器冲突的网络守护进程)。
- 操作命令:
systemctl mask [服务名]:将服务绑定到/dev/null,阻止任何启动尝试;systemctl unmask [服务名]:取消屏蔽。
- 注意点:
- 屏蔽前务必确认服务无间接依赖,避免影响其他功能。
五、优化桌面会话启动流程
- 显示管理器调整:
- 更换为轻量级显示管理器(如 LightDM 比 GDM 启动更快),或调整现有管理器的配置以减少启动耗时。
- 自动启动应用管理:
- 在桌面环境中禁用不必要的自动启动程序(如云同步工具、更新助手),仅保留必需应用,加快桌面加载速度。
- 启动目标优先级调整:
- 延迟非关键服务的启动,优先加载桌面环境,使系统更快进入可用状态。
#1080 Sublime Text
开发工具 2025-09-29Ubuntu 上 VSCode 打不开,应该是哪里报错了。
没空折腾,就直接安装一个 Subline Text 满足基本文档编辑需求。
-> % wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo tee /etc/apt/keyrings/sublimehq-pub.asc > /dev/null
-> % echo -e 'Types: deb\nURIs: https://download.sublimetext.com/\nSuites: apt/stable/\nSigned-By: /etc/apt/keyrings/sublimehq-pub.asc' | sudo tee /etc/apt/sources.list.d/sublime-text.sources
Types: deb
URIs: https://download.sublimetext.com/
Suites: apt/stable/
Signed-By: /etc/apt/keyrings/sublimehq-pub.asc
-> % sudo apt update
-> % sudo apt search sublime
-> % sudo apt install sublime-text
- Ctrl + Shift + P,输入 Install Package Control
- Ctrl + Shift + P,输入 Package Control: Install Package,弹出来的搜索框中输入 ChineseLocalizations,选中点击安装。
- 几秒之后,等中文包安装好,UI 就换成中文显示了。
备注:快捷键
Shift + Alt + Up/Down: 多行编辑