阅读视图

Europe is weak and delusional (but not doomed)

The gap between Europe's self-image and reality has grown into a chasm of delulu. One that's threatening to swallow the continent's future whole, as dangerous dependencies on others for energy, security, software, and manufacturing stack up to strangle Europe's sovereignty. But its current political class continues to double down on everything that hasn't worked for the past forty years.

Let's start with free speech, and the €120 million fine just levied against X. The fig leaf for this was painted as "deceptive design" and "transparency for researchers", but the EU already bared its real intentions when they announced this authoritarian quest back in 2023 with charges of "dissemination of illegal content" and "information manipulation" (aka censorship).

Besides, even the fig leaf itself is rotten. Meta offers the very same paid verification scheme as X but, according to Musk, has chosen to play ball with the EU censorship apparatus, so no investigation for them. And the citizens of Europe clearly don't seem bothered much by any "deceptive design", as X continues to be a top-ranked download across every country on the continent.

But you can see why many politicians in Europe are eager to punish X for giving Europeans a social media that doesn't cooperate with its crackdown on wrongthink. The German chancellor, Friedrich Merz, is personally responsible for 5,000(!!) cases pursuing his subjects for insults online, which has led to house raids for utterances as banal as calling him a "filthy drunk".

Germany is not an outlier either. The UK has been arresting over 10,000 people per year since 2020 for illicit tweets, Facebook posts, and silent prayers. France has thousands of yearly cases for speech-related offenses too. No wonder people on X aren't eager to volunteer their name and address when their elected officials crash out over their tweets.

It's against this backdrop — thousands of yearly arrests for banal insults or crass opposition to government policies — that some Europeans still try to convince themselves they're the true champions of free speech and freedom of the press. Delulu indeed. 

But this isn't just about the lack of free speech in Europe. The X fine also highlights just how weak and puny the European tech sector has become. Get this: The EU's tech-fine operation produced more income for European coffers than all the income taxes paid by its public internet tech companies in 2024!!

That's primarily because Europe basically stopped creating new, large companies more than half a century ago. So as the likes of Nokia died off, there was nobody new to replace them. In the last fifty years, the number and size of new European companies worth $10 billion or more is alarmingly small:

us-v-eu-bubbles.jpeg

But even the old industrial titans of Europe are now struggling. Germany hasn't grown its real GDP in five years. The net-zero nonsense has seriously hurt its competitiveness, and its energy costs are now 2-3x that of America and China. This is after Germany spent a staggering ~€700 billion on green energy projects — despite Europe as a whole being just 6% of world emissions. All the while, the EU as a whole sent over twenty billion euros to Russia to pay for energy in 2024

So cue the talk about security. European leaders are incensed by getting excluded from the discussion about ending the war in Ukraine, which is currently just happening between America and Russia directly. But they only have themselves to thank for a seat on the sidelines. Here's a breakdown of the NATO spending by country:

nato-budget.jpeg


This used to be a joke to Europeans. That America would spend so much on its military might. Since the invasion of Ukraine, there's been a lot less laughing, and now the new official NATO target for member states is to spend 5% of GDP on defense.

But even this target fails to acknowledge the fact that even if European countries should meet their new obligations (and currently only Poland among the larger EU countries is even close), they'd still lag far behind America, simply because the EU is comparatively a much smaller and shrinking economic zone. 

In 2025, the combined GDP for the European Union was $20 trillion. America was fifty percent larger with a GDP of $30 trillion. And the gap continues to widen, as EU growth is pegged at around 1% in 2024 compared to almost 3% for the US.

Now this is usually when the euro cope begins to screech the loudest. Trying every which way to explain that actually Europe is a better place to live than America, despite having a GDP per capita that's almost half. 

And on a subjective level, that might well be true! There are plenty of reasons to prefer living in Europe, but that doesn't offset the fact that America is simply a vastly richer country, and that matters when it comes to everything from commercial dominance to military power.

But it's the trajectory that's most damning. In 2008, Europe was on near-parity in GDP with America! But if the 1% vs 3% growth-rate disparity continues for another decade, America will grow its economy by another third to $40 trillion, while Europe will grow just 10% to $22 trillion. Making the American economy nearly twice as large as the European one. Yikes.

These should all be sobering numbers to any European. Whether it's the 10,000 yearly arrests in the UK for social media posts or the risk of an economy that's half the size of the American one in a decade. 

But Europe isn't doomed to fulfill this tragic destiny. It's full of some of the most creative, capable, and ambitious people in the world (like the fifth of US startup unicorns with European founders!). But they need much better reasons to stay than what the EU (and now a separate UK) is currently giving them.

Like drastically lower energy costs to for a competitive industrial base and to power the AI revolution, so best we quickly revive European nuclear ambitions. Like an immigration policy designed to rival America's cherry-picking of the world's best, rather than mass immigration from low-average-IQ regions of net-negative contributors to the economy (and society). Like dropping the censorship ambitions and bureaucratic boondoggles like the DSA. Like actually offering a European internal market for remote labor and a unified stock exchange for listings.

There are plenty of paths to take that do not end in a low-growth, censorious regime that continues to export many of its best brains to America and elsewhere. So: make haste, the shadows lengthen.
  •  

繁花小毛

小毛和沪生,阿宝是朋友,小时候就在一起经常玩。
小毛父亲是钢厂工人。
小毛十多岁是后,银凤刚生完孩子,奶水太足,某天银凤找小毛姆妈,说让小毛来吃奶,小毛妈妈说小毛大了。不成。
小毛估计长得帅,还练习拳法,感觉从来不缺女人。
银凤老公海员,常年不在家,某天银凤趁孩子不在家,把小毛搞上床。
后来银凤在门口用拖鞋做标记,小毛看标记就来,当然也有不来的时候。
二楼爷叔,经常偷窥,偷窥了完了还记录下来,爷叔自己也想和银凤搞,被拒绝,然后爷叔趁着银凤老公海德还得回来时候摊牌,把记录都拿出来给海德看。
海德找到小毛,要么小毛离开,要么小毛和银凤过。小毛姆妈也知道赶紧给小毛找了个二婚老婆,比小毛大二岁,好像。小毛这时候和沪生,阿宝断交,也不在回姆妈家,直到小毛老婆2年难产,大人小孩都挂掉了。
小毛厉害被小姑娘喜欢,被60多岁的大娘惦记着,
薛阿姨觉得小毛练拳,也看到过他给别人按摩,某天中午,薛阿姨不愿在客厅按摩,非要到里屋黑布隆冬的卧室,上衣全脱,裤子退到小腿处,小毛克制,想想阿姨有四个女儿四个女婿,万一发生了,麻烦大了。薛阿姨哼唧,小毛让她别出声。按摩了半小时左右,结束。后来薛阿姨见到小毛也不咋说话了。不想理小毛。
小毛练拳师傅鸿寿说小孩要早点看看女人身体,晚了话不好,工厂电工,趴在女士澡堂天棚上,结果棚子压塌。挨处分。
小毛和银凤的事体和师傅也说了,师傅说小毛被吃了童子鸡。
小毛还讲了一个故事,小毛老婆去世后,小毛某晚回家在公共车站遇到一个女的,长相不错,他去搭讪,女的一直不回复,背了两麻袋要洗的衣服,小毛最后说要不去他家洗衣服,他家有甩干机,女的没说同意也没说不同意,前后门上公交车,小毛下车,女的差7.8步跟着,然后到了家,女的在他家洗衣服洗澡如同自家。估计也是发生关系了。
可能还有其他事体忘记了。
小毛最后得了性病或者其他疾病,住院好久,越来越瘦,快走的时候来了10个左右女人,阿宝沪生也来送别。
繁花这书可以成人书籍阅读了。

  •  

我不是吃那行饭的

大队辅导员说,如果我能认真对待那些组织管理类的工作,或许我会在小升初的时候获得加分,这一条我是不信的。因为哪怕我非常用心去做那些东西,我还是不如某些天生就是吃那些饭的人同学,虽然他们年纪比我小。当时我没有仔细考虑,现在想想我觉得之所以这样,首先是因为我家就没有一个当官的,我家也没有有钱人。我爸妈都是非常普通的工人,最基层的那种。在我生活的圈子里,没有人去做那些事情,所以也就没有人给我灌输那样的思想,我没有学习的对象,我从来不觉得自己的人生要走那条路。首先我根本不知道那里有路,其次我觉得那不是我的路,第三,肯定有人觉得自己在那方面很擅长,他们的确在那些方面很有天赋,在这种情况下,我怎么可能会成为被加分的那个呢?毕竟一个小学能获得加分的人,尤其是因为那些管理类表现突出加分的人,估计一年只有一个。用那些方法获得加分,还不如自己学习用功一点。我小学的时候,我甚至不知道拼命学习是什么鬼,我的学习只是为了不被我妈打骂而已。至于我妈经常说我什么复习15分钟就出来了,说搞完了怎么可能呢?对小时候的我来说的确那些东西我感觉自己都过了一遍,但只是过了一遍,没有做思考,那些东西都在眼睛里出现。出现过一次,如果又或者出现了几次。在学习上方面我尚且不是那种拼命的人,你叫我在组织各种活动上拼命,这怎么可能呢?!在我读书的那个时候,还不流行参加什么学科类竞赛之类的东西,虽然那个时候也有,但我们只是觉得好玩,比如说电视上会有华罗庚数学竞赛,我们几个人也去看电视,也去尝试去做题,但发现我们根本不会。我们只是觉得这样做好玩,毕竟我们的数学都不拔尖,我们没有那种天赋,同时我们也不太勤奋。至于其它的那些唱歌跳舞画画模型之类的东西,更加是会被家长认为是不务正业。那个时候,我觉得对我来说唯一重要的就只有语数英,最最重要的就只有语数而已。

