阅读视图

发现新文章,点击刷新页面。
🔲 ☆

我为什么开发 AI 英语听力生成器:Im-Listening

我为什么开发 AI 英语听力生成器:Im-Listening

我一直在保持自学英语。在听力方面,我经常面临一个艰难的挑战:市面上的听力材料要么太简单(比如慢速英语),没有挑战就无法学到新的知识;要么太难(比如 CNN/BBC 原声),语速过快,生词太多,挫败感极强。

我尝试过市面上的各种听力 App 和网络上推荐的资源,但始终找不到既符合我兴趣又适合我当前水平的听力材料。

既然找不到合适自己的工具,那就自己写一个。于是,我决定自己动手,开发一个工具,利用生成式 AI,根据我的兴趣和水平,即时生成个性化的英语听力材料:**listening.esonwong.com**

为什么要开发 listening.esonwong.com

1. i + 1 学习体验

语言习得大师 Stephen Krashen 提出的 “输入假说” 认为,只有当输入材料的难度稍微高于学习者当前水平(即 i+1)时,习得才会发生。如果材料太难(i+10),就是无效噪音;如果太简单(i+0),则学不到新东西。

想找到适合自己的材料是个大难题。市面上的听力材料往往是往往难以满足个性化需求。而通过 AI 生成听力材料,可以根据我的水平和兴趣,动态调整难度,实现真正的 i+1 学习体验。

2. 即时学习

听力练习需要大量的输入材料。传统的听力资源往往是预先录制好的,无法满足即时需求。而通过 AI 生成听力材料,可以根据将要面对的场景和兴趣,即时生成相关的听力内容,大大提高学习欲望。

比如,奖近年关,我就用 listening.esonwong.com 生成了和同事讨论 Spring Festival 的听力材料,帮助熟悉对这个话题听力能力:Chinese New Year Plans - ImListening

3. Cost Efficiency (成本效益)

市面上的听力材料和订阅听力 App 往往需要持续的费用。listening.esonwong.com 可以 0 成本生成听力材料,极大的提高了我练听力的动力。

核心功能与体验

难度控制

listening.esonwong.com 允许你根据 Difficulty Level(难度等级)和 Length(长度)来控制生成的听力材料整体难度。

难度控制

自定义话题

你可以自由的让 AI 生成你感兴趣的话题。例如输入主题让 AI 根据该主题生成听力材料。

或者输入单词列表让 AI 生成包含这些单词的听力材料。

1
生成一段包含以下单词的对话:economy, inflation, investment, market, growth

或者直接输入对话来生成音频听力材料:

1
2
3
4
5
6
Li: Hi, how are you doing today?
Wang: I'm doing well, thanks! How about you?
Li: I'm great, thanks for asking. Have you heard about the new project at work?
Wang: Yes, I have. It sounds really exciting!
Li: Definitely! I think it's going to be a great opportunity for all of us.
Wang: I agree. I'm looking forward to getting started on it.

又或者把一篇新闻文章输入进去,让 AI 帮你生成听力材料:

1
2
3
播报下面的新闻:

......

播放交互

了提供便捷的听力练习体验,支持多种设备和控制方式, listening.esonwong.com 的播放界面设计简洁,支持多种平台的媒体控制按键。可以指定重复模式为单句重复、段落重复或者整篇重复,满足不同的练习需求。也可以指定媒体的上/下一首按键的行为,比如切换到下一句或者下一段,方便在练习过程中快速切换听力内容。

播放界面

并且支持在锁屏显示听力材料的字幕,方便在各种场景下练习听力。

有了上述功能,让我在开车时练习听力成为了可能:

开车听听力

未来展望

目前的 listening.esonwong.com 已经实现了核心的听力生成和播放功能,但仍然有很多可以改进和扩展的空间。

未来我可能会添加以下功能:

  • 听写模式
  • 回顾提醒
  • 播放列表
  • 自定义语音 API

如果你也是英语学习者,欢迎体验 Listening.esonwong.com 并给我反馈!

🔲 ☆

I made my own Hexo theme

See the changes in my blog! I’m proud to introduce hexo-theme-paperwhite to you all! Now in beta stage! Check it on GitHub

What’s that?

hexo-theme-paperwhite is a minimalist theme for Hexo. I made it to fulfill my own needs, including a pure home page and the serif font. I am a huge fan of minimalist designs!

How to configure the theme?

It’s simple. Actually just no more than 10 lines of code! Here’s the _config.paperwhite.yml

1
2
3
4
5
6
7
menu:
writing: /
who am I?: /about

giscus:
enable: true
repo: aeilot/en

Notes

Sorry to tell that I failed… Now I’ve completely switched to hexo-theme-cactus for lack of Web Front-end developing experience.

🔲 ☆

Clawdbot深度评测:全能AI助理的成本与实战避坑

一个复古机器人Clawdbot站在堆叠的Mac Mini主机上,周围环绕着爆炸式的社交媒体点赞图标,羊皮纸,钢笔彩色手绘的统一风格。

Clawdbot AI再进化,社交媒体又爆了。这一次是真的很厉害,还是尬吹?

大家好,欢迎收听老范讲故事的YouTube频道。被突然爆火的clawdbot给砸到头了,这是一种什么样的感觉?

我最近在X上面,看到很多人在晒他们新买的Mac mini,甚至有人晒了12台的Mac mini,摆满了办公桌。实在让我觉得很诧异,他们到底在干什么?后边都有一个词叫clawdbot。我一开始还没有太注意这件事情,昨天直播的时候有人问我:“最近最火的clawdbot你玩了没有?”哎呀我还没玩儿,因为最近在玩agent skills,还没有太关注到。这么神奇的东西我要去看一看。

突然爆火的原因

一个拟人化的AI小助手坐在办公桌前,旁边日历显示24小时工作,桌角有一堆正在燃烧的金币代表Token消耗,羊皮纸,钢笔彩色手绘的统一风格。

突然爆火的原因,是因为很多人跑出来吹了,说这个东西实在是太强了,又革命性了。2025年11月25日,这个产品就已经上线了,它是个开源产品,上线在GitHub上面。到2026年的1月,突然有很多位的网红博主开始非常用力的宣传这个产品,一下就火出圈了。这是一个住进聊天软件里面、7*24小时服务的助理,甚至有很多人给这个助理直接起了个名字。

大家要注意,我们一般不会给ChatGPT、Gemini或者是Anthropic Claude起名字,而像现在的这个clawdbot,很多人都给他们起名字了。这是一个非常非常划时代的事情,因为你一旦给它起名字了,它就人格化了。这不是那种情感陪伴型的聊天工具,这是一个帮你去办公的助理,这是非常重要的。这帮网络大V就出来吹了,说这是个人AI助理的未来形态。有人一周烧掉了1.8亿TOKEN。大家注意,这是非常关键的一个信息:使用clawdbot,你的TOKEN在燃烧

产品形态与体验的明显差异

1. 全时驻留

台Mac Mini安放在舒适的家居办公桌上,连接着漂浮的Word文档、Excel表格和iMessage聊天气泡,羊皮纸,钢笔彩色手绘的统一风格。

