普通视图

笔墨迹重大更新:更智能、更实时、更安全的写作圈子

2025年12月15日 17:33

各位笔墨迹的朋友们,大家好!

经过数周的开发、测试与优化,笔墨迹迎来了自上线以来最重要的一次更新——v1.1.0版本。这次更新不仅仅是功能的增加,更是整个系统架构的蜕变。

一、守护:我们为安全付出的努力

做项目,最难的不是开发功能,而是如何在开放的同时守护安全

这次我们重点修复了几个关键安全问题:

  • SSRF漏洞防护:新增了完整的URL安全验证体系,防止恶意请求穿透到内网
  • SQL注入防护:把所有SQL查询都重构为参数化查询,彻底杜绝注入风险
  • 频率限制系统:建立了多层次限流机制,防止资源被滥用

每一行安全代码的背后,都是深夜里的反复推敲。作为个人维护者,我深知一次安全漏洞就可能导致整个社区的信任崩塌,所以在这方面不敢有丝毫懈怠。

二、突破:性能优化的艰难之路

“笔墨迹的用户越来越多了”,这本该是高兴的事,却让我们遇到了前所未有的挑战。

批量插入优化:从“蜗牛”到“闪电”

当用户数突破1000、文章数超过10万时,原本的逐条插入方式变得异常缓慢。我们花了整整一周时间,重构了数据插入逻辑,实现了50倍的性能提升

随机查询优化:2000倍的奇迹

最让我头疼的是首页的随机推荐功能。在10万级数据量下,ORDER BY RAND() 几乎让服务器崩溃。经过反复尝试,我们终于找到了一种创新的解决方案,在大数据量下性能提升了2000倍

这些优化听起来只是数字,但背后是无数次的数据库分析、索引调整和算法优化。很多时候,一个优化方案要推倒重来好几次。

三、创新:智能抓取系统诞生记

这是本次更新的核心功能,也是最耗费心血的部分。

问题:一刀切的抓取间隔

过去,我们每12小时抓取所有博客。这对日更博主不公平,对月更博主又太频繁。如何用一套系统服务不同更新习惯的博主

方案:动态智能调度

我们设计了一个基于历史更新频率的动态调度系统:

  • 日更博主:每2-6小时抓取
  • 周更博主:每12小时抓取
  • 月更博主:每24-48小时抓取

更重要的是,这个系统会自动学习。如果你开始日更,系统会自动提升你的优先级;如果你暂时停更,系统也会相应调整。

四、革命:秒级同步成为现实

如果说智能抓取是“被动优化”,那么Ping主动推送就是“主动革命”。

痛点:文章同步太慢

很多博主反馈:“我发布了新文章,要等好几个小时才出现在笔墨迹。”

解决方案:Ping主动推送

现在,我们提供了两种实时推送方式:

1. 手动Ping(立即生效)

https://blogscn.fun/blogs/api/ping?rss=你的RSS地址

2. Typecho自动推送插件
我们还开发了专门的Typecho插件,安装后完全自动推送。你只需专注写作,发布后秒级同步到笔墨迹。

2025-12-15T09:39:50.webp

2025-12-15T10:03:56.webp

2025-12-15T10:04:30.webp

这个插件的开发过程充满挑战——要兼容不同主题、不同插件环境,还要确保绝对稳定。但当看到第一篇文章实现秒级同步时,所有的熬夜都值得了。

开源地址:https://github.com/xiangmingya/PingBiMoJi

国内下载地址:https://bestmusicpd.lanzouq.com/iMdOz3dpo78b

五、邀请:加入我们,一起成长

笔墨迹从最初几十个用户,发展到现在的规模,每一步都不容易。作为一个完全由个人开发和维护的开源项目,我面临过:

  • 深夜排查生产环境故障
  • 在安全性和易用性之间艰难权衡
  • 为了一行优化代码查阅无数资料

但现在,我需要你的帮助。

为什么你应该加入笔墨迹?

  1. 真正的技术社区:这里没有营销号,只有认真写作的技术人
  2. 秒级曝光:你的文章发布后,立即推送给所有用户
  3. 智能推荐:我们的算法会让优质内容获得更多曝光
  4. 共同成长:加入一个由创作者为创作者打造的平台

如何加入?

  1. 访问笔墨迹官网,提交你的博客
  2. 如果你是Typecho用户,强烈推荐安装我们的推送插件

六、未来:我们的星辰大海

这次更新只是开始。接下来,我们计划:

  • WebSub实时推送支持
  • 更多博客系统的推送插件(WordPress、Hexo等),也希望大佬们可以帮忙开发谢谢!

但这一切,都需要更多创作者的支持。

每一个新的博客加入,不仅是为自己找到了一个展示平台,更是为整个中文技术博客生态添砖加瓦。


最后的话:

技术博客的写作是孤独的,但技术博客的传播不应该是孤独的。

笔墨迹试图搭建的,不仅是一个文章聚合平台,更是一个互相看见、互相鼓励的创作者社区。在这里,你的每一篇文章都会被认真对待,你的每一次更新都会得到及时反馈。

升级过程很艰难,但看到用户反馈“现在同步太快了!”的时候,我知道这一切都值得。

期待你的加入,让我们一起,让好的技术内容被更多人看见。

  •  

一口气拔了3个智齿,分享一下拔智齿的经历

2025年12月15日 16:57

这篇文章介绍了作者的智齿拔除经历。作者原有四颗智齿,右上自然脱落,因爱吃东西决定一次拔掉剩余三颗。拔牙当天,虽过程不顺但最终成功,花费2100元,自付七百多。医生给出注意事项,当天作者未进食。第二天,疼痛肿胀不严重,靠冰敷缓解,出现低烧,当天食谱为蜜雪冰城圣代、脉动、冷牛奶。第三天,右下恢复快,左下仍肿,用矿泉水和生理盐水含漱,当天饮食有豆腐脑、嘎达汤、燕麦牛奶粥 。

来一顿破破烂烂的烤肉

2025年12月15日 15:25

今天正好借着出去办事儿的功夫,过一下二人世界,再外面"野"餐,不带孩子出去果然自在许多啊。由于孩子明年要上学了,所以我们不得不考虑户口问题,之前也了解过,父母户口都不在武汉,对于学校对口方面就有些局限了,经过多方了解,最终还是考虑把孩子妈的户口迁回武汉,我还是保留农村户口不变。

先去洪山政务服务中心办理,开车进政务中心停车场的时候被拦住了,说里面都是立体停车库,我的车子超宽不能进入,对象还嘲笑我,说让你买小点儿车,没办法只能倒车出来继续往前开,找到一个类似小区的停车场开进去,5块一小时,算是中规中矩,好在办理过程比较顺利,从开始到最后办理结束也就半小时,难得有个清闲时刻,所以考虑着要不去逛逛,不知道怎么就聊到吃上了,结果对象说去吃烤肉吧,很久很久没吃过了,两人一拍即合。

店门口看着红红火火的,很有食欲,肚子也咕咕叫。。。

调料也还蛮多,不过吃烤肉主要还是蘸料,不过整体还是偏咸,让人忍不住要喝水。。。

简单扫码点餐之后,这就开始烤上了,他这个是烤肉和火锅一体,其实火锅就是给了一个锡纸碗包裹着,如果要吃火锅直接丢烤炉上就行,我们点的酸汤锅,不过最终也没吃,毕竟是自助,东西种类不少,反正点了一堆,为了不浪费还是都消费干净了。

在咸鱼上买个券能便宜点儿,最后两个人花了108,还是挺划算,其实味道还算不错,就是后面点的几种肉感觉难吃,特别是那种方块的,难以下咽。

  •  

微信小程序链接怎么转换为二维码?扫码直接跳转到小程序指定页面

2025年12月15日 13:13

这篇文章介绍了作者在做海报时,因购买指定影院场次电影票分享只有链接无二维码,传播不便。经查找,发现可通过这家网站将小程序链接转二维码,该网站输入链接点击生成,每日 5 个免费额度,打开无广告,解决了作者做海报需扫码便捷购票的难题。

精神食粮系列 声音的觉醒(四) 科班声乐体系与普通人自学唱歌的天然断层:语言、方式与结构的差异

2025年12月15日 09:20

精神食粮系列 声音的觉醒(四) 科班声乐体系与普通人自学唱歌的天然断层:语言、方式与结构的差异 无敌的个人博客 tangwudi

