MoreRSS

site iconMoreality修改

偏个人软、硬件开箱记录的博客
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Moreality的 RSS 预览

2024 年度订阅总结: 降本增效

2024-12-25 09:29:41

年末逛各大论坛和博客的时候看到了不少老哥们的年度订阅总结,于是也打算闲着没事记录一下今年订阅了并且打算长期订阅的一些服务/APP。

我今年从上半年开始就用了一个非常优秀的订阅管理工具 Wallos 来记录自己每个月的开销:

wallos 的”统计“页面

相比去年乱七八糟的 VPS 和各种有用没用的 APP 订阅,今年整体的开销算是精简了不少。

目前一年的费用算下来才 3800+,去年记得光是一年的 VPS 和科学上网订阅就不止这么多了。

目前我的订阅分类一共包含如下几块:

下面单独分享一下对一些服务的感受:

建站 + 下载

自从上次绿云服务器被黑,建站已经懒得折腾了,目前用的就是阿里云的轻量服务器,之前用了一个 3500 代金券券所以算下来 8 年的 VPS 才不到 500 块,算是薅了一下阿里的羊毛。

下载和热备份一直用的 HostHatch 的瑞典大盘鸡,稳定性不错,1C1G1T 一年才 20刀。

工具

Claude Pro

在下决心订阅 Claude Pro 之前,一直用的是 API 和合租面板的方式。

不过最近 OpenAI 的审查越来越严,模型时不时就降智,最关键的问题是还不知道它什么时候就降智了,最后就决定直接订阅 Claude Pro 了。

可能我是 Claude 刚出就注册了,加上 IP 一直很稳定,一个号从一而终用了一年多都没被封,还算幸运。

Claude 的质量是没话说的,Project 功能很给力,美中不足的是不能联网,目前需要联网查询的时候一般我就用 GPT 或者 Perplexity 的免费版代替了。

滴答清单

滴答清单一直是我心目中的 TOP 1 APP,目前已经持续用了 5 年多了。

作为一个 TBD 软件,各方面都很完美,我认为已经做到了极致。

书影音

微信读书一直在用 30 天挑战的方式 5 元续费一个月,还是很划算的,我认为是微信系列目前最良心的应用。

影视部分之前开过 MAX 和 Netflix,后面 NF 又是同户又是低价区封号的搞得很麻烦,就取消了,目前订阅了一个公费服 MisakaF,然后自己用 Google Drive + Emby 搭建了一个。

Spotify 明年不打算订阅了,应该就一直用 youtube music 了,感觉目前 ytm 的推荐做的已经很不错了。

其他

🪜

这个用的就是几个 top ✈️ 之一,一个月 20 多,配合 relay 策略用的自己的落地,感觉比各种转发、优化线路要稳定的多。

说实话自从从 mjj 圈退坑之后,反而在线路方面一直没出过问题,而在自己之前折腾的时候,时间金钱精力花了一堆不说,线路还天天出故障,不是商家跑路就是机器被打,要么就是线路故障、运营商 QOS。现在看来这些时间花的真的毫无必要,不知道为什么那时候一直乐在其中。

域名

两个 top 域名,一个 net 域名,平均下来一个月 15 元左右。

手机卡

一个 29 元的每个月 300 G流量的电信卡(还支持结转,基本每个月从来用不完)。

一个 8 元的联通保号套餐。

吃喝

闲鱼的 KFC 年卡,一个月只要 5 块,主要用来吃 6 折早餐,很划算。

京东 PLUS 会员,一年 60 吧。

其他乱七八糟的今年都没开。

总结

总的来说对自己目前的预算控制还是比较满意的,算是已经精简到最小化了。

明年会继续控制其他方面的支出,但是对 AI 工具这方面一直保持一个开放探索的态度,一个月花 20 刀左右大幅提升生产力,个人觉得还是非常可以接受的。

PS: 目前总结的这些只是订阅制的 APP,一次性开销的 APP 和服务等也买了很多,但是由于没有记录管理所以也懒得去翻了。

2024 年度书影音总结

2024-12-24 15:05:11

2024 总体来说是很闲的一年,也是一个看书和电影电视剧比较多的一年,因此记录以下今年看过的一些好东西。

评价和评分全是主观色彩,并且仅仅代表当时时刻短暂的心情和观点,写这篇博客的内容也仅仅是回顾一下内容,以及自己当时的想法和感受,纯属一乐。

读过的书

这一年基本没读过纸质书,基本所有的书籍阅读都来自「微信读书」,在微信读书上截止到 12 月 24 日一共读了 260 多小时,远超前几年的总和。

决定以自己在 neodb 的评分排出一个 TOP10:

1 - 怦然心动

作者:文德琳·范·德拉安南

译:陈常歌

之前很早的时候因为一些原因没有把电影看完,也记不清是为什么了。