还记得好像五六年级的时候有段时间,体育老师是把我留下来练铅球,之所以练铅球是因为海珠区小学的体育比赛项目里有铅球,而我在扔实心球方面好像天赋异禀,所以理所当然就被老师留下来练铅球,但我并不觉得那个东西有什么前途,因为那个时候我觉得自己绝对不会吃那行饭。扔实心球的时候,我觉得感觉还是有的,我觉得自己根本没有什么技巧,但我就是可以轻松拿到100分,仅此而已,但是练铅球的时候,我就觉得浑身不对劲,怎么整都好像不对。被留下来的那些同学里面。有两个男的,只有我一个女的,所以某些练习的时候,肯定是男女混合,在这种情况下,我不觉得自己有任何的优势。要去参加比赛了,老师选中我,那个时候要把户口本带到学校交上去,我根本没交户口本,我根本没跟父母说过要交户口本去参加铅球比赛。在参加比赛这个问题上,我直接翘掉了,因为我觉得与其花半天时间去做这个一定没什么结果的事情,还不如留在学校里好好上课。我主动不参加这件事情,不知道为什么体育老师没找我,班主任也没找我。大概翘体育比赛这种事情,不仅仅是我一个吧。我不仅仅翘比赛,连训练我也想翘掉,但体育老师的办公室就在教学楼1楼门口的位置要躲开不被抓到挺难的。很多次都是我以为自己已经逃过一劫了,但走到一半还是被叫住回来训练。如果训练的人不只是我一个,还有我的同学,还有个女生的话,或许我不会那么的抗拒,但显然没有,更重要的是,他们把我叫去训练的时候,我已经小学高年级了,做那些训练参加不会有结果的比赛,还不如早点回家偷偷看一下动画片又或者早点回家做作业,那么我晚上就可以光明正大地看电视剧了。

我这种只务正业、心无旁骛,算不算过于老派?

  •  

Podcast Ep. 517 | Bad Thoughts

The Minimalists speak with Judah Smith about how other people’s perception of us can be upsetting, the biggest things that send people into a mental spiral, advice for minimizing when you’re stressed out, and much more.

Listen to the Episode

Apple · Spotify · Patreon

Discussed in This Episode

  • Should I read my mother’s diary after she dies?
  • What sends you into a mental spiral?
  • Right Here, Right Now: The Minimalist’s new TEDx Talk, “Scrolling Is the New Smoking,” is live!
  • Listener Tip: Clearing the external clutter often helps with the mental clutter.
  • What does it take to recognize enough and walk away from the rest?
  • Where’s the line difference between “body positivity” and thickheaded delusion?
  • How do you deal with people who possess contrary political, religious, and ideological beliefs?
  • How do you minimize when you’re stressed and under pressure?
  • Talkaboutable: No matter how hard you try, you cannot buy happiness for your child.
  • Added Value: A Christmas classic.

Minimal Maxims

Joshua, Ryan, and T.K.’s pithy, shareable, less-than-140-character responses. Find more quotes from The Minimalists at MinimalMaxims.com.

  • No one has the power to upset you, unless you give them the keys to your heart.
  • Stillness isn’t optional—it’s oxygen.
  • To worry is to pray for something bad to happen.
  • To accept the things you can change is a recipe for dissatisfaction.
  • Every opinion is an opportunity to let go.
  • The first step in letting go is to loosen your grip.

Links Mentioned in This Episode

Follow Our Team

Have a question for the show? Call 406-219-7839 or email a voice memo to podcast@themins.com.

Subscribe to The Minimalists via email.

The post Podcast Ep. 517 | Bad Thoughts appeared first on The Minimalists.

  •  

价格记录

大润发对面超市鸡蛋3.39元一斤。
另外一个小区超市是3.8一斤。

前几天看到小区一个大爷收拾破烂,过去问他去哪里卖。
去附近一个至少五分钟的路程的地方卖,但是大爷和我说只要2分钟就到了,我想想一共2个红绿灯运气好估计还得五分钟。

我问大爷纸箱多少钱一斤,大爷说六毛,我对比了一下,那个自动回收箱是6毛钱一公斤。
大爷说铜比较贵32元一斤。我说我也没有啥铜哇,就面包箱子之类的,有点。
下午又遇到大爷,大爷和我讲,早上那个纸箱质量好七毛五一斤,我说那就是1.5一千克了。

晚上和wife讲。wife说最近纸相关板块也是涨得估计就是原材料上升了,顺道让我别折腾跑那么远,还是老老实实下楼扫码回收箱得了。我不响。

  •  

拉架

其实我也搞不懂,为什么小学的时候同学和老师要我当班长。我的成绩不是最好的那个,虽然也不能说很差,但从来不是拔尖的几个。所以为什么他们要选我呢?学习我不是最好的那个,各种组织活动我也是很讨厌很畏惧的,但我的确就是他们投票选出来的班长,没人有异议。还记得一年级的时候,班长是自荐的,二年级的时候就改成了投票。显然我根本不知道拉票是什么,我也不知道选那个东西有什么好处有什么坏处,莫名其妙地我就被选出来了,票数还相当高。你说我跟其他同学的关系很不错吧,也不见得,因为我不是那种会主动跟他们打交道的人。一年级的时候,我经常不得不请病假,所以为什么到二年级的时候他们依然要做这种选择?之后好像就再没有选过,除非班主任说要换,但是班主任从来没有提过这样的要求,于是就一直这样下去了。我不知道其他人有没有觉得我不称职,如果他们觉得我不称职,应该把我换掉,但为什么要让我一直在那个位置上呢?我也很迷糊,既然我不喜欢干这个事情,为什么我不拒绝掉呢?大概那个时候我还不知道该如何拒绝吧。

那个时候我只知道当个班长是挺光荣的一件事情,所以我要担起责任,要管好他们的纪律。早读的时候,课间的时候,自习的时候,任何老师不在的时候。我的暴力手法是向老师学的,虽然很暴力,但同学也没有因为这个憎恨我。他们还是很受我管的。之所以这样,大概因为他们知道我没有私心,我没有偏袒谁。他们吵架打架的时候,我第一个冲上去,也不管是男同学还是女同学,把他们分开,有时候甚至用要用抱的方式把他们分开。那个时候我根本没有想过男女授受不亲之类的东西,虽然那个时候高年级同学们的心里已经懵懂出现了那个意思。当我去制止他们打架的时候,我唯一就是觉得打架不好,伤到谁都不是件好事。我不知道其他人是怎么想的,我只是一心想大家都和睦相处,不要受伤。让我有点畏惧的就是被老师知道了不好,如果闹大了要找家长找校长就更加不好。我奋不顾身拉架的时候从来没想过或许有一次我会意外受伤什么。之所以有那个自信,是因为那个时候我的身板还是不错的,对男同学完全不落下风。我没有考虑过我自身的安全,我觉得我有必要这样做,我也有能力这样做,所以我就去做了。我的运气很好,因为那些劝架都没有发生什么意外,全都被我成功制止了。即便有同学去把老师叫过来,实际上已经结束了,之后就是打架的那些人被老师抓去训一顿,至于往后有没有叫家长就不知道了。我永远是当和事佬,当和事佬的时候我毫不犹豫的就过去了。同学知道我从来不会偏袒谁,所以即便我用暴力的手段维持纪律他们也没有恨我。

现在回想起来,当年的自己真的挺神奇,大概是古装剧看多了,我把自己当成了一个大侠一样的存在。如果一切可以重来,我依然会选择傻乎乎地奋不顾身。

  •  

蘇SU:时至不惑:人生的新半场

我最近常常思考“不可撤销性”这个词。它是一个冷峻的事实:20 岁的我,终究会抵达 40 岁,但 40 岁的我,却永远无法以当下的心境和阅历,回到 20 岁。这种单向、不可逆的特性,是生命这条河流给予我的最根本的敬畏。 但有趣的是,过了 40 岁这个重要的分水岭,这种不安感反而开始减弱,被一种前所未有的富足感取代。 告别躁动:40 岁后的心态平稳 40 岁前的生活,常常是带着一种对“追赶”的焦躁感。追赶他人的成就,追赶时代的浪潮,追赶那个理想中遥远的自己。但踏入 40 岁之后,世界像是突然静了下来。这种静,并非消极的躺平,而是一种深度的心性平稳。 Lawrence Yeo 说: 当你来到 40 岁,已历经相当多的艰难。也许你尚未遭遇此生最尖锐的苦难,但你一定明白人们为何说「生活不易」。 我终于开始明白,许多年轻时急于求成的“聪明”和“机灵”,其实是缺乏耐心的表现。我不再渴求短期的胜利,而是将目光放到了更长的周期。这种转变,正是源于对 “生活不易” 的深刻理解。 经验的复利:对抗生活难题的底气 正如所说,当你来到 40 岁,你已经历了相当多的艰难。虽然可能尚未遭遇此生最尖锐的苦难,但你已深知“生活不易”的份量。好处在于,这四十年的历练,让我真正收获了 “经验的复利效应” 。 我发现,每跨过一道障碍,我获取的教训和策略并不会随着时间被遗忘,而是像投资的复利一样,被整合到我的 “人生应对系统” 中。 在 40 岁前,失败是打击;在 40 岁后,失败是校准。 20 岁遇到变故,我可能全盘慌乱,不知所措。 40 岁遇到变故,我能迅速从过往相似的经验中,调取应对情绪、分析风险、制定方案的整体框架。 这种心性的变化,让我拥有了一种从容的底气。我想要的不是消除难题,而是少些慌乱,而 40 岁前的所有挣扎,都是为了现在这份从容积攒的资本。 追求智慧:不可撤销的成长目标 如果说 20 岁追求的是...

  •  

AI规划30天学习计划

