普通视图

上 NextCloud,一站搞定个人数据同步

2025年10月19日 22:52

个人数据同步需求

  1. 个人数据能完全个人控制;
  2. 个人数据能实现跨平台的多端同步。
  3. Obsidian 作为知识库,能实现同步。

解决方案

手动安装 NextCloud,实现个人数据同步。主要过程还是 LAMP 技术栈:

  1. 选择 Ubuntu 系统
  2. 在 Ubuntu 上安装 Apache 2
  3. 在 Ubuntu 上安装 MySQL/MariaDB
  4. 在 Ubuntu 上安装 PHP 8.3
  5. 使 LAMP 栈配合运行起来
  6. 在 Apache 配置文件中,增加该站点配置,重启 Apache
  7. 创建 数据库,并准备好数据库名、用户名和密码
  8. 输入站点 URL,输入刚才的数据库信息,进行安装。

WebDAV

由于 NextCloud 提供了 WebDAV 服务,因此基于 WebDAV 进行文件同步的常见服务都可以寄生于此。

  1. Obsidian:可利用 Remotely Save 插件,配置 WebDAV 的 URL、用户名、密码,实现同步;
  2. Joplin:如果希望自己掌握自己的数据,可以使用开源且注重安全的笔记软件。在前期的选型中,有 AnyType、Joplin、Logseq、Trilium Notes 等入我法眼,在目前的工作中,以金融为主,因此没有选择非常 Geek 的 Trilium Notes。

主要参考

官方文档

遇到的问题记录

  1. Config 文件,不能 Copy config.sample.php 文件,而只需要从其中复制需要修改的项。
  2. "Temporary directory /tmp/nextcloudtemp is not present or writable"

使用下面的命令,增加临时目录权限:

sudo mkdir -p /tmp/nextcloudtemp
sudo chown -R www-data:www-data /tmp/nextcloudtemp
sudo chmod 755 /tmp/nextcloudtemp
  1. "Call to undefined function Sabre\\HTTP\\mb_check_encoding()"

安装 php-mbstring 扩展,类似的还有 GD 库:

sudo apt-get install php8.3-mbstring
  1. 看起来您正在尝试重新安装您的 Nextcloud。但您的 config 文件夹中没有 CAN_INSTALL 文件。请在您的 config 文件夹中创建 CAN_INSTALL 文件以继续。

这个问题似乎是在重新修改了 config.php 文件,加入了 index.php 的省略造成的,解决方式为,重新安装一次全新包,另一个可能的原因可能是下载插件时产生的。

在 Windows 上 Bose SoundLink 音箱声音自动停止问题的解决

2025年6月5日 12:00

问题现象

在 Windows 上,通过音频线连接 Bose SoundLink,但声音会自动停止出声,此时,需要重新插拔音频线才能激活声音的输出。

解决方法

将 Windows 的声音设置到足够大,比如 70 以上,通过调节 Bose SoundLink 上的 +/- 键来调节音量。

参考

https://www.reddit.com/r/bose/comments/ywx08b/comment/iwmj22i/?tl=zh-hans&translated=1

krakos: 3年前:笔记本电脑/音频接口的音量太低了。在那边调高音量,这样扬声器就不会因为信号太低而关闭。用扬声器的音量控制来控制扬声器的音量。

ALaunch v1.0 发布

2024年11月4日 02:37

ALaunch 升级到 v1.0 版本,增加了标签的自由管理。

ALaunch v1.0 版本

新特性:

  1. 能创建和删除标签页;
  2. 能对标签页重命名。
ALaunch Snapshot

ALaunch 下载,欢迎反馈和留言。

预告

ALaunch v1.0 是友情软件:与此网站友情链接的朋友,可免费获赠授权码。

正在使用的朋友,建议下载新版本,欢迎反馈。

  • 1.5 将增加窗口控制
  • 2.0 实现启动布局

Windows 音频设备控制之旅

2024年11月2日 22:54

我的需求

笔记本通过 TypeC-DP 1.4 口连接了显示器,听音乐时,我使用笔记本连接的音频输出设备,看视频时,我使用显示器的音频输出口,因此,我有了需要在笔记本和显示器之间快速切换音频设备的需求。

