普通视图

发现新文章,点击刷新页面。
今天 — 2025年3月26日首页

是时候在我这里聊一下人工智能了

作者 石樱灯笼
2025年3月26日 02:22

是时候在我这里聊一下人工智能了

疯狂的热度也该过了吧。

也是时候冷静的看待这个问题了。

screenshot-downloaded-image

这篇文章写得特别长。懒了,没有拆成多篇文章。


目录


一、个人初接触AI技术

1. waifu2x

我第一次开始接触并使用 AI 技术,应该是 waifu2x 这个图像缩放工具。

确切的说 waifu2x 并不是人工智能技术,只是使用了和目前人工智能技术相同的 「卷积神经网络」

这东西其实不用多介绍了。

这东西实用性能满足日常需求,而且本地部署也只需要不到50MB的空间,方便又整洁。

screenshot_on_b85m_by_flameshot_at_2025-03-18_22-57-18

论清晰度其实 waifu2x 已经很不错了,尤其是平时出的原图的时候不符合各种破视频网站分辨率最低要求的时候,用 waifu2x 糊弄一个高分辨率图,然后再被这些破网站压缩成 320×180 的小图。

唯一想说的就是当时这个技术可是被小鬼滥用到极致,最火爆的期间各种互联网古董图片都被这些小鬼用waifu2x放大之后发到网上,然后大叫“我找到XXX的高清原图了!”。不明真相的人要是跟他讲这是“放大的”,他还会继续跟你解释“这是高清原图!”

你永远叫不醒一个装醒的人。

2. style2paints

接触到的第二个 AI 工具应该是 style2paints 。这是一个线稿上色工具。

最初接触这个软件的时候还是V3版本。

screenshot_EHDsLiyVAAAhjDF

网上的AI线稿上色功能基本已经烂了,但是完成度也是稀烂,可以说根本没法用。

Screenshot_2025-03-18_at_23-06-03

最早那一阵子还因为随便上色了一个线稿,画师直接就把我拉黑了。

screenshot_snap2888-starbreaker

screenshot_snap2930

style2paints 出 V4 的时候我写过这么一篇文章:https://blog.catscarlet.com/202002203604.html

202002203604_play_s2pv4/1046.png

screenshot__ERL3IRbUwAADPz-

后来 style2paints 出完 V4.5 之后,说要出 V5,而且放出了不少预览图,效果很棒,但是再也没有过下文。开发者在 GitHub 上还是活跃状态的,只不过全部都是私有提交了。

网上也再没出现过独立的开源上色工具。各个大厂虽然有各种所谓的线上AI图像处理工具,却基本上没有免费的线稿上色功能。收费的倒是一大堆,但是AI出图的效果本身就稀烂,谁知道输出一次期望中的结果之前得花多少冤枉钱。

3. rife

这算是第三个我使用的AI工具。功能是:补帧

最开始的时候这个项目还是叫做 arXiv2020-RIFE ,后来才改成 ECCV2022-RIFE 的。

但是实际上这玩意放在个人手里意义不是很大。最多就是把互联网早期的GIF表情包改得流畅一点,但是很多情况下 AI 对于补帧和人脑还是两回事。

bilibili:整了个支持Alpha图层GIF动画的放大加补帧转VP9的脚本

在有遮挡性的图像变动的时候,补帧出来的图像就会出错。4.22版本。

screenshot_00000054

(我本地是有更新的模型版本的,但是执行的时候就会出现主机断电的状况。能确定不是电源供电不足,但具体是什么愿意无从得知)

现在这个技术也被滥用了。

  • 网上有一堆原生30fps被补到60fps的动画资源,看着特别的果冻。也有电影,甚至 YouTuBe 上有 60fps 版本的 复仇者联盟1 看着就像游戏过场动画一样。
  • 很多电视台的代理(IPTV)和电视盒上游,会把 30fps 的视频补到 60fps,看着十分的诡异。
  • 最烂的当然还是显卡厂家,直接搞出 DLSS 这种帧生成的恶心玩意。

我自己看这种全局的恶意补帧视频时觉得就挺恶心的,头晕得很快。但是后来发现大多数人都是瞎子,别说补帧了,帧错误亮度错误对比度错误在他们眼珠子里都没有区别的,盯着一个坏掉的显示器看上几个小时愣没察觉到自己显示器是坏的旁边显示器是好的,瞎。

4. 其他

其他的基本上就没有接触过了。最多就是个 rembg 去背景工具,我也用不上。

再往前还有 AlphaGo,谷歌在打完围棋之后跑去打星际争霸,然后难产了好一阵子。最后不了了之,在网上搜谷歌AI打星际的视频,只能搜到一个播放列表,是 ArtosisTV 解说的 AlphaStar vs Serral,但是解说内容是基于非星际争霸玩家的,AI的每个行为以及星际争霸的每个兵种和技能都要解说一遍,中间夹杂着各种暂停和战术解释,节奏超级慢,12分钟的游戏解说了半个多小时,根本看不下去。这其间谷歌的AI就彻底凉了。

那几年 AI 爆火的时候 Python 从个只是底层干活的脚本语言一跃成为 不学 python 你就落伍了 这种骗术主流。我是懒得去学,这玩意个人学了也是屁用没有。AI 这种技术注定要被大厂捏得死死的。


二、爆火的 DeepSeek 把国际 AI 大厂的股票打废了

国产的 DeepSeek 把以 Nvidia 为首的国际AI大厂打废了,这是事实。但理由并不像国内鬣狗自媒体和阿Q人一样,因为鬣狗阿Q的思路就是成功啦崛起啦疯狂嗷嗷叫,谁叫得声音大谁有理。

Nvidia和其他大厂之所以市值蒸发,是因为他们一直声称的 需要更多硬件更多算力扯蛋

确切的说, Nvidia 摆烂也不是有 AI 才开始的。先是在挖矿潮期间摆烂,后又开搞各种与游戏算力不相关的各种糊弄人的技术。其他各厂基本上也是一样,微软在那搞的 onnx 的也是稀烂(之前我参与修复的 rembg 不能正确使用硬件加速的 bug 就是 微软 onnxruntime 和 Nvidia-CUDA 联手造成的,可见其代码是有多烂)。

而一个名不见经传的 DeepSeek 却用了很普通的过时硬件做出来一个捅了行业技术天花板的产品,这直接戳破了 英伟、微软、英特尔 这么多年来一直给市值吹肥皂的核心理念。 算力不是最重要的 不需要什么大厂技术也能做 一直吹牛逼的玩意其实屁都不是 ,这乐子直接打得 Nvidia 的50系显卡一点都不香,微软的 Win12 不知道该怎么塞烂功能,英特尔的 Ultra 系列定位完全翻车。 活该!

至于 DeepSeek 究竟怎么样?看着那个推理过程好似挺有趣的,但其实推理流程过于营销号,复杂一点的问题就开始胡说,网上难搜到的东西就开始瞎编,就和其他 AI 一样。

screenshot_on_b85m_by_flameshot_at_2025-03-19_00-42-48

screenshot_on_b85m_by_flameshot_at_2025-03-19_00-43-22

screenshot_on_b85m_by_flameshot_at_2025-03-19_00-43-43

screenshot_on_b85m_by_flameshot_at_2025-03-19_00-43-48

screenshot_on_b85m_by_flameshot_at_2025-03-19_01-06-00

screenshot_on_b85m_by_flameshot_at_2025-03-19_01-06-10

screenshot_on_b85m_by_flameshot_at_2025-03-19_01-06-17

screenshot_on_b85m_by_flameshot_at_2025-03-19_01-06-28

(部分错误引用和内容均用红框标注)

这表现实在是太像一个初中没毕业结了婚有了娃,娃娃问你一些客观存在但你完全不知道的知识时,就在那瞎引用瞎推理瞎解释,着实一个爹味浓厚的鬣狗阿Q,着实让本来就生活在这种恶劣环境的人反胃。


三、目前的 AI 到底能做些什么?