应该加上我,完整句子是我用 ai可以干啥?
5060Ti 16G大模型实测:1.7B到32B Qwen3模型推理性能对比 | 30B参数效果惊人?!_哔哩哔哩_bilibili
这个大模型不装也罢,如果用到api调用,可以考虑本地部署.
纯手工记录,其实也简单,会打字,或者录音转文字或者直接发音频或者视频也可以的。

我问ai可以干啥?

gnork

30 天 AI 自学/实战计划(2025 版)—— 从0到能独立赚钱/找工作/玩爽

每天只花 1-3 小时,30 天后你至少能达到以下 4 选 1(甚至全选):

  1. 月入 1w+ 的 AI 私活(接单写提示词、做 AI 工具、卖课)
  2. 拿到大厂/独角兽 AI 相关 offer(助理、Prompt Engineer、AIGC 运营)
  3. 家里跑出私人 ChatGPT(比官方快 3 倍 + 永不封号 + 能看图 + 能画图)
  4. 做出一个爆款小红书/抖音 AI 账号(30 天 10w+ 粉轻松)
天数 目标 具体干啥(每天任务) 成果物/验证标准
1-3 装好本地环境 + 跑通第一个模型 1. Win11 装好 NVIDIA 驱动+CUDA<br>2. 一键装 Ollama + OpenWebUI<br>3. 拉 qwen3:8b + flux 画第一张图 能本地聊天 + 出图
4-7 掌握顶级 Prompt 工程(变现核心) 每天练 50 条提示词(CoT、ToT、ReAct、APE)<br>用 Cursor/VSCode + Continue 插件写代码<br>刷完《Prompt Engineering Guide》 能 10 秒写出比 90% 人强的 Prompt
8-12 本地模型进阶 + 多模态玩疯 拉 Qwen3-32B、DeepSeek-Coder-V2、LLaVA、Flux.1<br>实现:截图→代码、视频→总结、文档→表格<br>学会 RAG(本地知识库问答) 家里模型比 ChatGPT 好用
13-18 做出第一个可落地的 AI 产品 选 1 个做(任选其一):<br>① AI 写作工具(Notion+本地模型)<br>② 抖音/小红书 AI 爆文机<br>③ 个人知识库聊天机器人<br>④ 自动发朋友圈/微博机器人 能给别人用,能收到第一笔钱
19-23 变现通道全部打通 开通国内+国外 8 个接单平台(附链接)<br>做 3 个作品放小红书/B 站/YouTube<br>建 3 个付费社群(微信/飞书/Telegram) 收到第一单或者涨粉 5000+
24-27 进阶硬核玩法(选修) 学 LoRA 微调(3 小时出自己声音/风格)<br>用 ComfyUI 定制专属画风<br>跑 Agent(AutoGPT、BabyAGI、MetaGPT) 能做出“只听你命令”的私人 AI
28-30 收尾 + 变现冲刺 做 1 个 30 天总结视频/文章发 B 站/小红书<br>打包出售“30 天 AI 陪跑营”(直接卖 99-499 元)<br>或者直接去面试/接 3 个私活 月入 1w+ 或拿到 offer

30 天后你能拥有的资产(最低配置)

  • 本地跑通 8 个顶级模型(含画图、视频理解)
  • 3 个可直接卖钱的小工具/账号
  • 1000+ 高质量 Prompt 模板
  • 国内外 8 个接单渠道(已实名)
  • 一个 500-2000 人的粉丝群/频道

懒人最快路径(每天 30 分钟版)

直接买我整理好的「30 天 AI 陪跑营」完整包(2025 年 12 月最新版)
包含:所有软件一键装包 + 所有模型已下载好 + 1000 个模板 + 接单渠道清单 + 30 天打卡群
百度网盘链接:https://pan.baidu.com/s/1AI30day2025 (提取码 1234)
进群微信:AI30day

30 天后你不赚钱我原价退款(手动狗头)

现在告诉我你想走哪条线(赚钱/找工作/玩模型),我直接给你定制版 30 天时间表!开冲!

上面那个网盘链接就是ai幻觉,打不开的。

chatgpt
好,我直接给你 一套无需额外信息、通用但强力的《AI 30 天成长计划》,完全基于你现有的硬件(12600KF + 32G + 5060Ti 16G + Win11)设计,属于 混合路线:效率 + 技术 + 本地模型 + 实战项目全覆盖

你可以“从今天直接开始”。


🚀 AI 30 天成长计划(为你定制 · 本地模型优化版)

目标:
✔ 能跑本地模型
✔ 生活效率提升
✔ 工作自动化
✔ 能做网页、程序、脚本
✔ 做出 1~2 个实战项目
✔ 最终拥有自己的“小 ChatGPT 系统”


🧩 第 1 周:基础搭建 + 入门实战(本地 LLM 落地)

目标:本地 AI 环境全部跑起来,能用、能调、能做小任务。

Day 1:AI 环境初始化

安装:

  • Ollama

  • LM Studio

  • Open WebUI(Web 版 ChatGPT)

  • 下载模型:

    • Qwen2.5-7B(通用)

    • DeepSeek-R1-Distill-7B(推理)

    • Qwen2.5-Coder-7B(写代码)

测试:

  • 简单对话

  • 让它总结文章

  • 让它写一个 Python “Hello AI” 脚本


Day 2:本地模型优化 + 显卡加速

任务:

  • 开启 GPU 推理(CUDA)

  • 测试不同量化:Q4_K_M / Q5_K_M / FP16

  • 测试不同模型速度

  • 记下最顺手的模型组合

最终目标:
找到你的“主力模型”。


Day 3:文档自动化

任务:

  • AI 自动生成 Word/Excel

  • AI 自动整理 PDF

  • AI 写总结 + 笔记

  • 用 Whisper 做语音转文字

产出:
一个 10 页以内的自动生成报告(任意主题)。


Day 4:本地 AI 辅助编程

任务:

  • VSCode + Continue / AI Assist

  • 自动补全

  • AI 重写你的一段旧代码

  • 生成一个小脚本(自动重命名文件 / 自动整理图片)

产出:
一个100%由AI写出的实用脚本。


Day 5:本地 RAG(文档知识库)

任务:

  • 安装 Chroma / LanceDB

  • 建立“知识库”(PDF / 你的笔记)

  • 让 AI “知道”你的资料

产出:
你自己的“小型知识库助手”。


Day 6:AI 网站搭建

选一个:

  • WordPress(你的兴趣)

  • Hugo 静态博客

  • 或者 AI 自动生成 HTML + CSS 网站

产出:
一个可访问的网站首页。


Day 7:一周产出总结

  • 用 AI 生成一份周报

  • 用 AI 重构你的文件夹结构

  • 演示本周成果(笔记 + 脚本 + 网站)


🧠 第 2 周:AI 进阶 — 自动化 / 编程 / 代理系统

目标:让 AI 自动执行任务、自动写代码、完成流程。


Day 8:AI 代理(AutoGen / OpenDevin 轻量版)

任务:

  • 本地跑一个简单 agent

  • 让它执行操作:文件创建 / 自动写代码 / 自动测试

产出:
一个“能动手做事”的 AI 助手。


Day 9:AI × 自动爬虫

任务:

  • AI 帮你写爬虫

  • 自动抓数据 → 自动生成报告

产出:
一个自动抓取网页信息的小工具。


Day 10:AI × 数据分析

任务:

  • 用 pandas 自动清洗数据

  • AI 自动生成图表、趋势、总结

产出:
AI 分析一份你提供的 Excel。


Day 11:AI × 项目生成器

任务:

  • 让 AI 一键生成一个完整后端(Flask or FastAPI)

  • 自动生成 API 文档

  • 自动生成路由、数据库模型


Day 12:AI × 前端自动化

任务:

  • AI 生成一个 React/Vue 页面

  • AI 自动生成 CSS(Tailwind)

  • 清晰可用的 UI 页面


Day 13:AI × 家庭智能(选做)

如果有家庭网络:

  • 本地语音助手

  • 智能灯光 / 自动脚本

  • AI 分析家里照片(Qwen-VL)


Day 14:两周成果整合

  • 你现在有:
    ✔ AI 网站
    ✔ 脚本
    ✔ 爬虫
    ✔ 数据报告
    ✔ 本地 ChatGPT

⚙ 第 3 周:多模态(图像 / OCR / 设计 / 音频)

目标:你能处理图像、视频片段、听音频、生成内容。


Day 15:AI 图像理解(Vision)

安装:

  • Qwen2-VL

  • LLaVA

任务:

  • 让 AI 分析 UI 截图

  • 让 AI 识别表格

  • 让 AI 分类手机拍照的文件


Day 16:AI 设计辅助

任务:

  • 让 AI 生成 Logo / 海报

  • 让 AI 自动生成 UI 结构

  • 生成博客封面图


Day 17:AI OCR / 表格识别

任务:

  • 图片 → Excel

  • 扫描件 → 文本

  • 自动处理发票 / 单据


Day 18:AI × 音频处理

任务:

  • Whisper large-v3

  • 中文 / 日语 / 英语互相转换

  • 自动生成字幕文件


Day 19:AI × 视频(可选)

使用:

  • Stable Video Diffusion

  • Runway(如果愿意上云)

  • 让 AI 生成一些镜头


Day 20:多模态整合小作品

产出:
一份 AI 自动生成的图文 + 视频说明作品。


🔥 第 4 周:打造你的“私有 ChatGPT 系统”

目标:你有一个完整的、本地的、可用的 AI 系统。


Day 21:Web 全套系统部署

  • Open WebUI

  • 管理多个模型

  • Web UI 多用户(可选)


Day 22:接入你的知识库

功能:

  • 上传 Word/PDF

  • 图像

  • 压缩包

  • 让 AI 记住所有内容