解决过程

我拥有 Windows 编程能力,在 AI 时代想到的第一解决途径就是Prompt,AI 帮我编写一段小功能:你是 Windows 编程的高级程序员,我需要实现一个最简的功能,我需要界面上提供系统音频设备列表供选择,计划用 Python Tkinter 实现,可以用一组单选框,竖直排列,选中设备后设置为 Windows 默认音频设备。请得到代码后复查一遍可能的问题,提供最终可运行的代码。

得到代码后,我表示没看出 API 是什么,于是问 Windows 中切换音频设备的 API 什么,我想着实现 Python 后,可转化为一个简单的 C 程序一键在多个音频设备之间切换,我的基本思路是:先列出设备,再在设备间循环激活为默认。

后续过程就不列举了,AI 提供的代码,都是无法运行的,以下列举 AI 的关键代码。

实现方式一:

import comtypes
from comtypes import GUID, COMObject, POINTER
from comtypes.client import CreateObject
from comtypes.gen import PolicyConfigClient

def set_default_audio_endpoint(device_id):
   # 使用comtypes创建PolicyConfigClient对象
   pPolicyConfig = CreateObject(PolicyConfigClient.CLSID_PolicyConfigClient,
                                interface = PolicyConfigClient.IPolicyConfig)
   # 调用SetDefaultEndpoint方法设置默认音频端点
   hr = pPolicyConfig.SetDefaultEndpoint(device_id, 0)
   if hr == 0:
       print("默认音频端点设置成功")
   else:
       print("默认音频端点设置失败")


if __name__ == '__main__':
   # 这里需要替换为实际的设备ID
   device_id = "{0.0.0.0}"
   set_default_audio_endpoint(device_id)

实现方式二::

from pycaw.pycaw import AudioUtilities, IMMDeviceEnumerator

def get_speaker_device_id():
   device_enumerator = IMMDeviceEnumerator()
   speakers = AudioUtilities.GetSpeakers()
   device_id = speakers.GetId()
   return device_id

if __name__ == '__main__':
   device_id = get_speaker_device_id()
   set_default_audio_endpoint(device_id)

我后来使用一段复杂的 Python 代码调用了一个本地 dll 文件作为桥梁实现了切换。然后,为去掉这个不明就里的 dll,把问题弄得更明白一点,我查阅了 Microsoft 的文档,文档中居然没有提!

最后我发现实现切换的是 Microsoft Windows Undocumented API,列举和操纵此设置,居然分属在不同的 COM 接口中,未有文档的是 PolicyConfigClient 接口,它是一个特殊的 COM 接口,脚本无法创建和使用它的属性和方法,需要 Native 代码通过最基本的结构去调用。

然后,我浏览了交友网站 GitHub,发现世界上还有几个和我有一样需求的人,并且有几个 Geek 动手实现了 AudioSwitch 软件,以及还有几个 C# 和 vbs 的实现,经过比较,我还是喜欢 C++ 实现的版本。

AudioSwitch 软件运行后,按 F12 就能自动切换系统默认的音频设备。我于是下载源码,发现它使用一个叫做 SCons-win32 的编译工具进行了编译,我又查阅了 SCons-win32 帮助,成功编译出了 AudioSwitch.exe

当我完成编译,微软的安全软件居然报 Trojan:Win32/Bearfoos.A!ml,我去微软官方查询了 Bearfoos.A!ml 解释带 !ml 的是机器学习判断的木马。

我查看了它的源代码,然后 SCons-win32 作为可能引入病毒的第二个可能,风险也不高,我的编译器也是本地,安全软件扫描过的,所以我认为它大概率是误报,于是向微软提交了该二进制软件,几天后,我发现微软排除了它的威胁。

随后的几天中,我感觉都非常方便。

新的发现

突然有一天,我发现 Windows 托盘区的小喇叭似乎自带切换功能,只是这个功能,我才发现。相比开机自动运行一个小软件然后按 F12,和点击托盘区的小图标再点展开再点设备的三次操作来说,我觉得已经差不多了。