1 前言 随着最近我初步实现了“喉位自由”这一目标,我就一直在反思过去两年研究“唱歌”这件事走过的弯路——说是山路十八弯都不夸张。之所以绕了那么多圈,最根本的原因还是一开始就被网上各种“声乐老师”的教学视频带偏了方向,更别提其中不少内容,本质上是为了卖课而刻意把大家往“高音路线”上引(这一点在系列文章第一部里已经聊过了:当唱歌被误解成’高音游戏)。 但高音误区只是问题的一部分,更关键的,其实是我在最初入门时压根没意识到:科班声乐体系的练声、理论和专业术语到底适不适合作为一个零基础、只是想把 KTV 唱好的普通人来用的“理论起点”? 这个问题当时我完全没想过,只觉得专业的、系统的、正规的训练方式,应该就是最好的方式。 等到我真正把科班的训练逻辑、课程结构、练声内容、目标体系一点点拆开来看之后,才慢慢意识到——这里面可能隐藏着一个巨大的误解,而这个误解几乎困住了绝大多数自学唱歌的普 […]

<p>The post 精神食粮系列 声音的觉醒(四) 科班声乐体系与普通人自学唱歌的天然断层:语言、方式与结构的差异 first appeared on 无敌的个人博客.</p>

MinIO迁移RustFS实战指南一

2025年12月14日 21:36

由 copilot.microsoft.com 生成

作为资深 MinIO 用户,经历过 MinIO 一系列操作,从砍掉网关模式,砍掉控制台,到维护模式。老实说,我个人认为这类开源产品很难实现商业化。这种不断收缩能力边界的变化,对使用者来说影响是实实在在的。并不是功能不好,而是你已经把它当作基础设施依赖了,却发现它的产品路线在变, 这也是我开始认真考虑 MinIO 之外的选择的直接原因

项目地址

为啥选择 RustFS,经过大量讨论与实践,RustFS 逐渐成为那个改动最小、适配最易的首选替代品,深度兼容 MinIO 的 API 与架构。

快速部署

本次主要迁移了一个大盘鸡备份 MinIO, 方便操作直接使用 compose 部署

services:
  minio:
    image: ccr.ccs.tencentyun.com/k7scn/minio:2025
    container_name: minio
    restart: always
    environment:
      - MINIO_ROOT_USER=Fah0quaixei0
      - MINIO_ROOT_PASSWORD=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
      - MINIO_DEFAULT_BUCKETS=backup
    ports:
      - '100.90.80.15:9000:9000'
      - '100.90.80.15:9001:9001'
    volumes:
      - '/data/minio:/bitnami/minio/data'

  rustfs:
    image: ccr.ccs.tencentyun.com/k7scn/rustfs:latest
    container_name: rustfs
    restart: always
    environment:
      - RUSTFS_ACCESS_KEY=Fah0quaixei0
      - RUSTFS_SECRET_KEY=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
    ports:
      - '192.168.94.15:9000:9000'
      - '192.168.94.15:9001:9001'
    volumes:
      - '/data/rustfs/data:/data'
      - '/data/rustfs/logs:/logs'

注意 RustFS 的日志目录,不确定官方文档和示例有冲突(/logs 或者 /app/logs), 其实影响不大。

docker compose up -d
chown -R 10001:10001 /data/rustfs/data /data/rustfs/logs
docker compose down -v
docker compose up -d

其他的都和 MinIO 没啥区别,登录控制台创建 Bucket

可以直接使用 MC 操作

mc alias set rustfs http://192.168.94.15:9000 Fah0quaixei0 wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja

测试直接使用 restic 测试

export RESTIC_REPOSITORY=s3:http://192.168.94.15:9000/backup/test
export AWS_ACCESS_KEY_ID=Fah0quaixei0
export AWS_SECRET_ACCESS_KEY=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
export RESTIC_PASSWORD=eexeeWie1ri

直接备份测试

restic init
restic backup /data/mariadb --tag mariadb

repository 7d5b008d opened (version 2, compression level auto)
found 2 old cache directories in /root/.cache/restic, run `restic cache --cleanup` to remove them
no parent snapshot found, will read all files
[0:01] 100.00%  1 / 1 index files loaded

Files:         205 new,     0 changed,     0 unmodified
Dirs:            8 new,     0 changed,     0 unmodified
Added to the repository: 10.385 MiB (730.814 KiB stored)

processed 205 files, 124.408 MiB in 0:10
snapshot fed84173 saved

从目前来看没啥问题,可以先跑一段时间再看看。也可以使用 mc mirror 等工具将存量数据从 MinIO 迁移至 RustFS

最后

开源的魅力,就是你永远有选择的余地。

  •  

一刀切的评论关闭终止之回归的开发技术

2025年12月14日 17:45

年底了,小偷开始频繁出没。最近在群里多次看到小偷进店行窃的视频,我提前在屋前屋后都装了摄像头,即便不在家,也能通过监控直接喊话震慑。

以前每天早上,我都会看看大家写的日志、随手评几句,时间充裕的话,还会自己写篇生活日志发布。可能是心态变了,前段时间我干脆关闭了评论功能,早上也不再去逛各位博主的网站。

但这段时间,我从各种渠道收到了大家的留言:有的发在留言区,有的写在还能评论的文章下,还有人在群里艾特我,甚至还有专门发邮件过来的。看来大家确实喜欢交流,看到生活日志就忍不住想评论,我自己其实也是这样的人,以前就经常评论别人日志。这么看来,我当初 一刀切关闭评论确实不妥,直接断了和大家沟通的渠道。

最近我和两个小伙伴,忙着捡回我丢了十年的开发技术。最开始是从我的博友圈(现在改名为有圈)程序里拷贝了一份源代码,帮小伙伴做二次开发、改成符合他需求的版本。改着改着就上了瘾,后来又和另外一位小伙伴聊到 webp 压缩,说起那些网上提供的webp压缩服务一言难尽,超过5兆还得开会员,所以干脆说不如我做一个工具,说干就干。

我已经很多年没写过桌面应用程序了,下载的 IDE 界面看着都陌生。毕业后上班就一直做 B/S 开发,正是如此我经历了IE6魔鬼时代,天天被各种兼容性问题折磨。等到我退出开发行业时大家已经开始用谷歌浏览器了。

现在这个图片压缩工具,我还在不断优化:已经支持上传到阿里云 OSS,压缩完上传能直接生成 URL 地址供复制,目前正在加 FTP 上传功能,也新增了水印功能。这么多年没写代码,现在反而越写越上瘾。尤其是前天晚上,我们三爷们,一个在武汉一个岳阳一个东莞居然熬到了 4 点,我是因为一个 bug 一直没解决,好在有他俩陪着一起熬夜、聊天,快4点的时候总算把问题解决了,程序也能正常运行。

白天有别的事,只能趁间隙偶尔看一眼。接下来我想再把这个软件的功能做强大些,也考虑靠它赚点收入:比如转码同步上传云存储的功能,年费 19.9 元;软件所有功能买断,定价 99 元。赚钱不丢人,如果能靠这个赚点钱,也是件好事。总不能觉得这也丢人、那也“丢人”,最后什么都不做,一分钱也赚不到,那才真可惜。

昨天我还想到,之后可以再开发一个文件备份软件。以前在公司上班时,我就特别需要 “用户上传文件同步备份” 的功能,这样每天新增的文件,都能自动异地同步备份,会方便很多。

好了,今天就写到这。现在快6点了,得赶紧叫还在外面玩的娃回来吃晚饭了。

  •  

情侣双栏左右布局Html源码

2025年12月14日 20:00

这个蓝图是一个双栏布局,可用于情侣和合作伙伴的作品集网站。其设计理念是展示一个初始的双面视图,当点击其中一面时,整个页面会向相应方向过渡,显示所选人物的独立页面。

下载

截图展示

2025-12-14T11:56:18.webp

2025-12-14T11:56:30.webp

2025-12-14T11:56:43.webp
  •  

2025年终总结

2025年12月14日 13:52

2025年还有半个月就要过去了,回头看看这一年,还真发生了不少事情。趁着周末有点时间,稍微总结一下,免的到了月底,没时间总结。

[...]

  •  

在安稳中寻求生存