重新一口气看完了整本书,觉得这不像是一个青春爱情故事,更像是一个讲述家庭和亲子关系的故事,看完觉得完全符合 9 分的高分评价。

我也开始在想,有些类型的作品真的书能比电影呈现出太多太多的细节。

2 - 绿毛水怪

王小波

没想到王小波也这么会写别离:

“我回想起来,她绝对温存,绝对可爱,生机勃勃,全无畏惧而且自信。我从她身上感到一种永存的精神,超过平庸生活里的一切。”

“我看了这些话发出一声长嚎,双手乱抓了一阵。我感到脑后一阵冰凉。我坐了很久,天黑下来,又亮起来。我机械地去吃饭,又机械地去干活,机械地回家来。我很孤独,真正的哀痛被我封闭起来了,我什么也不想。直到有一天下午大许推开我们的屋门,把夕阳和他长长的身影投进来。”

"我跪倒下来,用痉挛的手指抓住盒子,抚摸盒子。我在哭吗?没有声也没有泪,只有无穷的惨痛从粗重的喘气里呼出来,无穷无尽。“

3 - 观察的艺术

https://book.douban.com/subject/35807485/

一本值得反复观看的书,真的以很实用的阐述方式,为一成不变的日常人生提供了很多不同的观察角度。

之前也单独为这本书写了一个博客:日常的缝隙 —— 「观察的艺术」阅读笔记

4 - 寂静的巴黎

申赋渔

整本书在描述形形色色的人,不过前半本在描写身边的人,后半本在描述历史上的人,全篇行文透露出一种安静且悲凉的色彩,仿佛在看一部长长的纪录片。

5 - 马斯克传

沃尔特·艾萨克森

很长的一本传记,前前后后读了有两个多月才读完。

艾萨克森的传记写的真的很有水平。

有很多比较高深的概念他都可以用很简单易懂的方式阐述出来,包括在「乔布斯传」中呈现出来的一样。

6 - 强风吹拂

三浦紫苑

非常燃的一本书,还好是 HE 。

文笔非常细腻,尤其是翻译十分到位,有不少句子翻译的特别传神。

唯一美中不足的就是书中的数据提升实在是有点假,不过也可以理解是为提高文学性牺牲了一点真实性了。

7 - 撒哈拉的故事

三毛

“哭, 笑, 爱, 憎, 梦里梦外, 颠颠倒倒”

8 - 鱼不存在

露露·米勒

这本书是前几周听完孟岩的播客后去看的,一开始以为就是一本赞颂人类用坚韧意志对抗混乱的鸡汤书。

读到一半发现不是这样的,这本书在探讨一个非常宏大的概念。

关于宇宙,世界,生命。

关于变化和不变。

「每个人眼中都有一个世界,那个世界就存在于这个世界之中。」

9 - 金色梦乡

伊坂幸太郎

非常多的 callback,铺垫很到位,喜欢这种欲言又止的结尾。

10 - 你当像鸟飞往你的山

塔拉·韦斯特弗

远离那些喜怒无常并充满暴戾的控制欲的人。虽然没有经历过这些事情,但看完这本书算是能理解为什么有很多人接受着变态的家庭暴力却丝毫不反抗。

作者最后的决定非常的完美,那些持续发生的事情也印证了这个决断的正确性。

“从他们以及其他家人那里,我听说了山上正在上演的戏剧——受伤、暴力和来回变换的忠诚。但现在这些对我来说都成了遥远的传闻,他人的馈赠。我不知道分离是否是永久的,不知道是否有一天我将找到一条回家的路,但这种分离给我带来了平静。”

但是翻译总感觉有点怪,例如“我已觉察出我们是如何被别人给予我们的传统所塑造,而这个传统我们有意或无意地忽视了。我开始明白,我们为一种话语发声,这种话语的唯一目的是丧失人性和残酷地对待他人——因为培养这种话语更容易,因为保有权力总是让人感觉在前进。” 文中很多地方出现了这样不明所以的句子,理解起来颇为费劲。

看过的电影 / 纪录片

1 - 蒙古草原,天气晴

“母亲没有找到马,普洁也来不及长大”。

在影片的最后一分钟前我还觉得会是一个不太完美的 happy ending,普洁会如愿完成学业,成为一个翻译,或至少是一个文化人,结果刀来的如此之快。

比起普洁的意外,母亲的死我觉得更加令人感到惋惜,绝望甚至愤怒,严重骨折+内出血的情况下居然能拖半个月最后还被医院拒之门外,这得忍受多么窒息的痛苦,不仅对母亲本人还是家人而言。

整体影片的拍摄手法异常的简单,就是一个人举着一个像素很低,没有防抖的相机,拍出任何一个人都可以拍出的画面,但就这种真实更把这超出三界之外的意境表达的淋漓尽致。

2 - 盲井

复杂的人性,质朴的黑暗。