首先这个得分场景考虑,也就是,AI 这项技术在谁的手里时才有什么用。

1. 大型IT企业

首先一个前提得讲清楚:

目前的 AI 技术就是 给一个算法喂数据养模型,当相应的数据是 由人类创作的 情况下就十分有争议,说难听点就是 抄袭 。编程AI抄代码,绘图AI抄绘画,医疗AI抄病例,这也是目前相当多一部分人反AI的核心理由。

我的个人观点是:

  • 以一定的目的使用特定的数据训练AI并以此谋私利,那就是 抄袭
  • 将整个互联网数据全部用来训练AI,并公开数据模型,供所有人无偿使用,那不叫抄袭,那叫 人类的知识库

很可惜 人类的知识库 在目前的商业环境下实现不了。想使用 将整个互联网数据 的就只有大型IT企业,而目前的这些企业都是清一色的自私自利行业毒瘤,他们的存在多数都是对行业弊大于利,唯一的那点利也知识为了保住他们的自身地位罢了。(举例的话就是微软英特尔之流目前在开源界贡献的代码排在首位,但是他们贡献的全他妈的是他们自家用的驱动代码和调用代码,对整体行业有个屁用啊)

2. 中小型IT行业企业

首先中小型企业很少能有能力自己研究算法,在有限的资金和精力之下无法对行业技术作出突破性的贡献。你也不能怪罪他们,很多公司本身为了能正常运营就已经很努力了。

这才是行业真实现状。他们的产出才是老百姓真正能接触到和获益的。

目前据我能看到的,超市电子秤 可以说是一个不错的例子:传统的大型商超的果蔬摊位基本上都是要有个 负责称重的功能,有些是有专人上秤打标签,有些则是自主称重。现在很多超市都是AI电子秤,把果蔬放上去之后,能直接识别到品名(可能会识别到多种,再人工选择),这个工作量要比纯手选低多了(一个果蔬商超一般都有几十种甚至上百种标签)。当然,具体是如何实现的,我不知道,可能是电子秤公司自己训练模型,也可能傻屌公司每次都得调用一次大厂的云服务进行图像识别。

当然了!

也可能反过来,因为这些企业的领导人可能就不是IT行业出身的,很可能就是个投机人。

那么,答案只有一个了:《Employment for computer programmers in the U.S. has plummeted to its lowest level since 1980—years before the internet existed》

你甚至可以尝试阅读这篇文章的中文AI总结:《财富》:程序员就业降 – 豆包

事实上国内中小型IT行业企业的产品质量也已经进一步滑坡了,你可以看一下这个 用户端验证时间 的神奇逻辑:《海航888元的随心飞偷跑了!》,基本就是什么人要写个需要验证时间的代码结果直接丢给AI就复制粘贴了,人脑里连产品设计的逻辑基础都没有。

screenshot_on_b85m_by_flameshot_at_2025-03-19_19-59-14

3. 非 IT 行业的企业

首先摆烂的一定不会是普通老百姓。

screenshot_on_b85m_by_flameshot_at_2025-03-12_14-22

https://weibo.com/2645861077/Pi3jJBv1w

普通老百姓摆烂都抢不到热乎的。

更别说还有人人喊打的 AI 客服了。


四、目前的 AI 在个人手中到底能做些什么?

1. 作为问答式搜索引擎

因为目前的AI就是一个特速算法的搜索引擎,所以当搜索引擎用是最基本的功能。尤其是在如今搜索引擎(不论中外)的搜索结果质量都暴跌,很多人都期望能在AI上得到好一些的结果。

只不过AI也是从搜索引擎拿结果的……

screenshot_on_b85m_by_flameshot_at_2025-03-16_20-38-25

啊不是,我要是自己愿意自己逐像素框选的话那我还问你干球?

screenshot_on_b85m_by_flameshot_at_2025-03-17_21-49-05

这是怎么把一个街机游戏识别成 999 和 11eyes 的?还把俩游戏标题合并到一起了?

screenshot_on_b85m_by_flameshot_at_2025-03-21_23-29-24

Jay Smith 的 Bad Romance 与 Lady Gaga 的 Bad Romance 是什么关系?你这 DeepSeek 这是要往哪里推啊?

screenshot_on_b85m_by_flameshot_at_2025-02-25_20-44_1

我已经无语了。

不得不说很多问题有时候答案是烂得不行。

2. 写垃圾文案

简直是官僚主义形式主义的辉煌!废话文学的巅峰!狗屁不通高考满分作文上树!

screenshot_on_b85m_by_flameshot_at_2025-03-22_00-03-52

当然我也找到了点正经有点用的功能,那就是语法检测。

screenshot_on_b85m_by_flameshot_at_2025-03-22_00-20-26

这玩意对于非母语用户还行,就是也很喜欢在有得没得的地方反复胡扯。没有中文版是个遗憾。国内的产品会拿你的文档做训练,所以千万别用。

3. 编程

・项目

作为一个差不多快被社会淘汰的程序员,说实话,我到现在 IDE 还是在用 Pulsar (原 GitHub 被微软收购后被抛弃的 Atom 的社区派生版本)。什么AI插件我都没安装。

我对于 AI 编程不是很了解,我也不知道这玩意现在到底能干啥。反正大家都吹得天花乱坠的。于是找了某之名 AI 编程 IDE ,cursor,在本地试了一下。

我这手里有一些对我来说解决起来很麻烦的问题,就是不是我自己写的旧代码不兼容新环境的问题,工程量太大,业务逻辑完全不知道,我也不想去研究这些项目的具体实现。

我就想着,AI工具既然可以导入项目,那可不可以直接让AI把代码过一遍,然后针对新环境的版本把旧代码中不兼容的地方全找出来改掉。

想得美!现在的AI编程工具和搜索引擎一样,还是问答式的。

试着导入了一个项目,然后 cursor 一直不停的有得没得一直在废话一些毫不相关的东西,对于因新环境和新框架不兼容的问题一个都没发现。

screenshot_on_b85m_by_flameshot_at_2025-03-05_20-14

不得不说,很多人活得非常的 人机

・功能片段

那既然,AI编程这玩意仍然是问答式的,那就干脆继续当搜索引擎用就罢了,根本不需要什么编程插件或IDE编辑器,更不需要什么按量付费编程接口。

事实上,AI在问答式编程输出的结果还挺不错,尤其是在很多 理论上可行且应该有人实现过,但周围所有认识的人都没接触过对应技术 的场景下极为有效,而作为一个腐朽的程序员,我没事就会遇到这种 技术上应该能实现但是我不知道对应技术的入口在哪,而身边完全更是没一个比我更了解响应技术领域的人 ,这时要是在像文中 《我是救兵请来的猴子》 提到过的环境下,至少身边人都会想办法帮你找对应的资源,但是事实上现在国内大部分公司,同事人人自危根本顾不上你,甚至有人巴不得你翻车然后下次被优化的就是你,领导更是觉得「员工遇上瓶颈」乃是天大的 职场PUA 机会,绝对不会放过。

比如 《从豆包下载无水印图片》 这个用户脚本的核心理念是 跨域下载并重命名图片 。本身下载并重命名图片是 HTML5 协议中<a>的的一部分,但是掺合上跨域后就报废了。理论上这是个安全无风险的功能,但是实际上就是做不到,封死了。绕路办法,如果在网上搜,大部分资源都是告诉你使用 <canvas> 对图片进行跨域下载,但实际上却有更好更干净的办法。这个的确在AI中可以搜到,而在传统搜索引擎搜索的时候,搜索结果却会被 <canvas> 的结果淹没。

・繁琐复杂又没技术含量的代码

在编程开发这一块中,有很大一块工作内容都是 繁琐复杂又没技术含量的代码,尤其是前端开发,经常要计算渲染后图像的位置,或者单个元素的样式。这一块基本没人愿意写,但是很多时候不写不行。

这种工作交给 AI 却是非常的巴适。

screenshot_on_b85m_by_flameshot_at_2025-03-22_00-41-37