2025年12月14日 13:32
该渲染由 Shiro API 生成,可能存在排版问题,最佳体验请前往:https://innei.in/notes/204

这段时间,事情一件接一件。先从日常说起吧。

日常片段

最近看了新的 IP:疯狂动物城,前作看了一半之后忍不住直接去电影院先去把 2 看了。

https://www.themoviedb.org/movie/1084242-zootopia-2

复仇爽剧:模范出租车出第三季了,速看。

https://www.themoviedb.org/tv/119769-taxi-driver

上个月说的羊蹄山之魂通关了,正在二周目新游戏+。最近有点忙,还没有时间玩。

然后再来说说一系列的难受的事情。

体面告别

裁员那天,HR 找我聊。我以为会是一次体面的告别,甚至在某个瞬间,我还真的把它当作“和平结束”。

我接受得很平静。没有赔偿,只有十天的通知费,设备还要折旧回收。

这和老板之前的说法不一样——他说会有一笔金额,最后并没有兑现。说到底,给不给,很多时候更像是取决于公司怎么选择,我也很难指望一定会有结果。我当时理解香港这边的规则和大陆不太一样,很多保障并没有那么到位,至少对我来说是这样。相比之下,大陆的劳动法在这件事上,确实更能保障一点。

删文回声

后来我写了一篇文章,是对这段时间的总结、复盘和经验整理。我写到了一些我认为真实发生过的事情,于是被要求删掉。他们似乎不希望外界因此去质疑产品的未来。但在我看来,这个项目对外的更新与动作已经停滞了一段时间,我很难再用更乐观的词去形容它。

我还是删了。调整内容,重新发布。

删掉的那几个小时,反而让吃瓜的人传得更开:更多人开始围观一个可能从来没用过的产品,开始猜测、开始补全故事。

我没想过会这样。我只是把文字放在自己的博客里,没有在任何社交媒体发链接。可它还是自己长出了腿,走得比我想象的远。

总之,事情已经发生了。只是我没想到,最安静的地方,也会有回声。

气愤起点

后来的事情,让我开始感到气愤。

我从一些同样被裁的人那里,听到了很多过去从未得知的细节。起初我也知道:所谓「事实」,往往只是当事人愿意倾述的版本;人们更愿意相信自己想相信的那一套。可再往后,一些细节在不同人口中反复出现,我很难再把它当成纯粹的「版本」。

而这些信息里,我感受到的是一种让我很不舒服的做法。我很难把它当成善意。

我甚至有种恍惚:我正在经历的流程,像是他们已经很熟悉的流程。很多表达让我感觉更像是在引导情绪,让人先心软,再一点点降低预期。

有些话当时听起来很重,像是在替你争取,像是站在你这边。可很快我又看到各种说法开始变化,解释一层层叠上来,最后结论还是往下走。有人情绪激动,场面也变得很难堪,我也在那种尴尬和同情里破防。

我就是在那一刻意识到:这不是沟通,也不是协商。我当时的感受是,这一切太熟练了,像是事情最终会走向哪里,大家心里早已有数。

我当时接受得很平静,而此刻回想起来,更像一个小丑。

我其实并不在意有没有赔偿。入职之前我就查过资料,也问过 GPT,知道香港的法律大抵如此:很多东西写不写进合同、给不给到位,最后都落在“愿不愿意”上。换句话说,我对结果并不意外。

让我气愤的不是钱。是前后说法的落差,是那种被轻轻带过的感觉。

是他们先把话说得像承诺,让你以为自己会被认真对待;又在最后一刻轻描淡写地收回,仿佛从来没有说过。你甚至很难抓住一个明确的“反悔瞬间”,它更像是一种温柔的推诿:说过,但不算数;答应过,但没保证;本来想给,但现在不行。

公关开场

直到那天的晚上,老板出面发布了第一个公关帖子。

在发帖前后,我注意到他之前转发过的一些内容不见了。这种变化让我很难受,像是我们被悄悄从叙事里抹掉了:那是裁员当天,我们在 X 上发帖找工作,他还转推了,看起来像是"好聚好散"。

可现在,那些转推都不见了。仿佛他从未表态过,仿佛我们从未存在过。舆论开始发酵,像一把火终于找到了引线。

我很气愤那些让我觉得不真诚的说法,但我还是忍着。

很多认识我的朋友,在我把事情的全貌讲清楚之后,都站在我这边。有人在评论区替我打抱不平,也有一些从未谋面的、一直默默关注我的人给我留言。谢谢你们。那一刻我才意识到,原来我并不是一个人在扛。

招人疑云

可真正让我彻底破防的,是这篇公关帖之后发生的另一件事:后来我看到有人公开说“还在招人”。这和我当时的处境放在一起,让我非常困惑。

我后来从别人转述里听到,确实有人收到了类似的招聘信息。真假我不想再追究,但它带来的观感已经足够刺痛。

一边是把所有开发裁掉,一边又在招人。即使我已经大概能猜到这个项目的结局,我仍然会本能地怀疑:他们到底在招什么?他们到底在维护什么?他们到底在演给谁看?而更可怕的是,我已经不会再相信他们说的任何一句话了。

这件事荒诞到像段子,可它真的在发生。

于是开始出现各种猜测。我不想替任何猜测背书,但我能理解大家为什么会这么想,因为许多细节拼在一起,确实让人很难安心。

我那一刻是真的崩溃了。回想过去一年多,自己亲手从零开始打磨那个项目,很多夜晚、很多细节、很多你以为“会留下些什么”的东西,最后把我推到这个下场。突然就显得很可笑。

反击爆点

后面我开始反击。

我把我知道的、我听到的、那些彼此矛盾的说辞一条条摆出来,把不满也摆出来。不是为了吵赢谁,而是因为我突然明白:如果我继续沉默,他们就会替我把故事写完——写成一个“大家都理解、都体面、都没问题”的结尾。

第二天,情绪被推到了顶点。

奇怪的是,这段时间里没有人再来找我“沟通”、也没有人再来做公关。倒像是他们自己开始上演一出反向公关。

先是招人的事。我看到那条内容挂了一会儿,后来又不见了。

然后,有一位老板在公开场合说了这样一句话:

“大意是:创业不是慈善,加入前就该知道风险。”

后面那半句更锋利:他甚至还在强调公司对我们“没有任何可以挑出问题的地方”。

我当时看到这段话,心里一下子就凉了。

原来他们最后选择的立场不是“解释”,也不是“道歉”,甚至不是“沉默”。而是把一切包装成一句轻飘飘的逻辑:你选择了创业,所以你就应该承担一切;你受伤了,也只是你没想清楚风险;至于他们许下过什么、表演过什么、推诿过什么,都可以被这句话一笔抹平。

你们的委屈不是委屈,你们的付出也不算付出——你们只是在“应该如此”。

而真正荒诞的地方在于:他们一边说“风险自担”,一边又需要你相信他们;一边裁掉所有开发,一边又试图招新人;一边要求大家体面收场,一边又在公众叙事里把责任切得很干净。

懂事道具

我从来没指望创业像童话。我只是没想到,最后会被当成一个“应该懂事”的道具。

更荒诞的是,话说到这里还没有结束。那个说出“创业不是慈善”的老板,转头又出现了一些私下的说法,像是在推动大家选边站,也像是在形成某种“口径”。于是新的版本开始流出来。而且每一个版本都比上一个更像谣言。

他说我是自愿离职的,不是被裁的。

他说公司裁员不给赔偿,是因为“你没签国内合同,这是你当时的选择”。可事实是:这根本就不是“选择”。对我来说,那份合同从一开始就没有真正的可选项。你甚至没有站在十字路口,你只是被推着往前走,走到最后再被反过来指责:你看,是你自己走的。

这两天我真的累了。我开始想结束这一切,不想再把更多人的时间和精力卷进来。朋友的,围观者的,甚至我自己的。

二次公关

可偏偏就在我想把情绪压下去的那天晚上,他发了第二篇公关小作文。很长,很“认真”。开头先说外界的讨论被片段化信息带偏了,说这次人员调整是正常的商业决策:为了长期发展、为了降低成本、为了对用户负责,并且不是突发,而是按节奏推进。接着,他把矛头对准了“某一位离职员工”,暗示情绪之所以失控,是因为有人在夸张表达、带动对立。