按一次键盘和点击三次鼠标,我感觉还是键盘轻松点,但弊端是 F12 是容易和其它热键冲突的。比如 MadEdit 中 F12 就是进入一个 PostIt 模式,如果从菜单进入了,再 F12 时,就无法生效了。

结论

  1. 虽然 AI 编程已经很厉害,你讲清楚了需求,它也无法写出切换音频设备的小功能。
  2. AI 无法完成的原因是它使用了 Windows 未公开的技术。
  3. 新问题很少,这个问题 Windows 的发展过程的几十年间,已经被很多人用不同方式解决。
  4. 如果要解决电脑问题,通过编程解决只是一种直接的方式,你去问 AI 怎么编程,这时有两个结果,一个是 AI 实现了,二是 AI 未能实现,但无论是搜索还是 AI,最后都可以解决。
  5. 解决问题本来还有更简单的办法,也许是对问题解空间的搜索方向错误了。

但无论如何,现有的 AI 都不算能直接解决此问题,最后还得依靠专家的知识和一个灵感和一个机会。

雅余的自省《独立博客自省问卷15题》

2024年10月24日 10:24

雅余的自省,这个听起来就像 Diablo 里一件暗金装备。

1、你的博客更新频率是多少? A.每周更新 B.一周数篇 C.一月1-2篇 D.几个月一篇

从一周数篇到一月1-2篇,作为写字自留地,将内容分散到四处写并不好。

2、你的博客上次更新是什么时候? A.本周 B.上周 C.上个月 D.上季度

C

3、你的博客文章是原创的吗? A.坚持原创 B.部分借鉴 C.AI 帮我写的 D.搬运别人的,而且不署名

B

4、你觉得自己的文章对他人有帮助吗? A.旨在对他人有启示 B.多少有点意义 C.每日每周流水账 D.自我陶醉就好,管他呢

B

5、你上次换博客主题/程序是什么时候? A.上周 B.上个月 C.去年 D.凭良心说,我多年都是一个主题

C

6、你上一次捣腾博客主题代码是什么时候? A.昨天,撸代码到凌晨 B.每周必捣腾 C.每月有那么一次 D.一年有那么一次

D,现在看起来这个频率有点高。

7、你会对博客主题进行二次开发? A.直接配置使用,省心不折腾 B.时不时自己改改,搞点新花样,换图片,换字体,爽 C.删除主题作者版权信息,改改样式,然后自我感觉良好 D.改得面目全非,但保留原作者版权信息或注明

会增加新功能,B

8、你多久打开自己博客自我陶醉一次? A.每天数次 B.每周一次 C.看心情 D.一般都是照镜子,不看博客

C

9、你近期对自己博客域名什么感受? A.想搞到一个 .COM 的域名 B.如果域名能再短几个字符就更好了 C.今年才换双拼域名了,明年再看看 D.目前挺好,没想法

A

10、你每天都会看网站的流量统计吗?

A.每天看几次,今天又多了100PV B.每周回顾,看看流量趋势 C.记得就看看 D.没有搞流量统计,都是浮云

C

11、你通过博客的广告赚到钱了吗? A.有,能覆盖建站费用 B.有,但付出大于收入 C.没考虑通过博客流量赚钱 D.拒绝广告,保证阅读体验

D

12、你去浏览别人的博客/网站主要为什么? A.学习别人分享的知识 B.搬运别人的内容 C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好 D.不爱看别人博客,自己爱写啥写啥

D,就是写写

13、看到别人分享了一篇文章,你打开第一反应是什么? A.哇,这域名真不错,怎么我没想到 B.哇,这网站速度真快,图片延迟加载丝滑 C.哇,这程序/主题不错,我也要抄一抄/留言问问哪里搞的 D.看看文章内容

D,主要还是内容

14、你觉得博客哪方面更重要? A.域名 B.服务器 C.主题 D.内容

A、D,好名字是成功的一半。

15、近期通过写博客有哪些新收获?

A.知识面有拓展 B.认识了新朋友 C.写作水平提升 D.通过知识变现