3 - 大佛普拉斯

非常文艺的一部片子,虽然主线剧情比较薄弱,但是镜头,旁白和一些场景设计都非常给力, 金句频出。

这部电影的英文叫作「The Great Buddha」,Buddha 还是 Puta,即是有背景的人表面和内心的善与恶。

「我想现在虽然是太空时代,人类早就可以坐太空船去月球,但永远无法探索别人内心的宇宙。」

4 - 冰血暴 (1996)

也许是剧版想要表达的东西太多太深邃,我其实更喜欢电影精炼简洁的内核。

5 - 阳光普照

整个节奏和「大佛普拉斯」非常相似,特别喜欢这种叙事节奏,同时表达的内核也完全不输大佛普拉斯。

6 - 飞驰人生2

如果没看过「飞驰人生」我会给他3分, 另外的一分来自于情怀分, 过年就应该看这种情怀爽片。

7 - 网络谜踪2

第一次看这种桌面电影,真的很过瘾啊,相当有趣的拍摄手法,同时情节也相对来说很有张力。

8 - 疤面煞星

演技爆棚,say hello to my little friend!!

9 - 在西伯利亚森林中

整个片子的节奏说不出来的舒服,冰天雪地,旷野寂静。

故事也比较喜欢,自由永远是相对的。

很喜欢那句「你逃的比我还远」。

10 - 因果报应

由于提前看到了热评说是有反转的剧,所以强忍着前大半集的不适看玩的,电影的前 2/3 都是十分的"粗制滥造",感觉角色完全没交代清楚,然后剧情也十分混乱。

最后的10分钟剧情强行把这部剧从不及格扳回到中高分,假如前半部分认真看了,即使没看懂(像我就完全分不清青年和老年的主角,片中的印度人长得实在太像了),最后也能理清楚是怎么一回事。

但是只能说前半部分可以加强的点太多了,即使是一部靠反转升华的剧,前面也可以交代的更清楚一些,又也许导演的意图就是让观众「前半部分云里雾里呢」。

看过的电视剧 / 综艺

1 - 黑镜 第一、二、三季

第一季

想象力太丰富了,没有直接的恐怖元素但是令人看到脊背发凉。

三集每一集单拿出来都是近乎满分的存在。有点当时看爱死机的感觉了,不过黑镜更偏现实主义一些,并且更长的篇幅也带来了更多的深度情节,特别喜欢。

第二季

本季第二集真的让人产生一种生理性的不适,但是也足以证明了它构思的成功,估计我这种不适还要持续好几天。。

第一集和第三集就感觉立意没有第一季那几集刚看的时候那种新奇感了,比如第一集关于未来科技和赛博爱人的讨论不如S01E03的 grain 带来的那种震撼,而第三集的 waldo 又不如 S01E01 的 pig fucker 和 S01E02 的男主沉沦的全过程那么讽刺。

当然,只是个人的一些比较(由于两季几乎就是一起看完的,所以每一集印象都很深刻),总体来说第二季还是非常优秀。

第三季

第三季变成了 6 集,但整体感觉总体的质量和前两季还是有些差距,不过还是有几集特别喜欢的。

2 - 喜剧之王·单口季 (2024)

付航真的太强了,每一次发挥都如此出色。而且是在已经完美的表演上不断拔高。
其他演员也很出色,听了一百多小时刘仁铖的不开玩笑的播客,第一次见到真人。还很喜欢于祥宇和黑灯。
总之是一个比预期高出不少的节目。

3 - 去他*的世界 第二季 (2019)

用了一下午+一晚上看完了整个第二季,今年目前为止最佳的剧,如果说第一季是纯粹的离经叛道和义无反顾的走向悲剧,那么第二季则多了许多温情和精神拉扯;

英国佬的黑色幽默确实就是一种变态美学,如果生活变得不受控制,除了说「Oh fuck I’m going to die」还能做什么呢。

另外,和第一季同样优秀的BGM。

4 - 无耻之徒 (3,4,5,8季)

PS:由于看了一下打分,无耻之徒实在占比太多,每一季都太优秀了,于是把自己评分最高的 4 季整在一起。

评价就是:「三百六十五条线,条条线炸」

心目中目前的 top1 美剧。

5 - 我的大叔

一直很讨厌看韩剧和日剧,因为总感觉演员和剧本过于刻意且造作,这部剧可以说是追完用时最长的一部剧了,前前后后大概看了4个多月吧,不过20集不到而已,最后还是给了8分的高分。

剧本非常细腻,但其中还是有不少我不得不跳过的扭捏且无法理解的剧本,但是每当我想要弃坑的时候总会出现一些打动我的情节,总体来说可以算是我第一部认认真真看完的日韩剧。

6 - 小谢尔顿 (3,5,6季)

电子榨菜类型的剧,这部剧前半部分和后半部分不太一样。