我看完反而更气愤。是因为他把重点换掉了。他没有正面回应那些承诺为什么会消失、那些话为什么会变成空气。他只是把故事重写成另一种更安全的版本:公司在做正确的事,而问题出在“表达方式”和“情绪”。

更让我不舒服的是,他把生活也拖进了工作里。奖金、回忆、一起旅行、一起拍照,这些东西被摆出来。我承认,加班可能是我自己的选择,奖金也是对方的选择。我只是觉得,选择不等于可以互相抵扣。钱当然重要,但它换不回生活,也换不回那些被占用的深夜和周末。

朋友迷思

至于所谓朋友,我更不愿意被拿来当论据。老板和员工之间存在强利益关系,权力和选择从来都不对等。它可以是合作,可以是尊重,甚至可以是欣赏,但很难是朋友。朋友不会在争议发生时,用私人回忆来证明自己更正确。那更像一种提醒:你应该懂事……,你应该感恩,你不该把事情说成这样。

那一刻我意识到,对我来说这更不像沟通。他们只是要一个体面的结尾——而这个体面里,不包括我。

我再也压不住情绪,于是主动联系了他。在那段漫长的沟通里,我其实只想尽快结束这个闹剧。

越聊越像陷进去的泥。一边是迫切想停下来的疲惫,一边是被情绪推着走的冲动。再加上一点点生活外的交情,哪怕只是曾经的礼貌,曾经的温和,我心软了。我以为只要把话说开,把情绪压下去,事情就能回到“到此为止”的轨道上。

但现实不是这样运作的。

我在对话里意外透露了一些来自前同事的说法。它原本只是倾诉,只是“我听说过”。可话转了几层之后,性质就变了。传到另一个老板耳朵里,它可能就不再是信息,而变成了立场。不再是叙述,而变成了证词。于是那个说过“创业不是慈善”的人,随后我也听到,有人反复联系前同事,话里话外像是在把责任重新分配。

我成了夹在中间的人。两边都不满意,两边都觉得我有问题。我既得罪了他们,也伤到了那些曾经支持我的人。

放下接受

最后,事情还是结束了。非常不愉快。

我得到了什么呢。得罪了两边的人,伤害了曾经站出来替我说话的人。然后我发现这一切都无法挽回。那一晚,我对自己的鲁莽感到深深的自责。情绪冲昏了头脑,像个小孩子一样,急着证明,急着结束,急着把痛苦从胸口掏出来给别人看。结果只换来两败俱伤。

我甚至开始反问自己,我预想的结局到底是什么。是一个道歉,一个解释,一句真话,还是一个终于可以睡觉的夜晚。可到了最后,什么都没有。只有更大的噪音,和更难收拾的残局。

那天回家的路上,我在车里坐了很久很久。车外的世界还在动,灯在走,我却像被按在原地。然后我给前同事发了一段很长的消息,更像是一封迟到的道歉。

发完那段话,我才意识到一个更刺人的事实。有些话一旦说出口,就不再属于你了。它会在别人手里变形,会被拿去站队,会被拿去证明某个叙事。你站在中间,怎么解释都像狡辩,怎么沉默都像默认。

那一晚,我第一次认真地承认,我不是输给了他们的公关。我输给了自己的冲动。

那天之后,我删掉了 X。直到一周之后,世界仍然在运转,吃瓜的人已经散伙,一切又恢复了平静。

平静来得很快,快到像是什么都没发生过。可有些东西并不会因为热度退去就被证明是误会,它只是被遗忘了。

那个曾经说还会继续迭代维护的人,直到现在也没有看到对应的变化。对我来说,那句话更像是一种当时的安抚,而不是后续会兑现的计划。

而我也慢慢确定了一点,我很难再信任他们对外的表述。不是因为我想否定什么,而是因为我已经看过太多前后不一致。

不是因为真话太复杂,也不是因为真话太难讲。我能想到的解释是,真话一旦说出口,就会让体面露出裂缝。于是更多时候,他们选择沉默,选择拖延,选择用一句句看起来正确的话,把真实的部分藏起来。

在那一周里,我无意经过一座寺庙。我进去站了一会儿,很诚心地祈祷,希望自己能在安稳中找到一块生存地。

出来的时候,看见门口有两块石头,上面分别刻着两个字。

放下 接受

像是冥冥之中在告诉我,事情已经到这里了。

回去的路上我又路过一家书店。玻璃上印着一句话,我站在那儿看了很久。

希望你能记住我,记住我曾经这样存在过。 ——村上春树

我不知道为什么那一刻忽然很想哭。也许不是因为谁,也不是因为那个项目,而是因为我突然意识到,我真正害怕的并不是失去工作。

我害怕的是,我花了那么多时间和心力,最后连“好好告别”都不被允许。连一句真话都不能留下。连我曾经那样认真地存在过,也要被改写成不合时宜。

感谢你能看到这里。

看完了?说点什么呢

  •  

回头看见自己

2025年12月1日 01:36
该渲染由 Shiro API 生成,可能存在排版问题,最佳体验请前往:https://innei.in/posts/experience/looking-back-at-myself

前几天收到通知,所在的团队解散了,我这段工作也一起画上句号。

虽然这个月一直隐隐觉得情况不太妙,但真的落在自己身上的那一刻,人还是会愣一下。有点空,有点失落,也有种「啊,原来已经走到这一步了」的感觉。

想了几天,还是决定把这一年多的经历和一些个人反思写下来,当作一个存档。以后哪天心态稳定了,再回头看,至少能更清楚地知道自己这段时间到底经历了什么、学到了什么。

为什么会去做这个项目

最早接到这个机会时,我刚经历人生第一次裁员。那段时间整个人状态挺糟的,对未来特别迷茫,对自己也没什么信心,各种躯体反应、抑郁、焦虑、失眠一股脑地冒出来。

就在那时候,有人找我聊到这个项目。那会儿项目还非常早期,很多东西都停留在想法、脑图和讨论里,连像样的 demo 都还没有。但对当时的我来说,有人愿意拉我一把,给我一个能重新把注意力投进去的事情,本身就挺不一样的。

现在回头看这段经历,哪怕后来大家的路径和选择各不相同,我依然很感谢当时那次「拉一把」。它确实是在我比较低谷的一个时间点,给了我一个出口。

另一方面就是一个很简单的判断:我本身就对这种类别的产品很感兴趣。

我一直喜欢做 ToC 的产品,喜欢琢磨交互细节、体验和界面呈现。

再一次从零开始创造一个东西,其实是很酷的事情,而且自由度也很高。这个项目在早期也给了我很多发挥空间。

在这一年多里,我都在做些什么

如果只看事情本身,这一年多其实过得很密。

因为项目很早期,很多基础的东西都需要从头搭起来,我主要做了这些:

  • 从零搭了一整套基础组件;
  • 一点点把 UI 的设计规则、风格和设计体系搭出来;
  • 把 App 的数据流架构重新理了一遍,把之前比较散的部分串起来;
  • 桌面端(Electron)的更新方案、一些踩坑和调优,也是我一点点摸出来的;
  • 围绕产品的设计和优化,我也写过几篇博客记录当时的想法。

那段时间,我基本是 设计、前端、产品 三件事一起干。经常是白天写代码、改交互,晚上还在想组件要不要再重构一下,周末偶尔继续打磨。

我对细节的执着,在那个阶段被放大得很明显。经常为了一个 1px 的对齐,或者一个 hover 状态,盯着屏幕看半天,不停调 spacing,调整节奏。

后面我的 commit 数一直往上爬,前端那块几乎所有角落都翻过一遍,一些历史遗留的问题也是趁着重构的时候顺手清。

有人跟我说,我这状态有点像把公司项目做成了个人项目。虽然有点玩笑的成分,但确实说明了当时那种「恨不得所有细节都先过一遍我眼睛」的投入。

从纯工程师视角看,这一年我学到的东西挺多的。

以前更多是「完成别人安排的需求」,现在多少对这个产品的形状、系统架构、体验节奏,有了一些自己的判断。

对这段经历的一些个人反思

接下来这部分,就不局限在这个项目本身了,更多是我在这段时间里,对「怎么做一个产品」的一些感受。

我不打算给任何人下结论,只讲我自己以后会怎么做得不一样。

1. 关于「商业化要不要想得很早」

在早期阶段,我确实更偏向「先把东西做出来」「先做一个好玩的产品」,对商业化的思考会往后放。事后回头看,对我自己来说,教训是:

不一定一开始就要把每一块都推到极致,但至少要在心里留一条大致的路: 这个产品大概是为谁做的,这些人未来有没有「愿意为它长期买单」的可能。

如果脑子里完全没有这条路,日常决策就很容易被短期数据牵着走。很多看上去漂亮的增长,不一定是在为未来打基础,有时候只是让你在一条不太适合长期生存的路径上走得更远。

现在再做任何项目,只要心里有一点「它有机会变成一个长期产品」的念头,我都会尽量在比较早的阶段,先粗略想清楚:

  • 它大概会服务谁;
  • 这些人为什么会愿意长期留下来;
  • 他们愿意为什么买单。

这不只是这次经历的感受,其实是这几年所有项目叠加起来给我的提醒。

2. 关于「激励」和「真正的用户」

另一个对我很深的提醒是:激励是一种筛选器。

各种奖励、玩法,在短期内都非常有效,这点我在这个项目以及别的一些项目里都见过。

但它筛出来的,更多是「对激励敏感的人」,而不一定是「对产品本身有强需求的人」。

如果前期一直用这种方式去拉新,很容易导致:

  • 数据好看、热度不低;
  • 但当你希望产品靠长期价值站住时,发现核心人群其实没有被真正建立起来。

以后再做类似的产品,我会更谨慎地区分:

  • 哪些是「为产品本身添砖加瓦」的设计;
  • 哪些只是「为了短期刺激」的玩法。

这个反思同样不是在评价哪个项目好或不好,而是提醒自己:

不能只被短期数字牵着走,要时刻记住自己真正希望留下的那一拨人是谁。

3. 方向没想清楚的时候,越努力反而越危险

这段经历里,还有一个挺扎心的感受:

大家都很努力,事情也很多, 但有时候你隐约知道,自己是在用努力填前面没想清楚留下的坑。

你越是全力往前冲,就越难停下来问自己一句:

如果照现在这个方向一路做到极致, 那个终点真的是我想要的吗?

这个问题不针对任何人,只是对我自己的一种提醒。以后我会更刻意留出一点「按暂停键」的空间,哪怕只是定期问自己这个问题。如果长期答不上来,可能就说明有哪里不太对劲了。

4. 时机本身也是一种成本

这几年回头看,会有一个很强的感觉:

有些窗口期是真的会关上, 关上之后再做同样的事,难度完全不一样。

不只是这一次,我接触过的好几个项目都有类似的影子。在某个阶段其实都迎来过一小波关注或讨论度,如果那时能更早地意识到:

  • 要不要在那时候认真规划一下下一阶段;
  • 要不要借着关注度去争取更多缓冲时间;

后来的剧本可能会不太一样。当然,也未必就一定成功,但至少不是在热度退去之后再来补前面的课。

这件事给我的提醒是:

  • 产品有自己的节奏;
  • 市场也有它的节奏;
  • 有些决定,如果总觉得「以后再说」,其实就是一种隐性成本。

关于「人情」这部分

前面说了很多产品、商业、技术上的东西,但对我个人来说,这段经历还有一块很重要的是「人」。

  • 在我第一次被裁、状态很差的时候,是这个项目给了我一个可以重新投入的方向;
  • 给了我一个在桌面端、大型 ToC 产品上深度打磨的机会;
  • 也让我有机会接触到之前没做到的职责和领域。

不管后来每个人的选择如何,这件事本身我是一直记在心里的。

有时候就是这样。你在别人低谷的时候伸一把手,对那个人来说,意义会很长。

所以,对这段经历,我的情绪是很复杂的:

  • 有遗憾,也有不甘心;
  • 但也有很多真诚的感谢。

它既不是简单的「成功」或「失败」两个字可以概括的,更像是一次把很多课提前塞给我的密集训练。

对未来的一点想法

短期内,要面对的还是很现实的问题。找下一份工作,解决生活,慢慢让自己从这段紧绷的节奏里抽离出来。

但可以确定的是,以后再谈「做一个可持续的产品」,我的态度会比以前更加谨慎,也会多一点敬畏。

如果你刚好也在经历类似的阶段,或者也在做一个早期项目,希望这些碎碎念能给你一点参考。哪怕只是让你提前避开我走过的一两个坑,也算是这段经历留下的价值之一。

谢谢你看到这里。

看完了?说点什么呢

  •  

Umami升级V3踩坑指南

2025年12月14日 10:05

Photo by Bakd&Raw by Karolin Baitinger / Unsplash

最近有注意到关于 react和next.js 高危漏洞 CVE-2025-55182 引发的一些麻烦,多数表现是VPS被攻击者改成了挖矿肉鸡。

博客群里的 @veryjack 就因为安装了Umami v2 也成了受害者之一。

我也安装了Umami v2,所以第一时间上VPS后台检查了一下,幸运的是目前应该还没遭受到攻击。为了避免也中招,所以我先第一时间关闭了Umami 的统计服务。

因为这个漏洞是框架带来的,使用这两个框架的相关项目也在第一时间对漏洞进行了修复,所以Umami也很快带来了v3版本,我需要做的就是尽快升级。

我一直用的v2的mysql版本,但是v3开始官方开始只支持PostgreSQL,所以我需要先对数据进行迁移后再升级到v3版本,官方也提供了升级指南 Migrate MySQL to PostgreSQL ,同时其他一些博主也出了一些迁移教程 Umami v3 正式发布:告别 MySQL,全面拥抱 PostgreSQL —— 升级与迁移指南

一、创建你当前版本的PostgreSQL版Umami

  1. 先停掉原来的Umami容器,修改compose文件为PostgreSQL版本。
  2. 因为我这里的PostgreSQL使用的是miniFlux上创建的,所以我指定使用了一个flux的内部网络。
version: '3.8'

services:
  umami:
    container_name: umami
    image: ghcr.io/umami-software/umami:postgresql-v2.19.0
    restart: always
    ports:
      - "3000:3000"
    environment:
      TZ: Asia/Shanghai
      DATABASE_TYPE: postgresql
      DATABASE_URL: postgresql://umami:password@postgres:5432/umami
      HASH_SALT: "SALT"
    networks:
      - flux-data_flux-network # 关键:加入外部网络

networks:
  flux-data_flux-network:
    external: true # 告诉 Compose 这个网络已经存在

v2版umami PostgreSQL的compose

二、在PostgreSQL中创建Umami数据库

用miniflux的数据库账号创建一个Umami的数据库

docker exec -i postgres psql -U miniflux -c \
"CREATE USER umami WITH PASSWORD 'password';"
docker exec -i postgres psql -U miniflux -c \
"CREATE DATABASE umami OWNER umami;"

手动创建用户和数据库

按照官方指南清空 user_prisma_migrations 表的数据

docker exec -i postgres psql -U umami -d umami <<EOF
TRUNCATE TABLE "user" CASCADE;
TRUNCATE TABLE "_prisma_migrations";
EOF

按官方要求清空数据

三、导出mysql版数据

通过以下命令导出mysql内的Umami数据到 mydbdump.sql 文件内。

docker exec -i mysql mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -u umami -p umami > mydbdump.sql

导出mysql的dump文件

因为两个数据库特性、语法要求的不同,我们在导出mysql的数据后需要对sql语句做特殊处理后才能正确导入到PostgreSQL。

首先用双引号替换反勾号,使其兼容PostgreSQL。

sed -i 's/`/"/g' mydbdump.sql

处理引号

其次,因为存在如 Xi\'an@1900\'blog 这种在PostgreSQL中被认为是转义语句的内容,所以还需要做特殊处理。这部分网上的教程我都试了,对我来说不管用。

这个问题卡了我很久,最后在和AI搏斗了两天后终于得到了一条在替换后至少能正常导入的语句。

sed -i 's/\\'\''/'\'''\''/g' mydbdump.sql

处理转义符

四、导入PostgreSQL

再将修改好后的文件导入Umami的PostgreSQL数据库内。

sudo docker exec -i postgres psql -U umami -d umami < mydbdump.sql

导入PostgreSQL

五、修改镜像为v3

最后修改compose文件中的Umami镜像为最新版后,重新docker-compose up -d 即可。

version: '3.8'