它的产品形态跟体验上,跟过去的产品有明显的差异。第一个特别重要的差异,就是全时驻留。像以前我要去跟ChatGPT聊天,我要点开APP,或者我要到网站上去打开这个网页;现在这个就不用了,它就永远在线,而且功能非常完整。这也是为什么Mac mini突然销量暴增的原因。你可以命令它:

  • 打开Word文档
  • 打开Excel
  • 去干任何事情,浏览网站
  • 用iMessage跟人聊天、给人发短信

它这个全能干,没有任何问题。但是你要保证所有功能都能使的话,特别是你要使用iMessage的话,你必须要有Mac的系统,要有Mac、要有Mac mini。这是一个自托管成本很低、部署很方便的系统。大家都是买个Mac mini放在家里头,甭管是放在办公桌上,还是放在机柜里,放在电视旁边,这都不重要。但是这是你放在自己家里头的,你不用再担心任何隐私问题了。

2. 持久记忆加上主动触达

AI助手手里拿着厚厚的记事本,正在主动轻拍一位正在休息的用户的肩膀进行提醒,背景充满记忆碎片,羊皮纸,钢笔彩色手绘的统一风格。

像我们现在都说ChatGPT也好,一些聊天工具也好,要有记忆,但是他们记住的东西其实非常少。原因也很简单,如果ChatGPT记住很多东西的话,他就不知道什么时候该用什么了。而现在的clawdbot他是全记忆,你跟他聊天的所有内容他都记得。

所以很多的博主上来用clawdbot之前,先会用很长的时间去跟他描述:

  • 我是谁
  • 我喜欢什么东西
  • 我在干什么
  • 我对什么东西感兴趣
  • 我对什么东西有什么样的要求
  • 为什么我喜欢这个球队、为什么我喜欢那首歌……

他会把这些东西通通都告诉这个clawdbot。他会记下来,记下完了以后再去跟你聊天的时候,这些通通都会变成系统资料,它就会很懂你。

而且clawdbot还有一点非常重要的是什么?就是它会主动的来去跟你聊天。原来是被动的,你不去跟ChatGPT说话,它就不会回答你任何问题,所以我们要先提出问题。而现在的话,你可以告诉他说:“什么什么时候记得提醒我干事”、“每天告诉我最近应该做一些什么什么样的事情”。不是说你列好计划让他做什么事情,而是说你觉得我应该做点什么,他会告诉你说我觉得你应该干点这个、应该干点那个,他会有很多这样的建议性的东西出来。甚至他每天早上起来说:“我今天早上起来了,把我认为你今天该干的活都给你列出来。”他可以干这样的事情。

开源且无所不能的系统

这个系统还是开源的,而且迭代的速度非常快。之所以突然爆火,还有一个很重要的原因,就是这个产品基本上是无所不能。你基本上能想到的活它全能干,包括你让它去做vibe coding,你让它指挥Claude code下去干活去,都没问题。它可以浏览各种网页替你买东西,通过agent skills和这个MCP,我们现在互联网上这些服务,它全都可以使用起来了。就是因为这些原因,这个产品突然就爆起来了。

但是你说这个里头有没有尬吹的部分?肯定有。你自己去安装的时候,你就会发现可能也没那么方便。而且如果有些人对于结果的格式要求非常严格的话,你可能会觉得他产出的东西依然是AI垃圾。但是方向是正确的,就是全时驻留、持久记忆、主动触达,这就是未来的AI助理的一个方向,而且还要最好能够全能一些,所有问题都可以解决掉。

有人说原来ChatGPT不是出过这种东西吗?原来ChatGPT你是可以通过WhatsApp跟他聊天的,为什么到这就突然爆了?因为很简单,ChatGPT你虽然可以通过WhatsApp跟他聊天,但是它只能调用ChatGPT里边这些东西。你说我想去调用外边这些东西,我想去写个Word文档、我想去做个PPT、我想去剪个视频、我想去搜集一些信息,它这个功能还是有一定局限的。他们家就是玩这套东西,所以就并没有推开。而现在clawdbot直接就爆了。

传奇的创始人:Peter Steinberger

一位睿智的程序员肖像,背景融合了PDF文档结构图和维也纳的建筑剪影,羊皮纸,钢笔彩色手绘的统一风格。

它的创始人很传奇,这个创始人的经历还让老范很有代入感,为什么?这哥们在维也纳是一位退休程序员。老范现在也可以算退休程序员了,但是人家还是比我厉害很多了。这个人叫Peter Steinberger,他是PSPDFKit的创始人。这个产品是什么?是面向开发者的PDF的SDK框架。它给你一套框架,然后你可以写程序,通过它这套框架去操作PDF,做PDF查看、PDF注释、PDF编辑、签署、填表单,做这些功能。它的产品在iOS、安卓、Web和桌面端全覆盖。它的公司主要是提供文档、PDF相关的SDK和框架能力的。因为它有这样的一个技术背景,所以对于配置系统、跨平台交付、可观测行为、安全边界等等这些方面,都是非常敏感的。这也是为什么clawdbot这样的一个产品突然会爆起来。

Clawdbot到底能干点什么?

什么都能干。就是这么简单的一个问题。但是你说真的什么都能干嘛?跟大家讲一个笑话。岳云鹏有一次出去参加综艺,人家问他你数学怎么样?说特别快没问题。然后就出了一个问题:

26*78等于多少?等于75。

人家说你这对不?

岳云鹏说:“我又没说我算的特别对,我就说我算的特别快,你就说我快不快吧?”

所以虽然clawdbot什么都能做,但是结果到底是不是能够让人满意,就是冷暖自知了。有些人很挑剔,他就觉得这不行;这些人可能提的问题也很模糊,对于结果又很挑剔,那么他就得不到满意的结果。有些人的问题提的非常详细、非常具体,对于结果特别是格式又要求不是很高,他们就会得到满意的结果。我觉得这样解释是相对比较清楚的。那种提问题、提要求的时候云山雾罩,经常玩这个“佛祖拈花一笑”,出来的这个结果还挑三拣四的这种领导,反正伺候起来比较难吧。比较难伺候的领导,clawdbot这样的助理他也搞不定。但是有一些领导就是提要求事无巨细,只要结果正确、格式无所谓的,这些领导,clawdbot就是你最好的助理。

部署Clawdbot的风险:TOKEN在燃烧

一个巨大的沙漏,里面的沙子是金币,正在快速流逝,象征昂贵的Token消耗,羊皮纸,钢笔彩色手绘的统一风格。

但是如果你去部署clawdbot,一定要小心的是什么?TOKEN在燃烧。前面有人一个礼拜烧了1.7亿TOKEN,那是非常非常贵的。通常使用clawdbot需要什么?就是买Anthropic Claude 4.5 Opus 200美金一个月的Max账号。如果没有这个账号的话,这个产品会很难用的。当然了现在我们就在看Anthropic会不会封他,因为前不久Anthropic刚刚把open code的账号给封了。原来我们使用open code的时候,也可以用Anthropic的20美金或者200美金的这种Pro或者是Max账号,但是Anthropic说不行,不让你用了。所以现在还要看,它到底能使到哪天。

千万千万不要干嘛?千万不要用Anthropic的API key,你真的会破产的。那个玩意非常非常的消耗TOKEN。GPT 5.2据说也还不错,但是跟Anthropic的Claude 4.5 Opus还是有一点点差距的,最好也是用200美金的Pro账号。用我现在这种plus账号可能是比较费劲的,我准备待会把它装上,把plus账号挂上试试。还有博主推荐Mini Max,Mini Max有10美金左右的月账号,它也是一种编程账号,效果再比open code再差一些,但是人便宜。大家也可以试一试。功能都是TOKEN烧出来的,你没有那么多TOKEN,就不要指望它有那么多功能。