前半部分完全是看逗比和小演员们卖萌,而后半部分尤其是第五季开始,剧中的冲突开始多了起来,从家庭喜剧变成了家庭剧,但是整体同样优秀,每个人的人物形象都变得更加立体了。

7 - 我的三体 第四季

大制作,除了人物还是方块已经没什么mc的影子了。

太短了,原来就拍到执剑就完了,还以为会把第三部拍完呢。

8 - 亿万图谋

很不错的一部纪实类电影, 最后的 15 min 增加了些许悲凉, 小人物要想和大公司掰手腕真的太难了, 同时这两位主角让我想到了乔布斯和沃兹, 是不是每个成功(做出成功产品)的黑客身边都有一位懂技术的商业高手?

PS: 影片中的所有事件都在简单搜了搜, 在维基百科上查到了原型, 记录在: https://telegra.ph/2024-02-13-The-Billion-Dollar-Code-02-13

9 - 双城之战 第二季

如果整部剧结束在第六集伊莎开枪的那一刻, 那么10分我愿意给11分。

但是最后三集我只能说是一坨, 不知道编剧在想什么。

10 - 繁花

阳春白雪

Claude MCP 体验: 实现一个 Arxiv 论文搜索工具

2024-12-13 15:20:43

MCP 介绍

Anthropic (Claude) 在 11 月 25 日推出了一个协议: MCP (Model Context Protocol)。[1]

协议的目的是解决各类无法联网的 ChatBot 的信息孤岛问题。

比如 ChatGPT 在 ChatGPT Search 的加持下,可以做到搜索最新的网页信息并分析:

但是 Claude 在内的许多模型目前还不支持:

除此之外,许多时候我们希望访问一些自定义的数据源,比如本地的数据库等。

这些需求目前只能通过自己写代码 + 用 GPT 的 API 来进行操作。

MCP 的出现实际上就是用来解决这个问题:作为一个中间层,提供一个统一的协议和 SDK 来对接各类数据源

目前 Claude 在 https://modelcontextprotocol.io/introduction 已经提供了完整开源的 python SDKTypeScript SDK

这个玩意也是我最近琢磨 Claude Desktop APP 的配置的时候才发现的,目前支持 MCP 的 Client 在 这里 可以看到:

Client Resources Prompts Tools Sampling Roots Notes
Claude Desktop App Full support for all MCP features
Zed Prompts appear as slash commands
Sourcegraph Cody Supports resources through OpenCTX
Firebase Genkit ⚠️ Supports resource list and lookup through tools.
Continue Full support for all MCP features
GenAIScript Supports tools.

如果你开通了 Claude Pro 并且有 Claude Desktop,可以通过官网的这个 DEMO:https://modelcontextprotocol.io/quickstart 来实现一个获取天气和天气警报的联网查询功能。

实践:实现一个 Arxiv 论文搜索工具

我自己也通过简单修改了一下 quickstart [4],利用 python sdk 来实现了一个符合自己需求的 Arxiv 论文获取工具。

完整的代码在:https://github.com/Lincest/mcp-papersearch

简单介绍一下具体的使用方式:

1 - 安装环境

uv 是一个 rust 编写的 python 包管理器,和 virtualenv 这些差不多,由于官网用的是 uv,于是就沿用一下。

1
curl -LsSf https://astral.sh/uv/install.sh | sh

clone 仓库:

1
2
3
git clone https://github.com/Lincest/mcp-papersearch.git

cd mcp-papersearch

安装依赖:

1
uv sync

2 - 配置 Claude

需要编辑 ~/Library/Application\ Support/Claude/claude_desktop_config.json

(windows路径在:$env:AppData\Claude\claude_desktop_config.json)

1
vim ~/Library/Application\ Support/Claude/claude_desktop_config.json

内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"globalShortcut": "",
"mcpServers": {
"papersearch": {
"command": "/Users/XXXX/.local/bin/uv", # 改成你的 uv 路径
"args": [
"--directory",
"/Users/XXX/code/mcp-papersearch", # 改成你的 clone 仓库的路径
"run",
"papersearch"
]
}
}
}

把上面的路径按注释内容改一下,删除注释,然后重新启动 Claude Desktop:

这时候会发现右下角出现了个锤子🔨:

就说明运行成功了。

3 - 测试

case 01: 搜索近期的论文

问 Claude 一个简单的问题,比如

搜索一下最近3天的 MoE Inference 相关论文

这时候会弹出一个窗口,就表示 Claude 识别到了应该调用我们的 papersearch 来搜索。

点击 Allow 后,发现他很智能的调用了两次,一次在3天内没找到后,又扩展范围到了30天来搜索:

case 02: 搜索指定的论文

比如我们要搜索 https://arxiv.org/abs/2308.12066 这篇论文,标题是「Pre-gated MoE: An Algorithm-System Co-Design for Fast and Scalable Mixture-of-Expert Inference」