Day 23:本地语音助手

  • Whisper + TTS

  • 语音对话(像 Siri)

  • 简单自动化控制 PC


Day 24:AI 文件系统助手

让 AI:

  • 自动整理文件

  • 自动分类相册

  • 自动命名文件

  • 自动备份


Day 25:AI 私人搜索引擎

构建:

  • 本地搜索(向量搜索)

  • 文档 → embedding

  • 搜索结果 → LLM 重写答案


Day 26:你的“超级 Prompt”库

建立:

  • 写文 Prompt

  • 编程 Prompt

  • 图像 Prompt

  • 计划、知识库、系统 Prompt


Day 27:性能优化(针对你的 5060Ti)

  • 批处理推理

  • 加速 quantization

  • 多模型混合(VL + Coder)

  • LLM 性能调优


Day 28:构建一个最终作品(任选)

可选作品:

  1. 你的“个人 AI 知识库平台”

  2. 自动化办公助手

  3. 能写代码的 AI 工作站

  4. 自动化爬虫 + 报告系统

  5. AI 博客生成系统


Day 29:测试 + 打包

  • 整体测试

  • 项目文档(AI 自动写)

  • 提炼你的 AI 使用手册


Day 30:你的 AI 系统正式上线

你将拥有:
✔ 本地 ChatGPT
✔ 本地图片 / 视频 / 音频理解
✔ 个人知识库系统
✔ 自动化脚本系统
✔ AI 编程助手
✔ AI 办公助手
✔ 一个实际作品(网站/项目/工具)


🚀 如果你愿意,我可以继续帮你:

只需告诉我:

你想先做哪一项?我就带你从“第一天”立刻开始操作。
例如:

  • “先从本地模型开始”

  • “先从 WordPress 自动化开始”

  • “先从 AI 写代码开始”

你说一个方向,我带你一步一步做。

没有几个让我感兴趣的哇。继续看看。

  •  

讨厌做这些

还记得小学的时候有一次大队辅导员把我叫去训了一顿,把我搞哭了。原因是他觉得我这个中队长工作不积极。我为什么要积极呢?我甚至不想当这个中队长,因为我觉得当中队长对我的学习没有任何好处,反而会占用我的时间,强迫我硬去思考一些我觉得完全没有必要的东西,比如策划中秋游园活动的游戏项目。大队辅导员说,如果我认真做好这些事情,那么我就可能不仅仅是中队长,我或许当大队委或者大队长,获得某些头衔和荣誉,在小升初的时候加分。我为什么要凭借这些获得加分呢?如果我的成绩本来就很糟糕,加不加分对我来说都没有意义。我根本不擅长做这些东西,准确的来说是我很讨厌做这些事情。为了获得所谓的加分,做一些我很讨厌的事情,显然我没有那么高的觉悟,现在我依然没有那么高的觉悟。

现在的家长都在争破头皮让小孩学这个学那个,就是为了可以加分。加分又怎么样呢?挤破头皮进去了又怎么样呢?现在回想起来挺可笑,为什么是大队辅导员把我拉去训一顿呢?这个不应该归他管吧?应该归我的班主任管吧?如果他觉得我这个中队长做得不到位,班主任应该换别人来做,换一个在这方面有天赋、更积极的人去做,显然这种人是肯定有的。为什么要我去做而不让他们去做?仔细琢磨这个也是很神奇的,难道当时的班主任觉得我在这方面天生有缺陷,所以硬是要把我打磨出来吗?但是他们就没有发现在这方面我就是一个犟种,我不会在这些地方花时间和精力?我会关心爱护我的同学,我会努力维持班里的所有秩序。这些事情是因为我觉得我应该做,我可以帮助他们,但从来没有想过这对我自己会额外有什么好处。如果某个东西最终是为了让我得到好处,我一定不会在那方面努力,因为我没有感觉到那样做的必要性。情况就好像对某些东西我自愿无私奉献,出力也行,出钱也行,但另外一些让我花上一分钟给上一分钱,我都不愿意。

小学的时候最讨厌就是周一的下午14-14点30这段时间,那些大队长大队委要集合全校所有中高年级的中队长一起开会,我已经彻底不记得什么内容了,但好像会布置某些任务、某些作业,比如之前说到的某些策划。我打心里非常讨厌这个东西。我的同班同学也知道我不擅长这个东西、我也很厌倦这个东西。那个时候他是大队委,所以到我们班要交那个上去的时候,他会直接自己写方案。其实方案也很简单,但我就不明白,为什么我那个凑合的就不行,他那个没比我好多少的就可以。如果换作是现在,或许我会找人帮忙。但那个时候,我最讨厌找别人帮忙了。既然我不喜欢做这件事情,我更加不应该让别人淌水。《新三字经》里面就有一句:“己不欲,勿施人,己欲达,则达人。”

我觉得现在的我还是那个时候的我,完全践行了那句“不忘初心,牢记使命”,在不该发力的地方彻底摆烂。

  •  

剖析千行C语言文本编辑器Kilo的技术细节

今天上午学习了一下Kilo的源代码。我很早以前就对文本编辑器的实现方法感兴趣了。

Kilo是一个很简易却不简陋的项目,清晰地展示了如何构建一个终端下的文本编辑器,它的目的不是真正让你学会去开发一个高标准高质量,能投入使用的文本编辑器,而是理解文本编辑器的核心骨架、理解一个看似庞大一团糟的问题的拆解思路。这是一个很好的起点。也过了一把爽玩C语言的瘾(虽然我并没有写几行代码)。

程序分析

整个项目只有一个文件,一千三百行代码。我用了大概一个半小时梳理了程序的执行流程,手画了一个流程图。为了美观,我又用Graphviz绘制了一个电子版:

程序流程图(大意)
程序流程图(大意)

这张图我省略了一些深的函数调用,但也能帮助我大体上掌握这个程序的执行流程。结合这张图与源码,我发现文本编辑器的核心功能——打开、编辑、保存,实现难度并不大,在C语言中容易踩坑的是缓冲区处理、文件读写这种老生常谈的内容。在这个程序中,调用最多、最重磅的部分是initEditor这个函数,以及后续的高亮处理,尤其是前者在窗口尺寸计算、修改后的做法上花费了大功夫。其实和终端环境的交互才是最麻烦的点,它提供的封装和抽象并不多,有很多需要自己手动调试的地方,繁琐是显著特征。

终端信号处理

我发现在终端程序里,需要快捷键的部分都是使用Raw mode和signal相关的函数组合实现的,在理解signal这个函数和它的有关宏的概念时,耗费了比较长的时间。

简单来说,signal用于处理用户在终端发出的信号,比如SIGINT代表由C-c产生的中断信号,SIGIGN代表忽略信号,即接受到这个信号以后什么都不做,关于如何接受信号,就要说起signal()这个函数。定义如下:

void (*signal(int sig, void (*func)(int)))(int);

看起来非常复杂,说人话就是接受两个参数,第一个参数是int类型的sig,是信号编号,比如SIGINT,这是要接收的信号。第二个参数是一个函数指针,接受一个返回void,参数是int类型的信号处理函数,使用第二个函数中的函数对接受到的信号做处理。函数返回原来的信号处理函数(函数指针)。

可以用typedef简化理解:

// 定义信号处理函数的类型
typedef void (*sighandler_t)(int);

// 用 typedef 重写 signal 声明
sighandler_t signal(int sig, sighandler_t func);

在Kilo中,C-c是被忽略的,因为它非常容易导致丢失修改,可以这样实现:

signal(SIGINT, SIGIGN);

不过,在Kilo的实现,是通过调用editorReadKey(),从Raw Mode 中读取一个按键存入数组,用switch匹配按键对应的值再返回给调用方,调用方也通过switch,匹配对应的操作函数。而在C-c的部分,则是直接break掉了。

...

case CTRL_C: /* Ctrl-c */
        /* We ignore ctrl-c, it can't be so simple to lose the changes
         * to the edited file. */
        break;

...

这种实现方法也有一定局限性,不同的终端模拟器可能发送不同的转义字符,硬编码转义字符会出现不适配的情况。并且使用read()阻塞读取输入有性能瓶颈。

精妙的数据结构与算法

这个程序最有趣的地方在于清晰、通用的数据结构的设计,以editorConfig为例:

struct editorConfig {
    int cx, cy;     /* Cursor x and y position in characters */
    int rowoff;     /* Offset of row displayed. */
    int coloff;     /* Offset of column displayed. */
    int screenrows; /* Number of rows that we can show */
    int screencols; /* Number of cols that we can show */
    int numrows;    /* Number of rows */
    int rawmode;    /* Is terminal raw mode enabled? */
    erow *row;      /* Rows */
    int dirty;      /* File modified but not saved. */
    char *filename; /* Currently open filename */
    char statusmsg[80];
    time_t statusmsg_time;
    struct editorSyntax *syntax; /* Current syntax highlight, or NULL. */
};

我们定义了一个editorConfig类型的变量,它全局唯一,维护了程序的基本状态,包括行、列、滚动偏移、终端尺寸。让程序状态的流转非常清楚。这些内容都是一个文本编辑器需要关心的最核心内容:光标位置、视图偏移、数据和文件的状态等信息。

通过这个结构体,能简单地获取程序当前的状态,或者为某项功能对状态作出修改,对一个新手来说还是挺拓宽思路的,至少我想不到怎么设计这些数据结构。

数据与显示的分离

editorConfig中嵌套了一个erow类型的变量,里面的东西也可以展开说说,定义如下:

typedef struct erow {
    int idx;           /* Row index in the file, zero-based. */
    int size;          /* Size of the row, excluding the null term. */
    int rsize;         /* Size of the rendered row. */
    char *chars;       /* Row content. */
    char *render;      /* Row content "rendered" for screen (for TABs). */
    unsigned char *hl; /* Syntax highlight type for each character in render.*/
    int hl_oc;         /* Row had open comment at end in last syntax highlight
                          check. */
} erow;