screenshot_on_b85m_by_flameshot_at_2025-03-15_20-49-15

有些时候国内AI编程的确会给出点惊艳的地方,比如需要临时文件或文件夹的时候知道 mktemp 。微软这种背靠 GitHub 的 Copilot 甚至都只会原地拉屎。

screenshot_on_b85m_by_flameshot_at_2025-03-06_14-18

但是却并不 100% 可靠。

screenshot_on_b85m_by_flameshot_at_2025-03-26_01-36-48

screenshot_on_b85m_by_flameshot_at_2025-03-26_01-38-28

・复杂逻辑的编程

上一点复杂逻辑,AI编程就很容易挖坑。

比如AI会犯最经典 初级程序员错误 ,第二次循环时忘记把标志位重置。

screenshot_on_b85m_by_flameshot_at_2025-03-06_14-23

(原链接找不到了只剩下文件了)

以及基础命令经常想当然,上下文对应不上。

screenshot_on_b85m_by_flameshot_at_2025-03-17_06-36-16

红框位置的 type -f 对应的是 文件 ,但是上下文里写得清清楚楚的是在处理 软链接,应该改使用的是 type -l 才对。

只要上一点逻辑,那出错的情况就特别多。而且由于这代码不是你亲自写的,所以你要重新读一遍所有代码才能理清其逻辑,之后才能找到 Bug 所在。

经典的 编程即是10%的时间写代码,90%的时间找bug,那 10% 才是编程的真正乐趣。而大范围引入AI进行编程后,编程是1%的时间写代码,99%的时间找bug

把编程唯一的快乐送给AI,把屎留给自己吃。

4. 绘画

这一块既是最有争议的一块,亦是我用到的最多的一块。

说来也挺可乐的,程序员在AI领域用到最多的功能不是AI编程……但话又说回来,我自己会编程我为什么还要找一个不靠谱的AI给我添麻烦?没上过班没被同事坑过还是怎么回事?

其实2022年那阵我就接触过 dalle-mini ,然而当时AI绘图基本上只能到这个程度:

screenshot_on_b85m_by_flameshot_at_2022-06-08_15-24-18

screenshot_on_b85m_by_flameshot_at_2022-06-08_14-22-06

screenshot_on_b85m_by_flameshot_at_2022-06-08_14-08-33

screenshot_on_b85m_by_flameshot_at_2022-06-08_14-04-19

怎么说呢,有些输出的确是带着灵魂的,但是整体上一塌糊涂。你可以看到每个输出中都或多或少带着核心细节。

现在AI出图已经今非昔比了。

screenshot-生成特定风格图片-2136008435344130-20250322221645

screenshot-生成特定风格图片-2134056610409986-20250322215006

・尝试本地化

首先当然是尝试在本地部署这玩意。在网上搜了下,基本都在说 comfyui 。这玩意我看了一下,支持 Docker ,那就毫不犹豫部署了。

screenshot_on_b85m_by_flameshot_at_2025-02-19_17-50-18

然而实际使用效果不太乐观。

comfyui 的默认模型出图基本是这样的:

screenshot_on_b85m_by_flameshot_at_2025-02-19_19-56-15

离实际能使用差太多了。

而目前可以在线上无限次数使用的AI生成图像工具,我找到了两个:豆包和百度,他们的出图效果是这样的。

豆包:

screenshot_on_b85m_by_flameshot_at_2025-02-19_20-07-18

百度:

screenshot_on_b85m_by_flameshot_at_2025-02-19_20-06-59

百度英文解析:

screenshot_on_b85m_by_flameshot_at_2025-02-19_20-07-33

(豆包不支持纯英文解析)

百度的出图效果要比豆包差一些,但是在关键字很少的情况下精度比豆包要高,但但是关键字超过一个限度之后百度的精度就急转直下彻底崩了。

我检查了一下,comfyui 应该是需要手动添加模型。但是我尝试了几个例子看起来很不错的模型,在执行到 VAE Decode 时,主机就会直接断电重启。

screenshot_on_b85m_by_flameshot_at_2025-03-12_01-14

我个人认为应该不是电源供电不足的问题,因为在 KSampler 阶段,显卡就已经跑满 200w 了。同样的问题也在 rife 上出现过(前文也提到了),使用 4.22 模型就正常,使用 4.25 模型就会断电重启。虽然我也怀疑是显存不够的问题,但是 comfyui 比较小的模型只有 2G 多就会导致我断电重启,而 rife 4.25 模型与 4.22 模型都只有不足 20M ,这就不太像是显存不够的情况。而且我的显卡是 GTX1080 8G 版本的,实测最多也只用掉 6G 多一点。

只能怀疑是驱动问题了,毕竟 GTX1080 这个老显卡是诞生得比挖矿潮还早。但没有办法了,我之前把系统升级后(从 Linux Mint 20.3升级到 Linux Mint 22.1,基于Ubuntu20.04到Ubuntu24.04),驱动版本还是550,CUDA也只是从12.2升级到了12.4而已,而最新版本貌似是12.8。我也不清楚到底是 GTX1080 只能装这么高,还是有什么其他限制。Nvidia 官网倒是有一个 575版本,Linux Mint官方没说正式支持,我也不想试。毕竟即使跑 comfyui 的默认模型,显卡的噪音都超大,温度直达 70 度以上(风扇57%转速,再提高那噪音就真的难以忍受了),而仍然要等很久才能出一张图。

本地化部署这事只能暂时放弃,等有新电脑新显卡再说吧。

・放大图片工具

出图只能用线上工具,那顺带看看线上工具都有哪些功能,结果发现百度放大图片的功能效果竟比我本地的 waifu2x 要好。

screenshot_on_b85m_by_flameshot_at_2025-02-22_20-26-52

(左图:百度放大。右图:本地 waifu2x 放大)

这我可接受不了。立刻把本地的图片放大工具换成 Real-ESRGAN ,测试一下。

把图片缩小,然后再用 Real-ESRGAN 放大,然后离谱的就来了。

screenshot_on_b85m_by_flameshot_at_2025-02-23_00-11-47

(左图:Real-ESRGAN animevideov3 模型。右图:原图)

animevideov3 不知道为何图片变得有点鲜艳了?

screenshot_on_b85m_by_flameshot_at_2025-02-23_00-12-01

(左图:Real-ESRGAN x4plus 模型。右图:原图)

x4plus 放大后竟然比原图还清晰!太离谱了。

这让我想起了网上传闻的「断崖上未融化的雪块被相机AI补全成坠崖的白色尸体」的乐子了。

・去背景工具

本地化了 rembg ,因为命令行真的太好用了,比起线上工具实在太方便。然而 rembg 的代码质量稀烂,依赖的环境(onnxruntime,cuda-cudnn)更是烂到彻底。为此做了不少工作。我根本就不是个写 Python 的。

反正最后调通了,而且把模型更新到了 birefnet ,效果比默认的 u2net 好非常多。

screenshot_on_b85m_by_flameshot_at_2025-02-20_15-32-10

(左图:u2net 模型。右图:birefnet 模型)

screenshot_on_b85m_by_flameshot_at_2025-02-20_15-32-20

(左图:u2net 模型。右图:birefnet 模型)

・线上出图工具

前文也讲了,我找到的可以在线上无限次数使用的AI生成图像工具有两个:豆包和百度。豆包出图效果比百度强一点。

只不过除了模型比较强大以外,豆包仍然有着所有AI图像生成工具都有的毛病:不听话

screenshot_on_b85m_by_flameshot_at_2025-03-03_11-27

screenshot_on_b85m_by_flameshot_at_2025-03-03_11-28

这完全不日系赛璐璐芳文社好吧,这都给干到韩国去了。

screenshot_on_b85m_by_flameshot_at_2025-03-10_17-12

特别喜欢给妹子穿过膝袜。裤袜搞错就已经很烦了,裤子都给你忽略了。

screenshot-生成动漫风格图片-1804857296308738-20250310150611_realesrgan2x-1