B,比如,我会写这篇就是因为看上雅余博客的品味,为能与交换友链而感到荣幸。

果真,人生有限,岁月如梭。

依然有自编写知识管理工具的执念,虽然 Obsidian 已接近心中所想。

记录盒马鲜生好吃的烘培和好喝的啤酒

2024年9月7日 11:56

评分水位:

青岛1903

⭐⭐⭐⭐⭐ ⭐ 7/10 星

精酿啤酒

  1. 浑浊IPA精酿原浆鲜啤酒(印度淡色艾尔)
浑浊IPA精酿原浆鲜啤酒

⭐⭐⭐⭐⭐ ⭐⭐⭐ 8/10

有性价比的一款。

  1. 暖姜西打(Craft Ginger Flavored Cider)
暖姜西打

⭐⭐⭐⭐⭐ ⭐⭐⭐ 8/10

适合女生。

  1. 皮尔森啤酒黄油风味(Butter Flavor Pilsner Beer)
皮尔森啤酒黄油风味

⭐⭐⭐⭐⭐ ⭐⭐ 7/10

有软软黄油风味,适合软男。

烘培食品

  • 原味麻薯 330g
  • 原味&伯爵红茶味瑞士卷 560g
  • 猫山王榴莲千层蛋糕 470g
  • 经典生巧卷 190g

电解质水平替、该不该喝酒及智商堪忧

2024年8月4日 16:30

电解质水平替的来龙去脉

电解质水平替事关一位网红大V——Fenng,更容易被记住的是他的头像,最初因搜索科技资讯 App 比较,批量下载了小道消息,那个看起来欧美画风的挺欠的头像让人记忆犹新,但后面内容似乎不更新了,到后面我的朋友在北京创业,做了一个 news + NLP 的新闻提炼的应用,我也无意间发现了类似的 Readhub,了解到后面的无码科技,正是它们的产品。

Fenng 现在算是 X 上的网红,常有各种争议的言论,都是群友转来看,我平时不大关注。这次他提到电解质水的平替太贵,有人说盐兑点水就是,他却说人“智商堪忧”,他这句言语从心理学上理解,有些自我攻击或者自我鄙夷。在我看来,作为社媒言论是不妥的,甚至有点愚蠢,从领域常识上看,也与医疗领域科技产品公司负责人身份不符。

一方面,就电解质水的平替问题本身来说。基于对盐汽水认知和户外运动经验,是经验有效的。曾见过工地的工人分发饮用盐汽水,且户外运动出汗非常多时,一些退伍军人也直接补充盐水。从常识上说,电解质和水都在人体内,比例须达到一种平衡,通过消化道直接补充电解制水,人在吸收时,是有渗透调节的,因此食盐和水比例的一定阈值范围内,人都可以自己调节这种平衡,这种比例是否恰当,只要不过量补水和过度放盐就行。在需要补充电解质时,很少有人会纠结于盐和水的比例问题而放弃补水,一小勺盐加到一瓶水里,就直接喝了。

另一方面,人体电解质主要有钠离子 Na+、钾离子 K+、钙离子 Ca2+、镁离子 Mg2+、氯离子 Cl-,食盐中也主要含有这些离子,它们主要负责调节体液平衡、血压、心跳、肌肉收缩、神经功能等。你很少在现实世界听到因运动后过度补充盐分而出现问题的事件,这本身可说明人对盐水比例的容忍度是非常高的。

所以,加点盐的水作为人体补充电解制水的平替是 OK 的。

该不该喝酒

酒是世界文化的一部分,这不是巧合。密闭放久的事物都会产生这种类似的气味,祖先们经过尝试发现,它们居然可以喝,而且喝完后仿佛还会进入一种不可名状的状态。我们是听着先人饮酒的故事,看着祖辈饮酒,到自己饮酒的一代人。

但记得去年时候,看到老高讲酒是毒药一集,说最近科研表明,酒精和人的健康总是负相关,总是和人的疾病正相关。这颠覆了少量饮酒给人带来好处的常识,就是说,哪怕是喝一滴酒,都是喝了毒药。