services:
  umami:
    container_name: umami
    image: ghcr.io/umami-software/umami:postgresql-latest
    restart: always
    ports:
      - "3000:3000"
    environment:
      TZ: Asia/Shanghai
      DATABASE_TYPE: postgresql
      DATABASE_URL: postgresql://umami:password@postgres:5432/umami
      HASH_SALT: "SALT"
    networks:
      - flux-data_flux-network # 关键:加入外部网络

networks:
  flux-data_flux-network:
    external: true # 告诉 Compose 这个网络已经存在

升级镜像版本

重新访问网站后你就能得到一个最新版的Umami了,不过v3版本的首页好像默认不再直接显示各个网站的概览信息了,需要手动点击网站进入详情页面才能看到数据,略微有点不适应。

新的umami

其实,在因为数据导入失败期间我一度想放弃之前的数据,尝试过其他统计工具,如 Tianji ,但是都觉得太臃肿了,最后还是选择继续攻克导入问题。

因为我只需要一个简单管用的访问统计工具,这也是当时我选择Umami的原因。

END。

  •  

2025年11月阅读书摘

2025年12月2日 09:36

11月阅读记录

  • 《认知觉醒》Done
  • 《沿着塞纳河到翡冷翠》Done
  • 《我的母亲做保洁》50%
  • 《东北游记》10%

11月阅读书摘

认知觉醒:开启自我改变的原动力

  • 2025年11月阅读书摘
  • 书名: 认知觉醒:开启自我改变的原动力
  • 作者: 周岭
  • 简介: 为什么我们做事总是急于求成、避难趋易?所谓有耐心,就是要“咬牙坚持、死磕到底”?如何不再用“三分钟热情”和“打鸡血”的方式做事?如何保持极度专注?如何消除焦虑?如何提高学习能力?这是一部可以穿透时间的个人成长方法论。7大底层概念,20个成长关键词,助你彻底走出焦虑与迷茫,拥有清醒的认知、清楚的目标、清晰的路径、清爽的情绪。通过“大脑构造、潜意识、元认知”等思维规律,你将真正看清自己;通过“深度学习、关联、反馈”等事物规律,你将真正看清世界,提升自控力、专注力、学习力……只有洞悉底层的内在规律,我们才能真正开启自我改变的原动力。
  • 出版时间 2020-06-01 00:00:00
  • ISBN: 9787115543424
  • 分类: 心理-认知与行为
  • 出版社: 人民邮电出版社

高亮划线

第一章 大脑——一切问题的起源

  • 2025年11月阅读书摘

    📌 我们在生活中做的大部分决策往往源于本能和情绪,而非理智

  • 📌 焦虑的原因就两条:想同时做很多事,又想立即看到效果。王小波说:人的一切痛苦,本质上都是对自己无能的愤怒。焦虑的本质也契合这一观点:自己的欲望大于能力,又极度缺乏耐心。焦虑就是因为欲望与能力之间差距过大。

    人类的天性却正好与这个规律相反。在欲望上急于求成,总想一口吃成个胖子,导致自己终日在困难区受挫;在行动上避难趋易,总是停留在舒适区,导致自己在现实中总是一无所获。

第二章 潜意识——生命留给我们的彩蛋

  • 📌 ·为什么我不由自主地沉溺于这段剧情了?
    这就是高手学习的方法:先用感性能力帮助自己选择,再用理性能力帮助自己思考。文中的触动来自感性,而提问则来自理性,感性在前,理性在后,这背后的原理就是通过捕捉潜意识发出的信号进行感知。

  • 📌 先用感性能力帮助自己选择,再用理性能力帮助自己思考。

  • 📌 目标是存放我们热情和精力的地方

  • 📌 小事听从你的脑,大事听从你的心。

第五章 学习力——学习不是一味地努力

  • 📌 做选择是一件极为耗能的事情,如果没有与之匹配的清醒和定力,绝大多数人最终都会被强大的天性支配,去选择娱乐消遣。在有约束的环境下我们反而效率更高,生活更充实。

  • 📌 考试得了高分,不叫有知识;茶余饭后能高谈阔论,这也不叫有知识。这些场合下,知识虽然有用,但是这些知识都不太牵扯到具体的得失,所以只是智力游戏。只有当局势不明朗、没有人告诉你该怎么办,而错误的判断又会导致一些不良的后果时,你要是能因为有知识而敢于拿一个主意,这才算是真有知识。请注意,这不是在说,实用的知识才是知识,而是在说,只有当知识能够帮助你做实际决策的时候,它才是你的知识。

  • 📌 处于认知圈边缘的知识与我们的实际需求贴合得最紧密,因此也更容易让我们产生触动,进而与现有的知识进行关联。

  • 📌 这就是打卡心态的特性:学不到,假装一下;学到了,立即停止。所以单纯抱着打卡这一任务心态去学习,很少会有强烈的主动性,毕竟在任务心态的驱使下,人们关注的是完成情况,对任务本身没有更大的热情。

  • 📌 制定分享策略,展示给那些能力不及你的人。只要你认真打磨了作品,就肯定有人会觉得你比他们厉害,此时,赞扬就会飞向你。而真正比你强的人往往没空打击你,所以你不必担心会被人嘲笑。

  • 📌 精力,在某种程度上可以作为意志力的代名词。精力充沛时,人们面对困难会无所畏惧,面对诱惑也有更强的抵抗力,但当精力不足时,我们不仅难以面对困难,甚至对诱惑的抵抗能力也会变弱,毕竟克服困难和抵制诱惑都需要消耗意志力。

第六章 行动力——没有行动世界只是个概念

  • 📌 现实和理论都告诉我们:懂得百点不如改变一点。真正的成长不在于自己懂得了多少道理,而在于自己改变了多少。

第七章 情绪力——情绪是多角度看问题的智慧

  • 📌 在一定的前提下,贫穷确实会使人变笨,这不是因为贫穷让人能力不足,而是因为贫穷造成的稀缺俘获了人的注意力,进而降低了人的心智带宽。

  • 📌 真正的行动力高手不是有能耐在同一时间做很多事的人,而是会想办法避免同时做很多事的人。

  • 📌 这些理由听起来可能有些可笑,但不要低估这种假设的力量,一旦你有了新的选择,就会意识到:事情本身并不重要,我们只是在通过它获取另外一种乐趣,顺便把这件事给做了。在心理学上,这个方法叫作“动机转移”。

第八章 早冥读写跑,人生五件套——成本最低的成长之道

  • 📌 不要害怕书上早就写了,我们每个人都可以在这个世界上,刻画出一条与众不同的轨迹。

结语 一流的生活不是富有,而是觉知

  • 📌 无论何时,都要把对方的情绪和意见分开对待,这样,即使在最糟糕的事情中也能学到有用的东西。

  • 📌 好的反思是感知生活中最触动自己的点,难受的、欣喜的、念念不忘的……这些点正是处在自己成长的舒适区边缘的感悟,人在舒适区边缘学习,成长是最快的。

后记 共同改变,一起前行

  • 📌 如果你想要的东西还不存在,那就亲自动手将它创造出来。

沿着塞纳河到翡冷翠

  • 2025年11月阅读书摘
  • 书名: 沿着塞纳河到翡冷翠
  • 作者: 黄永玉著
  • 简介:
  • 出版时间
  • ISBN:
  • 分类:
  • 出版社: 人民文学出版社

高亮划线

咸湿古和薄伽丘

  • 📌 人们动不动爱说:“人生像一场戏”,这种不通容易看出,因为“戏”本来就是人演的。如果说:“人生如戏台”,那就有意思得多了。人,在“前台”演戏,对付生熟朋友,利益所在,好恶交错,抢掠搏杀,用的都是学来的演技功夫;真的自我是在“后台”。一人独处,排除了忌讳,原形毕露,这种快乐六朝人最是懂得:“我与我周旋久,宁作我”,就是其中思想精髓。晚上,一盆热水洗脚之后——高背沙发一靠,三大块烤鱿鱼干放在就手地方,安溪上好铁观音一壶,茶杯加大——淡黄灯泡照明——一手揉脚,一手抓书,书即咸湿之书。此景此情,是一种快意后台小境界也。“后台”生活是人生的命根子,性灵的全部,最真实的自我世界。它隐秘,神圣不可侵犯,却往往被人——甚至自己所歪曲诬蔑。

把这一年收进抽屉