我之前想搞一个倒霉OL妹子的插画想做个有连续剧情的系列,比如妹子加班后下班下大雨,顶着雨去地铁站,结果豆包不会画折叠雨伞,我总不能让妹子淋雨吧?这个就算是情节也实在太不礼貌了,结果发现豆包也不会画「湿衣服」,可乐。

百度却非常的会画「湿衣服」,不仅如此,貌似百度画出来的衣服全都是湿的。

screenshot_on_b85m_by_flameshot_at_2025-03-10_19-00

screenshot_on_b85m_by_flameshot_at_2025-03-12_01-15

发觉百度的输出都特别的色情……

然后是如果遇到AI完全不能理解的内容,出图就特别的诡异。

screenshot_on_b85m_by_flameshot_at_2025-03-09_22-43

screenshot_on_b85m_by_flameshot_at_2025-03-09_20-50

screenshot_on_b85m_by_flameshot_at_2025-03-09_20-50_1

(开车很困难)

有时候干脆就是精神污染……

screenshot_on_b85m_by_flameshot_at_2025-03-12_23-52

不仅如此,线上工具还有敏感词屏蔽词和谐词汇,而且理由也过于欧亨利了。

screenshot_on_b85m_by_flameshot_at_2025-03-12_22-06

screenshot_on_b85m_by_flameshot_at_2025-03-23_23-29-39

这是有多怕有人用AI生成「铁链女」的照片啊?

你就只能靠中国人的聪明才智绕过屏蔽词。

screenshot_on_b85m_by_flameshot_at_2025-03-12_22-08

另一大问题就是让图像上拥有超过1个的关键性事物。

screenshot_on_b85m_by_flameshot_at_2025-03-13_01-39

screenshot_on_b85m_by_flameshot_at_2025-03-13_11-35

一个人拿着一个有特性的事物,或者两个人,就会出错。

貌似这个问题是AI的通病,AI不听话乃是日常,因为人类一句话能讲讲明白一件事情哪个关键词轻哪个关键词重是主观的,两个人能顺利交流那是电波对上了,不能顺利交流那至少一个人看另一个人是傻逼。AI 不一样,AI 没得交流,现在的 AI 只是「训练」出来的。

网上传闻 FLUX 就要靠谱很多,但是本地部署的要求则高得更加离谱。本来在研究这玩意期间发现需要研究的内容就不仅仅是 ComfyUI,还有 LoRA、ControlNet、IP-Adapter 这一堆看着就乱七八糟的玩意就烦了,我又不是专门画图的画师,专门画图的画师也不会用这种完全是另一个领域的工具坑自己。烦了烦了,不研究了。

・线上改图工具

这算是出图工具的子集。

screenshot-赛璐璐风格少女绘制-1843589592669954-20250312154607

screenshot_on_b85m_by_flameshot_at_2025-03-12_15-32

百度的出图效果就巨烂,改图效果更是差劲。事实上百度的那个AI图像编辑废柴得不行。

而豆包则超可笑的只要看到特朗普就生成失败。

最后单独生成了个图片然后用 rembg 去掉背景后再用 GIMP P上去。

screenshot-生成动漫风格图片-1845130723445762-20250312162334

screenshot_-Part-GTY-2202534763-1-1-1_realesrgan2x-1


五、目前我的态度

1. 对个人

我目前个人认为,AI 在个人手里最多只是个大玩具。

讲了这么多工具类的产品,没有多少是能在生产生活中切实获益的。或许像抠背景这种工具在艺术照或者COS照方面能有点用途,或者黑白老照片上色(但是能本地化的上色工具我又没找到)。

可能做创作时可以用 AI 做一些单页插画。但是做漫画就很困难,因为内容的连续性基本无法维持,很容易崩坏。

编程方面,虽然有牛逼吹说有人完全靠AI开发了APP,我觉得那是真吹牛逼。仅是编程环境搭建这一块在任何人面前都是令人生畏的第一座大山,大部分人根本走不到 Hello World 这一步就早早崩溃了。

剩下的就只能用来做坏事了。

2. 对各个企业

・国际

英伟达微软英特尔,仨破玩意早崩早开心。就是不清楚先被 DeepSeek 揭开丑陋真面目后又被川普背后捅刀子的股票崩溃后,到底能对这仨死玩意有多大伤害。

其实我觉得 英伟达 内心是害怕的。当年挖矿潮,捅他刀子的并不是显卡商,而是 ASIC 。我觉得再过一段时间他就得挨真刀子,所以他得把 CUDA 这一块跟 微软 绑得死死的。

screenshot_on_b85m_by_flameshot_at_2025-03-25_23-05-41

screenshot_on_b85m_by_flameshot_at_2025-03-15_20-16-44

screenshot_on_b85m_by_flameshot_at_2025-03-15_20-17-04

screenshot_on_b85m_by_flameshot_at_2025-03-15_20-18-12

(至今我们仍然不知道 ASIC 将如何跨过 AI运行环境 这个门槛)

就是不知道其他大厂到底和英伟达是不是一条心。

screenshot-生成特定风格图片-1932475492982018-20250315210448

而微软的 onnx 烂得曾让我想干脆把看到的 AI 小项目都改写成 腾讯 ncnn 的。这玩意如果要做对比的话:

  • onnxruntime 和 cuda 组合起来的运行环境一般需要 2GB 到 几十GB 的硬盘空间(不包含模型文件),启动速度超级慢,安装各种依赖包很可能搞崩溃你的系统。跨平台安装有完全不同的安装依赖。在日常主机上安装高风险高困难,只有使用 Docker 这种容器才能安全的保证主机不被污染。
  • 腾讯的 ncnn 则完全不需要用户安装任何依赖包,只要操作系统的驱动正确就可以了,整套环境是基于 Vulkan API 实现的,。整个运行环境大概在 几十MB 左右(不包含模型文件),非常的轻量。跨平台只要预编译对应的二进制文件即可。纯绿色。

然而一个巨大的门槛挡住了我,ncnn需要的编程语言基础是C系,对我来说完全是另一个领域,搞不定。

・国内

百度风投 和 DeepSeek 一栋楼。

腾讯有着最好的 ncnn 但是学习门槛略高,而且很明显国际老流氓们都提防着这个山寨王。

阿里?谁他妈的为了个问答系统还要专门安装一个浏览器,甚至产品主页都没适配PC端的桌面浏览器。烧钱疯狂投广告搞得各个平台都跟得了癣病似的。能滚多远滚多远。

screenshot_on_b85m_by_flameshot_at_2025-03-24_00-35-27

国家超算互联网中心?我跟你讲要不是因为秋风于渭水写的这一篇DeepSeek R1 可免费/白嫖网页版一览,我都不知道这玩意存在。这玩意是来搞笑的吧,自己建了一个 DeepSeek 服务但是这鸡巴什么玩意?

screenshot_on_b85m_by_flameshot_at_2025-03-24_00-56-25

screenshot_on_b85m_by_flameshot_at_2025-03-24_00-57-46

互联网的里程碑在这破玩意嘴里被贬成了 在国际上的影响力相对较小


六、结论

个人观点,仅供参考。

这篇文章写到中途的时候发觉内容太多太长。想过从中间拆开,分成多篇文章发布,但想了半天,去他妈的。

The post 是时候在我这里聊一下人工智能了 first appeared on 石樱灯笼博客.
昨天以前首页

梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理


回国的时候最麻烦就是访问国外的网站:邮箱、油管视频等。在中国大陆,翻墙是违法的,但是好像在上海北京等大城市,可以申请许可,比如一些国际驻公司和政府机构因需要则可以申请绕过大墙网GFW/Great Firewall。

翻墙/建梯子的方式很多种,怕麻烦可以买现成的VPN,自己有服务器的可以建Wireguard等。这里再介绍一种简单的方式。

Docker容器里跑火狐FireFox浏览器

假设你的主机/服务器/VPS里已经装有Docker。只需要把下面的脚本存成一个BASH文件,比如 docker-firefox.sh 然后在命令行下跑:./docker-firefox.sh PASS 其中PASS是密码,这个我们下面要用到,PASS如果不写的话则要把 “-e VNC_PASSWORD=” 那行删掉即可。