而在生活面上,无论是线下的酒吧和线上的卖场,酒都是很重要的品类,刚挤进超市五强的盒马,就推出非常多的精酿啤酒,广受欢迎。

所以问题到了,如果酒是毒药,为什么大家要卖;这个问题的提问方式,如果烟有害健康,为什么会卖?是人不理智,还是卖的人坏,或者这就是世界的 Bug,所有的人都装作不知道和其中没有矛盾。

我是这么看待的,夏天日常我也喝啤酒,品酒和非常少量的红酒,偶尔白酒,甚至还有一些喜欢,但不酗酒,喝的不多。一般是啤酒一罐(类似可乐),红酒一两杯,白酒二两的样子。无论研究怎么说,酒和菜肴搭配还是有一种最简单的乐趣。

在相信科研和相信经验上,我相信能重现和验证的科研结论,但我和大多数喝酒吸烟的人一样,不太在意这些,经验告诉我,酒对人的影响也许是负面的,但酒对健康的影响没有想象的那么大。影响人健康的因素中,它占不到主因。

矛盾事物

所有的人在一生中最大的矛盾在于,明明都是要死的,却都装得那么永生。

这可能就是人性中最大的盲点:虚伪且无明。

二分法提供了解构矛盾事物的视角,它说矛盾是统一的。

人在快乐和悲伤时都喝酒,这说明人非常清醒,即想早点死却也不想死,这点,连神也不懂,所以才创造了我们。

AI融入生活的两点想法

2024年8月1日 13:55

如半年前预料的,流量入口从互联网搜索正转向AI提问。

现在有疑问时,无论是技术领域或者生活领域的我都趋向于提问AI,我爸也是,但他那辈人还没有形成我一样的习惯。

Tombstones 是啥

为修改任务栏上的图标名称,我进入了下面的目录:

C:\Users\kaffa\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

在此目录中,我发现了一个叫做 Tombstones 的目录,Tombstones 是墓碑石,许多国人会觉得晦气。

为弄清楚 Tombstones 是个啥,我特地询问了豆包、通义千问、腾讯元宝、ChatGPT,结果出现了三种答案。

经过搜索的确认,我趋向于考虑它是一种 Windows 机制。

这里想说明的是,这个问题并不是一个靠逻辑推理可以猜测的问题,而是取决于领域知识,也许是 Windows 是微软的,但在回答中,只有 ChatGPT 的回答是肯定且确切的。通义千问的回答也还可以接受,但豆包和腾讯元宝就差点意思。

VOKEN 是啥

我爸给我发了一块手表的图片,他问我这是什么手表,经过识别,我发现了 VOKEN 品牌文字。

通过对 豆包、通义千问、腾讯元宝、ChatGPT 的询问,也还是 ChatGPT 靠谱。

这说明了什么

经过上面两个例子,涉及到知道不知道的问题时,ChatGPT 占优势;豆包比较弱,通义千问、腾讯元宝也不强。但在使用体验上,豆包是一流的,日常随便问问时,我还是使用豆包较多。

这两个例子虽然不具有代表性,但能说明我和我爸使用 AI 的习惯。

  1. 用户习惯正从搜索转向 AI。在效果差不多时,不一定使用最强的,也许会使用顺手的 AI。
  2. 虽然老年人使用 AI 了,但 AI 自以为是的回答问题还是没解决,对于使用 AI 的老年人来说难以理解。

ALaunch v0.9 发布

2024年6月27日 22:34

ALaunch 升级到 v0.9 版本,增加了快捷键修改的立即生效。

ALaunch v0.9 版本

新特性:

  1. 点击显示桌面按钮后,快捷键可以激活程序;
  2. 更改快捷键后,立即生效。

预告

ALaunch v1.0 将转为友情软件:与此网站友情链接的朋友,如果使用 Windows,可获得 1 枚注册码。

注册码在达到预定数量时取消。

实现过程花絮

特性 1 的实现过程中,我甚至还去查看了 ReactOS 的源码,想弄明白 ShowDesktop 按钮点击后,是不是有啥特殊的消息。最终发现想复杂了,只要心静调试就够。

特性 2 的实现引发了一些代码的坏味道,不过体验没有差别,甚至还更好。