2025年12月1日 01:36
该渲染由 Shiro API 生成,可能存在排版问题,最佳体验请前往:https://innei.in/posts/experience/put-this-year-in-a-drawer

前几天收到通知,所在的团队解散了,我这段工作也一起画上句号。

虽然这个月一直隐隐觉得情况不太妙,但真的落在自己身上的那一刻,人还是会愣一下。有点空,有点失落,也有种「啊,原来已经走到这一步了」的感觉。

想了几天,还是决定把这一年多的经历和一些个人反思写下来,当作一个存档。以后哪天心态稳定了,再回头看,至少能更清楚地知道自己这段时间到底经历了什么、学到了什么。

为什么会去做这个项目

最早接到这个机会时,我刚经历人生第一次裁员。那段时间整个人状态挺糟的,对未来特别迷茫,对自己也没什么信心,各种躯体反应、抑郁、焦虑、失眠一股脑地冒出来。

就在那时候,有人找我聊到这个项目。那会儿项目还非常早期,很多东西都停留在想法、脑图和讨论里,连像样的 demo 都还没有。但对当时的我来说,有人愿意拉我一把,给我一个能重新把注意力投进去的事情,本身就挺不一样的。

现在回头看这段经历,哪怕后来大家的路径和选择各不相同,我依然很感谢当时那次「拉一把」。它确实是在我比较低谷的一个时间点,给了我一个出口。

另一方面就是一个很简单的判断:我本身就对这种类别的产品很感兴趣。

我一直喜欢做 ToC 的产品,喜欢琢磨交互细节、体验和界面呈现。

再一次从零开始创造一个东西,其实是很酷的事情,而且自由度也很高。这个项目在早期也给了我很多发挥空间。

在这一年多里,我都在做些什么

如果只看事情本身,这一年多其实过得很密。

因为项目很早期,很多基础的东西都需要从头搭起来,我主要做了这些:

  • 从零搭了一整套基础组件;
  • 一点点把 UI 的设计规则、风格和设计体系搭出来;
  • 把 App 的数据流架构重新理了一遍,把之前比较散的部分串起来;
  • 桌面端(Electron)的更新方案、一些踩坑和调优,也是我一点点摸出来的;
  • 围绕产品的设计和优化,我也写过几篇博客记录当时的想法。

那段时间,我基本是 设计、前端、产品 三件事一起干。经常是白天写代码、改交互,晚上还在想组件要不要再重构一下,周末偶尔继续打磨。

我对细节的执着,在那个阶段被放大得很明显。经常为了一个 1px 的对齐,或者一个 hover 状态,盯着屏幕看半天,不停调 spacing,调整节奏。

后面我的 commit 数一直往上爬,前端那块几乎所有角落都翻过一遍,一些历史遗留的问题也是趁着重构的时候顺手清。

有人跟我说,我这状态有点像把公司项目做成了个人项目。虽然有点玩笑的成分,但确实说明了当时那种「恨不得所有细节都先过一遍我眼睛」的投入。

从纯工程师视角看,这一年我学到的东西挺多的。

以前更多是「完成别人安排的需求」,现在多少对这个产品的形状、系统架构、体验节奏,有了一些自己的判断。

对这段经历的一些个人反思

接下来这部分,就不局限在这个项目本身了,更多是我在这段时间里,对「怎么做一个产品」的一些感受。

我不打算给任何人下结论,只讲我自己以后会怎么做得不一样。

1. 关于「商业化要不要想得很早」

在早期阶段,我确实更偏向「先把东西做出来」「先做一个好玩的产品」,对商业化的思考会往后放。事后回头看,对我自己来说,教训是:

不一定一开始就要把每一块都推到极致,但至少要在心里留一条大致的路: 这个产品大概是为谁做的,这些人未来有没有「愿意为它长期买单」的可能。

如果脑子里完全没有这条路,日常决策就很容易被短期数据牵着走。很多看上去漂亮的增长,不一定是在为未来打基础,有时候只是让你在一条不太适合长期生存的路径上走得更远。

现在再做任何项目,只要心里有一点「它有机会变成一个长期产品」的念头,我都会尽量在比较早的阶段,先粗略想清楚:

  • 它大概会服务谁;
  • 这些人为什么会愿意长期留下来;
  • 他们愿意为什么买单。

这不只是这次经历的感受,其实是这几年所有项目叠加起来给我的提醒。

2. 关于「激励」和「真正的用户」

另一个对我很深的提醒是:激励是一种筛选器。

各种奖励、玩法,在短期内都非常有效,这点我在这个项目以及别的一些项目里都见过。

但它筛出来的,更多是「对激励敏感的人」,而不一定是「对产品本身有强需求的人」。

如果前期一直用这种方式去拉新,很容易导致:

  • 数据好看、热度不低;
  • 但当你希望产品靠长期价值站住时,发现核心人群其实没有被真正建立起来。

以后再做类似的产品,我会更谨慎地区分:

  • 哪些是「为产品本身添砖加瓦」的设计;
  • 哪些只是「为了短期刺激」的玩法。

这个反思同样不是在评价哪个项目好或不好,而是提醒自己:

不能只被短期数字牵着走,要时刻记住自己真正希望留下的那一拨人是谁。

3. 方向没想清楚的时候,越努力反而越危险

这段经历里,还有一个挺扎心的感受:

大家都很努力,事情也很多, 但有时候你隐约知道,自己是在用努力填前面没想清楚留下的坑。

你越是全力往前冲,就越难停下来问自己一句:

如果照现在这个方向一路做到极致, 那个终点真的是我想要的吗?

这个问题不针对任何人,只是对我自己的一种提醒。以后我会更刻意留出一点「按暂停键」的空间,哪怕只是定期问自己这个问题。如果长期答不上来,可能就说明有哪里不太对劲了。

4. 时机本身也是一种成本

这几年回头看,会有一个很强的感觉:

有些窗口期是真的会关上, 关上之后再做同样的事,难度完全不一样。

不只是这一次,我接触过的好几个项目都有类似的影子。在某个阶段其实都迎来过一小波关注或讨论度,如果那时能更早地意识到:

  • 要不要在那时候认真规划一下下一阶段;
  • 要不要借着关注度去争取更多缓冲时间;

后来的剧本可能会不太一样。当然,也未必就一定成功,但至少不是在热度退去之后再来补前面的课。

这件事给我的提醒是:

  • 产品有自己的节奏;
  • 市场也有它的节奏;
  • 有些决定,如果总觉得「以后再说」,其实就是一种隐性成本。

关于「人情」这部分

前面说了很多产品、商业、技术上的东西,但对我个人来说,这段经历还有一块很重要的是「人」。

  • 在我第一次被裁、状态很差的时候,是这个项目给了我一个可以重新投入的方向;
  • 给了我一个在桌面端、大型 ToC 产品上深度打磨的机会;
  • 也让我有机会接触到之前没做到的职责和领域。

不管后来每个人的选择如何,这件事本身我是一直记在心里的。

有时候就是这样。你在别人低谷的时候伸一把手,对那个人来说,意义会很长。

所以,对这段经历,我的情绪是很复杂的:

  • 有遗憾,也有不甘心;
  • 但也有很多真诚的感谢。

它既不是简单的「成功」或「失败」两个字可以概括的,更像是一次把很多课提前塞给我的密集训练。

对未来的一点想法

短期内,要面对的还是很现实的问题。找下一份工作,解决生活,慢慢让自己从这段紧绷的节奏里抽离出来。

但可以确定的是,以后再谈「做一个可持续的产品」,我的态度会比以前更加谨慎,也会多一点敬畏。

如果你刚好也在经历类似的阶段,或者也在做一个早期项目,希望这些碎碎念能给你一点参考。哪怕只是让你提前避开我走过的一两个坑,也算是这段经历留下的价值之一。

谢谢你看到这里。

看完了?说点什么呢

  •  

Affinty双栏主题

2025年12月13日 19:48
Affinty双栏typecho主题

Affinty

移植自兽兽的一款开源 ghost 模板,原作者:https://github.com/Showfom/Affinity
部分功能文字写死,需要自行修改主题代码

演示

在线预览

下载

说明

整体CSS部局,基本一至。评论部分,单独整理的代码和CSS。
缩略图,默认调用 img 自定义字段,如果没有,到文章检索第1张图片。
搜索页面,后台添加页面,自定义模板,设置为 page-search 即可。

  •  