#!/bin/bash
VNC_PASS=$1

docker run -itd \
    --restart always \
    --name=firefox \
    -p 5800:5800 \
    -v $(pwd)/config:/config:rw \
    --shm-size 1g \
    -e ENABLE_CJK_FONT=1 \
    -e VNC_PASSWORD=${VNC_PASS} \
    jlesage/firefox

等一会儿,这时候Docker会去拉取这个软件镜像,然后完事即可在浏览器里把你的 域名/IP地址 后加上5800端口, 5800是上面脚本里指定的,也可以改成你想要的端口。

docker-firefox-pull-image 梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理 I.T. 小技巧 技术 服务器 计算机 资讯 运维

输入这个脚本命令Docker就会加载容器 jlesage/firefox

这样跑起来了,你的主机就相当于一个中转/代理,你在国内的时候访问你的主机(如果你主机没被大墙网拉入黑名单的话),那你就可以在浏览器里的内嵌FireFox浏览器里打开其它国外网站了。

firefox-docker-on-browser 梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理 I.T. 小技巧 技术 服务器 计算机 资讯 运维

在浏览器里输入服务器IP/域名(HTTP)后加上 :5800 端口号 还需要输入刚刚指定的密码。

使用体验

可能是和我的主机配置有关,总觉得有点卡。不是很流畅。还有就是我想登陆我的GMAIL帐号,被GOOGLE认定有风险,要我改密码,吓得我只能作罢。

试了一下,看了一个油管广告,没有声音,所以通过这个技巧看油管视频是不现实的。

还有就是,目前只支持HTTP,而不支持HTTPS,如果域名开启了HSTS,那只能通过IP来访问HTTP。不过,你可以通过nginx/apache设置一个反代 reverse proxy 来访问HTTPS。

比如以下是在Nginx服务器配置443端口重新转向到这个FireFox代理:

server {
    listen 443 ssl;
    server_name domain_name

    ssl_certificate /root/fullchain.cer;
    ssl_certificate_key /root/key.key;

    location / {
        proxy_pass https://your-server-ip:5800;
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这玩意不适合日常工作,但是回国用于救急还是可以的。特别是不想在公共电脑上留下痕迹,只需要用强密码+HTTPS。等不需要用的时候记得把Docker容器删除即可。

docker stop firefox
docker rm -f firefox

这个没法支持多用户,也就是说多个用户同时登陆看到的是同一个窗口。

jlesage-firefox-in-docker-browser-scaled 梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理 I.T. 小技巧 技术 服务器 计算机 资讯 运维

测试可以在浏览器里打开谷歌

可以使用:docker logs -f firefox 来查看窗口的相关信息:

[init ] container is starting…
[cont-env ] loading container environment variables…
[cont-env ] APP_NAME: loading…
[cont-env ] APP_VERSION: loading…
[cont-env ] DISPLAY: executing…
[cont-env ] DISPLAY: terminated successfully.
[cont-env ] DISPLAY: loading…
[cont-env ] DOCKER_IMAGE_PLATFORM: loading…
[cont-env ] DOCKER_IMAGE_VERSION: loading…
[cont-env ] EGL_LOG_LEVEL: executing…
[cont-env ] EGL_LOG_LEVEL: terminated successfully.
[cont-env ] EGL_LOG_LEVEL: loading…
[cont-env ] GSK_RENDERER: executing…
[cont-env ] GSK_RENDERER: terminated successfully.
[cont-env ] GSK_RENDERER: loading…
[cont-env ] GTK2_RC_FILES: executing…
[cont-env ] GTK2_RC_FILES: terminated successfully.
[cont-env ] GTK2_RC_FILES: not setting variable.
[cont-env ] GTK_THEME: executing…
[cont-env ] GTK_THEME: terminated successfully.
[cont-env ] GTK_THEME: not setting variable.
[cont-env ] HOME: loading…
[cont-env ] LIBGL_DRIVERS_PATH: executing…
[cont-env ] LIBGL_DRIVERS_PATH: terminated successfully.
[cont-env ] LIBGL_DRIVERS_PATH: not setting variable.
[cont-env ] PULSE_CONFIG_PATH: executing…
[cont-env ] PULSE_CONFIG_PATH: terminated successfully.
[cont-env ] PULSE_CONFIG_PATH: not setting variable.
[cont-env ] PULSE_COOKIE: executing…
[cont-env ] PULSE_COOKIE: terminated successfully.
[cont-env ] PULSE_COOKIE: not setting variable.
[cont-env ] PULSE_SERVER: executing…
[cont-env ] PULSE_SERVER: terminated successfully.
[cont-env ] PULSE_SERVER: not setting variable.
[cont-env ] QT_STYLE_OVERRIDE: executing…
[cont-env ] QT_STYLE_OVERRIDE: terminated successfully.
[cont-env ] QT_STYLE_OVERRIDE: not setting variable.
[cont-env ] TAKE_CONFIG_OWNERSHIP: loading…
[cont-env ] XDG_CACHE_HOME: loading…
[cont-env ] XDG_CONFIG_HOME: loading…
[cont-env ] XDG_DATA_HOME: loading…
[cont-env ] XDG_RUNTIME_DIR: loading…
[cont-env ] XDG_STATE_HOME: loading…
[cont-env ] container environment variables initialized.
[cont-secrets] loading container secrets…
[cont-secrets] container secrets loaded.
[cont-init ] executing container initialization scripts…
[cont-init ] 10-certs.sh: executing…
[cont-init ] 10-certs.sh: terminated successfully.
[cont-init ] 10-check-app-niceness.sh: executing…
[cont-init ] 10-check-app-niceness.sh: terminated successfully.
[cont-init ] 10-clean-logmonitor-states.sh: executing…
[cont-init ] 10-clean-logmonitor-states.sh: terminated successfully.
[cont-init ] 10-clean-tmp-dir.sh: executing…
[cont-init ] 10-clean-tmp-dir.sh: terminated successfully.
[cont-init ] 10-fontconfig-cache-dir.sh: executing…
[cont-init ] 10-fontconfig-cache-dir.sh: terminated successfully.
[cont-init ] 10-init-users.sh: executing…
[cont-init ] 10-init-users.sh: terminated successfully.
[cont-init ] 10-nginx.sh: executing…
[cont-init ] 10-nginx.sh: terminated successfully.
[cont-init ] 10-openbox.sh: executing…
[cont-init ] 10-openbox.sh: terminated successfully.
[cont-init ] 10-pkgs-mirror.sh: executing…
[cont-init ] 10-pkgs-mirror.sh: terminated successfully.
[cont-init ] 10-pulse.sh: executing…
[cont-init ] 10-pulse.sh: terminated successfully.
[cont-init ] 10-set-tmp-dir-perms.sh: executing…
[cont-init ] 10-set-tmp-dir-perms.sh: terminated successfully.
[cont-init ] 10-vnc-password.sh: executing…
[cont-init ] 10-vnc-password.sh: creating VNC password file from environment variable…
[cont-init ] 10-vnc-password.sh: terminated successfully.
[cont-init ] 10-web-data.sh: executing…
[cont-init ] 10-web-data.sh: terminated successfully.
[cont-init ] 10-webauth.sh: executing…
[cont-init ] 10-webauth.sh: terminated successfully.
[cont-init ] 10-x11-unix.sh: executing…
[cont-init ] 10-x11-unix.sh: terminated successfully.
[cont-init ] 10-xdg-runtime-dir.sh: executing…
[cont-init ] 10-xdg-runtime-dir.sh: terminated successfully.
[cont-init ] 15-cjk-font.sh: executing…
[cont-init ] 15-cjk-font.sh: installing CJK font…
[cont-init ] 15-cjk-font.sh: fetch https://dl-cdn.alpinelinux.org/alpine/v3.21/main/x86_64/APKINDEX.tar.gz
[cont-init ] 15-cjk-font.sh: fetch https://dl-cdn.alpinelinux.org/alpine/v3.21/community/x86_64/APKINDEX.tar.gz
[cont-init ] 15-cjk-font.sh: (1/1) Installing font-wqy-zenhei (0.9.45-r3)
[cont-init ] 15-cjk-font.sh: Executing fontconfig-2.15.0-r1.trigger
[cont-init ] 15-cjk-font.sh: Executing mkfontscale-1.2.3-r1.trigger
[cont-init ] 15-cjk-font.sh: OK: 694 MiB in 168 packages
[cont-init ] 15-cjk-font.sh: terminated successfully.
[cont-init ] 15-install-pkgs.sh: executing…
[cont-init ] 15-install-pkgs.sh: terminated successfully.
[cont-init ] 55-check-snd.sh: executing…
[cont-init ] 55-check-snd.sh: sound not supported: device /dev/snd not exposed to the container.
[cont-init ] 55-check-snd.sh: terminated successfully.
[cont-init ] 55-firefox.sh: executing…
[cont-init ] 55-firefox.sh: terminated successfully.
[cont-init ] 56-firefox-set-prefs-from-env.sh: executing…
[cont-init ] 56-firefox-set-prefs-from-env.sh: terminated successfully.
[cont-init ] 85-take-config-ownership.sh: executing…
[cont-init ] 85-take-config-ownership.sh: terminated successfully.
[cont-init ] 89-info.sh: executing…
╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
│ │
│ Application: Firefox │
│ Application Version: 135.0-r0 │
│ Docker Image Version: 25.02.2 │
│ Docker Image Platform: linux/amd64 │
│ │
╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯

有用简单的IT小技巧

英文:Using Docker to Run Firefox as a Proxy: A Simple Solution for Accessing Blocked Websites in China

本文一共 804 个汉字, 你数一下对不对.
梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理 I.T. 小技巧 技术 服务器 计算机 资讯 运维
The post 梯子/翻墙技巧: 一条命令就可以在服务器上设置一个Firefox/火狐浏览器代理 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 出租房子的教训: 让中介找人上门换一个水龙头竟然要204英镑! 我老婆在剑桥Bar Hill有一套出租房/Buy to Let,但她不想管理。每次房子出问题需要修理时,中介都会联系我。有房子出租闹心的事情真是多,真的印证了那句话:操着卖白粉的心,挣着卖白菜的钱!每次最怕的就是接到中介的电话,因为一有电话就意味着房子有问题要修/要花钱了。 几天前,中介打电话来说,租户反映厨房水龙头打开时有奇怪的声音,挺吓人的。我当时回复他们说我会找个水管工/Plumber第二天过去看看。但挂了电话后,我联系了我认识的中国装修师傅。他手艺很好,在英国生活了几十年,以前帮我家做过不少装修。不过他这次没时间,也不太愿意接这种小活。 前两年这个师傅给我们家换地板,翻新三个厕所,还有就是阳光房地板,门前加建了个Porch等,最近房子也在重新折腾装修,之后弄完再详细说说。 我懒得在网上(比如 MyBuilder.com)再找其他人,就让中介安排了他们自己的工人。 后来,中介回电说水管工已经在房子里了,并报价修理费为170英镑,加上VAT税后(20%)一共204英镑。如果不修,也要付140英镑的上门费,加税后差不多168英镑。觉得价格有点高,但也只能咬牙同意了。 其实让我不爽的是自己为了省事,最后只能任人宰割。老外只要上门就收钱,我当时虽让中介确认报价,但没问上门费的问题,现在骑虎难下。听说中介找的合同工都比较贵。 那个房子一共让中介找过四五次人修房子(各种问题:上次厨房水管堵了,被收了400多英镑,据说水管工花了三小时通下水道),主要是因为这次我认识的师傅没时间。其实我还认识另一个会修房子的中国人,这样看来,以后可能不会再让中介找人了。 去年冬天,因为恶劣天气,房子顶有一小块掉了,中介找人报价要1800英镑,还好我没同意。后来找了个中国师傅,才花了350英镑,而且当时有Landlord保险还全额报销了。 PS:我发了封邮件给中介小小抱怨了一下。 Hi there,...
  2. 真正意义上的鼓励优秀作品 – 优秀被错过文章 有奖励啦! 大家都知道我的日报第一项就是 《那些优秀可能被错过的文章》这个算法是通过我自己的认识选出一些比较 好的文章 但是收益却比较低, 那么, 通过 @dailychina 天天回复, 比如: 对于作者来说, 除了心理得到表扬之外 并没啥卵用, 是吧. 而且有些作者经常上榜啊, 于是,...
  3. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  4. 一行代码修改引起的血案 – (二) 上一篇说到乱改了一行代码引来的错误, 自己也检讨了一下. 以下已经同事同意: 看了XX在群里发的内容 http://coolshell.cn/articles/4576.html,然后到 http://thread.gmane.org/gmane.linux.kernel/1124982/focus=1126216 仔细看了Linus Torvalds发的邮件,受益匪浅,摘了几段内容附在了 < how to fix bug.xls > 中....
  5. 逻辑题 – 帽子是黑的还是白的? 老婆每天晚上都会打开一个 智力测试的 APP 然后 有一天就问我这么一道智力题. 有三顶白色帽子 两顶黑色帽子. 有三个人被蒙着眼睛 然后随机的被戴上帽子 其中剩下的两顶就放在隔壁屋 每个人只能看到其他两人帽子的颜色 并不知道自己头顶上帽子的颜色. 每个人只有一次猜对的机会 不能互相交谈 已知第一个人看到其他两个人头顶上的颜色是白色...
  6. 使用AWK来看见证人生成块的速度 每次见证人出块, 媳妇总我说 “又生了”. 每次出块我总会去算一下离上次出块多少时间, 这是可以通过当前块数和上次出块数算出来的. 首先, 我们可以通过 docker logs 来显示很多很多的记录: 有一个脚本 ./run.sh logs是显示最近几条记录 (tail) 我们可以通过管道...
  7. STEEM API 系列之获取货币转换 STEEMIT 有 SBD, STEEM, STEEM POWER 还有 VESTS这几个概念. 时不时, 我们就需要知道它们之间几个转换关系: 1个STEEM等于多少SBD? 1个SBD 等于多少STEEM? 1个SP等于多少VESTS? 1M的VESTS...
  8. 测试 Crontab 是否工作的PHP脚本 LINUX 下的 crontab 是用来定时运行 程序任务的工具. 当然你需要简单配置一下 一般是通过 crontab -e 命令 来编辑. 如果你想简单知道 是否配置正确 和任务实际上会被调用的频率 你可以通过下面简单的PHP脚本来实现....

10 分钟 ZeroTier 私有 Plant 部署指南,提高游戏联机体验

作者 折影轻梦
2024年4月22日 08:00

在多人局域网游戏如星露谷物语、饥荒、我的世界等日益流行的今天,拥有一个稳定且低延迟的游戏联机环境对于提升玩家体验至关重要。本文将介绍如何使用 Docker 快速部署一个私有的 ZeroTier Planet 服务器,实现联机游戏低延迟,高稳定性。通过虚拟局域网技术,让不同地点的玩家能够如同在同一个局域网中一样进行游戏。

ZeroTier 简介

ZeroTier 是一种 P2P VPN 解决方案,它允许用户在互联网上创建一个虚拟的局域网,使得不同地理位置的设备能够像在同一个局域网内一样直接通信。也就是说,通过 ZeroTier,你可以和你的朋友在各自的家里,组成同一个局域网。然后你们就可以一起玩各种局域网联机游戏,如星露谷物语、饥荒、我的世界等。

ZeroTier 的核心组件包括 PLANET、MOON 和 LEAF,分别代表根服务器、卫星服务器和网络客户端。PLANET 是 ZeroTier 的根服务器,负责维护网络的全局状态和路由信息。

官方的 ZeroTier 服务器位于海外,对于国内用户来说,连接可能会不稳定。自建 PLANET 服务器可以有效解决这一问题,提升网络连接的稳定性和速度。

开始安装

准备条件

  • 一台具有公网 IP 的服务器,需要开放 3443/tcp、9994/tcp 和 9994/udp 端口。
  • 安装 Docker
  • Debian10+,Ubuntu20+ 等内核大于 5.0 的系统

使用 Docker 安装

新建 docker-compose.yml 文件,插入下面内容,
记得修改下面中的 IPV4IP ADDRESS 为你的公网 IP 地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: '3'services:  myztplanet:    image: xubiaolin/zerotier-planet:latest    container_name: ztplanet    ports:      - 9994:9994      - 9994:9994/udp      - 3443:3443      - 3000:3000    environment:      - IP_ADDR4=[IPV4IP ADDRESS]      - ZT_PORT=9994      - API_PORT=3443      - FILE_SERVER_PORT=3000    volumes:      - ./data/zerotier/dist:/app/dist      - ./data/zerotier/ztncui:/app/ztncui      - ./data/zerotier/one:/var/lib/zerotier-one      - ./data/zerotier/config:/app/config    restart: unless-stopped

在 docker-compose.yml 文件中目录下,使用如下命令启动

1
docker-compose up -d

后台配置

  1. 访问 http://ip:3443 进入 controller 页面,使用默认账号为:admin,默认密码为:password

  2. 进入后创建一个网络 (Add network),可以得到一个网络 ID

  3. 最后需要分配网络 IP: 选中 Easy setup->Generate network address

1d6b3d12c3a688385c45f6b940f42fae.png

b19f85de2600c57daefe7b9b344b27dc.png

Windows 客户端配置

下载

首先去 ZeroTier 官网下载一个 ZeroTier 客户端

覆盖 planet 文件

将服务器中 ./data/zerotier/dist 目录下 planet 文件覆盖粘贴到自己电脑的 C:\ProgramData\ZeroTier\One

覆盖 planet 文件.png

重启服务

Win+S 搜索 “服务”,打开 “服务”,找到 ZeroTier One,并且重启服务

重启服务

加入网络

在后台找到 ID,和平常使用 ZeroTier 加入网络的操作一样。

授权访问

在 ZeroTier 控制器的管理后台,找到新加的客户端并授权其访问。

授权访问.png

连通验证

马赛克处为你的公网 IP

连通验证.png

其他客户端

对于安卓客户端,目前只有非官方的客户端可用
https://github.com/kaaass/ZerotierFix

而 MacOS 用户需要替换 /Library/Application Support/ZeroTier/One/ 目录下的 planet 文件,并重启 ZeroTier-One:cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill,后续则与 Windows 配置相似。

游戏联机

你的朋友也需要完成客户端配置,才能与你组成局域网。你可以手把手的教他如何操作,也可以让他参考下面的文章进行操作。

3 分钟加入朋友的私有 ZeroTier Plant 网络中

当网络组成后,你可以在后台找到朋友在局域网中的 IP,

然后使用 ping <IP> 命令测试网络延迟。

猜你也想读

使用 Docker 和 pnpm 优化打包 Nuxt

作者 折影轻梦
2024年2月25日 08:00

本文将指导你如何为一个结合了 Prisma 和 Nuxt.js 的全栈项目创建优化后的 Docker 镜像,并使用 pnpm 作为包管理器。

我的项目最终镜像大小从 1.12GB 缩减到了 160.21MB。

我的项目构成

Nuxt.js 是一个基于 Vue.js 的服务器端渲染应用框架,非常适合于构建现代化的 Web 应用。

我的项目直接采用 Nuxt 构建全栈项目。

  • Nuxt3
  • Prisma
  • PNPM

开始构建

首先,我们将使用 node:20-alpine 这个更轻量级的基础镜像来减小最终镜像的大小。Alpine Linux 因其安全、简单且体积小而广受欢迎。

多阶段构建是减少 Docker 镜像大小的有效策略之一。我们将使用三个阶段来构建我们的镜像。

第一阶段:构建依赖项

1
2
3
4
5
6
7
8
9
10
11
ARG NODE_VERSION=node:20-alpineFROM $NODE_VERSION AS dependency-baseWORKDIR /appRUN npm install -g pnpmCOPY package.json pnpm-lock.yaml ./RUN pnpm install --frozen-lockfile`

这一阶段负责安装我们项目的依赖项。我们使用了 pnpm 来代替 npm,pnpm 在缓存和磁盘使用上更为高效。

大部分项目也用 pnpm 而不是 npm 作为包管理工具了。

第二阶段:构建应用程序

1
2
3
4
5
FROM dependency-base AS production-baseCOPY . .RUN pnpm run build

在这一阶段,我们复制了项目代码并执行构建命令。这里的构建指的是 Nuxt.js 的构建过程,它会生成静态文件和服务器端渲染所需的资源。

第三阶段:生成生产镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM $NODE_VERSION AS productionCOPY --from=production-base /app/.output /app/.outputENV NUXT_HOST=0.0.0.0 \    NUXT_APP_VERSION=latest \    DATABASE_URL=file:./db.sqlite \    NODE_ENV=productionWORKDIR /appEXPOSE 3000CMD ["node", "/app/.output/server/index.mjs"]

最后,我们创建了适用于生产环境的镜像。这个镜像仅包含用于运行应用程序的必要文件,减少了不必要的层,使得镜像尽可能地保持精简。

我们还定义了一些环境变量,比如 NUXT_HOSTDATABASE_URL,这些是 Nuxt.js 应用和 Prisma 所需要的。其中,DATABASE_URL 被设置为使用项目根目录下的 SQLite 文件作为数据库。

最终通过暴露端口 3000 并指定启动命令来运行 Nuxt.js 应用程序。

不同构建方式的镜像大小比较

分别为:

  • 3 步构建
  • 2 步构建
  • 直接构建

a3c345aaa51a4b8b802c25bc9d3591c0.png

Dockerfile 总览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Use a smaller base imageARG NODE_VERSION=node:20-alpine# Stage 1: Build dependenciesFROM $NODE_VERSION AS dependency-base# Create app directoryWORKDIR /app# Install pnpmRUN npm install -g pnpm# Copy the package filesCOPY package.json pnpm-lock.yaml ./# Install dependencies using pnpmRUN pnpm install --frozen-lockfile# Stage 2: Build the applicationFROM dependency-base AS production-base# Copy the source codeCOPY . .# Build the applicationRUN pnpm run build# Stage 3: Production imageFROM $NODE_VERSION AS production# Copy built assets from previous stageCOPY --from=production-base /app/.output /app/.output# Define environment variablesENV NUXT_HOST=0.0.0.0 \    NUXT_APP_VERSION=latest \    DATABASE_URL=file:./db.sqlite \    NODE_ENV=production# Set the working directoryWORKDIR /appEXPOSE 3000# Start the appCMD ["node", "/app/.output/server/index.mjs"]

Caddy, Docker 简单的自建 Tailscale DERP

作者 折影轻梦
2024年1月12日 08:00

作为一个拥有全端加密且能进行端到端连接的服务。Tailscale 现在的免费账户已经支持连接 100 台设备,这对于个人用户来说绰绰有余。我的内网设备几乎都在使用 Tailscale 连接。在前段时间发布的 用 VS Code 管理服务器,我有独特的服务器管理方式 中表明我很喜欢用 Remote SSH,我经常借住 Tailscale 组成的内网使用 Remote SSH 进行远程开发。

然而,Tailscale 在中国大陆的网络环境中存在一个问题,就是经常出现高延迟或者连接不上的情况。好在官方允许用户自建 DERP 服务,以充当中继,解决这个问题。再也不用担心写代码写一半就突然断了,而且优秀的网络体验也能提高 VS Code 的 Port Forward 的体验,方便远程预览开发。

由于我本身就有一台低配置的云服务器,过去曾经使用 Caddy 作为反向代理服务器来运行我的 Alist 项目。所以这次也考虑在同一台服务器上使用 Caddy 作为反向代理来部署 DERP 项目。

采用 Caddy 主要是他相比较于 Nginx 使用很简单的配置就能满足大部分需求,还有体验良好的自动 SSL 管理。能省很多事。

废话不多说,直接开始配置了。

配置 Docker

1
2
3
4
5
6
7
8
9
10
11
// docker-compose.ymlversion: '3'services:  derper:    image: fredliang/derper    restart: always    ports:      - 3478:3478/udp      - 23333:443    environment:      - DERP_DOMAIN=derp.example.com

然后启动

1
sudo docker compose up

配置 Caddy

1
2
3
4
// Caddyfilederp.example.com {    reverse_proxy localhost:23333}

重载 Caddy 的配置

1
sudo docker compose exec -w /etc/caddy caddy caddy reload

别忘了解析你的域名到你的 Caddy 服务器上。

配置 Tailscale

在 Access Controls 中配置

直达链接:https://login.tailscale.com/admin/acls/file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{  // ... 其他 ACL 配置  "derpMap": {    "OmitDefaultRegions": true, // 是否只连接自建 derper 节点    "Regions": {      "900": {        "RegionID": 900,        "RegionCode": "myderp",        "Nodes": [          {            "Name": "1",            "RegionID": 900,            "HostName": "derp.example.com", // 域名            "STUNPort": 3478,            "DERPPort": 443,          }        ]      }    }  }}

结束。

参考

  1. GitHub - fredliang44/derper-docker: tailscale‘s selfhosted derp-server docker image
  2. Custom DERP Servers
  3. How NAT traversal works
  4. Tailscale 基础教程:部署私有 DERP 中继服务器
  5. 浅探 Tailscale DERP 中转服务

自建 Sentry 使用 script 启用时无效

作者 折影轻梦
2023年10月22日 08:00

最近在服务器上面自建了 Sentry。

用 script 方法加入到网站后,始终没有效果,然后在控制台中发现了下面的报错。

The Sentry loader you are trying to use isn’t working anymore, check your configuration.

于是去 Github 上找了下,看着应该是国内网络的问题。

在 sentry/sentry.conf.py 内添加下面内容可以解决。

1
JS_SDK_LOADER_DEFAULT_SDK_URL = "https://browser.sentry-cdn.com/%s/bundle.tracing.replay.debug.min.js"

然后记得重启 Sentry 的 Docker 服务

1
2
sudo docker compose restartsudo docker compose up -d

用 VS Code 管理服务器,我有独特的服务器管理方式

作者 折影轻梦
2023年10月3日 08:00

自从 Typora 开始收费之后,我彻底转向使用 VS Code(Visual Studio Code) 进行文章撰写。作为一款 Markdown 编辑器,它已经完全满足了我的需求。

然而,我开始思考是否可以将 Visual Studio Code 用作服务器管理器。在此之前,我一直使用 FinalShell 进行服务器管理,这款工具具备以下特点,也是我所喜欢的:

  • 简单的服务器资源监控
  • 服务器文件浏览
  • 终端功能
  • 多服务器管理

当 VS Code 发布 Remote SSH 功能时,我并没有太过关注。该功能的初衷是用于远程开发,而我并没有远程开发的需求。然而,当我开始进行远程开发时,我决定尝试使用 Remote SSH。结果令我惊喜地发现,Remote SSH 非常适合用于服务器管理工作。

那么,VS Code 有哪些特点,并且满足了我哪些需求呢?

VS Code 的特点

多服务器管理

通过在你需要访问的远程服务器中配置好 SSH Key,便可以轻松地设置 Remote SSH,并指定服务器的 IP 地址,从而直接通过 Remote SSH 访问服务器。

1
2
3
4
5
6
7
Host server1    HostName 服务器 1 的 IP 地址    User 用户名Host server2    HostName 服务器 2 的 IP 地址    User 用户名

通过这样的配置,然后就可以方便地在 VS Code 中访问和管理多个服务器。只需单击服务器列表中的相应服务器,即可快速连接到目标服务器,并在远程环境中执行所需的操作。

文件浏览器

和正常一个项目的使用一样,VS Code 可以打开服务器的一个文件夹。然后我们就可以进行各种各样的文件浏览器的常规操作。还可以使用搜索功能快速查找和定位特定的文件。

我通常就会直接把账号目录直接打开。

同时还可以直接集成 VS Code 本身拥有的强大的文件编辑能力。

从此告别 lsmkdirtouchvi 等操作。

方便快捷的终端体验

可以同时打开多个终端实例,并在它们之间切换。每个终端实例都可以独立运行命令,并保留其输出历史记录。

还可以在编辑器的多个标签页或分割视图中同时打开不同的终端实例,以便同时执行不同的命令。

除此之外,在 VS Code 中,可以通过右键单击文件或文件夹,选择"在终端中打开",快速打开终端并自动切换到对应的路径。再也不用痛苦的到处 cd 了。

Docker GUI 管理

由于我大部分服务都是放在 Docker 上,所以对于 Docker 的使用是非常高频的。

如果你在服务器上使用 Docker 进行容器化管理,VS Code 通常就会推荐你安装 Docker 扩展,然后就可以并以图形化界面的形式管理和操作 Docker 容器。可以方便地查看和管理容器、镜像、网络和卷等 Docker 资源,执行常见的 Docker 命令,以及监控容器的状态和日志。

这基本覆盖了大部分 Docker 常用的操作,也让我大部分时间不再需要使用 Portainer 或是命令行了。

Git GUI 集成

VS Code 提供了强大的 Git GUI 集成功能,可以在代码仓库上进行版本控制和协作。可以直接通过 GUI 进行查看提交历史、比较文件差异、切换分支、合并代码,以及推送和拉取代码等操作。

丰富的个性化主题、插件生态

如果本身就使用 VS Code,便可以直接继承自己的审美。同时 VS Code 比其他终端管理软件拥有更为丰富丰富的个性化主题选项,可以根据自己的喜好和习惯选择适合的主题。也具有丰富的插件社区。

其它

除此之外,VS Code 本身就具有跨平台支持、多语言支持等特性,而且它完全免费。

如何使用 VS Code 进行服务器管理

你需要满足如下条件

  • 能够运行 VS Code 的电脑
  • 正版的 VS Code
  • 生成 SSH Key 并完成配置
  • Remote SSH 插件

其实你需要的并不多,核心是 VS Code 中的 Remote SSH 插件。

配置 SSH Key

你需要在你的电脑上生成 SSH Key,并将公钥配置到服务器上以实现免密登录。你可以在网上查找相关教程了解如何生成和配置 SSH Key。

配置 Remote SSH

通过 这个链接 安装 Remote SSH 后。

你可以按照以下步骤来打开和配置 SSH 主机:

  1. 在 VS Code 左下方找到 Remote SSH 的图标按钮。
  2. 点击该按钮,然后选择 “Connect to Host” 选项。
  3. 再次点击 “Configure SSH Hosts”。

就可以在 VS Code 中进行配置,指定服务器的 IP 地址和用户名。示例配置如下:

1
2
3
4
5
6
7
Host server1    HostName 服务器 1 的 IP 地址    User 用户名Host server2    HostName 服务器 2 的 IP 地址    User 用户名

完成配置后便可以在左下角直接连接服务器了。

插件以及其他推荐

Monitor Pro 插件

资源监控,由我开发。

Monitor Pro 是一款资源监控工具,实时跟踪系统指标。监测 CPU、内存、网络、文件系统使用率,电池百分比和充电状态。可自定义顺序和刷新间隔,提供高占用警报。适用于开发人员、系统管理员和普通用户。

https://marketplace.visualstudio.com/items?itemName=nexmoe.monitor-pro

Docker 插件

如果你在使用 Docker 容器来部署应用程序,这个插件可以帮助你在 VS Code 中管理和调试 Docker 容器。

Wakatime 插件

统计你在服务器上的摸鱼时间。

zsh 与 ohmyzsh

使用 ohmyzsh 以及它的生态,为你的命令行集成自动补全和纠错功能。

❌
❌