1.0 将是一个完整的重构版本,目前还没有太明显的特性。

当我们 Build in Public 时,我们谈些什么

2024年6月24日 19:36

Build in Public 是什么

近在朋友圈常听闻 build in public 这组词。

事实上,这个概念早在 2010 年就有了,Buffer 采用透明文化经营公司,且一直延续至今。Buffer 如今有百万用户,且公司不但分享财务数据和工资,还与公众分享许多其他指标。它们的价值观是相信透明度的力量可以建立信任,保持高标准,并推动行业向前发展。

Build in Public 中文意思是“公开构建”,即将构建产品的过程公开。初次听说时,略显得反商业直觉。但近 10 多年,每年都有采用此策略成功的公司。比如 2014 年的 Ghost,2018 年 Nomad List,Fast、Blogging for Devs、CopyAI、TailwindCSS、Vim.so、Affilimate 等。

想了解最新采用此策略的公司,只需要上社媒中查找 build-in-public 或 building-in-public 话题,就可以看到层出不群的新创公司。

为什么 Build in Public

一家商业公司为什么选择公开构建,是因为:

  1. 可以从一开始就获取关注,并且逐步积累用户和潜在客户。
  2. 可以获得早期反馈,提炼需求。
  3. 可以降低招募成本。

Build in Public 适合谁

毫无疑问的是,公开构建适合开源项目或初创团队。比如:

  • 独立开发者
  • 数字游牧
  • 线下开店的人
  • 不想在市场营销上过多投入资金的团队
  • 擅长运营 Social 的人
  • 面向海外的产品,在 X.com 上进行公开构建是不错的增长手段

它们的共性是需要获得:线上和线下的社区关注和反馈,需要招人。

Build in Public 在国内

我可能比较孤陋寡闻,在国内还没有听说采用公开构建策略的公司。

我所知的知名公司,在这点上都没啥值得说的。

国内的公司都存在“红线”和“高压线”。

恨不得把公司外部的一切好东西都拿到公司内部来用,而公司内部或公司员工产出的好东西,一丁点也不允许外发的。

唯有例外的就是 KPI 式的中式开源,但真正回馈到开源社区的屈指可数。

Build in Public 的风险

上面提到的在国内没有成功案例,不仅是国内,国外 Build in Public 也产生不少想法被剽的案例。

Build in Public 需要有几个前提:

  1. 在最小化产品发布后,再开始 Build in Public,这相当于先占一个位置。
  2. 确保团队的发布节奏的效率可以响应需求者期望的节奏。
  3. 有一定的社区影响力。

清除 Microsoft Edge 自动跳转 https 的缓存

2024年6月9日 12:00

问题现象

在配置 nginx 反向代理过程中,发现 Microsoft Edge 浏览器似乎缓存了网址的 http 习惯。

举例来说:对于 www.kaffa.im,如果访问过 https://www.kaffa.im 成功后,即使服务器取消了 https 访问,只提供 http 服务,当访问 http://www.kaffa.im 时,浏览器并不请求 80 端口的 http 服务,而是根据缓存继续会请求 443 端口的 https 服务。

由于很早之前第一次发现是在 Edge 中,本想写一篇吐槽微软对于这事处理的傲慢态度,今天又在豆包 AI 中询问了此事的翻译,结果豆包好像非常捍卫微软的品牌声誉似的,说这并不是微软的傲慢,而是出于安全考虑,这种回答还真是让我非常吃惊。

我仔细阅读了关于这个问题源头的一些对话:

  1. https://issues.chromium.org/issues/41266980
  2. https://learn.microsoft.com/en-us/answers/questions/988950/edge-redirecting-http-to-https

问题解决

方法一

这个方法较为推荐,一般人不知道,是一种“隐藏 Feature”。在 Edge 里按下 F12,打开 Microsoft Edge DevTools,然后鼠标左键长按在浏览器工具栏上的刷新按钮上,大约1秒后,按钮下方会出现下拉菜单,最后的菜单项是“清空缓存并进行硬刷新”,点击它,即会清空关于 https 或 301 永久跳转的缓存。