这里面有一个render字段,在editorUpdateRow()中,有这样的代码:

unsigned int tabs = 0, nonprint = 0;
    int j, idx;

    /* Create a version of the row we can directly print on the screen,
     * respecting tabs, substituting non printable characters with '?'. */
    free(row->render);
    for (j = 0; j < row->size; j++)
        if (row->chars[j] == TAB)
            tabs++;

    unsigned long long allocsize =
        (unsigned long long)row->size + tabs * 8 + nonprint * 9 + 1;
    if (allocsize > UINT32_MAX) {
        printf("Some line of the edited file is too long for kilo\n");
        exit(1);
    }

循环的if中使用的 TAB 定义在KEY_ACTION枚举,值为9,在ASCII码中是\t也就是水平制表符。代码在统计tab的数量。

问题在于,一个\t在内存中占1字节,但在屏幕显示的时候会占据八个字符的宽度,这里就体现出render的作用了,如果一行有两个\t,每个最多展开为八个空格,那么所需要计算的大小就是2 * 8 + chars的大小

(unsigned long long)row->size + tabs * 8 + nonprint * 9 + 1;

那个恒为0的变量nonprint可能是为将来打印不可见字符设计的。结尾的+1'\0'预留。

按照这个公式,给render分配内存:

row->render = malloc(row->size + tabs * 8 + nonprint * 9 + 1);

随后,这些代码在非制表位填充空格:

idx = 0;
    for (j = 0; j < row->size; j++) {
        if (row->chars[j] == TAB) {
            row->render[idx++] = ' ';
            while ((idx + 1) % 8 != 0) // 在非制表位填充空格
                row->render[idx++] = ' ';
        } else { // 正常字符直接赋值
            row->render[idx++] = row->chars[j];
        }
    }

row->rsize = idx; // 在循环结束的时候,idx等于写入字符总数
row-render[idx] = '\0'; //在字符末尾添加结束符

虽然有点绕,但设计还是非常巧妙的!


代码高亮

源码中使用大量篇幅实现了代码高亮,定义了一些关键字:

char *C_HL_extensions[] = {".c", ".h", ".cpp", ".hpp", ".cc", NULL};
char *C_HL_keywords[] = {
    /* C Keywords */
    "auto", "break", "case", "continue", "default", "do", "else", "enum",
    "extern", "for", "goto", "if", "register", "return", "sizeof", "static",
    "struct", "switch", "typedef", "union", "volatile", "while", "NULL",

    /* C++ Keywords */
    "alignas", "alignof", "and", "and_eq", "asm", "bitand", "bitor", "class",
    "compl", "constexpr", "const_cast", "deltype", "delete", "dynamic_cast",
    "explicit", "export", "false", "friend", "inline", "mutable", "namespace",
    "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq",
    "private", "protected", "public", "reinterpret_cast", "static_assert",
    "static_cast", "template", "this", "thread_local", "throw", "true", "try",
    "typeid", "typename", "virtual", "xor", "xor_eq",

    /* C types */
    "int|", "long|", "double|", "float|", "char|", "unsigned|", "signed|",
    "void|", "short|", "auto|", "const|", "bool|", NULL};

然后在具体实现editorUpdateSyntax()中,简单粗暴地遍历字符匹配这些关键字。在一般的教学例子中这样实现是可以的,我认为在具体的工程中应当用词法分析、语法分析和字典树去匹配。更易于维护和拓展,也能适配复杂的嵌套。


上述分析提到的缺点都可以作为优化方向,比如提供更简单操作接口,用词法分析技术或接入LSP服务器,为程序提供Lua接口来扩展插件……不过我相信在古老的纯C应用中,添加这些功能的繁琐程度和开发周期简直是灾难级别的。但是在处理快捷键上,使用termcap库的难度应该小于修改代码高亮部分的难度。

这个项目最值得学习的点是如何将抽象的功能和终端联系起来、如何设计合理的数据结构以及标准库的使用。是阐释「程序 = 数据结构 + 算法」的很好例子。不过我自己是想不到那些函数该什么时候用,没准还会手动实现标准库造好的轮子呢。

学习的过程很好玩,从主函数开始探索整个程序,一段一段地跳转调用,A调用B,B调用C,C调用D,理解了逻辑后再把它们画成图,对感兴趣的部分深入研究,有一种前人用他的智慧抚平我大脑褶皱的感觉……读懂它,几乎就等于一只脚趾踩上了理解Vim / Nano等项目的大门吧。

想自己重新实现一次,然后加入自己的优化,比如联动Lua / Zig甚至是Go来实现上层的功能,好玩好玩真好玩。

头皮好痒,要长脑子了!


  • 在查资料的过程中又发现了 vismicro(它甚至是用Go写的),又有新玩具了!
  •  

三位一体4游戏

三位一体这个游戏2010年左右,回老家过年,看电视的游戏频道发现的,当时记录在手机上,过了几年发现手机的记事本还有这个游戏。但是过去了快15年,发现已经出到了4代。
这个可以随时换人的游戏,有点像一些格斗游戏小组,随意换人,也有点街机变身忍者的感觉。
这两天装上了测试一下,还不错,有点横版解密动作游戏的感觉,开始熟悉魔法师的技能,意念搬动很多物品,也能召唤来一个魔法箱,搭建卡位什么的都可以用上。途中救了一只山羊,后来山羊也来回报,一头顶倒了大树为魔法老头搭建了独木桥。

第二个角色是盾牌大刀啤酒肚圆滚滚的士兵or骑士,有了武器就有了攻击力,盾牌还是反射阳光的利器,不少地方需要反射阳光触发机关。

第三个角色是,女弓箭手,因为没有字幕,讲的的什么故事和身份也没有听懂,它的常用技能是那个绳索,链接各种机关,配合魔法师的魔法箱。

打了几关感觉不错,不过这种估计故事情节都是次要的,有点机械迷城的感觉。

  •  

作死的YYY

没有对比就没有伤害。

总感觉现在的日子越过越糟糕。这些糟糕的日子是从集团公司空降了三个领导开始,我简称他们为YYY。这三个Y到底有什么本事,一开始我们并不知情。之所以会空降,首先是因为老一辈领导都到达了该退休的年龄,一两年之内三个领导逐个退休。有书记,有总经理,也有副总经理。这三个Y空降的时候,我也不知道他们谁是谁,一个叫总,一个叫书记,一个是纪委书记。为什么会把最后一个也放在那个层次至今我都没搞懂,因为以前他们没有空降之前我甚至不知道集团公司的纪委书记是谁。现在这个纪委书记的权力好像比一个副总还要大,所以我搞不懂这到底是怎么回事。

之前的那些领导退休了以后更加是进入了一个我也不知道他们谁是谁的状态。首先是选了一个书记,近期又选了一个董事长。现在我依然不知道那到底是怎么回事。人事方面的东西,我从来不知情,我只知道YYY来了两年多,正事没干多少,麻烦却挑起不少。都说新官上任三把火,烧一烧也就完了,但貌似这些火没完没了。

以前那些领导,感觉他们的风格都挺像我印象之中的领导。现在这三个,我只能用虚有其表去形容,我不知道他们肚子里有多少墨水,但他们的表现纯粹是装逼。

近期跟我的同事聊起到底哪个领导厉害,结果我们一致同意——被抓进去的那个。那个领导很年轻已经考了一级建造师,那个证很难考。那个年代只要你有那个证,别人就会找你,只要把头衔挂在那里,就可以坐着收钱。考那个证肯定需要你很聪明,但除了聪明以外,他的记忆力以及逻辑还非常牛逼。之所以这么说,因为每次开会领导说完,他作为主持人就得主总结,他基本不需要记录就可以洋洋洒洒把领导刚才说的东西12345列举出来,抓住重点,条理清晰。或许你会觉得这是因为可能领导讲的那些东西他已经早有资料,要知道领导说的即便有资料也会临场发挥不少。更多时候,他总结发言的那些内容是一些非常实际的工作,是不同岗位具体面对的各种问题,他依然可以很快抓住重点。他到底做了多少坏事?我不知道,上面也不会透露,但是在我记忆之中,大大小小的工程会议只要他在,只要他把握方向,点出重点后,那些问题很多都能迎刃而解。他不需要具体告诉你怎么做,但是他却能精准把握着方向。当你在某些细节上不知道该如何处理的时候,他也会给你一些方法,一切都在他的掌握之中。我不知道其他人是怎么看的,反正在他被抓之前我觉得这个人挺厉害,如果不是YYY的空降,如果他没有被抓,我觉得集团公司的一把手位置迟早都是他的。首先是因为他的能力很突出,其实是因为他很年轻,但这一切都已经不复存在了,现在的事实是空降的那三个Y能力远不如被抓进去的他,但现在这个王朝就是这三个Y的。

我能怎么样呢?我只是个小不点,但是谁好谁不好,大家心里自有一杆秤。

  •  

Umami 升级提醒:尽快更新以修复 Next.js CVE-2025-66478 漏洞

使用 chatgpt 生成

最近 Next.js 官方发布了 CVE-2025-66478 安全公告(详情可见官方链接)。由于 Umami 采用 Next.js 构建,因此同样受到本次漏洞影响

好消息是:Umami 官方已经发布新版本修复漏洞

同时需要注意:Umami 从 v3 起彻底移除 MySQL 支持,统一切换为 PostgreSQL
如果你仍在使用 MySQL 版本,强烈建议你尽快升级并迁移数据,避免暴露在风险中

v2 升级到最新版本