二〇二五年十一月总结:继续分享自己

2025年12月13日 17:22

十一月已过,目前十二月中,月度总结还在路上。坚持做一件事情很难,但是习惯做一件事件却很容易。建博客的初衷是为了写总结和记录,虽然每月总结从未落下,但这次间隔时间确实有点长。但为了保持总结习惯,还是敷衍了一下。

我们常说内容一旦发布都是给访客看的,独立博客的流量虽然很少,但总有人在不经意的瞬间读到我们写的内容,哪怕内容写的一塌糊涂,也少有人较真,即使真的较真了也不会引起轩然大波。在我眼中独立博客十分矛盾,既想有人关注,又不想有人关注。

既然是敷衍总结,那继续从摄影、骑车、读书这三个方面来总结十一月我都经历了什么。

摄影

转人像摄影有一段时间了,如今自感水平一般,光线差一点、引导差一点,很容易被负面情绪影响,很难调动模特的情绪。学人像摄影差不多三个月了,有很多难点需要克服,大部分内容不是摄影本身,而是摄影之外的一些事情。经常被提到,眼睛不要总是盯着相机,放下相机多观察。

挑选一些11月拍的照片↓




骑车

总里程:246.5km
总时间:13:22:52
月骑行均速:18.42km/h
骑行次数:22
平均单次里程:11.2km

关于骑车开始放纵,再也不关心均速什么的,甚至有时候都没有记录数据,没记录相当于没骑车。

还是上下班骑车,其他的骑车活动也没有进行,没想到均速已经掉到18.42km/h,进步不容易,退步却很快。

读书

这个月依旧没有看书,想好要看书,拿起书本就被其他事情吸引了,甚至说拿起手机就相机自己只是回了回复一个消息,转而打开短视频无节制的刷了起来。

但心底在告诫自己,读书使人进步,碎片化的短视频很难学到东西,娱乐不能没有节制。

~ END ~

继续写博客,继续写总结,继续写记录,继续写心得体验,继续分享自己。

二〇二五年十月总结:迟到的总结不太真实

2025年12月13日 15:29

最近几个月很少写博客文章,仅仅写了一篇月度总结。然而,十月份的总结迟迟没有行动。10月中旬新建文章仅写了标题:“二〇二五年十月总结”,自此便没有了后续。

现在仅能凭借一些记忆和一些记录数据,回顾十月的一些事情。老规矩,摄影、骑车、读书,这三件事来总结一下成败,更多是一些反思。

十月总结,来晚了。

摄影

摄影分三大块,人像、风光、人文。其中最难的是人文,其次是人像,然后是风光。

虽然有难以,想要拍好任何一种题材都需要长时间积累和锻炼,有天赋的人少之又少。

风光拍不好,人文更拍不好,随后看上了人像摄影。这个月重点在人像摄影,初尝人像并不简单,拍到和拍好是两码事。学习如何拍好人像,实践复盘,烂片拍了很多很多。也许摄影水平就是堆快门,拍的越多经验值才会增加。

骑车

总里程:337.1km
总时间:17:19:54
月骑行均速:19.44km/h
骑行次数:32
平均单次里程:11.59km

10月的总里程虽然比9月多了一些,但这些里程不足支撑自己进步。但目前已经不想再骑车方面进步了,正如所见,平均单次里程不足12公里。

现在仅保留骑车上班的习惯,只要不下雨就骑车。进入冬天上海的雨水也在减少,几乎每个上班日都会骑车。

读书

10月没有读书,枕边放了一本《成为专业人像摄影师》只在买回来的时候看了看,感觉要吃灰了。

还是想把读书写下来,主要目的是提醒自己,读书可以拓展见识与认知,不能丢下。

~ END ~

时光继续,生活继续,健身继续,增长继续,不刻意关注时光的快慢,不刻意关注成长的快慢,慢慢生活,慢慢变老。

嘟嘟桌面PRO:一款适用于比亚迪全系车型的车机桌面软件

2025年12月13日 12:36

嘟嘟桌面

嘟嘟车机桌面是一个完全区别于其他安卓桌面的 APP,完全根据车机用户使用习惯进行设计,本地使用完全免费,使用在线服务会根据实际情况收取部分费用,付费项目包括车辆实时定位,行程在线记录,地理围栏通知,共享车机控制和定位等在线功能

嘟嘟车机桌面
嘟嘟车机桌面

嘟嘟桌面PRO比亚迪专享版

嘟嘟桌面PRO比亚迪专享版安装后全名为嘟嘟桌面PRO-比亚迪专享版,是专为比亚迪全系车型车主们打造的版本。

实时显示车辆的电量、油量、记录仪状态、胎压温度、电池电压与健康度监测等数据,帮助用户全面掌握车辆状况。软件支持语音唤醒控制导航、打电话,并且主题也可以根据自己的喜好自定义设置,打造专属桌面风格

嘟嘟桌面PRO-比亚迪专享版
嘟嘟桌面PRO-比亚迪专享版

嘟嘟桌面PRO比亚迪专享版官网

https://dudu-lucky.com/auto/byd.html

下载地址

嘟嘟桌面PRO比亚迪专享版怎么设置高德地图插件

1、打开嘟嘟桌面PRO比亚迪专享版app,点击桌面设置功能

2、依次点击桌面-插件设置-导航插件功能

3、选择高德导航车机版即可

嘟嘟桌面PRO比亚迪专享版常见问答有哪些

嘟嘟桌面PRO比亚迪专享版适用车型

嘟嘟桌面比亚迪专享版适配比亚迪全系车型,包括纯电、混动、纯油车型,但需根据车机安卓版本选择对应版本,安卓4系统需安装PROMini版,安卓5及以上可直接安装本页面提供的这个版本

嘟嘟桌面PRO比亚迪专享版收费吗

主题自定义、车况监控、语音控制等本地基础功能是完全免费,无广告干扰

车辆实时定位、行程记录、地理围栏通知等功能需订阅会员才能使用

嘟嘟桌面PRO比亚迪专享版能卸载吗

可通过车机设置 - 应用管理直接卸载

若遇权限问题,可尝试恢复出厂设置或联系售后协助

部分车型需安装其他桌面应用覆盖卸载,操作前建议备份重要数据

嘟嘟桌面其他版及安装桌面注意事项

跟普通软件一样,点击此处下载相应个版本安装即可

警告:某些车型的车机限制安装第三方软件,具体能否使用需要自己尝试

  • 查看自己的车型,嘟嘟桌面Pro版专享版包括:比亚迪专享版、风神专享版、领克专享版、哈弗专享版,跟原车车机做了适配,如果你属于以上车型选择对应的专享版下载使用。
  • 其他车机查看自己的车机安卓版本号及车机种类,根据自己的车机安卓版本号来确定使用哪个版本的车机桌面,其次根据自己的喜好选择喜欢的桌面。
    • 安卓4可安装版本:[嘟嘟桌面PRO Mini]、[嘟嘟桌面普通版]、[嘟嘟桌面Mini版]。
    • 安卓5及以上所有版本均可安装[嘟嘟桌面PRO]、[嘟嘟桌面PRO Mini]、[嘟嘟桌面普通版]、[嘟嘟桌面Mini]
    • 竖屏车机:[嘟嘟桌面普通版]或者[嘟嘟桌面Mini版]
    • 车机是安卓9或者安卓10并且是公签机器,可安装公签版(公签版跟PRO版一样只是多了画中画功能)。
  • 如果你无法确定自己的车机安卓版本号,可先下载[嘟嘟桌面PRO]如果无法安装再分别尝试[嘟嘟桌面PRO Mini]、[嘟嘟桌面普通版]、[嘟嘟桌面Mini]。

注意:

占用内存大小:[嘟嘟桌面PRO]>[嘟嘟桌面PRO Mini]>[嘟嘟桌面普通版]>[嘟嘟桌面Mini]

嘟嘟桌面订阅会员功能

嘟嘟桌面会根据功能收取订阅会员服务费,订阅会员额外提供以下服务

  • 车辆实时定位
  • 行程在线记录
  • 地理围栏通知
  • 共享车机控制和定位
  • 不限制主题的下载次数
  • 比亚迪专享版,额外提供增强型导航栏,3D车况功能
  • 领克专享版,哈弗专享版,额外提供增强型导航栏功能
❌