提问:

搜索和总结 https://arxiv.org/abs/2308.12066

总结

目前的 case 写的还很潦草,大部分就是直接让 claude 自己生成了然后简单改一改。

以后用来接入一些 DB 估计会比较好用。

更多有趣的官方 demo

这里提供了更多有趣的官方推荐的 MCP Tools 和用法,几个个人觉得比较有意思的:

  1. 实现和 Github 的交互: https://github.com/modelcontextprotocol/servers/tree/main/src/github
  2. 实现和 Obsidian 的交互:https://github.com/calclavia/mcp-obsidian
  3. 获取 Web 内容:https://github.com/modelcontextprotocol/servers/tree/main/src/fetch

通过 Fetch 获取 web 信息

通过官方提供的 fetch, 不需要下载任何代码,仅仅需要配置:

1
2
3
4
5
6
7
8
"mcpServers": {
"fetch": {
"command": "uvx",
"args": [
"mcp-server-fetch"
]
}
}

就可以实现 web search 的功能了,例如查看北京天气:

Reference

Linux 系统 IPV4/IPV6 优先级配置 (gai.conf)

2024-12-11 22:07:34

事情起因

Mac 上一直用的一台 G 口 Oracle 作为出口的代理来上网, 结果发现每次用 Oracle 的出口进行 pip 安装包时都特别慢, 速度大概 100KBps 不到, 换其他的出口就一点问题都没有, 之前尝试过换 DNS 也没啥用.

也测试过到 pypi.org 这个源的 ICMP, 也没发现什么问题.

结果今天仔细研究了一下, 发现 pip 的安装逻辑大概是这样的:

  • pip 首先访问 pypi.org 获取包的元数据
  • 然后会被重定向到 files.pythonhosted.org 这个 CDN 服务器下载实际的包文件
  • files.pythonhosted.org 是 PyPI 的文件托管服务,用于存储和分发包文件

然后我尝试在 oracle 机器上 ping 一下 pythonhosted.org, 结果发现 ipv6 居然没有 CDN, 延迟高达 160MS:

ping pythonhosted.org

而众所周知一个双栈机器 (同时启用 IPv4 协议栈和 IPv6 协议栈的机器) 默认是 ipv6 优先的, 可能是为了推广 IPV6 之类的考虑吧…

当然这种优先级是可以通过修改配置文件改变的, 本文就讲讲今天研究的两种常见方式

如何手动配置 IPV4 / IPV6 优先

1 - gai.conf

基本上所有 Linux 发行版都使用 /etc/gai.conf 来管理 getaddrinfo 的行为, 而所有需要域名解析的地方都需要用到 getaddrinfo , 因此修改这个配置文件就可以从根本上解决系统的 ipv4 / ipv6 优先级问题.

简而言之, 直接编辑 /etc/gai.conf, 取消注释或者添加这一行:

1
precedence ::ffff:0:0/96  100

即可设置成 ipv4 优先.

或者直接一行命令 sed 修改:

1
sed -i 's/#precedence ::ffff:0:0\/96  100/precedence ::ffff:0:0\/96  100/' /etc/gai.conf

1.1 - 这行配置做了什么

  • precedence: 表示是在配置优先级
  • 100: 数字越大, 优先级越高
  • ::ffff:0:0/96: 这是一个特殊的 IPv6 地址前缀, 用于表示 IPv4-mapped IPv6 地址空间, 简而言之, 就是告诉系统, 当遇到同时支持 IPv4 和 IPv6 的地址时, IPV4 地址的优先级

例子:

1
2
precedence ::ffff:0:0/96  100    # IPv4-mapped IPv6 addresses
precedence ::/0 10 # 所有 IPv6 addresses

在这个配置中:

  1. 当一个域名同时有 IPv4 和 IPv6 记录时
  2. IPv4 地址会被映射成 IPv4-mapped IPv6 address(即 ::ffff:0:0/96 格式)
  3. 由于其优先级 100 大于纯 IPv6 地址的优先级 10
  4. 系统会优先使用 IPv4 地址进行连接

2 - 禁用 ipv6

出于某些原因我们可能完全不想要 ipv6, 这时可以直接彻底禁用网卡的 ipv6, 方式:

1
2
3
4
5
6
7
8
9
10
cat >> /etc/sysctl.conf << EOF
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
EOF

来修改 /etc/sysctl.conf

然后通过 sysctl -p 来重新加载配置文件, 这时 ipv6 就已经被彻底禁用. (还原的话直接删除这几行或者把0, 1反过来就ok)

简单测试各类大模型对一个枚举类问题的回答

2024-12-09 15:12:01

问题

今天逛 linux.do 论坛的时候看到这样一个问题:

小李在纸上写了一个四位数A,把A的个位数字移到首位,得到另一个四位数 B,最后把A和B加起来得到和数C,并且C也是一个四位数。