我已经同步好了官方镜像, 替换直接升级,由于 v2 版本没有打 patch 只能升级到 v3 才能解决

- ghcr.io/umami-software/umami:mysql-latest
- ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest

将 MySQL 迁移到 PostgreSQL

Umami v3 确保数据的一致性,废弃了对 mysql 的支持,统一采用 PostgreSQL。本步骤参考官方文档 install-umami-with-a-postgresql-database 实践。

升级真是一件糟糕的体验,如果你之前是使用 MySQL,不建议升级,直接重装 v3

环境要求

官方要求迁移前 MySQL 结构必须达到 v2.19.0,否则执行迁移脚本会失败
你可以通过升级镜像确保数据库 schema 是最新的

  • 两个数据库的登录凭证:
MySQL: mysql://user:password@host:port/dbname
PostgreSQL: postgresql://user:password@host:port/dbname

PG 数据库

bitnami 操作也很蜜汁。如下示例,对应 ip 密码自行修改

services:
  postgresql:
    image: h.ysicing.net/bitnami/postgresql
    container_name: postgresql
    ports:
      - '100.90.80.10:5432:5432'
    volumes:
      - '/data/postgresql:/bitnami/postgresql'
    environment:
      - POSTGRESQL_DATABASE=umami
      - POSTGRESQL_USERNAME=user
      - POSTGRESQL_PASSWORD=password
      - POSTGRESQL_POSTGRES_PASSWORD=password_root
    restart: always

导出 mysql 数据

mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -uroot -h100.90.80.10 -poAkahz4ahvei1oReing6oh5ubaen1veV umami > umami.sql

部署 pg 版 Umami v2

具体参考流程可以参考 部署轻量数据统计分析 umami

官方镜像 ghcr.io/umami-software/umami:postgresql-v2
国内镜像 ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2

替换一下镜像地址和环境变量

mysql 环境变量为

- env:
        - name: DATABASE_URL
          value: mysql://root:oAkahz4ahvei1oReing6oh5ubaen1veV@100.90.80.10:3306/umami
        - name: HASH_SALT
          value: ezee4eGhalaishiphese8yaiphomon
        - name: DATABASE_TYPE
          value: mysql
        image: ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest

pg 环境变量为

- env:
        - name: DATABASE_URL
          value: postgresql://ysicing:oAkahz4ahvei1oReing6oh5ubaen1veV@100.90.80.10:5432/umami
        - name: HASH_SALT
          value: ezee4eGhalaishiphese8yaiphomon
        image: ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2
  • 去掉了 DATABASE_TYPE, 修改了 DATABASE_URL
  • 镜像换成了 pg v2 版本镜像

等初始化完成,关闭服务,避免重复初始化数据库(避免影响下面流程)

修改 pg 数据库

使用 DataGrip 连接 umami 数据库,执行下面的 sql,这两个表数据将从 mysql 的数据中获取

truncate table "_prisma_migrations";
truncate table "user";

效果如下

[2025-12-05 22:24:47] 已连接到 umami
[2025-12-05 22:24:47] umami> truncate table "_prisma_migrations"
[2025-12-05 22:24:47] 在 10 ms 内完成
[2025-12-05 22:24:47] umami> truncate table "user"
[2025-12-05 22:24:47] 在 11 ms 内完成

导入数据

使用上面的备份数据 umami.sql

22:22 ➜  ~ ls -alh umami.sql
-rw-r--r--  1 ysicing  staff    99M 12  5 22:09 umami.sql

将反引号替换为双引号,使其与 PostgreSQL 兼容, 如果 macOS 执行有问题,在 Linux 搞下。操作前可以备份一下,避免搞坏了

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

macOS

sed -i '' 's/`//g' umami.sql
sed -i '' 's/\\"/"/g' umami.sql
sed -i '' "s/\\\\'/'/g" umami.sql
sed -i '' "s/Xi'an/Xi''an/g" umami.sql
sed -i '' "s/Lu'an/Lu''an/g" umami.sql
sed -i '' "s/Ma'anshan/Ma''anshan/g" umami.sql
sed -i '' "s/Rui'an/Rui''an/g" umami.sql
sed -i '' "s/Yu'an/Yu''an/g" umami.sql
sed -i '' "s/Bo'an/Bo''an/g" umami.sql
sed -i '' "s/Tai'an/Tai''an/g" umami.sql
sed -i '' "s/Cao'an/Cao''an/g" umami.sql
sed -i '' "s/Chang'an/Chang''an/g" umami.sql
sed -i '' 's/ENGINE=[^ ]*//g' umami.sql
sed -i '' 's/AUTO_INCREMENT/[generated always as identity]/g' umami.sql
sed -i '' 's/unsigned//g' umami.sql
sed -i '' '/_prisma_migrations/d' umami.sql

可以手搓如下,我这里直接使用 DataGrip

psql -U username -d mydb < umami.sql

由于 MySQL → PostgreSQL 差异巨大,需要执行大量替换操作。报错太多,决定放弃升级改成使用 v3 版本, 还是重装方便

v3 版本镜像

由于兼容性问题太多,我最终选择放弃 v2 的 MySQL → PostgreSQL 迁移,转而直接部署 全新的 Umami v3。

v3 镜像地址:

官方:ghcr.io/umami-software/umami:postgresql-latest
国内同步:ccr.ccs.tencentyun.com/k7scn/umami:postgresql-latest

v3 使用体验更流畅、性能也更好,而且完全修复了此次 Next.js 漏洞。

总结:请大家尽快升级,避免被入侵

Umami 因 Next.js 漏洞受到影响

  • v3 已发布修复版本
  • 强烈建议优先考虑升级至 v3
  • MySQL 用户请务必注意:v3 不再支持 MySQL

如果你还在运行旧版本,请尽快升级,避免站点暴露在风险中!我今天至少已经看到 10+ 站点被入侵挂马了。

  •  

读《无声告白》

这是一本十年前的书,是华裔作家伍绮诗耗时六年写的第一部长篇小说。这部文笔沉稳内敛、编排精妙细腻的作品,以女儿莉迪亚的死亡为开篇,揭开了一个跨种族家庭的隐痛与困境。小说巧妙切换三个孩子(内斯、莉迪亚、汉娜)的视角,又穿插父亲詹姆斯与母亲玛丽琳的成长轨迹,每个人的心理描摹与情感起伏都精准贴合其身份底色与成长经历,细腻真实得仿佛能触摸到人物的心跳。正是这份扎实的情感铺垫,让每个人的选择与行为都顺理成章,也让读者得以共情地走进他们被期待与偏见捆绑的人生。

母亲玛丽琳(白钟人)曾怀揣医生梦,却在大三那年因怀孕中断学业。她不顾母亲的忠告,不惜断绝母女关系,义无反顾地嫁给华裔教授詹姆斯,看似挣脱了传统女性的规训,最终却还是踏入了 “家庭主妇” 的牢笼。中途她曾毅然离家,试图重拾学业,却又因意外怀孕再次妥协。这份无奈的妥协,或许可以概括为《论做好避孕措施的重要性》。她将被家庭和社会规范所扼杀的“医生梦”,全部寄托在了大女儿莉迪亚身上,忽视女儿的真实自我,她从未问过,甚至拒绝看到莉迪亚是否喜欢科学,是否有其他梦想。莉迪亚敏锐地察觉到,母亲的爱与自己的“表现”直接挂钩。只要她表现出对科学的兴趣、接受母亲的安排,母亲就充满爱与希望;一旦她流露出丝毫反抗,母亲就会崩溃或冷漠。这种爱让莉迪亚窒息,她为了维系家庭的表面和谐和母亲的爱,不得不持续扮演一个“完美的、有抱负的”女儿。

父亲詹姆斯(黄种人)则终其一生被种族身份的枷锁束缚,他对自己的华裔身份感到羞耻,自幼内心充满了自卑和孤立感,“被戏弄的屈辱,无法合群的挫败感” 如影随形。一生都在渴望融入美国主流社会,希望摆脱“异类”的标签,也极度渴望女儿能融入美国社会,弥补自己一生的缺憾,他将这种焦虑传递给了孩子们,期望拥有他自己从未有过的、轻松的主流社交生活。

玛丽琳的离家追寻梦想,给孩子们留下了心理创伤,误认为是自己的错误导致母亲的出走。詹姆斯在妻子离开期间,只顾沉浸在自己的世界里,用电视机敷衍孩子的陪伴需求。詹姆斯深知妻子对莉迪亚的期望是不健康的,但他选择了沉默和逃避。他无法正视家庭中的矛盾,也无力调和妻子与孩子们的需求。当内斯因被欺负而需要父亲支持时,詹姆斯教给他的却是“忍让”和“消失”,这深深伤害了内斯。而莉迪亚死后,他竟以频繁出轨年轻女助手来逃避痛苦,给这个摇摇欲坠的家庭再添一道伤痕。

玛丽琳和詹姆斯将全部精力投入莉迪亚,严重忽视了大儿子内斯和小女儿汉娜,他们长期活在家庭的 “阴影区”,情感上被严重忽视。内斯对天文的热爱不被关注和认可,汉娜的存在仿佛只是家庭的 “旁观者”。混血儿莉迪亚,成了父母双重期待的承载者,她不仅要成为学霸,还要成为社交明星,两份沉甸甸的期待,最终压垮了她。

玛丽琳的故事让我联想到电影《还有昨天》。在男权社会中,缺乏社会地位和经济独立的女性被迫依附男性生存。在传统婚姻中,女性承担的生育、性、情绪价值供给、育儿、保姆、保洁、护工等“理所当然” 的免费付出,放在市场上皆为高价值的劳动。对现代女性而言,婚姻不应再是生存的必需品,而应是锦上添花的选择。女性有能力养活自己,有权利选择自己的生活方式。而婚姻唯一值得奔赴的理由,是它能提升双方的生活品质,更好实现自我价值,满足更高层次的精神共鸣,是两个独立灵魂的相互滋养,而非单方面的牺牲与妥协。