为什么一定要Mac mini?

一个架子上整齐排列着多台Mac Mini组成的家庭服务器农场,指示灯闪烁,羊皮纸,钢笔彩色手绘的统一风格。

这么多人都去晒Mac mini,其实并不是必须要Mac mini,最好是使用闲置的非工作主力电脑。你说我这就是上班每天用的电脑,我把这个clawdbot挂在上头行不行?最好别这么干。为什么?因为你上班的电脑第一个,它的能力很强,晚上有可能还会关机,比如说你要把它合起来,这个电脑就会关掉。这个系统是要7*24小时工作的,所以你最好不要把它放在你的工作电脑上。很多家庭有这种闲置的Mac mini,放这个上面就挺方便的。价格也不贵,也还很省电,还很漂亮。特别是最新的Mac mini M4,很小、非常非常漂亮、非常精巧,放在家里头、放在各种地方都不显得突兀。

全功能的系统配置

最好是给clawdbot配这种叫“全功能的系统”。什么叫全功能系统?就是它可以直接使用浏览器、可以跑vibe coding、可以调用office,这些东西都是可以工作的。对于本地的算力其实并没有特别高的要求,所有的AI都是调云端的算力。它通过即时通讯工具来工作。我们想去跟clawdbot聊天的时候,你可以打开:

  • Telegram
  • Discord
  • iMessage
  • WhatsApp
  • 或者是给你发短信

都是可以的。国内的不行,像什么微信搞不定这事,因为微信对于这种机器人是封闭的,比较严格的,怕各种黑灰产。

很多人想去用iMessage,就是苹果系统的这种iMessage,这个就没办法,你必须使用Mac mini。你说我现在想整个Windows、想整个Linux上iMessage?上不去。这个iMessage也不是一个开放系统。很多苹果全家桶的玩家,特别是在程序员和AI玩家里头,苹果全家桶玩家的比例是很大的,肯定是喜欢上Mac mini的。家里头其他的闲置电脑其实也可以跑,Windows电脑也可以。但是如果你要在Windows电脑里跑,最好是装WSL。WSL就是Windows里面的Linux,现在Windows新的系统里边都是可以装一个Linux系统的。然后Linux电脑,这个肯定也是没问题的。我准备上NAS了,家里NAS已经跑了一大堆的各种各样的Docker了,它也是可以跑上去的。

云主机也没毛病。你都花了200刀去买套餐了,那你一个月花5刀去租个云主机跑这个clawdbot肯定也是没问题的。Oracle云上有免费的主机,大家可以上去玩耍一下。NAS、瘦服务器或者是在云主机上跑clawdbot,浏览器也是能用的,但是会比较费劲。vibe coding就要稍微克制一点了。如果是在你的Mac mini上,你就可以给它下指令,说打开哪个vibe coding的工具,然后在里边去给我写一什么产品出来,他自己吭哧吭哧就干活去了。你可以每天晚上睡觉之前给他布置一大堆任务,早上起来看看,完成几个、没有完成的部分你还可以去辅助一下。他是这样来干活的。你要是在云主机上,就不能干这活了。

Clawdbot是不是一次革命性的创新?

方向上肯定是。这个方向也很明确,就是无限记忆、私有部署、绝对隐私保护、7*24小时驻留、随时待命、主动沟通和提醒,基本可以解决各种问题。随着模型能力的提升、agent skills的发展,他的能力一定还会继续爆炸式增长。大模型厂商应该会争先恐后的推出新套餐了。因为有了前车之鉴,Anthropic估计过一段时间还是会封他的。这个咱们预言一下,咱们打个赌,猜一猜会不会把他封掉?前面open code用户量上去以后,Anthropic就直接把他封掉了。

因为现在买TOKEN基本上是两套玩法:一套就是你具体按100万TOKEN多少钱去算;另外一套就是给你套餐,这个编程套餐。因为现在编程实在是太烧TOKEN了,所以Anthropic出了这种编程套餐,OpenAI、谷歌都出了这种编程套餐。但是Anthropic还是希望,如果你想要去买它的编程套餐,你就只能用Claude code,你不能用其他的东西。像咱们现在讲这个clawdbot,这就不允许用。那么OpenAI跟谷歌应该会继续支持你。像open code这块,在Anthropic说我封闭它之后,OpenAI说我们准备继续支持。没毛病,你买我的plus套餐、Pro套餐,我都继续支持你。谷歌在这一块其实是放的比较宽松的,只要你愿意用,谷歌还是愿意笑脸相迎的。

国内的模型平台的话,也应该会推出一些专门的套餐,应该是会像code套餐这样,都是可以挂上使的。国内平台的code套餐基本上有5美金一个月的、10美金一个月的,甚至可能最便宜的有3美金一个月的。他们都是去仿真Anthropic的这个API形式,只要我仿真好了,就往上挂就完了,都是可以用的。

硬件与巨头的新机会

几个代表科技巨头的彩色球体悬浮在一张棋盘上方,象征市场博弈,羊皮纸,钢笔彩色手绘的统一风格。

家庭瘦服务器应该有新的应用场景,以后的NAS也可以配更好的CPU GPU了。至于家里是不是要买一台Mac mini,让我再犹豫几天吧,反正我目前为止还没有下决心再去买一个Mac mini。至于Mac mini农场,也许会在一段时间内流行起来。什么叫Mac mini农场?就是在一个房间里边装一大堆的Mac mini,允许大家从远程去访问它、替你去维护,我们只管去付租金就可以了。这可能也是一种未来的服务形式。

黑苹果可能会焕发第二春。什么叫黑苹果?就是在一些比较便宜的Intel这种架构上,使用macOS系统重新去破解,然后给你装上,让你去使用。这个东西叫黑苹果。其实黑苹果随着后来苹果出M系列芯片以后,已经不是那么活跃了,但是现在的话,应该会重新再活跃起来。

腾讯、Meta、苹果、谷歌机会来了,就看谁能抓得住了。为什么他们机会来了?他们做即时通讯工具的。既然大家觉得以后的这些个人助理应该是活在WhatsApp、活在Telegram、活在Discord里头了,腾讯说我这有微信,干脆我在这边给你配一个助理不就完事了吗?你有什么事跟助理说不就完了吗?我觉得他们未来是有机会的。至于说Meta的话,你像WhatsApp是它的,Facebook Messenger也是它的,全世界最大的两个即时通讯工具都是它的。苹果自己也是有iMessage的。它们都是有机会去腾飞一下的。

最后总结一下

又一个神奇的AI工具发布了,赶快玩起来吧。甭管好不好使,大家一定要去玩起来。7*24小时永久驻留、永久记忆、主动提醒、全能助理,这应该就是未来的方向了,这个基本上可以确定。助理已经这么强大了,具体做什么就是留给我们的问题了。网上的介绍视频里头经常是这样的,他问clawdbot:“你觉得我该干点什么?”还是要有自己的想法。只要烧得起TOKEN,我们每个人都会得到一个强大的全能助理。

好,这一期就讲到这里。感谢大家收听,请帮忙点赞、点小铃铛,参加DISCORD讨论群。也欢迎有兴趣、有能力的朋友加入我们的付费频道。再见。