已知A的各位数字之和是20,C的百位和十位数学分别是0和4。

那么C代表的四位数是?

正确答案应该是 8041.

刚好这几天 GPT 降智严重, 所以一直在对比 Claude, ChatGPT 和 Gemini Pro, 就用这个问题问了大概 7, 8 次各类模型, 看看都是如何回答的.

OpenAI GPT-4o

官网版本的 gpt4o

PS: 用的 IP 是 Oracle 的 IP, 实测 difficulty 值是 4 位数 (ref: https://linux.do/t/topic/261968)

问了 10 次左右, 大约 7 次可以通过正确的写出 python code 并运行得到正确结果.

另外的三次就是类似这样的无 code 回复, 答案也大概率就是错的.

平台反代的 GPT-4o

这个平台是之前一直合租的平台, 应该就是通过自己写了个镜像站来用多个 Pro 账号反代官网, 特征也很明显, 就是会用固定 IP 大量访问 GPT, 这一类的反代镜像站目前被 openai 限制的很严重, 我用的这个也因此停运了, 刚好在最后几天再通过这个问题测试一下.

  1. 第一次, 直接没有通过程序求解, 并得出了错误的答案

  1. 又尝试了几次, 勉强在写错五次程序后给出了正确结果

Claude 3.5 sonnet

同样的问题问了五次以上的 Claude 3.5 sonnet, 均通过正确的 JS 代码给出了答案和分析, 并且相比于 chatgpt, 还证明了答案的唯一性.

Gemini 1.5 和 Gemini-exp-1206

虽然 在 Chatbot Arena 上坐拥 rank1, 但是 Gemini 在这个问题的表现居然是三个模型里最烂的:

  1. 直接问原始问题, 无论是否加 code execution 的选项, Gemini 系均不会给出代码和执行求解, 而是通过大量的文本分析试图找到答案, 并且 Gemini 对于中文的支持挺糟糕的, 如果不在 Prompt 中明确指定, 即使问题是中文也很有可能输出英文解答:

以下是模型的原始输出: (Gemini 1.5 pro 和 exp-1206 基本类似)

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
Here's how we can solve this problem step-by-step:

Understanding the Problem

We have a four-digit number, A.

Moving the last digit of A to the front creates a new four-digit number, B.

The sum of A and B is a four-digit number, C.

The sum of the digits in A is 20.

The hundreds digit of C is 0, and the tens digit of C is 4.

Let's use variables:

Let the digits of A be represented as a, b, c, and d, where a is the thousands digit, b is the hundreds digit, c is the tens digit, and d is the units digit.

So, A = 1000a + 100b + 10*c + d

And B = 1000d + 100a + 10*b + c

Formulating Equations

Sum of digits of A: a + b + c + d = 20

Structure of C: C = 1000*_ + 100*0 + 10*4 + _ (We don't know the thousands and units digits of C yet)

A + B = C:
(1000*a + 100*b + 10*c + d) + (1000*d + 100*a + 10*b + c) = C

Analyzing the Sum (A + B = C)

When we add A and B, let's consider the possible carry-overs:

Units column: d + c results in the units digit of C. There might be a carry-over to the tens column.

Tens column: c + b plus any carry-over from the units column results in 4 (the tens digit of C). There might be a carry-over to the hundreds column.

Hundreds column: b + a plus any carry-over from the tens column results in 0 (the hundreds digit of C). This means there must be a carry-over of 1 to the thousands column (since b + a cannot be negative).

Thousands column: a + d plus the carry-over of 1 from the hundreds column results in the thousands digit of C.

Solving the Equations

Hundreds column: Since b + a plus a carry-over results in 0, and we know there's a carry-over of 1 to the thousands column, we have:
b + a + 1 (carry-over) = 10
Therefore, a + b = 9

Tens column: We know c + b plus a possible carry-over from the units column results in 4. Let's consider two cases:

Case 1: No carry-over from the units column:
c + b = 4
Since a + b = 9, and a + b + c + d = 20, then d = 7.
But if d = 7, then in the units column, d + c (7 + c) would need to result in a number greater than or equal to 10 to have a carry-over. This would make c at least 3, and c + b would be greater than 4, contradicting our assumption of no carry-over. Therefore, this case is not possible.

Case 2: Carry-over of 1 from the units column:
c + b + 1 = 4
Therefore, c + b = 3

From equations a + b = 9 and c + b = 3, and knowing a + b + c + d = 20, we can deduce:
a = 9-b, c = 3-b and 9 + 3 - b + d = 20, then b + d = 8

Units column: Since there's a carry-over of 1 to the tens column, d + c must be greater than or equal to 10. Substituting c = 3-b, we get:
d + 3 - b >= 10
d - b >= 7

Combining d - b >= 7 and d + b = 8, we find that the only possible values are:
d = 8, b = 0

With d = 8 and b = 0, we can find the other values:
a = 9, c = 3

Calculating C:
A = 9038
B = 8903
C = A + B = 17941

However, the problem states that C is a four-digit number. This means our initial assumption that A is a four-digit number was incorrect. Let's adjust our approach.

Revised Approach: A as a Three-Digit Number

Let's assume A is a three-digit number (abc) and B becomes a four-digit number (bca) when the units digit is moved to the front.

A = 100a + 10b + c

B = 1000c + 100a + 10b

A + B = C

a + b + c = 20

C = 1000*_ + 100*0 + 10*4 + _

Analyzing the Sum (A + B = C) - Revised

Units column: c + b results in the units digit of C. There might be a carry-over.

Tens column: b + a plus any carry-over results in 4. There might be a carry-over.

Hundreds column: a + c plus any carry-over results in 0. There must be a carry-over of 1.

Thousands column: The carry-over of 1 is the thousands digit of C.

Solving the Equations - Revised

Hundreds column: a + c + 1 (carry-over) = 10, so a + c = 9.

Tens column:

Case 1: No carry-over from the units column: a + b = 4. But since a + b + c = 20, this would mean c = 16, which is not possible.

Case 2: Carry-over of 1 from the units column: a + b + 1 = 4, so a + b = 3.

Combining a + b = 3 and a + c = 9 with a + b + c = 20, we get:
3 + c = 20
Therefore c = 17, still not possible.

The issue is that if C is a 4 digit number, then A cannot be a 3 digit number, because the only way to have a carry of 1 into the thousands column is if A is a 4 digit number as well.

Let's try one more approach: a, b, c, d must not all be single digits

We know a+b = 9, c+b=3, and a+b+c+d=20. If b=0, then a=9, c=3, and d=8, which gives us C as 17941. This means that at least one of a, b, c, d must be greater than 9.

Since b is in both a+b=9 and c+b=3, we know that if b is a two-digit number, these equations cannot both be true. Therefore, b must be a single digit.

If c is a two digit number, then the addition of c+b in the tens column would need to be 4, but there is also a carry-over of 1 from the units column. This means that c+b=13, and if c=10, b=3, a=-1, d=8. This also doesn't work.

If d is a two-digit number, then when added to c, there must be a carry-over of 1. If d=10, then 10+c >= 10, which is true for any single-digit c. However, we know c=3-b, and if c is negative, then a must be greater than 9 to compensate, which we have already tested.

If c=0, then b=3, a=6, d=11. This gives us 6300+11, 360+11, and 6300+360+22 = 6682.

Answer
C represents the number 6682.
  1. 在 Prompt 中加入「通过运行程序给出答案」后, 回答精简了很多, 并且也可以通过写出 python 程序并执行找到答案:

但是, 多问几次后, 发现并不会每次都成功:

Gemini: 自己写了两次无法运行的 code..

总结

就这道题的测试结果而言:

  1. Claude 3.5 sonnet 仍然是目前输出最快, 最稳定, 最准确的 coding 和 math 类模型.
  2. OpenAI GPT 很明显有能力做到和 Claude 类似, 但是估计是对 IP 的要求过高, 导致输出很不稳定, 而且对于同一个 IP, 甚至会出现随机降智.
  3. Gemini 虽然目前排名很高, 但是感觉还是名不副实…

数据安全:一次 VPS 宿主机被入侵的事件记录

2024-10-25 11:36:58

即使是一个经营了长达 11 年的商家,还是会出现整台 VPS 母鸡被黑客入侵的情况。

并且令人感到愤怒的是,商家还对此做了隐瞒,不愿意承认是被入侵并泄露数据,而把责任归咎于是 RAID 出现故障。

经过这次事件,我再也不想去相信中小厂的公有云服务了。

强烈建议,在任何 VPS 部署服务时,做好 数据加密存储,并不在服务器上存储任何明文的 token 或密码

以及,及时的备份数据

事件经过

1 - 系统宕机和绿云工单回复

  • 2024-10-21 16:24

我发现一台在线时长将近一年的绿云 10 周年 VPS 自动重启了。

当时没太在意,以为就是例行维护。

随后我发现我的一些需要写入数据库的服务变得不可用,比如 seafilevaultwarden

登录上服务器发现文件系统全部变成了 read-only

于是我发了一个工单:

发工单后,我发现服务器直接宕机了,并且通过 SolusVM 面板无法进行重启。

  • 2024-10-21 18:16

绿云客服回复,说是遇到了罕见的 RAID 故障。

当时我认为,这种便宜的机器也许就是 RAID0 吧,如果修不好可能数据就没了。

不过好在做了备份。

  • 2024-10-22 17:29

经过了一天的时间,发邮件询问情况。

绿云客服回复,RAID 无法恢复,只能 rebuild。

补偿是 1 年时间,或者按照购入价格全额退款。

2 - 商家的隐瞒

  • 2024-10-23 lowendtalk 网友发帖,披露 VPS 数据被入侵。

原贴地址:https://lowendtalk.com/discussion/198766/my-greencloud-vps-got-ransomwared-the-entire-mothership/p1

该网友进入了救援模式 (Rescue Mode)[1]后,可以看到所有的文件都被修改成了 [email protected]

我在进行相同操作的时候,确实也发现了,所有的文件都被 改名并加密,直接 google 搜索 junglesec,可以发现这是一个黑客组织,主要以勒索攻击(ransomware)而闻名。[2]

究竟发生了什么

搜索一下关键字 junglesec, VPS, IPMI,就大概可以看懂是数据是如何被入侵的了。

IPMI(智能平台管理接口) 是一种集成在服务器主板上的系统管理固件,这种固件允许管理员在操作系统无法访问时仍能进行远程管理,例如重启系统、查看系统状态等。因此,IPMI 提供了对系统的深层次访问权限。

本次服务器攻击的步骤

  1. 通过 IPMI 登录获取访问权限

    • 攻击者首先寻找启用了 IPMI 的设备,特别是那些使用默认密码未充分加固的 IPMI 接口。

    • 一旦攻击者登录成功,就可以通过 IPMI 远程控制服务器,即使系统的操作系统崩溃也能进行操作。

  2. 重启系统进入单用户模式

    • 攻击者利用 IPMI 的远程访问功能,将目标服务器重启到单用户模式(Single User Mode)。在这个模式下,系统只加载必要的服务,并为管理员提供 root 权限,而无需输入密码。
    • 攻击者在单用户模式下可以绕过所有用户账户的认证机制,直接获得系统的最高权限。
  3. 下载并编译加密程序

    • 获得 root 权限后,攻击者在系统中下载并编译一个名为 ccrypt 的加密程序,攻击者利用它来加密系统中的所有文件。
  4. 发送勒索邮件

这并不是一个比较新鲜的攻击方式了,可以看到非常多的相关案例[3][4]

我们应该做什么

在事件发生之后,我选择了退款 + 重新迁移数据到阿里云。

同时,由于之前过于相信商家 + 懒惰,很多备份的脚本和一些其他的定时任务,比如 vps 之间的 ssh 鉴权,比如许多上传和下载的 api key 和 token,我都明文保存在了 VPS 上。

因此,我重置了一些重要平台比如 google drive, onedrive, github, gitlab 的 auth token,同时清理了所有 vps 上的 authorized_keys

还好目前部署的东西大多是玩具,这是一次很好的教训,之前用云服务的时候其实一直忽略了数据安全和隐私,觉得许多事情离我太遥远,然而当事情真正发生到自己身上时,再后悔就晚了。

一个很容易想到但是许多人压根不 care 的事情是,只要你的文件是明文存储的,那么 vps 厂商就可以读到你的明文文件。[5]

因此,当 vps 宿主机出现被入侵时,你的文件也可以被其他人明文读取

所以,最好的防护措施是:

  1. 尽量只用大厂服务。
  2. 敏感信息不上云,上云就做好端到端加密和及时的备份。
  3. 不要在 vps 的一些 cronjob 中明文配置一些密码和token。
  4. 真正重要的基础服务还是不要自建,或者采用更鲁棒的方式比如做 k3s 之类的集群,否则关键时候出问题,即使有数据备份恢复起来还是很麻烦。

相关概念

1 - rescue mode

救援模式(Rescue Mode)是虚拟专用服务器(VPS)提供的一种应急维护功能,允许用户在无法正常启动系统或发生重大问题时,进入一个最小化的操作环境进行排障和修复。它通常是一个轻量级的 Linux 环境,不依赖原有的操作系统,类似于单机版的安全模式或Live CD。

2 - junglesec

JungleSec 是一个黑客组织,主要以勒索攻击(ransomware)而闻名。该组织的活动在网络安全圈中引起了广泛关注,其主要手段是针对企业或个人的系统进行未授权访问,并通过加密文件或劫持网络基础设施实施勒索。

主要的攻击方式

  1. 勒索软件攻击
    JungleSec 通常在侵入目标系统后,将关键文件加密,并要求受害者支付赎金(通常以比特币等加密货币支付),否则威胁删除或公开敏感数据。
  2. 攻击向量
    他们利用系统中的已知漏洞弱密码、以及未充分配置的管理接口(如 IPMI,BMC)等来侵入系统。IPMI(Intelligent Platform Management Interface)是他们的主要目标之一,这是一种用于远程管理服务器的接口,如果未安全配置,就容易被攻击者利用。
  3. 赎金要求
    JungleSec 的攻击一般要求受害者支付一定金额的比特币或其他加密货币。如果不支付,受害者的数据将无法解密。

ref