从这本书中也看到了自己在教育孩子和亲密关系中的问题与困境。每天下班后,特别是孩子磨蹭到九点钟以后还未写完作业的时候,都要强忍疲惫、耐着性子辅导督促,时常为一道错题或是不会读写的生字词焦虑不已。有时看到孩子成绩单上下滑的数字,就不由自主地联想到她们若干年后的生存境遇,对未来充满担心,自己也感到身心俱疲,有时做梦都很沉重。实际上,我们并未将梦想投射到孩子身上,很明白都是平凡普通人,孩子也并非天赋异禀。龙应台这段话说出了我的心声:“孩子,我要求你读书用功,不是因为我要你跟别人比成绩,而是因为,我希望你将来会拥有选择的权利,选择有意义、有时间的工作,而不是被迫谋生。”于是,有时安慰自己,其实维持基本生存并非难事,即便孩子学业普通,身心健康,我们省吃俭用留下一笔积蓄,也足以让她们安稳度过一生。同时,也看过太多新闻报道,“养儿防老” 早已充满不确定性。回首我们习以为常的人生轨迹:年少苦读、工作买房、结婚育儿、退休后继续为儿女操劳,直到精力耗尽…… 这样的 “既定程序”,真的是人生唯一的选择吗?

“我们终此一生,就是要摆脱他人的期待,找到真正的自己。”

  •  

读《无声告白》

这是一本十年前的书,是华裔作家伍绮诗耗时六年写的第一部长篇小说。这部文笔沉稳内敛、编排精妙细腻的作品,以女儿莉迪亚的死亡为开篇,揭开了一个跨种族家庭的隐痛与困境。小说巧妙切换三个孩子(内斯、莉迪亚、汉娜)的视角,又穿插父亲詹姆斯与母亲玛丽琳的成长轨迹,每个人的心理描摹与情感起伏都精准贴合其身份底色与成长经历,细腻真实得仿佛能触摸到人物的心跳。正是这份扎实的情感铺垫,让每个人的选择与行为都顺理成章,也让读者得以共情地走进他们被期待与偏见捆绑的人生。

母亲玛丽琳(白钟人)曾怀揣医生梦,却在大三那年因怀孕中断学业。她不顾母亲的忠告,不惜断绝母女关系,义无反顾地嫁给华裔教授詹姆斯,看似挣脱了传统女性的规训,最终却还是踏入了 “家庭主妇” 的牢笼。中途她曾毅然离家,试图重拾学业,却又因意外怀孕再次妥协。这份无奈的妥协,或许可以概括为《论做好避孕措施的重要性》。她将被家庭和社会规范所扼杀的“医生梦”,全部寄托在了大女儿莉迪亚身上,忽视女儿的真实自我,她从未问过,甚至拒绝看到莉迪亚是否喜欢科学,是否有其他梦想。莉迪亚敏锐地察觉到,母亲的爱与自己的“表现”直接挂钩。只要她表现出对科学的兴趣、接受母亲的安排,母亲就充满爱与希望;一旦她流露出丝毫反抗,母亲就会崩溃或冷漠。这种爱让莉迪亚窒息,她为了维系家庭的表面和谐和母亲的爱,不得不持续扮演一个“完美的、有抱负的”女儿。

父亲詹姆斯(黄种人)则终其一生被种族身份的枷锁束缚,他对自己的华裔身份感到羞耻,自幼内心充满了自卑和孤立感,“被戏弄的屈辱,无法合群的挫败感” 如影随形。一生都在渴望融入美国主流社会,希望摆脱“异类”的标签,也极度渴望女儿能融入美国社会,弥补自己一生的缺憾,他将这种焦虑传递给了孩子们,期望拥有他自己从未有过的、轻松的主流社交生活。

玛丽琳的离家追寻梦想,给孩子们留下了心理创伤,误认为是自己的错误导致母亲的出走。詹姆斯在妻子离开期间,只顾沉浸在自己的世界里,用电视机敷衍孩子的陪伴需求。詹姆斯深知妻子对莉迪亚的期望是不健康的,但他选择了沉默和逃避。他无法正视家庭中的矛盾,也无力调和妻子与孩子们的需求。当内斯因被欺负而需要父亲支持时,詹姆斯教给他的却是“忍让”和“消失”,这深深伤害了内斯。而莉迪亚死后,他竟以频繁出轨年轻女助手来逃避痛苦,给这个摇摇欲坠的家庭再添一道伤痕。

玛丽琳和詹姆斯将全部精力投入莉迪亚,严重忽视了大儿子内斯和小女儿汉娜,他们长期活在家庭的 “阴影区”,情感上被严重忽视。内斯对天文的热爱不被关注和认可,汉娜的存在仿佛只是家庭的 “旁观者”。混血儿莉迪亚,成了父母双重期待的承载者,她不仅要成为学霸,还要成为社交明星,两份沉甸甸的期待,最终压垮了她。

玛丽琳的故事让我联想到电影《还有昨天》。在男权社会中,缺乏社会地位和经济独立的女性被迫依附男性生存。在传统婚姻中,女性承担的生育、性、情绪价值供给、育儿、保姆、保洁、护工等“理所当然” 的免费付出,放在市场上皆为高价值的劳动。对现代女性而言,婚姻不应再是生存的必需品,而应是锦上添花的选择。女性有能力养活自己,有权利选择自己的生活方式。而婚姻唯一值得奔赴的理由,是它能提升双方的生活品质,更好实现自我价值,满足更高层次的精神共鸣,是两个独立灵魂的相互滋养,而非单方面的牺牲与妥协。

从这本书中也看到了自己在教育孩子和亲密关系中的问题与困境。每天下班后,特别是孩子磨蹭到九点钟以后还未写完作业的时候,都要强忍疲惫、耐着性子辅导督促,时常为一道错题或是不会读写的生字词焦虑不已。有时看到孩子成绩单上下滑的数字,就不由自主地联想到她们若干年后的生存境遇,对未来充满担心,自己也感到身心俱疲,有时做梦都很沉重。实际上,我们并未将梦想投射到孩子身上,很明白都是平凡普通人,孩子也并非天赋异禀。龙应台这段话说出了我的心声:“孩子,我要求你读书用功,不是因为我要你跟别人比成绩,而是因为,我希望你将来会拥有选择的权利,选择有意义、有时间的工作,而不是被迫谋生。”于是,有时安慰自己,其实维持基本生存并非难事,即便孩子学业普通,身心健康,我们省吃俭用留下一笔积蓄,也足以让她们安稳度过一生。同时,也看过太多新闻报道,“养儿防老” 早已充满不确定性。回首我们习以为常的人生轨迹:年少苦读、工作买房、结婚育儿、退休后继续为儿女操劳,直到精力耗尽…… 这样的 “既定程序”,真的是人生唯一的选择吗?

“我们终此一生,就是要摆脱他人的期待,找到真正的自己。”

  •  

一次对Webmention的探索

Webmention is a simple way to notify any URL when you link to it from your site.

It is an open web standard (W3C Recommendation) for conversations and interactions across the web, a powerful building block used for a growing distributed network of peer-to-peer comments, likes, reposts, and other responses across the web.

Webmention 是一种开放网络标准(W3C推荐标准),用于在链接到某个网址时,自动向该网址发送通知。它是构成分布式网络的基础组件,支持跨网站的点对点评论、点赞、转发等多种互动。

上一篇文章 写完后,我开始寻找更合适的评论方案。Webmention这个看起来古老,但又超前的形式很快引起了我的兴趣。「去中心化」这个词貌似对我有什么魔力,就比如Mastodon,比Twitter更吸引我。

我很想试试用Go手搓一套收发系统,但时间并不充裕,正巧webmention.io提供现成的服务和详细的文档,那就跟着文档配置吧。

验证与接收

教程提供了多种验证方案,这里使用最简便的Github. 只要在网站的首页挂上一个链接,指向用户档案页:

<a href="https://github.com/example" rel="me">github.com/example</a>