背景图片

🔲 ☆

I made my own Hexo theme

See the changes in my blog! I’m proud to introduce hexo-theme-paperwhite to you all! Now in beta stage! Check it on GitHub

What’s that?

hexo-theme-paperwhite is a minimalist theme for Hexo. I made it to fulfill my own needs, including a pure home page and the serif font. I am a huge fan of minimalist designs!

How to configure the theme?

It’s simple. Actually just no more than 10 lines of code! Here’s the _config.paperwhite.yml

1
2
3
4
5
6
7
menu:
writing: /
who am I?: /about

giscus:
enable: true
repo: aeilot/en

Notes

Sorry to tell that I failed… Now I’ve completely switched to hexo-theme-cactus for lack of Web Front-end developing experience.

🔲 ☆

Harbor GC 问题

最近的工作比较忙,以至于网络技术的系列文章1许久不更新了。这几天在解决的问题是镜像存储服务 Harbor2,存储的 docker image 太多了。

虽然我之前在博客里面分享了一些 Docker image 构建的技巧3,以及炫耀了构建一个最小的 Redis Docker 镜像才不到 2MiB4,但是无奈,我的博客基本没有人看,所以同事上传的 image 都非常可怕,动辄就上 G,20+ GiB 的都有。现在我们的 Harbor 存储已经是 PiB 级别了。

多余的 image 就删除就好了,问题就在于,删除 image 比较复杂。分成几个步骤:

  1. 删除 image 的 Tag5
  2. 扫描整个数据库,找到没有被任何其他 image 和 tag 引用的 blob;
  3. 删除这些未被引用的 blob;

第二步尤其重要,简单来说,image 是分层的,一层就是一个 blob,一个 image 可以引用多个 blob。比如服务 A 的 Dockerfile 开头是 From: ubuntu:24.04,另一个服务 B 的 Dockerfile 开头也是 From: ubuntu:24.04,那么这两个 image 都是引用了 ubuntu 的 blob。删除服务 A 的 image 的时候,不能把 A 的 blob 都删除,因为这样的话 ubuntu 的 base image 就连带被删除了。所以我们在删除一个 image 的时候,其实并没有释放任何空间,而只是删除了 image 对 blob 的引用。这时候还不知道哪些 blob 是可以释放的,要知道哪些 blob 可以删除,就必须扫描全部的数据库,找到没有任何引用的 blob,才可以删除。难题就在扫全表这里。

这个问题就和编程语言的 GC 问题很像,不过更加简单一些,因为引用只存在于 tag 到 blob,tag 之间和 blob 之间不存在引用,也就没有环的问题。

引用计数

引用计数比较合适这个场景,因为没有环路,所以引用计数到 0 就可以直接删除,不需要扫表找孤零零的环。但是 Harbor 本身没有用这种方案,估计是因为引用记录维护起来比较难,必须准确并且处理好并发,处理不当很容易有数据误删或者出现永久的垃圾。

Mark and Sweep

这是官方的代码采用的方案,基本思路是,扫描所有的 image,对它们引用的 blob 标记为在使用中。扫描完成之后,所有从未被标记过的 blob 直接删除。

问题

如果直接用 Harbor 的 GC 方案,那么运行一次 GC 需要超过一个月的运行时间(不知道具体需要多久,因为从来没有成功跑完过)。之前的负责人设计了一个很聪明的方案,基本思路是,找到系统性能低的瓶颈,然后针对性地处理这些瓶颈。

对于前面的 3 个步骤:

  1. 删除 image 的 Tag:直接用 SQL 从数据库查询出来 image,判断是否需要保留(规则是每一个 image 只保留最近的 3 个版本),如果不需要保留,通过 API 删除;
  2. 扫描整个数据库,找到没有被任何其他 image 和 tag 引用的 blob:这一步因为是 Harbor 代码的 GC 逻辑,比较负载,还是通过 web UI 来触发的;
  3. 删除这些未被引用的 blob:Harbor 本身 sweep 的过程很慢,原因是没有并发,一个一个删除的,改进是直接通过并发删除。

这样,整体运行一次只需要一个月。

目前还是存在很多问题。我接受之后又做了一些改进:

  1. 之前的 PIC 显然是一个脚本大师,所有的工作都是通过 bash,awk,curl 这些工具完成的,每一步都需要人工操作 -> 等待完成 -> 人工操作下一步,比如到 mark and sweep 的这一步,需要人工去页面上触发 GC,然后关注执行的进度,在执行到 sweep 阶段的时候手动结束,开始运行下一步的脚本;我写了一个 300 多行的 Python 脚本,把所有的步骤串起来,这样就有了 crontab 定期执行的条件。
  2. 在第一步删除 image 的时候还是很慢,30s 只能删除一个 image,我们有千万个 image。解决办法是读了 harbor 的代码,发现 blobMgr.CleanupAssociationsForProject 这一步其实是最费时间且多余的,后面执行 GC mark 的时候一定会运行一遍。删除这个逻辑之后只需要 0.1s 就可以删除一个 image;
  3. 最后一步通过 API 删除 S3 上的数据,之前还是脚本用 curl 触发,速度太慢。使用 Python 之后就可以用 connection pool 并发删除了;
  4. 还做了其他的功能,比如支持不同的 project 自定义删除逻辑,「删除最近1年没有 pull 记录的 image」这种。

本质上是用最少的改动自动化原来的 GC 逻辑,目前运行一次的时间是 3 天。已经足够满足需求了,因为不需要人工执行,所以 3天和 3 个小时区别不大。

上一个负责人留下的文档详细记录的 Harbor GC 的逻辑以及改进点,比 Harbor 官方的文档还要详细。有了这些我半重写 GC 的逻辑就简单很多。

在他之前,是另一个负责 Harbor 的同事。阅读代码并找到瓶颈是需要很大的勇气的,且不一定行得通,可能花了很大的力气,最后发现这个事情做起来就只能这么慢。

但是问题还是要解决。所以他那时用了另一个有意思的方案:

  1. 搭建另一套一模一样的 Harbor 集群,复制以前的用户名,权限,project 等数据,但是把 blob 和 image 数据删除;
  2. 搭建一套 Nginx 代理,Nginx 转发逻辑是:
    • 对于 push,转发到新集群;
    • 对于 pull,先 pull 新集群,如果得到 404,就转发到老的集群,这样以前的数据都可以读;
  3. 在 1年之后,完全删除老的集群;

这是一个很有意思的「用运维手段解决技术问题」的例子,在 SRE 的工作中,迫于没有对软件的实现的控制力,我们经常需要用运维手段来解决代码实现上的问题。

  1. 计算机网络实用技术 ↩
  2. https://goharbor.io/ ↩
  3. Docker 镜像构建的一些技巧 ↩
  4. Build 一个最小的 Redis Docker Image ↩
  5. https://docs.docker.com/reference/cli/docker/image/tag/ ↩
🔲 ☆

修图大师 - 限制 AI 修图能力的不是修图大师,而是你的想象力

媳妇考试报名老是需要处理照片,不是大小限制,就是尺寸限制。最近闲来无事,看着 AI 技术大爆发,手痒难耐,遂写一个修图大师。古有为媳妇开发菜谱的 elasticsearch,今有为媳妇修图的修图大师。

https://xiutu.trumandu.top/

修图大师

🎯 核心功能概览