方法二

这个方法可能会不太好,因为它的粒度不够。在 Edge 浏览器中,按下 Ctrl + Shift + Del 调出对话框,清除过去一小时的缓存。(如果上次服务是在很久以前,那么这个办法将无效。)

其它没有作用或失效的处理办法

  • edge://flags/#edge-automatic-https

这个选项已经没有了。

  • edge://net-internals/#hsts

这个处理无效。

  • edge://settings/searchFilters

这个处理无效。

更进一步

这个问题刨根问底,答案在 Chromium 源码逻辑里。

但我时间资源有限,如果某位有闲有兴趣的专业程序员擅长这块,还望不吝分享和指正。

年轻只是爱构建

2024年5月4日 12:00

锤子找钉子

本文探讨的结构很简单,即大家常说过的:手里握着锤子,看什么都是钉子。

很多人好奇新技术,学习新技术,验证学习的新技术时,便会使用新技术构建很多已构建的成熟软件。然而,如果新构建并未获得相比旧构建有比较优势的制品时,就命中了上述结构:手里握着锤子,眼里都是钉子。

值得注意的是,现实中的“钉子”们存在很多细微的差异,比如有很多类似钉子的东西,其实是螺丝和针。锤子对付螺丝和针,也不是不行,但算不上好用。

软件开发

上述是偏软件工程的叙述,换算为软件开发领域的表述就是:

  1. 掌握了一种编程语言则认为该编程语言适合开发任何软件。
  2. 掌握了一种数据软件则认为该数据软件适合开发任何软件。
  3. 掌握了一种操作系统则认为该操作系统适合开发任何软件。
  4. 掌握了一种编程框架则认为该编程框架适合开发任何软件。

任何代码都是成本

一些代码是业务规则,但任何代码的一面至少都是成本,它需要有人开发、有人测试、有人维护(重构、升级)。

并不是任何软件都值得构建,但我非常理解那些掌握了新技术的年轻工程师,毕竟年轻只是爱构建,很少问为什么。

但只要稍稍有十年经历,一旦有机会维护十年前的代码时,就能理解这里在说什么。

如果可以不修改别人代码,较为便利地实现业务目的时,就不要修改别人代码。

如果需要修改别人代码的逻辑,最好完整地、采用非耦合地方式利用软件,然后才是依赖开发框架,最后是第三发库。

你几乎很难找到长达十年维护的非知名软件,所以,当需要在长期使用的软件中引入一个依赖时,要万分小心,此时有两种考虑:一,慢慢地自己研发;二、如果能看懂源码且源码对个人来说有可维护性时,再审慎依赖。

绝大多数的构建都是无意义的

从五年的长度去看,绝大多数的构建都是无意义。公司活不过五年,五年后技术更新了,你的主要依赖升级了,你的第三方依赖更新了或下线了。公共领域已经有非常多且功能不错的软件,继续构建的大多软件都没有明显存在的理由。

然而,年轻总是爱构建,当审视自身,年轻时也总是会做很多别人眼里无意义的事,这些别人眼里的无意义对当事人来说其实挺重要。

这也许是张颂文老师《灿烂的花园》中说的,去 “创造阅历” 。在第二集中,颂文听见了烟花,这种生活的好奇心来了,让他骑上三轮车在乌漆嘛黑的夜里出发,朝着“烟花”的方向出发,最后除了一路颠簸,只有伸手不见五指的乡路,众人折返,一无所获。然后就是这种看似无意义的行为,构成了一行人人生难忘的花园经历。

所以

在这个内卷时代,现实让人不停提升经济环境效率,将社会推向充分竞争,竞争并非是缺点,但过度后就属于恶性竞争,产生内耗。在这个最好的年代,尤其更要注重和鼓励探索,竞争可以获得生存的机会,但在良性竞争下鼓励探索才能孕育变革,如 OpenAI 技术栈的诞生,靠的是八年的投入、几十亿美金的投资、软件研发的探索。在技术发展到数量级瓶颈时,这些关键的变革一旦成立,几乎决定的就是跨领域的恒久成立的国家竞争优势。

❌