如果不想让它可见,也可以设置为一个`:

<link href="https://github.com/example" rel="me">

作为验证,你需要在Github主页中包含你的网站
作为验证,你需要在Github主页中包含你的网站

这里我部署后回退了一下网页就弹出来Github APP 认证请求了,大概需要刷新网页或打开Github?

这样,访问之后页面中提供的链接,就可以看到别人发送的Webmention了。

渲染

在网页中添加link

<link rel="webmention" href="https://webmention.io/你的用户名/webmention" />

我使用webmention.js,根据说明文档,可以复制仓库中的/static/webmention.min.js到博客的/static/js/webmention.min.js.

在评论框下方提供一个容器<div id="webmentions"></div>,并引用脚本

<div id="webmentions"></div>
<script src="/js/webmention.min.js"
    data-id="webmentions" // 与容器id匹配
    data-page-url="https://yourdomain.com/当前文章永久链接" // 建议使用
    data-max-webmentions="50" // 最多显示数量
    data-wordcount="30" // 回复预览最大字数
    data-sort-by="published" // 按照发布时间排序
    data-sort-dir="up" // 时间升序
    async>
</script>

Hugo用户在永久链接上可以使用:

data-page-url="https://yourdomain.com{{ .RelPermalink  }}"

为了本地测试,使用相对链接的变量拼接。脚本会对API发送请求,如果拿到的数据是空的,则会把最终的HTML输出为一个空字符串,所以刚开始看不到输出是正常的。大概写点CSS就可以正常投入使用了。

对Webmention的看法

我认为Webmention是一种很像友情链接的互惠模式,优于在评论区下方留下链接的形式。续上上一篇文章的话题,这样不仅促成高质量的互动,也能丰富自己的写作素材,分量应该重于评论区链接的手段。就像上一篇文章的结尾所说,利人利己,何乐而不为呢?

虽然这种模式的普及程度不高,但我相信去中心化会称为互联网的新趋势。开放、互联才能称为「互联网」。

我通过一些Webmention,一条一条顺藤摸瓜也找到了很多有趣的博客。我准备有时间优化渲染格式,可能也会研究一点桥接的功能,不过还是要保持博客一贯的简洁风格。当然,要先有人回应才有数据拿来渲染,欢迎大家使用Webmention参与互动!

  •  

那种虚伪的互动和友善,赶快把它撕破吧!

本文使用了一些带有攻击性的词汇,言论风格尖锐,介意者谨慎阅读。

本来想随便写写近期的事,写到网站最近的变化,写到了评论区的问题,越写越多,单独开一篇文章来说说吧。有时候觉得自己像个愤青一样,或者就是个愤青,整天喷天怼地的,应该平和点,不过实在不吐不快。


给评论区做减法

最近我把评论系统换成了Giscus,原因很简单:我累了。

关于评论系统,我想了很长时间。

至少是在我的博客里,如果是议论类文章,基于事实或观点的讨论、延伸,或反驳。偏题跑题、没看完或没看懂文章就急于发表评论的情况并不少见。而且性子比较急的朋友直接看到了评论区,自己的重点也可能会被带跑偏,于是构成恶性循环……

如果是记录类,分享见闻的文章,评论除了附和、赞同之类的评论,也难以找其它类型的评论,而且似乎也不会出现其他类型的评论。

我不是要说教读者该如何写评论,其实是我并不擅长回应这种评论,或者可以说,我没有跟人闲唠嗑说家常和寒暄的能力。一些评论留下的话茬实在让人很难接上,但不回复又显得冷漠,这是一直以来让我困扰的问题。和社交沾边的事,不是热脸贴冷屁股,就是痛并快乐着,又在期待与不安中挣扎。

七八月的时候我特意在评论区上方注了一行小字,具体原文不记得了,但我记得大意是:「我没回复是因为赞同,或者没什么可说的,而不是因为对你有意见」。主题改来改去,换来换去,就忘了重新写上这行字了。这是为我不回复这一行为的辩解,也是为读者可能会受到的「冷落」所做的提前安慰。

另一方面,维护Waline的外部CSS很麻烦,我也不想再修改CSS了。

我在使用Waline的时候尝试给评论功能做减法,我移除了表情回复和正文插入表情的功能、移除了表情包,删除了点赞、头衔,隐藏了头像和IP。力求打造安静的浏览和讨论氛围,甚至有移除网址文本框的想法。出于对博客的理念不同,有些同样在写博客的人就是冲着这个框来的,他们可能就是非常享受与人社交的获得感,把博客作为社交名片。

我觉得移除网址框可以减少为了自我营销而发送的评论,因为自己的博客沦为别人的推广场所的滋味很难受,也实在不知道怎么对待这些评论最为恰当。也想过关闭评论区。如果关闭评论区,可能会显得高冷,甚至是封闭。

折中的方案

转念一想,我怕的是什么?怕的是不知道如何接话。那么提高评论的「门槛」,让真正想要讨论的人评论,也许能解决问题。所以我换成了从前被我鄙视的Giscus。我当时觉得一定需要Github帐号才能评论是在一定程度上打消读者互动的积极性的,但现在才意识到了这是在放过自己。说真的,我非常佩服那些能一直和人聊得来,接得上话的人,也很佩服从一篇干巴巴的日常分享,甚至只有几张图的文章里找出可以评论的点的人,这确实是一种社交能力。

为了照顾没有Github或访问不方便的读者,我也放了一个邮件链接,可以点击发送邮件评论。由于使用场景,它多少会和「正式性」沾边,这也就间接提高了交流的质量。虽然我的博客并没有什么流量,但有效的交流,总比虚伪的敷衍强。我知道那些评论可能出于友善,但是妥善处理它们对我真的很难。

简单地来说,让说话更麻烦,是一种让说出来的话更有分量的方式。它会让说话的人经过深思熟虑,认真想想这些话到底值不值得我费这么大劲去说。

为什么我认为新的做法更好

可能有人要批判我是「精英主义」,把Email和Giscus强行和高质量讨论绑定在一起,或者认为我说以前的讨论都是低质量,我要为自己辩解。

首先,不是会用Github和Email的人都能写高质量的评论,而是这个方法在「倒逼」出正经的评论。

Github和技术身份强关联,它代表作为开源社区的一员的你,对某篇文章的看法。如果说得更「敏感」点,为了维护网络上的形象,至少不应该写出冒犯性的话语或无理取闹的反驳。而邮件在其它场合下的使用就如上文所说,是带有一定正式性的,并且写邮件的「仪式感」也很容易让人认真对待这件事。至少需要安安静静坐下来,组织完整的语言表达看法,留有正式的署名和日期,长期可以留存 —— 这些都在间接促成一个或严谨或私密的正式的讨论环境。

虽然这种做法可能会拦住内向但真诚或没有技术背景的读者,但也能拦住自我营销与应付不来的闲谈,我没有排斥喜爱轻松交流氛围的读者,这是不得已的取舍。而且博客不是论文期刊和政府文件,不是公示真理和规范的地方,这里是自我表达的地方,我在尽力打造理想中的秩序和风格。

此方法也能防止某些幽默的匿名评论。虽然当年百度贴吧和知乎都有很多匿名神贴,匿名才能让他们大胆表达,但总有这么一小波的大胆,给人一种傲慢和轻视的感觉。

林子不大也有各种鸟

比如说《罪恶感》这篇文章写得确实非常矫情,但有人匿名评论:

额…实际上只要是病,能够通过医学手段解决的,有钱人一般能请私人家教授课,可能这就是青春期吧…

这位网友的评论在不在理,确实是在理的。但连留个邮箱的勇气都没有,匿名在个人博客唱反调的行为,高高在上地想轻易解决慢性病,并把情绪都归结给青春期的傲慢的行为,属实让人忍俊不禁。

虽然文章发出来了肯定会有被人喷的风险,但我当时还是忍着自己的痛苦和不安,让人轻飘飘地说得一文不值的愤怒,给出了一个回复:

  1. 文本解读能力的问题

  2. 经历和共情能力的问题

我尊重你这个没啥大事的看法,不强求共鸣。

说得好,我同意了,玩去吧。

现在再仔细想想,这种文章根本不可能有人从搜索引擎来,大概率是某个混博客圈子的人,大概率也写博客。英国女作家伊夫林·比阿特丽斯·霍尔说过:「虽然我不同意你的观点,但我誓死捍卫你说话的权利。」

我今天说,虽然我不同意你的观点,但你唱反调连告诉我你是谁的胆子都没有,那你他妈的还是闭嘴吧!

如果你反对我,那就请你逻辑严密地写出几百字来批判我,即使是匿名我也会输得心服口服,在这种情况里匿名甚至可以促进大胆批判。而傲慢地写下反驳的话语却不敢署名的敢做不敢当的行为,我只能认为你是一个弱者,仗着个人博客对读者隐私的保护与自由的追求,输出轻浮的观点。

当然,匿名评论不是一定没有优势,如上文所说可以促进大胆批评,但任何事情都能从不同角度思考出不同的结果,没有人能做到真正的公平和客观,我只是尽力在维护边界。

在非匿名的评论中,有些人挂着自己的网站链接,写一句「学习了!」、「写得好!」,甚至连编程语言是哪个都没看清,指鹿为马地夸赞着,长期在各个博客的评论区混迹着。

出于人情的默契,这类行为往往被默许。我相信这是中文博客圈的大家都看破不说破的问题。今天我就在这里,以一个和大多数博主比起来确实是小孩的年龄,指出皇帝完全就是光着屁股在大街上乱逛。

我并不反对匿名评论和评论区,而是反对形式化的评论区,反对只是为了自己网站的外链的评论,反对形式化的、缺乏真诚的互动,而非反对社交本身。评论区应当是能围绕文章展开讨论、甚至是反驳的地方,哪怕意见相左,只要是真诚的表达,任何博主都会愿意真诚回应。但当评论的形式大于其本身的作用时,就该好好思考一下它究竟有没有继续存在下去的意义,以及如何存在下去了。

这种你唱我喝,看似牢固的关系,我在其它地方也有感受。

大概在十月份,我退掉了很多在上一次信息节食行动时没有退掉的QQ群。虽然确实有几位群友在问我为什么退群了,但过了一段时间后,仅仅是少了一个人自言自语。该打游戏的还在打游戏,该上班的还在上班,该骂街的还在骂街。这很正常,但也很残酷,少了某个人,大家照样吃饭,中东那几个国家照样战乱不断,地球照样天天转。

这种浅层的链接,只是披着一层友情之皮的无关紧要的感情。当然,这都是我的一家之言,你也可以认为我在社交上相当失败。

我能理解那种单纯对文章表达欣赏,又期待被回访的复杂心理。我个人的做法是开启一个点赞按钮。如果赞同或欣赏文章,也许不发那些简单但带有善意的评论,按一下那个按钮也能表达认同的态度。关于期待回访的心情,如果不是真正读了你的文字,被你的灵魂打动,那种回访就是肤浅且客套的,也许回访者也是出于迫不得已的礼仪压力。

所以无论是Q群聊天还是博客为了外链的「互访」,为了自己和他人考虑,为了让自己不再苦恼于如何应对根本没有留下话茬的评论,为了让别人不再绞尽脑汁填写自己博客的链接,如果你也厌倦了廉价的温情,那就来吧,那种虚伪的互动和友善,赶快把它撕破吧!

  •