修图大师是一款专业的在线图片处理工具,无需下载软件,除了 AI 修图以外都免费。在线即可完成各种图片编辑需求。目前支持以下五大核心功能:

1. 🤖 AI 智能修图 ⭐ (免费试用)

  • 智能美化:使用先进的人工智能技术,一键美化照片,提升图片质量
  • 自然语言编辑:通过文字描述即可完成复杂的图片修改,如”去除背景”、”添加阳光效果”、”变成油画风格”、”一键去除行人”、”修改海报,添加与修改文字“
  • 批量处理:支持多种修改指令组合,一次描述所有改动点

AI 修图特色功能:

  • ✨ 风格转换:油画、复古、现代等多种艺术风格
  • ✨ 智能美化:自动美颜、背景虚化、瑕疵修复
  • ✨ 场景重构:添加蓝天白云、修改背景色、更换服装
  • ✨ 专业调节:文本权重控制、种子数设置、水印选项

AI 智能修图

🔲 ⭐

Cudy TR3000 吃鹅(daed)记

缘起

前不久在京东自营看到我馋了很久的 Cudy TR3000 有 ¥153 的折扣价,虽然比起 ¥130 的史低价(甚至 ¥110 的凑单史低价)还有些距离,但已经到我的可接受范围内了,于是果断下单剁手了这台我心心念念的 Cudy TR3000 迷你路由器,以此来缓解我的开学前综合症(一种精神性疾病)

这台路由器使用 Type-C 供电,拥有一个 2.5Gbps 的 WAN 口和一个 1Gbps 的 LAN 口,在此基础上还有一个 USB 口可用于打印机共享、挂载外接存储、安卓手机 USB 共享网络等多种用途。更让我心动的地方在于其小巧的体型,非常适合出差、旅行、短期租房等场景。考虑到接下来一段实习可能会有租房需求,于是便趁此机会果断下单了。

与一台小米8的宽高对比

官方系统是基于 openwrt 定制的,功能比较单一,因此考虑刷入 openwrt 原版系统增加可玩性。在恩山无限论坛上发现已经有人编译了基于 Linux 6.6 版本的 OpenWRT 系统,这已经满足了 dae 的 Bind to LAN 功能的内核版本要求( >= 5.17 ),且 512MB 的内存大小刚好达到了推荐的最小内存大小,于是这 dae 肯定是要试着吃一吃的。如果成功了,这就是我手上第一台吃上大鹅的硬路由。


开始刷机

路由器官方系统的后台管理地址是 192.168.10.1,初次进入会要求你设置密码,然后就是一路随便点,完成初始化,随后就进入到主页。我手上这台的 FW 版本号是 2.3.2-20241226,不清楚后续的版本能不能仍然使用这套方案。

过渡固件

首先我们需要先刷入所谓的「过渡固件」。刷入过渡固件的意义在于,这个过渡固件能被官方系统的升级程序所承认,这样就允许我们进行后续的操作。

过渡固件的文件名和 md5 值如下:

b8333d8eebd067fcb43bec855ac22364  cudy_tr3000-v1-sysupgrade.bin

随后我们可以在路由器的管理页面的基本设置中找到固件升级的地方,在本地更新一栏中选择过渡固件上传更新即可。

刷入解锁 FIP 分区写入权限的固件

刷入过渡固件后稍等大约一分钟,路由器的 DHCP 重新工作,我们就可以通过 192.168.1.1 进入过渡固件的管理页面。

初次登陆时没有密码,随便输就能登陆成功。考虑到后续可能会有恢复出厂的需求,建议在这一步对 FIP 分区进行备份。

这次我们需要刷入下面这个 LEDE 固件来解锁 FIP 分区的写入权限,文件名和 md5 仍然放在下面

4af5129368cbf0d556061f682b1614f2  openwrt-mediatek-filogic-cudy_tr3000-v1-squashfs-sysupgrade.bin

在下方选择刷入固件,上传我们本次需要刷入的固件,刷入。

刷入 uboot

再等待一分钟左右,电脑重新连接上路由器后,我们可以进入到这个解锁了 FIP 分区写入权限的固件,默认密码是 password

在侧栏选择文件传输,将本次要刷入的 uboot 上传,文件名和 md5 还是放在下面。注意 zip 包要解压

e5ff31bac07108b6ac6cd63189b4d113  dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout.bin

随后侧栏进入 TTYD 终端,输入默认的用户名密码 root / password,执行命令刷入 uboot

mtd write /tmp/upload/dhcp-mt7981_cudy_tr3000-fip-fixed-parts-multi-layout.bin FIP

刷入自编译的 immortalwrt

刷入 uboot 以后,给路由器断电,确保网线分别连接电脑和路由器 LAN 口后,按住 reset 键再插入电源键,直至白灯闪烁四次后转为红灯后松开 reset 键,即可进入 uboot。

我编译的是 112m 的布局,因此需要选择 mod-112m 这个 mtd 布局后上传固件刷入。

8c9a44f29c8c5a0617e61d49bf8ad45d  112m-immortalwrt-cudy_tr3000-ebpf_by_zhullyb_20250325-squashfs-sysupgrade.bin

再次等待电脑重新连接路由器,这是最终吃上 daed 的系统了,依然是没有默认密码,随便输入即可进入。在连接上网络后,在系统 - 软件包页面,更新软件包列表。

随后就可以安装 dae / daed 相关软件了,可视需求选择 luci-i18n-dae-zh-cn 或者 luci-i18n-daed-zh-cn,其他包会作为依赖一同被安装。我这里安装的是 daed。

安装后刷新界面,我们就可以在顶栏的服务板块看到 daed。

daed 正常运行,能正常跑满我家的 300Mbps 宽带下行(单线程实测 250Mbps),速度峰值时 CPU 占用图如下。

多线程测速

单线程测速

文章中提到的文件

https://www.123684.com/s/gfprVv-wEQ8d

https://www.123912.com/s/gfprVv-wEQ8d

参见

🔲 ⭐

使用动态公网 ip + ddns 实现 rustdesk 的 ip 直连

最近跟风整了一台 n100 的迷你主机装了个 Archlinux 当 HomeServer,搭配上了显卡欺骗器,平常一直远程使用,因此需要实现稳定的远程桌面连接。开源软件 Rustdesk 本身对 Linux 的适配尚可,可惜官方提供的服务器位于境外,且前一阵子因为诈骗相关的风波使得官方对连接做出了一些限制,应当使用自建服务器或者 ip 直连。

单从网络安全的角度出发,最佳实践应该是通过 wireguard 或者别的协议先接入局域网,然后使用局域网内的 ip 直连,这是最稳妥的,但我有点懒,而且我可能会在多个设备上都有控制 HomeServer 的需求,给所有设备配置 wireguard 是一件挺麻烦的事情,因此我决定放弃安全性,直接公网裸奔。

在学校宿舍的电信宽带提供了一个动态公网 ip,因此只需要设置好 ddns 和端口转发就可以拿到一个固定的 domain + port 提供给 rustdesk 直连。

在被控端 Rustdesk 允许直连访问

在「设置」中的「安全」一栏选择「解锁安全设置」,拉到最下面的「安全」栏,勾选「允许 IP 直接访问」,并选择一个端口,范围在 1000 ~35535 之间且不要被本地的其他程序占用,Rustdesk 的默认值为 21118。

可以直接在局域网内的另一台设备进行测试,直接在 Rustdesk 中输入被控端的局域网 ip 和刚刚设置的端口,看看能不能访问得通,如果不行可能需要排查一下被控端访问墙设置的问题。

ddns

由于我的域名是交给 cloudflare 进行解析的,就找了个支持 cloudflare 的 ddns 脚本,大致的部署过程可以参考 「自建基于Cloudflare的DDNS」,不过我小改了一下脚本中获取公网 ipv4 的方式,直接 ssh 到路由器上获取当前的 ipv4 地址,不依赖外部的服务。

WAN_IP=`ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa root@192.168.1.1 'ip -br a' | grep pppoe-wan | awk '{print $3}'`

理论上来说,有不少路由器自身就支持不少域名解析商

端口转发

端口转发需要在路由器的后台设置进行,我这里路由器使用的是 openwrt 系统,大部分路由器应该都支持这个操作。

在「网络」-「防火墙」

选择「端口转发」

新建端口转发,共享名随便填,外部端口是你最终要在主控端输入的端口,内部 IP 地址是被控机 的 IP 地址,可以用 ip -br a 命令看到,内部端口就是上文在 Rustdesk 指定的端口号。

效果

可以直接在主控端口输入 ddns 的域名和端口号,实现远程控制

🔲 ☆

【已过期】使用 vercel+supabase 免费部署 umami

讲起静态网站的访客统计,我最先使用的是百度统计,但后来转到了 umeng,发现后续的几天百度爬虫的光顾次数反而多了起来。好家伙,使用百度统计相当于把自己网站访问量向百度全盘托出,我说我的博客怎么还不被百度收录呢

后来,umeng 推出了新的服务条款,好像是说不再向未备案的站点提供服务,随后不得不转向自部署的开源网站统计程序。

umami 提供了多种部署方式,在 vps 上可以非常轻松地使用 docker 一键部署,但上次 vps 到期时用 1Mbps 的小水管拖了好久都没有把博客前几个月的访客数据拖下来,一气之下我选择直接丢掉了这些可有可无的数据。

所以这一次,我决定放弃在自己的 vps 上部署,转去探索免费的部署方案。

umami 的官方文档上提供了非常多的部署方案,我个人比较喜欢 vercel,本站的随机图片 api 就是挂在 vercel 上的,界面比较简洁,且境内访问还算OK。

umami官方文档提供的部署方案

但问题在于 vercel 本身并不提供免费的数据库,所以我们不得不去寻找一些长期免费提供数据库的供应商,我选择了 supabase

在下图中选择顶栏的 Pricing 后看到这个 $0/month疯狂戳烂这个 Get Started

supabase价目表

随便填写个项目名然后输入一个足够强大的密码,地区选择美国就行,东部西部无所谓(毕竟我也不知道 vercel 的机房是在东部还是西部)

创建项目ing

看到这个小小的绿标就说明数据库正在初始化(你先别急,让我先急

项目初始化中

进行一通设置,把网站关闭后直接打入冷宫(x

随后打开官方文档,点击其描述 vercel 那一页中大大的 Deploy

vercel on Document

初始化过程中,vercel 会要求你创建一个 git 仓库,一般私有库就够了。

创建仓库

随后需要我们设置两个环境变量,第一个 DATABASE_URL 就是我们刚刚从 supabase 中复制下来并替换好 password 的 url,第二个 HASH_SALT需要你随意生成一长串字符串~~(比如你可以找一个新手让他帮你退出 vim~~

设置环境变量

点击 Deploy 并等上两分钟,我们就部署完啦(首页没东西,白屏是正常的

部署成功

来到项目首页,点击任意域名即可访问到我们部署的 umami,不过 vercel 的域名近年来也有被污染的情况,建议在设置里绑定自己的域名。

项目首页

哦对了,别忘了 umami 的默认用户名密码是adminumami,别到时候点击进去看到登陆框一脸懵,这是在文档里写过的。

🔲 ☆

好软推荐——FastOCR

前两天在 PC 端有 OCR 的需求,需求如下

  • 自带框选功能或者图片上传前的编辑功能
  • 硬盘占用小,不要 electron (((已经受够了
  • 支持系统托盘或者快捷键快速调出
  • 免费

李皓奇的推荐下试用了 Arch 群兔兔拿 python 和 qt 写的 fastocr,体验可以说是相当不错了。四个要求基本都能完美满足!

操作简单快捷

支持 百度有道旷视Face++ 三家的接口,免费额度绝对够我试用的(大不了一家用完了换一家嘛

设置界面

此外,空间占用小,算上依赖也不过 31MB 的硬盘空间占用,连半个 electron 都不到,运行起来反而更加流畅 <^_^>

诶?哪里来的atpoossfl

🔲 ☆

动森二维码生成器:服装类(前篇)

在开发动森二维码生成器的时候,对于服装类设计的生成,一开始我并没有很好的想法。游戏中对贴图的是分块绘制的,并且有一个动态模型可以展示衣服绘制的效果。对比同类工具 Animal Crossing Pattern Tool(下称 ACPT),他们也提供了 3D 模型用于展示贴图效果。但要如何在 Aseprite 中实现展示 3D 模型,我并不是很有把握,毕竟这是一款用于绘制 2D 像素图的工具。另外如何给贴图分块,也需要深入分析。本文先记录一下贴图的划分,之后再写一篇分析 3D 模型的渲染。

🔲 ⭐

动森图鉴+开发笔记

这两个月受到疫情影响,从四月中开始在家办公,四月底开始降薪,并且到五月初的这两个多星期进入了做三休四的节奏,每周强制休二天年假,不知何时是头。

由于在家工作,有更多的时间做自己想做的事。为了给自己减压,于是入了动物之森 Switch 版开始捡树枝。玩了几个星期发现其实自己并不是很喜欢联机,硬是把一个休闲社交游戏玩成了单机游戏。

不过动森的探索性还是挺强的,光是收集小动物就可以折腾很久。而且游戏时间与现实同步,每过一个月就会有新的物种出现。有时候需要查一下攻略才知道最近新出了啥动物。

在网上浏览这些攻略的时候就想,为啥大家都把数据做成表格的形式,非常不直观,不如做成像游戏中的图鉴,还可以加上自己的改进。例如其它网站上对鱼的影子的描述,只是用文字写着 “Smallest (1)”、“Small (2)”…“Latest (6)” 这样让人摸不着头脑的表述。

🔲 ☆

在 requests 中使用代理

代理介绍

对于常见的正向代理有 HTTP 代理和 HTTPS 代理,对于 HTTP 代理只能代理到 HTTP 站点的请求,对于 HTTPS 代理只能代理到 HTTPS 站点的请求。

命令行中使用

代理参数

有些命令行软件是有代理参数的,比如 curl .

curl --proxy 23.45.122.54:8763 http://ifconfig.io
curl --proxy 23.45.122.54:8763 https://ifconfig.io

实际上,在这里对于具体的代理类型未设置的话,会对 HTTP 请求采用 HTTP 代理,对 HTTPS 请求采用 HTTPS 代理,所以就相当于:

curl --proxy http://23.45.122.54:8763 http://ifconfig.io
curl --proxy https://23.45.122.54:8763 https://ifconfig.io

一般的正向代理站点都无法接收 HTTPS 的请求代理,对于 NGINX 可以参考 使用 nginx 进行 HTTPS 的正向代理 正确配置之后,就可以在 HTTPS 代理中使用 HTTP schema 代理 HTTPS 站点请求。

curl --proxy http://23.45.122.54:8763 https://ifconfig.io

环境变量

但是有些命令行软件比如 wget 就没有代理参数,这时就可以设置环境变量参数。

http_proxy=23.45.122.54:8763 wget http://ifconfig.io
https_proxy=23.45.122.54:8763 wget https://ifconfig.io

在这里同样的需要匹配 HTTP|HTTPS 请求类型和 HTTP|HTTPS 代理类型的,对于未设置代理地址的 schema 时候是会自动生成。

在这里因为只是设置环境变量,所以其实换个思路可以用 wget -e 的参数 wget -e http_proxy=23.45.122.54:8763 http://ifconfig.io

如果需要长期使用,可以写入配置

export use_proxy=on
export http_proxy=http://your_ip_proxy:port/
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export dns_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"

其他工具

如果以上都不能满足需求的话,或许可以试下使用其他一些工具来实现,比如 ProxyChains 之类的做代理转发,或者 Caddy, Squid 搭建代理服务器。

socks 代理

除了常见的 HTTP 代理和 HTTPS 代理之外,还有 socks 代理,常用的比如 socks5 代理。

curl 可以直接使用

curl --socks5 127.0.0.1:1086 ifconfig.io
curl --socks5 127.0.0.1:1086 http://ifconfig.io
curl --socks5 127.0.0.1:1086 https://ifconfig.io
curl --socks5 socks5://127.0.0.1:1086 https://ifconfig.io

requests 中使用

为什么要专门强调在 requests 中使用,因为在 python 里 requests 是使用最广的 HTTP 客户端,我使用 python 发出的 HTTP 请求大部分是由 requests 完成的。

HTTP 和 HTTPS 代理

在 requests 中使用代理可以通过 proxies 参数设置, 同样的 HTTP 请求需要使用 HTTP 代理对应的 HTTP schema。

# -*- coding: utf-8 -*-

import requests


def http_proxy():
    proxies = {"http": "http://23.45.122.54:8763", "https": "https://23.45.122.54:8763"}
    resp = requests.request("GET", "http://httpbin.org/get", proxies=proxies)
    print(resp.status_code)
    print(resp.content)
    resp = requests.request("GET", "https://httpbin.org/get", proxies=proxies)
    print(resp.status_code)
    print(resp.content)


if __name__ == '__main__':
    http_proxy()

但是实际上,对于 HTTPS 的请求使用 HTTPS 的代理,但是却可以使用 HTTP 的 schema 。

# -*- coding: utf-8 -*-

import requests


def https_proxy():
    proxies = {"http": "http://23.45.122.54:8763", "https": "http://23.45.122.54:8763"}
    resp = requests.request("GET", "http://httpbin.org/get", proxies=proxies)
    print(resp.status_code)
    print(resp.content)
    resp = requests.request("GET", "https://httpbin.org/get", proxies=proxies)
    print(resp.status_code)
    print(resp.content)


if __name__ == '__main__':
    https_proxy()

socks 代理

在 requests 中使用 socks5 代理有两种方式

  1. requests 的 proxies 参数其实支持 socks5 ,但是需要先安装相关依赖包 pip install "requests[socks]"
  2. 使用 socks 包 hook 发出的 HTTP 请求,全局生效,需要先安装 socks 包 pip install pysocks
# -*- coding: utf-8 -*-

import requests


def get_by_proxy():
    proxies = {"http": "socks5://127.0.0.1:1086", "https": "socks5://127.0.0.1:1086"}
    resp = requests.request("GET", "http://httpbin.org/get", proxies=proxies)
    print(resp.status_code)
    print(resp.content)


def hook_proxy():
    import socks
    import socket

    socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 1086)
    socket.socket = socks.socksocket

    resp = requests.request("GET", "http://httpbin.org/get")
    print(resp.status_code)
    print(resp.content)


if __name__ == '__main__':
    get_by_proxy()
    hook_proxy()

获取代理

  1. 自己搭建,无论是 HTTP 代理或者 HTTPS 代理还是 socks5 代理,都是有有办法的。
  2. 网上公开的临时资源,可以通过一些工具获取,比如 ProxyBroker, 或者 proxy_pool

参考链接

How to set proxy for wget?
How to make python Requests work via socks proxy
Python中Request 使用socks5代理的两种方法(个人推荐方法二)

🔲 ☆

NUC 装机指南

NUC

NUC 全称 Next Unit of Computing 是 Intel 推出的迷你电脑

装机一览

给大家展示一下 NUC ,实际非常小巧,只有我的手掌🖐大小,长没有我的手机长,宽也没有我的手机长,高还是没有我的手机长。

然后看一下在桌面上的效果,比显示器底座还小

别看他小,其实性能非常强悍, 八代 i7 处理器,32G内存,1T 固态硬盘。

不服跑个分

对比一下我在用的 MacBook Pro 13寸2019款

以我双十一的时候购买的 NUC8i7BEH 为例, 加上内存和硬盘总价在5k以内,极具性价比。

NUC8i7BEH                   2499
西数 SN550 1TB               765
金士顿 DDDR4 16G*2           899
HP 24MH 显示器               789

如果你需要一个体积小巧,性能强悍,性价比高的电脑,不妨考虑下 NUC 。

装机清单

NUC

一般 NUC 套件不包括内存和硬盘,只有 Intel 的芯片和主板,包括集成显卡,无线网卡,蓝牙驱动等模块,内存和硬盘需要自己选购和安装,这样也能锻炼自己的动手能力。

代号 图片 代数 上市时间 NUC型号 CPU型号 显卡型号 功耗 最大内存 硬盘卡槽 其他  
豆子峡谷
Bean Canyon
第八代 2018 NUC8i3BEH i3-8109U Intel Iris Plus 655 28W 32G
DDR4-2400
SATA盘位 *1,M.2插槽 *1 USB3.1*4, Type-C*1, 千兆网口,无线网卡,蓝牙5.0  
        NUC8i5BEH i5-8259U Intel Iris Plus 655          
        NUC8i7BEH i7-8559U Intel Iris Plus 655          
冥王峡谷
Hades Canyon
第八代 2018 NUC8i7HNK i7‑8705G Intel® HD Graphics 630 & AMD Radeon RX Vega M GL 65W 32 GB
DDR4-2400
M.2插槽 *2 USB3.0*5, USB3.1*1, Type-C*1, 千兆网口*2,无线网卡,蓝牙4.2  
      NUC8i7HVK i7‑8809G Intel® HD Graphics 630 & AMD Radeon RX Vega M GH 100W 32 GB DDR4-2400 M.2插槽 *2  
幽冥峡谷
Ghost Canyon
第九代 2019 NUC9i5QNX i5-9300H Intel® UHD Graphics 630 45W 64 GB
DDR4-2400
SATA盘位 *2, M.2插槽 *2 USB3.1*6, Type-C*2, 千兆网口,无线网卡,蓝牙5.0  
      NUC9i7QNX i7-9750H Intel® UHD Graphics 630          
        NUC9i9QNX i9-9980HK Intel® UHD Graphics 630          
寒霜峡谷
Frost Canyon
第十代 2019 NUC10i3FNH i3-10110U Intel® UHD Graphics 25W 64 GB
DDR4-2666
SATA盘位 *1, M.2插槽 *1 USB3.1*3, Type-C*2, 千兆网口,无线网卡,蓝牙5.0  
        NUC10i5FNH i5-10210U Intel® UHD Graphics          
        NUC10i7FNH i7-10710U Intel® UHD Graphics          

CPU

英特尔(Intel) 的酷睿(Core) i3 i5 i7 和 i9 系列是不同的 CPU 型号,就像 iPhone 12 mini,iPhone 12, iPhone 12 plus 和 iPhone 12 max 是不同的型号. 然后还分代数,比如 iPhone 12 就是第 12 代,CPU 也分代数,最新的 10 代。

同型号中,最新的一代性能最强。同代型号中,数字越高的性能越强。跨代跨型号时,可能 i3 比 i7 更强

笔记本电脑上常见的 CPU 贴纸。

Intel 芯片的常见命名后缀

  • G:带G后缀的CPU通常被称为Kaby Lake G处理器,这类处理器是Intel和AMD合作的产品。CPU部分由Intel负责,GPU部分则是AMD提供,两者连同超强性能的HBM2显存一同整合在同一块基板上,性能强大。这类产品已经可以脱离独立显卡流畅工作。代表作Core i7-8809G。
  • H:在第八代以前,H的意思是bga焊接封装(不可动手更换),与其相对应的是M(pga封装,一般都可更换同代CPU)。八代开始,H对i7来说不止意味着bga封装,也意味着6核(Hexagon),相对的是Q(4核,quad),H不代表有高于本代平均水准的gpu,也没有自带超线程的意思,比如i3 8100H就是4核4线。
  • HK:这类产品是在H后缀的处理器上加入了超频属性,从此笔记本产品也可以超频了。代表作Core i9-8950HK。
  • HQ:四代CPU中就出现的CPU后缀,代表作为i7 4700hq。
  • K:这个就不多说了,普通玩家接触最多的后缀,搭配合适的主板可以进行超频。代表作Core i7-8700K。
  • X:带有这一后缀的CPU一般都具有王霸之气,基本上就是当代最强桌面级CPU的代号,一般会搭配X99/X299/X399这类平台使用,代表作Core i7-7820X。
  • XE:比X后缀还牛逼的CPU后缀,这类产品都有与生俱来的超王霸之气,旗舰中的旗舰,顶级中的顶级产品。目前市面上只有一款:Core i9-7980XE。
  • U:低压版移动处理器,被用在各种上网本、超极本、超薄本上,代表作Core i7-8550U。
  • M:这一后缀代表双核移动版处理器,但是从4代CPU以后就再也见不到了。代表作Core i5-4310M。
  • R:和B后缀类似的移动版处理器,代表作Core i7-5775R。
  • T:低压版桌面处理器,功耗和性能都比不带后缀的产品低。代表作Core i7-8700T。
  • Y:比M后缀的处理器还早的产品,也是超低电压版移动处理器,在极短时间内被M后缀的处理器所取代,代表作Core i3-3229Y。
  • B:这一后缀是为了满足一些例如一体机等紧凑型设备的需要而开发出来的,这类CPU并不靠针脚与主板连接,而是利用FCBGA1440封装直接焊接在主板上。代表作Core i5-8500B。
  • C:这个后缀只在5代CPU上出现过,但因为5代CPU特别短命,了解这一代产品的人不多,所以导致这个后缀也基本没人了解。代表作:Core i7-5775C。

除了 CPU 之外,还有 AMD 的锐龙(Ryzen) 芯片最近几年也比较猛。

AMD, YES

此外,Apple 的 M1 芯片则表示,在座的各位都是弟弟。

显卡

显卡根据安装位置可以分为核心显卡,集成显卡和独立显卡,核心显卡是指 CPU 集成的显卡就是核心显卡,主板集成的就是普通集成显卡,独立显卡就是有独立芯片,一般需要独立外接的显卡。

以 NUC8i7BEH 为例,采用的是 Iris Plus Graphics 655 核显,加上第八代Core i7-8559U处理器,与 2018款 MacBook Pro 13寸高配版一样的搭配。

关于显卡有两点要明确

  1. 一般电脑自带的集成显卡是不如独立显卡的,但是不排除部分集显的性能要优于垃圾独显
  2. 集显也不是不能用,除了在大型游戏或者视频渲染的场景下需要独显,在工作生活场景已经足够。

独显主要有 英伟达(NVIDIA) 的 GXT 和 RTX 系列,核弹 GPU 性能爆炸,体积也挺大。

英伟达(NVIDIA) 的图灵架构(Turing) GPU 设计主要有 GeForce RTX 和 GTX 系列。RTX 系列提供了实时光线追踪和AI,有了更加逼真的场景,游戏体验也变得更加令人振奋。

内存

注意 NUC 使用的是笔记本内存条,不是台式机内存条

内存条需要注意带宽频率需要和 CPU 支持的频率保持一致,内存主频越高性能越强。

现在内存已经到了 DDR4 的第四代内存,常见的频率有

  • DDR4入门级:2133MHz
  • DDR4中端型:2400MHz
  • DDR4强悍型:2600MHz
  • DDR4至尊型:3200MHz, 3600MHz

硬盘

现在主流都是使用固态硬盘,使用固态硬盘能让你的电脑性能大幅提升,因为固态硬盘的存取速度要远超出传统机械硬盘。

固态硬盘(M.2)目前主要有两种技术协议:

  • M.2 SATA 最快 600MB/s
  • M.2 NVMe 最快 3000MB/s

SATA 是机械硬盘使用的传输协议,同时 SATA 接口也是机械硬盘的插槽接口。

装机实战

NUC 其实主要就是安装内存和硬盘,其实非常简单。

一根1T 固态硬盘条

两根16G 内存条

拆下后盖和装硬盘需要螺丝刀,一般会送。

装内存条就和装笔记本内存条一样,往上套然后往下压,听到卡的一声就安装好了,看下NUC内部装好之后的样子。

系统
NUC 装机是不带系统的,需要自己安装系统。

张华装上了 Mac 系统,李萍装上了 Linux 系统,我装上了 Windows 系统:我们都有光明的前途。

参考信息

Wiki-Next Unit of Computing
Wiki-酷睿
科普讲堂——英特尔CPU的命名规则
2020台式电脑组装配置清单(总目录)
2021台式电脑配置、配置清单推荐
强势来袭!一图看懂新品NUC,不止一款!
一图看懂英特尔NUC迷你主机(续集)
Intel NUC8i7BEH 评测
用Intel NUC8i7BEH6打造高性能“小钢炮”,Iris Plus 655 GT3e核显机使用体验
MacBook Pro (13-inch Mid 2019)
Intel(R) Client Systems NUC8i7BEH
怎么让小白理解intel处理器(CPU)的分类?
英特尔最强NUC评测:百瓦功耗能吃鸡

🔲 ☆

LD42 Game: City 2048

LD 42 Game. A little sim and strategy game. Worked with Huai boqun who is an architect designer functioning as 3d artist here. We also cooperate on a long-run game during our sparetime.

🔲 ☆

glTF Avatar in Three.js

I implement the glTF Avatar System in Three.js, with some improvement. It can also merge export the avatar as a single glb file, and loaded by any engine supporting glTF. I post it to Facebook 3D post as an example. A website as a sharing platform of skeleton and skin files is also under construction as a 肥宅快乐工程

❌