Reading view

There are new articles available, click to refresh the page.

境外银行账户开户最重要的问题是什么?

投资

很多朋友问我关于申请开户境外银行账户的事情,我分享一下我以前亲自经历的开办境外银行账户的经验和教训。

近20年前,我在比利时的几年里,因为要接收当地学校每个月发放的工资,我开办了学校附近的KBC银行账号,包括它给我的借记卡和信用卡。等我离开比利时,依然用了很多年,直到银行卡上面的过期日期到期了,我因人不在比利时,所以没有办法收到新卡片,尤其是这家银行采用独立的硬件设备产生动态密码,我拿不到新设备。总之后来我的KBC银行账户就不了了之了,银行更是连邮件都再也没有发过一封,似乎我就不曾在它家开过账户一样。

后来我去了英国,办了两家英国银行的账户,其中一家是LLOYDS银行。因为我后来离开了英国,LLOYDS银行提醒我在它家的护照信息过期了,需要我更新护照身份信息,问题是它需要我亲自去英国银行柜台去更新。而我现在要去一趟英国办理此事的代价实在是太大了,于是这家银行的账户我就再也无法再使用了。

同样在英国,在英国金融科技公司Revolut刚成立时,我就申请了它家的银行账户,没想到,我不过是把存进去的钱快速取出来了,Revolut就判定我不合理作用它的服务,迅速把我的账户关停,不给任何解释的机会。直到如今,我也没有办法恢复它的服务,好在我也不打算使用它了。

前几年,我远程开通了新加坡的OCBC银行账户,但是这家银行也很奇葩,除了要收管理费外(如果账户的资金余额不达到一定门槛的话),用了一阵子后,OCBC说要关停中国大陆用户的账户,我只好把里面的一点点钱转走了。更奇怪的是,它说要关停我的账户,但实际上到今天我还依然能使用它的服务。问题是对于这么一家言行不一致的银行,我哪里还敢继续使用它的服务?

以上这些都是发达国家的银行系统,尤其是英国这种老牌金融强国,其银行系统也是如此保守死板不方便,对于一个肉身不方便接触其银行属地的用户来说,用起来实在是太不方便了。

我个人认为,资金最重要的问题是安全,金融机构最重要的问题是信用。好在我一开始也没有对这些银行系统抱太大的信任,因此这些账户系统上都没有什么资金,它要关就关吧。

那些打算远程开通其他国家银行账户的朋友,也许在开通之前好好参考我上面的亲身经历。

美股主流ETF对比概览

money

简要研究了美股市场几大主流 ETF(交易所买卖基金):IVV, SPY, VOO, QQQ, QQQM, TQQQ, VGT, XLK,他们各自的特点、CAGR复合年化收益率、管理费率、分红都不太一样,为了方便以后查询,特总结记录如下。

1. 标普 500 指数系列 (S&P 500 ETFs)

ETF 代号 简介与特点 管理费率 近10年 CAGR (估) 分红/殖利率 (估)
SPY 全球规模最大、流动性最强。适合大资金交易及期权策略。 0.09% ~12.5% 季配 / ~1.03%
IVV 贝莱德旗下。极低费率,是长期持有者的优质选择。 0.03% ~12.6% 季配 / ~1.12%
VOO Vanguard 旗下的低成本标杆。由于指数采样微调,长期表现略优。 0.03% ~12.6% 季配 / ~1.08%

2. 纳斯达克 100 系列 (Nasdaq-100 ETFs)

ETF 代号 简介与特点 管理费率 近10年 CAGR (估) 分红/殖利率 (估)
QQQ 经典的科技股代表。涵盖非金融类创新巨头,波动高于标普 500。 0.18% ~18.5% 季配 / ~0.42%
QQQM QQQ 的“长线廉价版”。费率更低,适合Buy and Hold。 0.15% ~18.6%* 季配 / ~0.46%
TQQQ 三倍做多杠杆。仅限短期交易,复利损耗严重,不建议长持。 0.82% 波动极大 极低

*注:QQQM 成立较晚,数据参考其底层纳指100表现。

3. 科技行业精选 (Technology Sector)

ETF 代号 简介与特点 管理费率 近10年 CAGR (估) 分红/殖利率 (估)
VGT 专注信息技术。重仓苹果、微软、英伟达。成色比 QQQ 更“科技”。 0.09% ~20.2% 季配 / ~0.37%
XLK 追踪标普 500 信息技术指数。专注大盘科技股,流动性极佳。 0.08% ~23.8% 季配 / ~0.56%

简要总结:部分数据来源于Charles Schwab。追求长线稳健关注VOO/IVV;追求成长潜力关注QQQM/VGT;VGT和XLK是更纯科技股版本的QQQ。TQQQ是三倍杠杆的QQQ。可见的将来是以人工智能类的科技为王的时代。以上内容纯个人学习笔记,不构成投资意见。

【CDT关注】美联社|硅谷科技巨头如何助力中国的大规模监控?

CDT 档案卡
标题:Silicon Valley enabled brutal mass detention and surveillance in China, internal documents show
作者:美联社
发表日期:2025.9.8
来源:美联社
主题归类:监控
CDS收藏:老大哥馆
版权说明:该作品版权归原作者所有。中国数字时代仅对原作进行存档,以对抗中国的网络审查。详细版权说明

美国当地时间5月4日,2026年普利策新闻奖获奖名单公布。其中美联社关于硅谷科技巨头如何助力中国大规模监控与拘禁的系列报道获得了国际报道奖。

美联社通过获取数万页机密及内部文件、泄露的邮件数据库、政府采购记录,并采访逾百名中美工程师、高管、官员和警察,揭示出过去二十多年时间里,美国科技公司在很大程度上设计并建造了中国的监控国家机器。这些公司向中国警方、政府及监控企业销售了价值数十亿美元的技术产品,其在助长人权侵害方面所扮演的角色远超此前外界所知,尽管美国国会和媒体早已多次警告这些工具被用于压制异见、迫害宗教团体和针对少数民族。

美国企业将“预测性警务”技术引入中国——通过抓取并分析短信、通话、支付、航班、视频、DNA样本、邮件、上网记录乃至水电使用等海量数据,在犯罪、抗议或恐袭发生前加以“预防”。这套系统让中国警方得以威胁当事人的亲友,并对尚未犯罪的人进行预防性拘押。全国数以万计被列为“麻烦制造者”者被困于数字牢笼之中,无法离开本省甚至自己的家门。分析人士估计,中国安装的监控摄像头数量超过世界其他地区总和,平均每两人就有一台。

调查点名了一长串美国科技巨头:IBM 与中国国防承包商华迪公司合作设计了核心警务系统“金盾工程”;思科(Cisco)将“金盾”视为销售机会,其技术可识别逾90%的法轮功网络内容;戴尔在微信官方账号上推广“军用级”、具备“全人种识别”功能的AI笔记本电脑;赛默飞世尔(Thermo Fisher)向中国警方营销专为中国人群(包括维吾尔族、藏族等少数民族)设计的DNA检测试剂盒;甲骨文、微软、英特尔、英伟达、希捷、西部数据、惠普、亚马逊云、摩托罗拉、Esri 等公司也均向中国警方或监控企业知情销售产品或服务。

报道指,2009年乌鲁木齐骚乱后,新疆当局启动了将银行、铁路、电信等数据汇入中央数据库的雄心计划。原 IBM 合作伙伴蓝灯软件公司(Landasoft)将复制自 IBM i2 软件的产品卖给新疆警方,驱动了“一体化联合作战平台”(IJOP)。系统按“上访”、“出国留学”等标签为民众建档,按百分制打分(蓄须、年龄15-55岁、维吾尔族身份均会被扣分),将数十万人标记为“不可信”。仅2017年的一周内,IJOP就标记了24412人为“可疑”,其中不少人随即被拘押。

报道还以江苏常州农民杨国梁一家为例:他们因反对当地政府非法征地,16年来持续上访,遭到全方位监控——火车票、酒店预订、购物记录、短信通话均被上报政府,住宅周围安装了十几个摄像头。其妻子和小女儿去年被拘留,面临“扰乱国家机关工作秩序罪”的指控。

面对调查,涉事企业大多以"遵守出口管制规定"作为回应。但制裁专家指出,现行法律存在显著漏洞——1989年天安门事件后实施的对华军警装备禁令,并未涵盖新兴技术或可军民两用的通用产品。

你可以点击此处阅读相关报道。

美股电汇资金清算问题Cleared Funds

最近在美股交易中遇到一个怪事。某Old Money朋友刚将一笔资金通过香港银行电汇到嘉信理财国际账户(Charles Schwab)的香港花旗银行,一天之内嘉信账户上倒是很快显示到账,但之后操作交易时发现有些标的,比如说谷歌、苹果这些主流股票确实可以购买,然而购买另外一些股票时,比如MSBT之类的ETF标的,以及一些价格比较便宜、流动性不太好、不太主流的股票时,系统显示不能购买:

This security is not day trade eligible and requires cleared funds to purchase.

这个提示除了说该标的不能日内交易,即不能当天买后当天卖,更重要的是说需要清算资金:Cleared Funds.

Cash on hold

我帮忙查看其账户资金,发现资金似乎可使用,Funds Available,系统显示资金已经是Settled Funds,也就是结算资金,但实际上这还算不上Cleared Funds,因为在提现页面,系统显示最近这笔电汇资金是Cash on Hold状态,说明这笔资金被锁定了,这就是为什么不能购买上述某些标的。又过了一天之后,系统显示终于没有资金Cash on Hold了,这时也确实可购买包括MSBT和IBIT之类的所有标的了,说明资金已经是Cleared Funds清算资金。

实际上,美股中电汇过去的资金在不同的状态,它的可用性不一样。资金刚到用户的券商账户上时,像这种电汇资金虽然叫做Settled Funds,也就是结算资金,还是锁定状态,不算Cleared Funds,原因也很简单,电汇过来的资金券商需要沉淀一下(Cash on Hold),以防止用户撤回或者是问题资金(欺诈、洗钱资金)。虽然可用它来购买一些主流股票,但对于一些高风险股票,比如像MSBT之类的ETF,不允许使用锁定资金购买,要等到资金彻底解除锁定成为清算资金,也就是说不再是Cash on Hold状态,才算可以自由使用。

朋友刚遇到这个问题时,发现网友们也不是太清楚,包括AI都解释得不够清楚。好在电汇资金入账嘉信理财时间也挺快,锁定时间其实也很有限。美股市场对资金的管控规则、政策还是比较多的。交易美股的朋友在以后遇到电汇资金这种Cleared Funds问题时,可以参考本文。

PS 本文不构成任何投资意见。

美国债券购买学习笔记

前阵子提到可以在一些券商平台(比如香港复星证券)购买美国政府债券,然而在实际操作的时候,美债的价格和我们的常识有些偏差,有些费解,以下面截图中的美债为例:

US Bond

这是一期2026年11月15日到期的美国政府债券,面值100美元,2026年4月18日的参考报价是99.0389美元,购买页面显示到期年化收益率CAGR是3.7205%,这个数据是如何来的?

假设王富贵今天2026年4月18日付出99.0389美元,还要额外付出应计利息0.8619美元,因为这张美国债券票面利率是2%,每年2次派息,也就是每半年一次1美元,下一次派息是2026年5月15日。而当前持有人,也就是卖家从上一次派息——2025年11月15日到今天已经持有了约154天,因此卖家卖给王富贵的时候,王富贵还应付给卖家约0.85美元,这就是所谓的应计利息

用现金流的方式来描述王富贵的支出与收入:

王富贵于2026年4月18日购买这张债券,应付99.0389+.8619美元,即99.9008美元。

然后王富贵将于2026年5月15日收到1美元的利息(派息)。2026年11月15日债券到期,王富贵将收到票面价格100美元,同时还有第2次利息(派息)1美元。

王富贵的年化收益率是多少?

在AI时代,将上述描述提示词让人工智能计算一下,很容易就得到:3.7%,与券商宣称的3.72%仅略有误差。

所以,美国债券的报价和收益率比我们想象的要复杂一些,没有那么直观,并且每期债券的信息都不尽相同,每个时间点也不一样,它充分考虑到了现金流和资金的时间价值。

不过好在简单学习一下之后就理解了,购买页面上都直接算出了年化收益率。

至于你该不该购买美国国债?我个人觉得得看你的具体情况。美国国债在安全性和流动性方面没得说,在可见的将来安全性实际上没有问题,流动性也是随时可以买卖。3.7%左右的年化收益率,跟我们现行的2%都不到的大额存单收益率比,还是高不少。你基本不可能同时得到一个安全性高、流动性好、收益率高的一个投资标的。

对于人民币持有者来说,还有一个长期的汇率波动损耗,这个很难预测,因此如果资金量不大的话,买不买美国国债意义不大。而大资金的财阀们应该有自己的专业投资顾问和自己的清晰判断,就不用我啰嗦了。

PS 以上个人学习笔记不构成投资建议。

关于中国内地用户境外券商开户的一点观察

Investment

最近被朋友“逼着”研究了一下境外券商,本来懒得折腾这些东西,但一旦开始探索,就有点停不下来,毕竟有所新发现。

2026这个时间点比较特殊——不像前几年那样内地用户随便开境外券商账户,现在确实难了不少——难度不是来源于外部,但实际上也没有完全堵死:处在一种很微妙的状态,还能搞,不过不容易。

先说开户。最核心的就两个东西:身份证(不一定需要护照),境外地址证明。身份证直接使用中国大陆的就可以。关键是那个“境外地址”,这个有门槛。一般用境外银行账单来证明,上面要有真实的境外地址。这一步能卡住不少人。

我的理解是,这种要求不是专门为普通人准备的,更像是给那些本来就在境外生活、工作的人留的口子,我们只是刚好可以“蹭”进去而已。

所以开户不是完全关闭,也不是明确开放,而是一个灰色可行区间。券商这块也没那么神秘,中国内地用户目前还能用的大概就两类:

一类是香港本地中小券商,比如卓锐证券、复星证券这些依然在激进地获客,它们不像长桥香港、富途、老虎对内地用户已经关闭入口,这里附上我的渠道链接入口(有新用户奖励):卓锐证券复星证券

另一类是美国券商(新加坡、英国其它国家券商资金出入金处理起来不方便),比如嘉信理财或者盈透——注意是美国盈透,后者支持使用香港银行账户免费出入金港币,券商内部可以极低损耗汇兑成美元。

它们都还支持用“大陆身份+境外地址”这种组合去开户,但具体能不能成功有一定运气成分,不是百分之百。

其次是券商选择。如果资金比较大,不用纠结直接选传统大型券商,比如美国的,手续费低安全性更高,体系更成熟,CRS处理得也比较规范。

如果资金不大,香港券商也够用,它们基本都参与CRS信息交换。真要赚到钱了,要交税本质上也不是坏事——能交税,说明你赚到钱了,幸福的小烦恼。

投资标的这块,各有特色。比如复星证券可以直接买美国国债,收益年化大概逼近4%。有些券商可购买“替代性资产”,且对内地身份用户开放。再就是加密资产ETF、另类投资现货之类的,这些东西都是用着用着才知道能否购买。

以上这东西没有现成教程,网上几乎找不到一套完整、清晰做的教程。大多数都是碎片信息,有些是过时的。有点像在荒地里自己踩路,别人可能踩过,但没有留下路标。

我这“工具探索”有点像进入了无人之境,一直是边查边试,结论也未必长期有效。政策、通道、券商策略,都会变。

为什么这种东西还是值得研究?这说明:

  1. 信息差还在。很多人根本不知道还有这些路径;
  2. 门槛确实在提高,但门槛本身有时候就是筛选器;
  3. 工具变难获取,意味着“不是所有人都能轻易参与”。

2026年国人境外券商开户,虽然看起来更严格了,但未必完全是坏事。路还在,但不写在路牌上了。能不能找到,还看愿不愿意花时间去摸索。

正如一朋友感慨:如果我还有一点成绩,那都是拜自由赏赐的,如果我还有一点痛苦,那都是不自由带来的。投资工具的自由也是自由的一种。

附:几个主流国人能开户的渠道链接(土木坛子亲测):

券商 开户链接 特点说明 开户要求
香港复星证券
点击开户
支持国人买卖港股、美股、加密资产 ETF 等,
土木坛子专属申请开户渠道。
国内身份证(护照或身份证)
+ 境外地址证明(宽松要求)
+ 境外银行卡(如港卡)
美国嘉信理财
点击开户
选择国际账户;Schwab App 仅英文,
thinkorswim 支持中文;
仅支持美股、美债,无港股;
有中文客服电话;
支持国人买卖美股及加密资产 ETF。
国内身份证(护照或身份证)
+ 国内地址证明(如信用卡中文账单)
+ 境外银行卡(如港卡,港币入金免费)
美国盈透证券
点击开户
选择美国账户;
不支持国人投资加密资产类 ETF;
港币出入金免费。
国内身份证(护照或身份证)
+ 境外地址证明
+ 境外银行卡(如港卡)
香港卓锐证券
点击开户
如有境外身份,支持国人买卖港股、美股、
加密资产 ETF 及加密现货等。
国内身份证(护照或身份证)
+ 境外地址证明(要求较严)
+ 境外银行卡(如港卡)

全部都是直接网络线上申请即可。低调使用。有问题请留言交流。

类比 systemd 的 macOS launchd 使用笔记

现在各大 Linux 发行版很多都变成 systemd 的形状了,连 Synology DSM 7 都开始用 systemd 了,可以说是 Learn once, operate anywhere。不过有时候还是要在 Mac 机器上部署一些服务,需要用到 launchd/launchctl。

本文以一个熟悉 systemd/systemctl 工具的运维视角,整理了常用的 launchd 相关命令备忘。(说实话我每次都会忘记怎么用,然后得去翻手册……而且网上有时候还会教你用 load/unload 子命令,这些其实都已经标记为过时了,有新的命令替代它们)

list 查看所有

launchctl list# 类比 systemctl list-units

status 查看状态

launchctl print gui/501/uploadserver# -> ~/Library/LaunchAgents/uploadserver.plistlaunchctl print system/com.openssh.sshd# -> /System/Library/LaunchDaemons/ssh.plist# 类比 systemctl status uploadserver.service# -> /etc/systemd/system/uploadserver.service

这里的 system/ gui/501/ 叫做 domain-target,com.openssh.sshduploadserver 叫做 service-name,合起来之后叫做 service-target。service-name 一般就是下面 .plist 配置文件中的 Label。

其中 system/ 顾名思义就是系统级的,system domain,需要 root 权限才能修改。而 gui/501/ user/501/ 则是用户级的 user domain,其中 501 就是用户 uid。gui/<uid>/login/<asid>/ 下的服务只有用户登录了才会运行。

通常来说需要 GUI 运行的放在 gui/<uid>/ 下面,不需要的放在其他下面。不过考虑到 macOS 作为桌面操作系统的特性,其实一股脑都放 gui 下面也没啥问题。

start 启动

launchctl bootstrap gui/501 ~/Library/LaunchAgents/uploadserver.plist# 或者系统级的服务,需要 sudo 运行sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.plist# 类比 systemctl start uploadserver.service# 不需要 systemctl daemon-reload

如果 bootstrap 提示下面的报错,就说明很可能是服务器已经在运行了,或者服务被 disable 掉了:

Bootstrap failed: 5: Input/output errorTry re-running the command as root for richer errors.

stop 停止

launchctl bootout gui/501 ~/Library/LaunchAgents/uploadserver.plist# 或者系统级的服务,需要 sudo 运行sudo bootout bootstrap system /Library/LaunchDaemons/com.example.plist# 除了 .plist 文件路径,也可以用 label 指定launchctl bootout gui/501/uploadserver# 类比 systemctl stop uploadserver.service

如果 bootout 提示下面的报错,就说明很可能是服务本来就没有在运行:

Boot-out failed: 3: No such process

restart 重启

launchctl kickstart -k -p gui/501/uploadserver# service spawned with pid: 17247# 参数:# -k       如果服务已经在运行了,先杀死现有的进程再重启# -p       成功后输出进程的 PID# 类比 systemctl restart uploadserver.service

如果 kickstart 提示下面的报错,就说明服务没有 bootstrap:

Could not find service "uploadserver" in domain for user gui: 501

enable 开机启动

一般来说你的 .plist 里配置了 RunAtLoad 的话,bootstrap 了之后默认就是开机启动的,不需要再 enable 一遍。

不过你也可以通过 disable 主动关闭服务的开机启动,这个是否 enable 的状态是 launchd 自己维护的,不会更改 .plist 文件的内容。使用 disable 禁止开机启动之后,想要恢复开机启动就需要用 enable。

launchctl enable gui/501/uploadserver# 类比 systemctl enable uploadserver.service

disable 禁止开机启动

launchctl disable gui/501/uploadserver# 类比 systemctl disable uploadserver.service

config 配置文件

类似于 systemd 的 Unit File,以 .plist/XML 文件的形式存在:

~/Library/LaunchAgents   Per-user agents provided by the user./Library/LaunchAgents    Per-user agents provided by the administrator./Library/LaunchDaemons   System-wide daemons provided by the administrator./System/Library/LaunchAgents   Per-user agents provided by Apple./System/Library/LaunchDaemons  System-wide daemons provided by Apple.

通常来说我们只会用到前三个。Daemon 和 Agent 的区别:

  • Daemon:系统级、单个实例服务多个用户、不应显示 UI、没有用户登录也会运行、可以以 root 权限运行。
  • Agent:每个用户各自运行实例、直接与用户交互、用户不登录则不会运行、以普通用户权限运行。

这里以 ~/Library/LaunchAgents/uploadserver.plist 为例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>    <key>KeepAlive</key>    <true/>    <key>Label</key>    <string>uploadserver</string>    <key>LimitLoadToSessionType</key>    <array>        <string>Aqua</string>        <string>Background</string>        <string>LoginWindow</string>        <string>StandardIO</string>        <string>System</string>    </array>    <key>ProcessType</key>    <string>Background</string>    <key>ProgramArguments</key>    <array>        <string>/opt/homebrew/bin/uvx</string>        <string>uploadserver</string>        <string>8888</string>        <string>-d</string>        <string>/tmp/upload</string>    </array>    <key>RunAtLoad</key>    <true/>    <key>EnvironmentVariables</key>    <dict>        <key>FOO</key>        <string>BAR</string>    </dict>    <key>StandardErrorPath</key>    <string>/tmp/uploadserver.log</string>    <key>StandardOutPath</key>    <string>/tmp/uploadserver.log</string>    <key>TimeOut</key>    <integer>5</integer></dict></plist>

类比 /etc/systemd/system/uploadserver.service

[Unit]Description=Upload ServerWants=network-online.targetAfter=network-online.target[Service]ExecStart=/root/.local/bin/uvx uploadserver 8888 -d /tmp/uploadRestart=alwaysRestartSec=5Environment="FOO=BAR"StandardOutput=file:/tmp/uploadserver.logStandardError=file:/tmp/uploadserver.log[Install]WantedBy=multi-user.target

具体怎么写就不多说了,大部分开机自启 + 守护进程需求用上面的模板就够了,有其他需求的直接看文档。

名字基本可以随便取。另外注意有多个命令行参数的话,要拆成多个 <string>

不再推荐使用的 Legacy 命令

现在很多教程里还在用 load/unload,不过在 macOS 10.11 之后,官方手册中已经不再推荐使用这些老的命令,应该使用上面的命令替代。

另外一点需要注意的是,load/unload 通过执行 launchctl 命令时的权限来决定 domain。如果使用 sudo launchctl 执行的,算作 system domain,否则算作 user domain。之前被坑过一次……💩

launchctl load ~/Library/LaunchAgents/uploadserver.plist# 应该替换为 launchctl bootstrap gui/501 ~/Library/LaunchAgents/uploadserver.plistlaunchctl load -w ~/Library/LaunchAgents/uploadserver.plist# 相当于先 enable 再 bootstraplaunchctl unload ~/Library/LaunchAgents/uploadserver.plist# 应该替换为 launchctl bootout gui/501 ~/Library/LaunchAgents/uploadserver.plistsudo launchctl load /Library/LaunchDaemons/com.example.plist# 应该替换为 sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.plistsudo launchctl unload /Library/LaunchDaemons/com.example.plist# 应该替换为 sudo bootout bootstrap system /Library/LaunchDaemons/com.example.plist

可视化管理工具

推荐 Lingon X,有点像以前 Windows 上的那种开机进程管理,可以查看当前系统上有哪些 Agent/Deamon,以及它们的配置,挺方便的。

小尾巴

我记得以前 macOS 设置页面里的启动项管理很垃圾,只能显示部分启动项,但实际上程序想要开机自启有很多种方法:

  • LoginItems (Helper App with SMLoginItemSetEnabled)
  • LaunchAgents (~/Library/LaunchAgents or /Library/LaunchAgents)
  • LaunchDaemons (/Library/LaunchDaemons)
  • 直接拖动到设置页面「登录时打开」列表中

搞得有些流氓软件开机自启了你都不知道,比之 Windows 还不如。当时我还准备写篇博客,在不安装第三方清理软件的情况下如何删除这些启动项,但后来不了了之了。

不过好在后来的 macOS 更新把这块的管理补上了,现在在设置页面就可以直接管理上面那些方式添加的启动项,挺好。

禁止 Synology/QNAP NAS 通过 ssh 密码登录

使用成品 NAS,在相对省心的同时,也意味着更低的自由度。很多自定义操作都是在和这些定制化 OS 斗智斗勇。

本文介绍了在 QNAP 威联通 NAS(以及 Synology 群晖 NAS)上关闭 ssh 密码登录,仅允许密钥登录的方法。Synology 相对还好,对 OpenSSH 的魔改不多,和普通 Linux 一样修改 /etc/ssh/sshd_config 就好了。

但是 QNAP 这个 B,每次启动 sshd 服务都会重新生成配置,直接修改上述配置文件是没法持久化保存的。

风险提示

为了避免你被锁在门外,修改自带 sshd 配置之前,最好自己再起一个 ssh 服务,等确认 OK 了之后再关掉。以及最重要的,做好备份!

sudo opkg install dropbearsudo dropbear -F -p 9922 -P /opt/var/run/dropbear.pid -R -w -E

如果你不幸已经进不去系统了,可以这样自救(别问我为什么知道🤣):

  • 从 Web UI 打开 Container Station / Container Manager
  • 通过上传 docker-compose.yml 的方式创建容器(通常方式创建的话是不让挂载特殊路径的)
  • 挂载要修改的路径,比如 /etc/init.d/
  • 启动容器后,选择 打开终端机/连接终端,然后把改坏的文件改回来
services:  rescue-tmp:    image: ubuntu:latest    container_name: rescue-tmp    stdin_open: true    tty: true    command: /bin/bash    volumes:      - /etc/init.d:/work

Synology NAS

改文件之前做好备份!

执行 sudo vim /etc/ssh/sshd_config,修改:

 PubkeyAuthentication yes ChallengeResponseAuthentication no-PasswordAuthentication yes+PasswordAuthentication no

然后 sudo synosystemctl restart sshd.service 重启 sshd 生效,或者在 DSM Web UI 上关闭「启动 SSH 功能」后再打开也可以。

值得一提的是,直接修改 sshd_config 中的 Port,会导致 sshd 监听在两个端口上,一个是 Web UI 上设置的「SSH 端口」,一个是配置文件中配置的端口,而且后者是无法用于登录 Shell 的,会提示 Permission denied, please try again.

研究了一下,应该是因为 sshd 被魔改过,会读取 /etc/synoinfo.conf 文件里的 ssh_port 配置。

sudo lsof -c sshd# COMMAND   PID USER  FD   TYPE  SIZE/OFF    NODE NAME# sshd    28232 root cwd    DIR      4096       2 /# sshd    28232 root rtd    DIR      4096       2 /# sshd    28232 root txt    REG    888480   20645 /usr/bin/sshd# sshd    28232 root   3u  IPv4       0t0     TCP *:2222 (LISTEN)# sshd    28232 root   4u  IPv6       0t0     TCP *:2222 (LISTEN)# sshd    28232 root   5u  IPv4       0t0     TCP *:6622 (LISTEN)# sshd    28232 root   6u  IPv6       0t0     TCP *:6622 (LISTEN)cat /etc/synoinfo.conf | grep -i port# ssh_port="2222"# sftpPort="3322"# rsync_sshd_port="4422"strings /usr/bin/sshd# SYNOServiceSSHPortGet# /etc/ssh/sshd_config# /etc/synoinfo.conf# Permission denied, please try again.

而根据 Reverse Engineering Synology’s OpenSSH 这篇博客里的说法,这个魔改过的 OpenSSH 会校验一些参数,所以无法连接。

不过对于我们的目标「禁用 ssh 密码登录」没什么影响,就这样吧。这些厂商定制化的东西还是少碰,别给整挂了。

QNAP NAS

大的来了(掩鼻)。

先看看 QNAP 的 sshd 用的什么配置文件:

ps aux | grep sshd# 22714 admin     11504 S   /usr/sbin/sshd -f /etc/config/ssh/sshd_config -p 2222cat /etc/config/ssh/sshd_config# Protocol 2# HostKey /etc/ssh/ssh_host_ed25519_key# PermitRootLogin yes# UseDNS no# Subsystem sftp /usr/libexec/sftp-server# AllowTcpForwarding yes# AllowUsers admin prinecho 'PasswordAuthentication no' | sudo tee -a /etc/config/ssh/sshd_config

重启 sshd 后,你会惊喜地发现,刚才改掉的配置文件,诶,又被改回来了😁:

sudo setsid /etc/init.d/login.sh restartgrep PasswordAuthentication /etc/config/ssh/sshd_config

既然配置文件没法持久化,那就只能从启动脚本下手了。

简单看看 /etc/init.d/login.sh(文件缩进就是这样,我保留了原汁原味):

SSH=/usr/sbin/sshdSSHD_CONF=/etc/config/ssh/sshd_configSSHD_CONF_DEFAULT=/etc/ssh/sshd_configSSH_PORT=`/sbin/getcfg LOGIN "SSH Port" -d 22`update_sshd_config(){ /sbin/mksshdconf ENABLED_SFTP=`/sbin/getcfg LOGIN "SFTP Enable" -u -d TRUE` # ... #Set PermitRootLogin yes OPTION="PermitRootLogin" if [ -z "`grep .*${OPTION}.* ${SSHD_CONF}`" ]; then     echo "${OPTION} yes" > ${SSHD_CONF} else        sed -i "s/^#\s\?${OPTION}\s\?[yesno]\{1,3\}.*/${OPTION} yes/g" ${SSHD_CONF} fi # ...}# ...case "$1" in    start) # for openssh 7.5p1 and later sed -i '/^UsePrivilegeSeparation .*/d' ${SSHD_CONF_DEFAULT} /bin/chmod 0400 /etc/config/shadow* /etc/default_config/shadow update_ssh_client_config if [ `/sbin/getcfg LOGIN "SSH Enable" -u -d FALSE` != FALSE ]; then  echo -n "Starting sshd service: "  generte_ssh_key     if [ ! -f "${SSHD_CONF}" ]; then      /bin/cp -f ${SSHD_CONF_DEFAULT} ${SSHD_CONF}     fi     if [ ! -f "${SSHD_CONF}" ]; then      SSHD_CONF=${SSHD_CONF_DEFAULT}     fi  update_sshd_config        sshd_privilege_separation  /sbin/daemon_mgr sshd start "$SSH -f ${SSHD_CONF} -p $SSH_PORT"  echo "OK"  touch /var/lock/subsys/sshd fi ;; # ...esac

你可能以为有这个 cp -f ${SSHD_CONF_DEFAULT} ${SSHD_CONF},我们就能通过修改 /etc/ssh/sshd_config 来实现配置持久化了 —— 天真!

实测下来发现 /sbin/mksshdconf 这个二进制每次执行都会重置 /etc/config/ssh/sshd_config 的内容,所以你 cp 了也没有用。我也不知道他们为什么要写一个没有意义的 cp 在那里。🤷

我搜了下,这篇博客 里也有类似的吐槽:

For reasons I can’t fathom, the SSH config on a QNAP seems nuts (If anyone knows why it works this way, please let me know, because I must be missing something obvious).

就算抛开这些不谈,你这个强制 PermitRootLogin yes 是何意啊?

所以我们还是只能改脚本,重启 sshd 后生效:

改文件之前做好备份!

--- /etc/init.d/login.sh.bak+++ /etc/init.d/login.sh@@ -83,6 +83,9 @@ update_sshd_config() {  /sbin/mksshdconf+ echo 'PasswordAuthentication no' >> ${SSHD_CONF}+ echo 'ChallengeResponseAuthentication no' >> ${SSHD_CONF}+ sed -i "s/PermitRootLogin yes/PermitRootLogin no/g" ${SSHD_CONF}  ENABLED_SFTP=`/sbin/getcfg LOGIN "SFTP Enable" -u -d TRUE`  if [ "x${ENABLED_SFTP}" = "xTRUE" ]; then

注意:系统更新后这个脚本会被重置,需要重新修改。

Bonus: macOS

其实和大部分 Linux 一样啦,写在这里只是为了顺便记一下:

cat << EOF | sudo tee /etc/ssh/sshd_config.d/10-no-passwords.confPubkeyAuthentication yesPasswordAuthentication noKbdInteractiveAuthentication noEOF

sshd_config.d 里的序号规则是 小的覆盖大的

重启 sshd:

# Linux systemdsystemctl restart ssh.servicesystemctl status ssh.service# macOS launchdlaunchctl kickstart -k -p system/com.openssh.sshdlaunchctl print system/com.openssh.sshd

让 VNC 远程桌面只能通过 ssh 隧道连接(仅监听 127.0.0.1):

sudo defaults write /Library/Preferences/com.apple.RemoteManagement.plist VNCOnlyLocalConnections -bool yesssh -L 5900:127.0.0.1:5900 mac-mini

小尾巴

保不齐这些 NAS 系统后续更新会出什么幺蛾子,可以让 AI 搓一个脚本,放在 Docker 容器里 crontab 定时运行,然后给一个服务器列表,一旦发现任何服务器允许 PasswordAuthentication,就发送通知告警。

修改后的效果:

ssh -o PreferredAuthentications=password,keyboard-interactive prin@192.168.1.10 -p 2222# prin@192.168.1.10: Permission denied (publickey).ssh -o PreferredAuthentications=password,keyboard-interactive prin@192.168.2.10 -p 2222# prin@192.168.2.10: Permission denied (publickey).

修复 Synology NAS 升级后 M.2 存储池兼容性问题

我的主力 NAS 是 Synology 群晖 DS920+,陪了我也快 4 年了。DS920+ 出厂默认是不支持将 M.2 NVMe SSD 作为存储池的,只能作为缓存使用。后来出的 DS923+ 倒是支持创建 M.2 存储池了,但是只能用它自家的兼容性列表中的盘,也不知道套的哪家 OEM,贵得要死,买是不可能买的这辈子不可能买的。

好在有大神写了脚本 Synology_HDD_db,可以直接修改这个「兼容性列表」所在的数据库,把你在用的硬盘型号加进去。系统一读这个数据库发现型号在里面,就可以正常使用了。不过缺点是每次系统更新后,都需要重新执行一遍脚本。

今天看到关于 飞牛 fnOS 0day 漏洞 的帖子,寻思着也给 DS920+ 更新一下系统,毕竟一直都稳定运行着,也没有特意去升级。虽然我没用飞牛,也没有把服务暴露到公网,不过各家 NAS 系统的 CVE 其实都挺多的,以防万一嘛。

结果升级完系统 NAS 就开始疯狂嘀嘀嘀叫,才想起来还有硬盘兼容性这一茬……太久远了,顺手记录一下,免得下次再忘了。


报错界面是这样的:

  • 当前发出哔声的原因:存储空间或 SSD 缓存异常
  • 检测到不支持的硬盘(缓存设备 2)
  • 在存储池 3 中检测到一个或多个硬盘缺失
  • 严重 存储池 3 发生问题
  • 缓存设备 2 - M.2 NVMe SSD 不受当前 DSM 版本支持

synology-beeping

storage-pool-failure

更新硬盘兼容性数据库

这个 M.2 存储池是 2023 年建的,记得当时好像还不需要捣鼓什么兼容性数据库,应该是后来 DSM 7 加上的。

总之就是运行一下 Synology_HDD_db 这个脚本,每次系统更新完都要跑一遍,然后重启设备生效。

# 版本号自己改成最新的wget https://github.com/007revad/Synology_HDD_db/archive/refs/tags/v3.6.119.zip7z x v3.6.119.zipcd Synology_HDD_db-3.6.119sudo -s ./syno_hdd_db.sh -nr --showedits# 用到的脚本参数:# -n, --noupdate        Prevent DSM updating the compatible drive databases# -r, --ram             Disable memory compatibility checking (DSM 7.x only)# -s, --showedits       Show edits made to <model>_host db and db.new file(s)

比如我这里用的就是一条致态的 2TB 作为下载盘,另一条 256GB 的作为 HDD 缓存。

syno-hdd-db

脚本运行以后,就会把你目前插着的硬盘加到 NAS 本地的兼容性列表数据库里了。

ls -al /var/lib/disk-compatibility/ | grep ds920+_host_v7# -rw-r--r--  1 root root 156K Feb  1 02:07 ds920+_host_v7.db# -rw-r--r--  1 root root 148K Jan 19 17:11 ds920+_host_v7.db.bak# -rw-r--r--  1 root root  97K Oct 27  2023 ds920+_host_v7.db.new.bak# -rw-r--r--  1 root root    8 Jan 19 17:11 ds920+_host_v7.release# -rw-r--r--  1 root root    4 Jan 19 17:11 ds920+_host_v7.versioncat /var/lib/disk-compatibility/ds920+_host_v7.db | jq .

所谓数据库,其实就是个大 JSON:

{  "disk_compatbility_info": {    // ...    "ZHITAI TiPlus7100 2TB": {      "ZTA22002": {        "compatibility_interval": [          {            "compatibility": "support",            "not_yet_rolling_status": "support",            "fw_dsm_update_status_notify": false,            "barebone_installable": true,            "barebone_installable_v2": "auto",            "smart_test_ignore": false,            "smart_attr_ignore": false          }        ]      },      // ...    }  },  "nas_model": "ds920+"}

建立 M.2 SSD 存储池

如果是 DS923+,运行完上面的脚本之后应该直接在 DSM Web UI 上创建存储池就可以了。

DS920+ 还是得自己手搓,记录一下用到的命令(之前参考的是 这篇博客):

# 查看当前的 NVMe 设备,找到你要的 SSDls -al /dev/nvme*sudo fdisk -l /dev/nvme0n1# 给 SSD 分区,有多块盘的话小心别弄错了sudo synopartition --part /dev/nvme0n1 12# 看看当前的 RAID 状态,如果已经有 md5 了就新建 md6cat /proc/mdstatsudo mdadm --create /dev/md6 --level=1 --raid-devices=1 --force /dev/nvme0n1p3# 创建文件系统sudo mkfs.btrfs -f /dev/md6sudo mdadm --detail /dev/md6sudo reboot

重启 NAS 后,检查一下:

sudo fdisk -l /dev/nvme0n1# Disk /dev/nvme0n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors# Disk model: ZHITAI TiPlus7100 2TB# Units: sectors of 1 * 512 = 512 bytes# Sector size (logical/physical): 512 bytes / 512 bytes# I/O size (minimum/optimal): 512 bytes / 512 bytes# Disklabel type: dos# Disk identifier: 0xae2a9134# Device         Boot   Start        End    Sectors  Size Id Type# /dev/nvme0n1p1          256    4980735    4980480  2.4G fd Linux raid autodetect# /dev/nvme0n1p2      4980736    9175039    4194304    2G fd Linux raid autodetect# /dev/nvme0n1p3      9437184 4000795469 3991358286  1.9T fd Linux raid autodetectsudo mdadm --detail /dev/md6# /dev/md6:#         Version : 1.2#   Creation Time : Fri Jun  2 02:16:39 2023#      Raid Level : raid1#      Array Size : 1995678080 (1903.23 GiB 2043.57 GB)#   Used Dev Size : 1995678080 (1903.23 GiB 2043.57 GB)#    Raid Devices : 1#   Total Devices : 1#     Persistence : Superblock is persistent#     Update Time : Sun Feb  1 03:25:45 2026#           State : clean#  Active Devices : 1# Working Devices : 1#  Failed Devices : 0#   Spare Devices : 0#            Name : localhost:6  (local to host localhost)#            UUID : 2729425e:28782224:04f5d205:be6fcc6c#          Events : 45#     Number   Major   Minor   RaidDevice State#        0     259        3        0      active sync   /dev/nvme0n1p3

然后去 Web UI 的「存储管理器 > 存储空间 > 可用池」,点击「在线重组」就好了。

dsm-online-assemble

小尾巴

顺便吐槽一下,这系统升级完把我所有的容器都停了,也不给我自动重启,我还得一个一个过去 docker compose up -d 拉起来……

下次有空的话聊聊 HomeLab 的安全性问题:不仅仅是这次飞牛 fnOS 的路径穿越漏洞,还有之前影响到多个 self-hosted 软件乃至众多生产环境的 React Server Component RCE 漏洞,claude-relay-service 的鉴权绕过漏洞等等,都说明了把内网服务暴露到公网是极其危险的。很多人图方便喜欢搞什么内网穿透、DDNS、公网 IP、域名访问、DMZ、UPnP,殊不知距离被入侵可能只有一步之遥。

极空间与 QNAP NAS 实现共享 NUT UPS

我有三台 NAS,Synology 群晖、QNAP 威联通和 ZSpace 极空间,前者放在出租屋里作为主力,后两台放在老家作为备份。

因为极空间是 arm64 版本双盘位的,功耗不高,所以和 QNAP 共用一台 UPS 就好了。之前折腾了一下,让极空间作为 Master 通过 USB 连接 UPS,然后 QNAP 作为 Slave 通过 NUT (Network UPS Tools) 局域网连接。

不过因为涉及到系统文件改动,每次极空间系统升级后都需要重新操作一遍,每次我都会忘记要怎么捣鼓……所以写篇博客记录下。

话说 2025 年居然一篇博客都没写,工作太忙了呀,而且总是犯懒。以前上学的时候写博客,不怎么理解那些断更的博主,现在可以体会到那种感觉了……草稿倒是堆了很多,希望明年可以发出来吧!

TL;DR

以 root 权限登录极空间,运行以下命令,然后重启服务即可。

sed -i 's/127.0.0.1/0.0.0.0/g' /zspace/applications/services/nut/config/upsd.confcat >> /zspace/applications/services/nut/config/upsd.users << EOF[admin]        password = 123456        upsmon slave        allowfrom = %EOFcat >> /zspace/applications/services/nut/config/ups.conf << EOF[qnapups]        driver = usbhid-ups        port = auto        desc = "zspace ups for qnap"        lowbatt = 15        pollfreq = 15        offdelay = 60EOF

备注

首先要吐槽的就是 QNAP 这个傻逼系统,我已经不知道吐槽过多少次了。

QNAP 的天才工程师的天才设计:在作为 Network UPS Slave 连接时,用户只能指定「网络 UPS 服务器的 IP 地址」这一个选项,剩下的都是写死的:

  • 用户名 admin
  • 密码 123456
  • 端口 3493
  • 名称 qnapups

只要任何一个不对都连不上。Man! What can I say?

所以如果你想让 QNAP 和极空间共享一台 UPS,有两个选择:

  1. QNAP as Master,极空间 as Slave
  2. 极空间 as Master,QNAP as Slave

不过当时 24 年我折腾的时候,极空间还不支持 NUT Slave 模式。虽然那会儿极空间已经开放了 ssh 和 root 权限(也是这家之前总是被吐槽的一点),但是考虑到如果通过修改系统文件的方式让极空间支持 NUT Slave,可能不稳,毕竟这种定制系统也不知道哪里改了些什么东西。

所以我选择的是极空间通过 USB 物理连接 UPS,启动 NUT Server 作为 Master,QNAP 作为 Slave 客户端连接 NUT Server。

UPS <---{USB Cable}---> ZSpace <---{TCP 3493}---> QNAP                    (NUT Server)              (NUT Client)

P.S. 现在(2025 年 12 月)极空间已经支持 NUT Slave 模式了,各种参数都可以自定义,所以更好的方式应该是上述的第一种。不过我懒得去改接线了,先这样吧。又不是不能用.jpg

zspace-settings

在极空间上的操作

因为 QNAP 的弱智系统只能接受固定的用户名、密码和 UPS 名称,所以需要修改极空间的 NUT Server 配置。

首先要拿到极空间 NAS 的 ssh 和 root 权限,这里就不赘述了。登上去以后:

ls -al /etc/nut# lrwxrwxrwx 1 root root 33 Sep 17  2024 /etc/nut -> /zspace/applications/services/nutcd /zspace/applications/services/nutls -a ./# .       config                     restart.sh         setting.json  ups.conf     upssched# ..      external_ups_setting.json  restart_driver.sh  start.sh      upsd.conf    upssched-cmd.sh# client  nut.conf                   restart_upsd.sh    stop.sh       upsd.users   upssched.conf# conf    realstart.sh               server             u2600_tools   upsmon.conf

然后 cat ./server/nut-server.service 看看配置文件在哪(后续系统版本升级后实际路径可能会变,最好确认一下):

#!/bin/sh#use upsd.confexport NUT_CONFPATH=/zspace/applications/services/nut/config/sbin/upsd -u root

看看配置文件 ./config/upsd.conf

# Network UPS Tools: example upsd configuration file## ... 其他注释省略 ...# =======================================================================# LISTEN <address> [<port>]LISTEN 127.0.0.1 3493LISTEN ::1 3493

把这里的 127.0.0.1 改成 0.0.0.0,允许局域网(QNAP NAS)访问。或者也可以起一个 socat 做转发,都行。有需要的话也可以配一下 ACL,只允许 QNAP IP 访问。

cp /zspace/applications/services/nut/config/upsd.conf ~/upsd.conf.baksed -i 's/127.0.0.1/0.0.0.0/g' /zspace/applications/services/nut/config/upsd.conf

再看看用户配置文件 ./config/upsd.users

# Network UPS Tools: Example upsd.users## ... 其他注释省略 ...# --------------------------------------------------------------------------[upsmaster]        password = sekret        upsmon master        actions = SET        instcmds = ALL[nut]        password = nut        upsmon slave        allowfrom = %

往里面加上 QNAP 需要的用户:

cp /zspace/applications/services/nut/config/upsd.users ~/upsd.users.bakcat >> /zspace/applications/services/nut/config/upsd.users << EOF[admin]        password = 123456        upsmon slave        allowfrom = %EOF

然后再看看 UPS 配置文件 ./config/ups.conf

# Network UPS Tools: example ups.conf## ... 其他注释省略 ...# ------------------------maxretry = 3xretry = 5pollinterval = 15[ups0]        driver = usbhid-ups        port = auto        desc = "nut ups"        lowbatt = 15        pollfreq = 15        offdelay = 60

往里面加上 QNAP 需要的 UPS 名称:

cp /zspace/applications/services/nut/config/ups.conf ~/ups.conf.bakcat >> /zspace/applications/services/nut/config/ups.conf << EOF[qnapups]        driver = usbhid-ups        port = auto        desc = "zspace ups for qnap"        lowbatt = 15        pollfreq = 15        offdelay = 60EOF

最后,重启 NUT 服务:

本来想直接执行 /zspace/applications/services/nut/restart.sh 重启服务的,但似乎缺少某些环境变量,可能不是拿来直接调用的。

可以直接去极空间的网页面板,设置 > UPS 设置,把开关关闭然后再打开就行了。再检查下进程,看到 qnapups 就算成功了。

ps aux | grep ups# root     29716  /usr/share/nut/usbhid-ups -a ups0 -u root# root     29718  /usr/share/nut/usbhid-ups -a qnapups -u root# root     29722  /sbin/upsd -u root

在 QNAP 上的操作

不需要做什么,在网页面板上填入极空间 NAS 的局域网 IP 就能连上了。

qnap-settings

通过 upsc qnapups@192.168.1.4 查看 UPS 信息:

battery.charge: 100battery.charge.low: 10battery.mfr.date: 2001/01/01battery.runtime: 3618battery.runtime.low: 120battery.type: PbAcbattery.voltage: 13.6battery.voltage.nominal: 12.0device.mfr: American Power Conversiondevice.model: Back-UPS BK650M2-CHdevice.type: upsdriver.name: usbhid-ups

顺便看看 QNAP 上的 NUT 服务配置:

ls -al /etc/config# lrwxrwxrwx 1 admin administrators 21 2025-12-31 13:14 /etc/config -> /mnt/HDA_ROOT/.configls -a /mnt/HDA_ROOT/.config/ups# .  ..  ups.conf  upsd.conf  upsd.users  upsmon.conf

配置文件在 /mnt/HDA_ROOT/.config/ups/upsmon.conf

# Network UPS Tools: example upsmon configuration## ... 其他注释省略 ...# --------------------------------------------------------------------------MONITOR qnapups@192.168.1.4 1 admin 123456 slave#MONITOR zspaceups@192.168.1.4 1 upsmaster sekret slave# ... 其他注释省略 ...RUN_AS_USER adminMINSUPPLIES 1SHUTDOWNCMD "/sbin/shutdown -h +0"POLLFREQ 5POLLFREQALERT 5HOSTSYNC 15DEADTIME 15POWERDOWNFLAG /etc/killpowerRBWARNTIME 43200NOCOMMWARNTIME 300FINALDELAY 5

其实我之前也试过直接改这个文件,把 MONITOR 里写死的配置改成极空间的配置。但是试下来发现改完以后虽然服务是跑起来了,但是在 QNAP 的网页面板上不会显示 UPS 信息和已连接到 UPS 设备的图标。也不知道是这系统魔改了什么地方,担心会出现奇怪的问题,遂作罢。

如果你需要将 QNAP 作为 NUT Server,那可以关注 upsd.confupsd.users 文件,网上也有相关教程。

可视化 UPS 监控面板

因为 NUT 的网络协议走的是 TCP 3493,所以就算是异地的 UPS,组建虚拟局域网后也可以互相访问。

这里推荐一个开源的 NUT UPS 管理面板 PeaNUT,用起来挺方便的。

peanut

VCard正式推出匿名取现USDT实体卡

VCard稳定币VISA实体卡

VCard注册安装推荐链接(邀请码110316)

上次我在我的视频号上分享的VCard十二星座系列USDT实体卡,官方终于正式推出了。我之前的亲自试用(我的是VISA卡),确实从工商银行的ATM机上取出了人民币现金,从稳定币USDT到人民币现金,整个过程很丝滑,感兴趣的朋友可以到我的视频号“土木坛子”上查看(抖音上的视频居然被限制了)。

此次发售的星座卡将以神秘盲盒形式随机寄出,每个星座系列中还隐藏有十张限量金卡,就看你的运气如何了。这不仅是一张功能强大的卡片,更是一份专属的收藏惊喜。

VCard十二星座系列实体卡权益一览

核心特色

  • 便捷匿名:免实名认证,全球通用。
  • 广泛受理:支持全球ATM取款及刷卡消费(包括中国大陆)。

费用介绍

  • 开卡费:249 USDT
  • 消费手续费:0.5%(最低0.4 USD)
  • ATM取现手续费:2% + 2 USD
  • ATM查询手续费:0.6 USD(建议使用VCard App查询余额)
  • 跨境交易手续费:免手续费

ATM取现额度:

  • 单笔:1,500 USD
  • 每日:3,000 USD
  • 每月:10,000 USD

刷卡消费额度:

  • 单笔:20,000 USD
  • 每日:200,000 USD
  • 每月:1,000,000 USD

购卡与寄送说明:卡片申请成功后,将在 5个工作日内寄出。

我个人感觉VCard这家卡商背景较为雄厚,低调耕耘U卡这个细分赛道也有较为悠久的历史了。此次推出USDT实体卡丰富产品线,除了开卡费用有点小贵,取现金时的费用不算便宜(但也不算太贵,其它渠道USDT变为现金一样需要费用),但胜在匿名且安全,且为实体卡,总体还算不错,有刚需使用场景(比如加密货币出金和境外服务订阅等)的朋友可以酌情注册申请,小额使用控制资金风险,也欢迎分享使用体验和经验。


另外插播一则重要信息: DEPAY已出公告,Dupay将于2025年11月30日正式停止全部服务并关闭服务器。请还有余额尚未完成提现的用户,于服务器关闭前尽快提现。OneKey Card早已关闭服务。

关闭之前还提供善后服务,这种负责任的态度值得表扬。

这股裁员风会很快刮到我们这里来

AI

最近一年来,美国几大科技公司(互联网大厂)的裁员新闻,令我有所震惊,光下面这几组数据,每个公司都在裁掉成千上万的员工。

2025 年美国主要科技公司裁员情况对比
公司名称 裁员时间 裁员人数 占总员工比例 裁员主要部门 官方或媒体提到的原因
Google(Alphabet) 2025年1月、5月、10月 累计约 1.5 万人 约 6% 云计算、硬件、招聘与广告部门 精简非核心业务、投入 AI 和云算力基础设施
Microsoft 2025年2月与6月 约 1 万人 约 5% LinkedIn、游戏与市场部门 AI 转型与成本优化、业务重组
Amazon 2025年3月 超过 2 万人 约 6–7% AWS、零售、设备部门 专注盈利业务、AI 驱动自动化
Meta(Facebook) 2025年初 约 8,000 人 约 5% 运营、招聘与 Reality Labs “效率之年”持续,聚焦 AI 和元宇宙核心项目
Apple 2025年上半年 约 3,000 人 <2% 硬件与零售支持 重组 Vision Pro 团队、控制成本
Tesla 2025年4月 约 6,000 人 约 8% 制造、销售与软件测试 电动车需求波动、聚焦自动驾驶与 AI 芯片
Intel 2025年中 约 10,000 人 约 15% 制造与行政管理 盈利压力、转型 AI 芯片与代工服务
Salesforce 2025年初 约 7,000 人 约 10% 销售与客服 AI 自动化减少人工岗位、利润优化

而且,在被裁的科技员工中,超过 68% 拥有硕士或博士学位,而本科毕业于前 100 名高校的比例也超过 40%。这与“科技公司裁员”传统印象(基层岗位多)不同:这次很多是中层、项目经理、数据分析师、产品负责人被裁。这些被裁的员工的毕业院校包括 Stanford、Berkeley、CMU、MIT、哥大、密歇根、滑铁卢、UCL 等一系列名校。

另外,与以前遇到经济危机、企业经营不善的情况相反,这次并非如此,裁员之后,这些公司的股价得到资本市场认可。

这背后的主要原因就是人工智能的发展,AI的发展会令人类工作岗位遭到重新洗牌,但我没有想到居然这么快,企业把人类的岗位裁下去以后,直接用这些工资支出买GPU显卡算力,对于企业的发展更为有利,也因此资本市场非常认可这种裁员。

纵观人类历史,每一次科技浪潮都会对人类社会造成冲击,这一次也不例外。

技术浪潮与学历影响(概览)
时期 技术浪潮 受影响的学历群体 典型表现 社会影响 普通人应对方式
18世纪末–19世纪初 工业革命(蒸汽机、机械化生产) 手工业师傅、行会学徒 机械替代手工技艺,传统手工业者失业 “卢德运动”爆发,技术工人抗议机器 转向机械操作、工程管理等新技能
20世纪初 电气化与流水线生产 传统工匠与一般技校毕业生 工厂普遍采用标准化生产流程 大量重复性岗位被替代,学历优势下降 学习机械工程、电气工程等新兴学科
20世纪80–90年代 计算机与信息革命 文秘、档案管理、基础会计等文职人员 电脑替代打字员、档案员等岗位 本科文凭普及但“含金量”下降 学习计算机技能、数据分析、程序设计
2000年代中期 互联网与自动化浪潮 中层管理人员、传统媒体从业者 企业层级扁平化,新闻传播方式改变 信息不对称减少,学历溢价下降 发展跨界能力与创新思维
2020年代 人工智能与大模型浪潮 程序员、设计师、内容创作者等知识型群体 AI自动化生成与辅助系统广泛应用 高学历岗位被部分替代或重构 提升人机协作能力、AI应用素养、复合型技能

对于美国大厂这一波裁员事件,我个人想到的思考有以下三点:

第一,学历文凭有用,但将继续贬值。过去进入顶尖名校(如常春藤、MIT、斯坦福)并拿到大厂(FAANG – Facebook/Meta, Amazon, Apple, Netflix, Google)的offer,被视为“上岸”的终极形态,从今往后,“学历贬值”将继续演变下去。当然,学历(如大学文凭)本身不会说变得一文不值,而是指它不再能保证一个稳定、高薪、一劳永逸的未来。同时,我们每个人都需要保持终生学习的态度,否则,学历所代表的知识体系会迅速过时。

第二,AI带来生产能力提升,并不是一件坏事,有些社会商品和服务将会变得廉价——我们的生活质量会变得更好,另一些将变得昂贵——我们人类可以提供这类服务赚钱。

“极度廉价”的(可标准化的)商品和服务:

  • 所有数字产品: 软件、游戏、订阅服务、AI算力。
  • 标准化的实体商品: 基础食物、衣物、家电、交通工具。
  • 标准化的服务: 基础的法律咨询、财务记账、翻译、代码编写(这些将被AI接管)。

“极度昂贵”的(稀缺的)产品和服务:

  • 人类的、个性化的服务: 顶级的医生、创意总监、心理咨询师、手工匠人、贴心的护理服务。
  • 稀缺的位置和体验: 核心城市的房产、独特的旅行体验、现场的艺术表演(音乐会、体育比赛)。
  • 人与人之间的真实连接: 情感、信任、社群归属感。

第三、个体如何发展?人类个体要考虑与AI进行差异化竞争发展。我们和AI比效率完全不再有优势——就像人类跑步和汽车比速度、人类打算盘算数和计算器比速度,相反,我们也许做一些想象创造力的事情,或者做一些可见的将来机器和AI还做不了的事情——参考上面提到的“极度昂贵”的(稀缺的)产品和服务,只做一个会考试的应试者没有用处——文凭用处没有过去那么大了。

此外,我个人还认为,美国大厂这股裁员风会很快刮到我们这里来,这种事情不以个人的意志而受到阻碍。

为什么可以利用CAGR预测分析比特币未来10年价格?

昨天分享了利用CAGR预测分析比特币未来10年价格,没想到网友们异常关注,我本意不过是自己的兴趣研究记录而已,有些内容我甚至都没有来得及细说,因为我自己已经非常清楚。既然网友们如此关注这个话题,有必要再次说明解释一些内容。

首先声明:过去不代表未来,上一篇文章和本文都不过是兴趣研究而已。历史经验教训表明,没有深入了解的朋友请勿轻易涉足比特币,我见到玩BTC亏钱的朋友多于赚钱的朋友,认知和动手能力不够的朋友很难驾驭BTC。赚钱的事情从来都不简单,每个人都会为自己的认知买单!

CAGR

先来说说BTC的历史CAGR,从历史数据来看(见上图,网址:https://charts.bitbo.io/cagr/):

  • 4年期的CAGR历史最低值发生在2025年4月13日,年化7.1%,其它日期的4年CAGR值都基本上稳定在30%以上。
  • 10年期的CAGR历史最低值发生在2023年11月19日,年化42%,其它日期的10年CAGR值都基本上稳定在50%以上。

那有没有负的CAGR?确实发生过,5年期的CAGR历史最低值发生在2022年12月16日,年化-2.9%,显然这是最不利的熊市,但只发生了几天就回正了。其它日期的5年CAGR值都基本上稳定在50%以上。

综合这些不同时间窗口的CAGR历史数据,我在上一篇文章结合其他人的观点,使用了30%、40%、50%的CAGR值来预测,是有一定根据的。

但还是那句话,历史不代表未来。未来的话,常识上来讲BTC的体量如此之大,它不同时间窗口的CAGR值可能会降低,但即使按Power Law的规律降到17%,10年也能增长4.8倍。17%的CAGR复合年化收益率,比肩放高利贷的收益。国家规定4倍LPR的年化利率就是高利贷,2023年7月20日贷款市场报价利率1年期LPR为3.55%,4倍LPR也不过14.2%。如今上哪里能找到比放高利贷还好的生意?

Power-law

为什么要用CAGR来衡量BTC的收益?我们都知道,BTC短期内价格波动巨大——尽管近年来波动百分比幅度大大降低了,但长期来讲它几乎就是稳步上升,因此,用一个相对长的时间窗口来计算它的CAGR,这样就能跨越牛熊,衡量它长期投资的收益率。我们往往夸大短期收益的幻觉,而忽视了长期复利的魔力。与时间做朋友,慢慢变富才是王道。

那为什么有相对足够的理由相信BTC还能上涨?从供需面来定性分析,需求端来说,BTC目前的普及率其实并不高,哪怕是美国人,也不过是14%左右,东大国人的普及率你们自己可以感受,只怕更低,随着时间推移,认可BTC共识的人应该会越来越多。供给侧来看,BTC的总量就是2100万,实际上可供交易的量连同未开采出来的量,也估计只有几百万个而已。

而全世界所有的国家的法币供给量每天都在增加,法币贬值时时在发生,只不过好的国家贬值得慢一些。说句大白话,假如你手中有印钞机,怎么会忍得住不印钞稀释别人的财富和自己的债务呢?

最后一个事情,BTC的持有者,从10多年前的极客到后来的散户,再到接下来的科创企业,再到近些年的机构投行,再到最近世界最大的强国美帝主权国家战略比特币储备,特朗普总统亲自下场,再加上BTC的ETF美元稳定币增加流动性且方便资金入场,以及相应的监管立法确保这些利好政策,BTC的基本面发生了一些重大的变化,参与者变了。BTW,并不是BTC需要美国,而是美国需要BTC。

我们可以看一下巴菲特公司的股票,为什么要定价一股500多万?他有意不让财富量级不够的人拥有,所以他的股票价格稳步增长,换手率超低,因为持有者被选择性地限定为超级富豪。

BTC这些年来的野蛮生长,具有反脆弱性,它的生命力异常强大,即使你认为它是一个郁金香泡沫,它的基本盘的共识也足够强,足够支撑这些泡沫——何况这点泡沫目前还不算什么,数字黄金BTC离实物黄金的市值20万亿美元还差得远。

诚然,任何投资早期回报大,但是风险也大,后期回报率低,但风险性小。BTC也不例外,早些年谁能料到它的生命力如此之强,担心它会失败,因此风险高收益也高,BTC未来的收益可能相对会低一些,但风险也相对低多了。换句话说,在我们可见的将来,BTC成功的概率远远大于它失败的概率——我这里依然采用了概率的思维,没有百分百的事情。

无独有偶,15年前的昨天,BTC的创始人(或团队)中本聪同学说了下面这句话:

“If you don’t believe me or don’t get it, I don’t have time to try to convince you, sorry.”

我认同这个理,也是这么做的。本人无意向大家普及BTC,更没有教大家赚钱的本领。以上胡言乱语,请勿当真!

本文发布时,BTC的价格约为116000美元。

利用CAGR预测分析比特币未来10年价格

bitbo-cagr

历史背景参考

10多年前,我分析过比特币的极限价格,目前来看,当年的预测还是有一定准确度。根据 charts.bitbo.io 提供的图表显示,比特币在过去多个 10 年周期中的实际 CAGR 表现优异,历史上任何一个10年的 CAGR 从未低于42%,在所有主流资产类别中长期表现最强,我们可以根据 CAGR 对比特币未来的价格进行预测分析。

未来 10 年(2025–2035)的 CAGR 预测情境

  1. 基准情境 – 约 40% CAGR
    ARK Invest(方舟投资)预测比特币到 2030 年的 CAGR 约为 40%,基于全球采用率与网络活跃度。若保持此增长率到 2035 年,其增长倍数为:(1 + 0.40)^10 ≈ 28 倍,假设当前比特币价格为 $118,000,则到 2035 年价格约为 $3,300,000。
  2. 保守情境 – 约 30% CAGR
    与 MicroStrategy 创始人 Michael Saylor 提出的长期年化 30% 增长率一致。10 年后增长倍数为:(1 + 0.30)^10 ≈ 13.79 倍,即比特币未来可能达到 $1,300,000 左右。
  3. 激进情境 – 超过 50% CAGR
    ARK 等机构的乐观模型中,预计比特币可能达到 50% CAGR。对应增长倍数为:(1 + 0.50)^10 ≈ 57 倍,即到 2035 年,可能达到 $6,700,000。

总结表格

情境 假设年复合增长率 2035 年预计价格 说明
基准情境 ~40% $3,300,000 方舟投资的基础预测
保守情境 ~30% $1,300,000 Michael Saylor 的观点
激进情境 ~50% $6,700,000 极度乐观假设(高 adoption + ETF)

为什么 CAGR 可能改变?

  • 网络效应加强:如闪电网络、稳定币、Token 化资产 RWA 的推动。
  • 制度性资金进入:ETF、退休金配置、主权国家战略比特币储备等将增加市场需求。
  • 稀缺性驱动:比特币供应固定,长期内稀缺资产优势显现。

风险与注意事项

  • 比特币历史上曾出现多次 80% 以上的价格回撤。
  • 这些预测是基于理想状态的长期增长,现实可能出现波动。
  • 全球监管、宏观变化、竞争币种等都可能带来干扰。

总结一句话

如果比特币的价格未来能保持年复合增长 30–40%,到 2035 年价格可能在 $1,300,000–$3,300,000 之间。若维持 50% CAGR,则有望达到 $6M+ 的价格。

之前也分享过类似的预测:10万美元的比特币价格不会在2021年之前达到,但不会迟于2028年,从此之后,比特币的价格不会再低于10万美元。100万美元的比特币价格不会在2028年之前实现,但不会迟于2037年。2037年以后,比特币的价格不会再低于100万美元。

知识百科:

CAGR(复合年增长率,也称复合年化收益率,Compound Annual Growth Rate)的计算公式如下:

cagr

其中:

  • 期末的价值:例如最后一年价格
  • 期初的价值:例如最初一年价格
  • 年数:时间长度(单位为“年”)

CAGR的含义:表示这笔投资如果每年以相同的百分比增长,比如10年后刚好从 $300 增长到 $30,000,那这个百分比是多少。它平滑了年度波动,适合做长期比较。

声明:本文由ChatGPT的人工智能和作者的人类智能共同完成,不构成投资建议,纯属兴趣研究。

本文发布时,BTC的价格约为117800美元。

谈谈加密稳定币和它的投资机会

stablecoin

加密货币中的稳定币这个概念其实很久了,USDT诞生于2014,超过10年了。只不过现在美国政府和香港政府极力拥抱它,大众便开始热议起它来了。

如果你曾经使用过USDT和USDC(前者相对不受监管,后者受美国政府监管),会发现它确实提高了支付效率——使用者不需要银行账号,没有中间商,只要有网络就行。降低了成本——费用极低,哪怕一笔几十亿的转账,它的gas费用(可理解为转账费)只需要几毛钱或者几块钱即可,要是不上公链的话,甚至都不需要费用(可理解为同一银行系统内部转账)。降本增效的东西怎么会没有市场?

目前,一些不方便使用美元支付的公司和个人在使用稳定币,比如灰产、黑产行业,据说好些做外贸的人就在使用USDT。还有众多不发达国家,它们有很多没有银行账户的人,直接使用稳定币,此外那些法定货币汇率贬值严峻的国家民众,也愿意使用USDT。即使这些使用群体,它的体量也已经巨大,流动性更是已经比肩Visa和Mastercard的支付量了。

如今美国政府如果立法支持稳定币,它的可靠性就更为可靠了,扫清了政策障碍,各大银行大机构都会跟进,毫无疑问它会更大程度上扩大稳定币的使用场景和人群,整个稳定币的体量也会变得更大。

这对美国有什么好处?按照稳定币的法律要求,每发行一枚稳定币,它的底层要求发行方都要有等量或超量的美元储备,这些储备一般会购买美国国债产生收益,这样来讲相当于美元的使用范围进一步扩大,美元的发行体量也进一步增大,说得夸张一点,也就相当于可以凭空印出更多的美元,稳定币变成了美元的法定的影子货币。无利不起早,从这个意义上来讲,美国政府支持拥抱稳定币有利于巩固美元的地位,而不是削弱。

对于加密货币来讲,一美元稳定币就是一美元法定货币,本身和法定美元没有任何区别,只是它不依赖于银行、以相对去中心化的方式流通、支付、和储藏价值(对于那些货币贬值厉害的国家而言),稳定币实际上拓宽和方便法币进入加密货币行业,因此对于比特币来讲,它存在潜在利好,长期来讲是让更多的法币进入到加密行业,这样有利于比特币的价格上涨

对于普通用户来讲,稳定币可以作为一个更好的支付工具。真正提升了效率降低了成本好的东西,不需要你发红头文件去推广,它自然而然就会得到用户的支持和使用。

那么,其它国家发行自己国家相应的稳定币行不行?我认为没有太大的戏。稳定币的底层逻辑还是它相应国家的法定货币,相应国家的法定货如果不强,你发行相应的稳定币也不会有太多人使用。

对我们普通用户来讲,关注稳定币本身可能并没有太多的套利空间,因为它的币值跟法定货币一一对应。但是作为一个既新又不新的东西,美国政府如此重视它,它肯定是值得研究的。我们怎么从中发现投资机会呢?投资讲究的是趋势,你发现了这个趋势,可以看与它相关的哪些东西可以挖掘出价值?发现了金矿,未必要挖金矿。为了避免麻烦,这个问题就留给朋友们自己思考吧。

BTW 本文发布时,BTC的价格约为109000美元。

香港交易所HashKey的核心竞争力是什么?

HashKey

香港的加密货币交易所HashKey近日被媒体报道,揭露其运营困境,甚至被批得一无是处:暴跌、裁员、现金流告急:HashKey陷入风暴中心……对此我个人并不完全认同,凡事存在必有其合理性,我在之前的文章中也分享过。我身边就有朋友在使用HashKey,反馈体验其实还不错,不信你可以注册一个账户试试(HashKey注册链接)。

香港的独特优势在于背靠大陆,最大的市场潜力正是来自内地。虽然目前由于众所周知的原因无法向大陆用户开放,但这并不意味着市场需求就此消失。事实上,当前法币(尤其是人民币)与比特币之类的加密货币之间存在着难以逾越的鸿沟——看看那些基于人民币的OTC加密货币交易,动辄遭遇冻卡,甚至涉及违法犯罪。而通过香港合规交易所如HashKey,则可能打造出连接法币与加密货币的安全通道,毕竟人民币在大陆与香港之间的流通相对畅通。

目前已有少数人开始利用香港的加密服务为内地用户提供支持,实现加密货币与人民币之间的双向兑换。通过港币或美元进行合规跨境汇款,或以其他方式实现资金进出内地,这个需求不仅真实存在,而且规模巨大。一部分人如我前面所说已直接使用香港服务,还有更多人则通过香港的代理渠道实现这一目的。

聪明的你可能已经想到:如果你拥有香港身份或HashKey交易权限,完全可以将其作为套利管道,帮助无法使用香港交易所的内地用户间接实现法币与加密货币的流动,特别是人民币与加密货币的交易。虽然目前HashKey对这一需求的开发还处于初级阶段(比如胜利证券就是利用HashKey作为底层来实现加密资产交易),但我相信随着时间推移,这块市场潜力会逐渐被发掘和利用。

乐观来看,若未来内地有条件放开香港交易所服务,带来的市场规模将不可估量。此外,随着香港合规稳定币的发展,或许能通过这一桥梁间接连接内地与加密货币市场。到那时,香港交易所将发挥出更大的枢纽作用。

说到底,HashKey虽然香港本土用户有限,境外其它国家用户也缺乏使用动机,但其真正的未来在于服务内地用户的刚需。即便当前真的面临困境(目前的报道有可能是竞争对手抹黑),HashKey仍有其存在价值。若能渡过眼前难关,充分发挥自身优势,完全有可能迎来柳暗花明的新局面。

我如何将资金从新加坡转到香港?反之亦然

因为偶尔会有一点新加坡的小收入——小到只能解决吃饭而已,我需要将它转到香港的银行账户里,这怎么办?

以前我用新加坡银行的电汇功能(其实就是国际汇款),这个办法最为传统,但速度要几天,关键是手续费不便宜,综合费率都是1%以上。

后来,我用了Wise的汇款功能,这个速度很快,但是有一定的手续费,虽然没有传统银行那么贵。

最近几个月,我一直在使用一个更好的办法,利用长桥券商的服务:资金划转(跨券商资金划转)。直接将资金通过资金划转,在香港和新加坡两地之间移动,只要开通两边的券商账户并授权即可——在同一个长桥APP里,使用它划转资金完全免费。速度方面,一般隔一个工作日就能到账。

券商自己还提供换汇功能,比如新加坡元可以兑成美元或者港元,反之亦然。如果资金闲置的话,长桥还有余额通理财功能,其实就是货币基金,美元产品的收益率目前年化是4%以上,好过香港银行的存款利率。

估计长桥没有想到我对它们产品是这么利用的,这也说明不同地点之间的资金流动便利性是多么重要,而我们的传统金融服务跟上这个时代了吗?

其实长桥券商还有更多的功能,只是一般人不知道而已,比如下图,这些便利就等着朋友们自己去开发了。

长桥证券

需要注册长桥开户(开户入金教程)的朋友,长桥官方给土木坛子博客读者配置了一个渠道专属注册优惠,推荐码是:783XQW,专门的注册开户网页链接:

香港长桥:https://app.longbridgehk.com/ac/oa?account_channel=lb&channel=HB100006&invite-code=783XQW

新加坡长桥(可买数字加密货币ETF):https://activity.lbmkt.ing/pages/longbridge/7415/index.html?appid=longbridge&orgid=1&account_channel=lb&lang=zh-CN&channel=HB100006&invite-code=783XQW

渠道专属活动,注册后(注册时填写土木坛子渠道邀请码:783XQW)通常每个月都有丰厚福利奖励(长桥新加坡账号入资对应等值新币,奖励相应免佣等福利)。

PS 你如果实在还有疑问(包括但不限于境外银行开户、券商账户开户等),可扫描二维码添加我的微信号( tumuhk ),请注明“美股”,我尽力解答你的相关问题。

土木坛子

香港加密资产交易所的现状与未来

HashKey

这两年关注香港金融比较多,比如HashKey长桥证券。我其实是HashKey的推荐大使,但数据表明通过我的推荐链接注册的人数不多,通过验证使用的几乎没有,比起通过我的长桥注册链接的朋友数量,HashKey似乎存在感不强。

其实,香港的另一家加密资产交易所OSL一直让我去实名验证,发了数不清次数的邮件催促我,但我根本不愿意去体验(它比HashKey规模小)……

难道我的感觉是错觉?香港的加密资产交易市场现状是不是真的不行?这是为什么?

HashKey作为香港最大的合规加密货币交易所——一些香港证券公司甚至套壳使用它来交易加密资产,它每天的交易量非常小,通常BTC/USD交易对一天只有几百个BTC,香港的本位法币BTC/HKD交易对就更小了,一天甚至只有个位数的BTC交易量,多的时候也不过两位数。

比起Binance动辄上万个BTC的交易量,HashKey的交易深度完全不值一提,而事实上HashKey的交易体验非常好,完全支持法币的出入金,交易费用也不高,和Binance并无区别。

另一方面,香港的现货加密ETF资产交易量也不大,流动性较差,比起美国的也是不值一提,哪怕香港的ETH现货ETF已经实现质押收益(美国目前还没有实现)。

为什么没多少人去使用HashKey?其实原因不复杂。

香港本岛人口基数并不大,因此光靠香港本地人,用户数量自然不大,而且不少有钱的、年轻的香港人似乎去了其它国家。香港周边的东南亚国家,人家完全可以使用欧美的交易所,或者Binance之类的交易所。欧美用户正常情况下有大把的加密货币交易所,为什么要来香港交易?除非为了避税。

更为关键的是,数量最为庞大也是最有需求的内地大陆人,鉴于目前的合规要求,不得使用香港的加密资产相关服务,包括HashKey和加密货币ETF交易。

虽然HashKey目前的交易量很小,但不排除它在未来有很大的潜力。

首先,香港本身作为曾经的世界金融中心,如今极力拥抱加密资产,非常需要它来激活经济活力,推动香港发展为全球虚拟资产中心。而香港也能作为内地的一块试验田,在未来完成内地的一些想法,毕竟美国都把比特币作为国家战略储备了,其它国家不可能忽视它。

此外,还是有一些人群有着不可告人的目的,需要使用香港的加密交易服务,比如,我们的确看到香港有些人背着成袋的资金去香港的找换店交易,也发现交易所的USDT/USD交易对远大于其它交易对。

未来到底会怎么样?我们未来再来回看。

香港金融业玄机

又到年末,回首今年写的博客日志文章,目前只有45篇,比2023年的50篇又少了5篇,精准的数字表明我似乎有一种越来越不想说话的感觉。

回顾了一下今年的关注点,基本上是研究境外银行券商、U卡、加密货币ETF跨境汇款这些事情,帮朋友们研究那些搞钱的管道和工具。

我才发现有太多的人不知道这些信息差,更感慨太多普通人的学习能力、动手能力在走出学校后日渐下降,年龄越大越明显。中年的我不想这样子,适当折腾吧。

折腾过程中也发现一些很有意思的事情:香港银行、证券行业对中国大陆内地用户的依赖越来越强。

从目前香港银行几乎全面开放对中国内地用户开户的现象就可以看出,他们太需要内地用户去成为他们的客户了,这放在几年前简直不敢想象,那时他们也许有太多香港本地用户和国外用户,根本不屑得正眼看一下内地用户。真是此一时彼一时。

而香港证券业就更有意思了。一方面,香港证券商不允许内地新用户开户,另一方面,它允许某一时间点之前的存量用户开户,比如,你之前开过香港A券商的户,拿着开户证明可以新开香港B券商的账户。

这背后的原因我猜是来自内地监管的需要,大家都去玩港美股了,谁来“投资”内地股市?但又不能彻底把门关死,所以允许已经在境外券商开户的用户开新的香港券商账户,反正这一部分用户已经出去了。

但是,玄机出现了。

在开新的香港券商账户时,它所谓的存量用户证明不过是一个图片文件……连PDF(PDF可防伪)的要求都没有。重点来了,一张图片如何证明是真伪呢?聪明的人你一定想到了,不过是一张图片吗?懂的都懂了。

淘宝网上甚至有人利用这个特点来提供“包过”的服务,真是善于发现商机,而这所谓的“包过”难道不一种智商税?可也有不少人去花钱买……

难道券商和监管方不知道要求一张图片的证明太过儿戏?不是的,你能想到的他们也一定能想到。我猜它就是要来这么一个认认真真走过场的游戏。明面上的要求还是要有的,这是一种管理艺术,既不让太多的人来,又给有需要的人留一道口子……

何况,真要搞那么严,大家都去纯境外的券商(非香港券商)去注册新账户了,那资金岂不是连香港都待不住了?反而更不利于监管。

至此,这实际操作的过程是不是一种特色?着实有点意思。而这种信息差,懂的人心知肚明,谁也不说。

HashKey

而像HashKey这种香港头号持牌(交易量最大)加密货币交易所(像胜利证券和众安银行都是套个壳使用HashKey的底层服务),要求就明显严了,由于受有关方面的要求,中国内地用户不允许在香港开户从事所有加密相关的投资活动(ETF也不行)。

HashKey严格不允许内地用户注册(连内地网络IP都不能使用它的服务),除非你拥有香港的身份,或者海外其它地方的居留许可和地址证明(即留学生和海外工作、移民的人士),看得出来它对合规严格得多。

因此好些朋友问我如何在HashKey开户,这个确实很难绕过。就像上面所说,只有拥有香港身份ID(恭喜那些拥有香港优才卡等人才计划的朋友)或海外其它地方的居留许可和地址证明(即留学生和海外工作、移民的人士)的朋友才允许,因而HashKey账户的含金量要高得多,稀缺的资源才珍贵。

满足条件的朋友可以好好利用这个资源,我就不多说了,欢迎使用我的推荐注册地址(我是HashKey的推广大使Ambassador,推荐码:8OZ6lc):

https://www.hashkey.com/en-US/register/invite?invite_code=8OZ6lc

注册激活后有多达300个的HSK代币奖励(目前价格约为2美元一个)。

总体而言,目前的香港对于中国内地朋友来说是一个很特殊的离岸金融城市,值得好好研究利用。这就是我这一年来的一点感想。

最后,因为众所周知的原因,你如果实在还有疑问(包括但不限于境外银行开户、券商账户开户等),可扫描二维码添加我的微信号( tumuhk ),请注明“美股”,我尽力解答你的相关问题。

土木坛子

值此圣诞元旦佳节之季,祝朋友们收获智慧与财富。

最新境外银行和券商开户的坏消息与好消息

当上帝关上一扇门的同时,也会打开一扇窗。

出于某些众所周知的原因,那篇关于境外长桥券商开户教程的微信公众号文章被要求删除了。

此外,OCBC关闭了中国大陆用户开户的通道,堵住了往新加坡券商出入金的口子,因为像新加坡长桥这类券商和香港不一样的地方是可以投资购买加密ETF资产这是一般的普通人能接触加密资产最方便最便捷的途径

与此对应,香港汇丰倒是为了抢这波潜在客户,汇丰香港支持大陆身份在内地在线开户了!汇丰APP在线申请即可,在通过后的90天内前往香港境内,通过汇丰APP在线激活即可,无需去线下支行网点了。但是激活必须人在香港,因为需要出入境记录。总体来说比之前方便多了,可以不必再跑网点排队预约。还没开通香港银行卡的朋友可以提上日程了。

与此配套,还有一个非常大的好消息可以分享给大家。长桥证券现在支持香港账户和新加坡账户之间互转资金(免手续费)。意味着长桥香港账户里的资金可以划转到新加坡长桥账户里——反之亦然,这样就解决了没有新加坡银行卡也能完成资金出入新加坡长桥账户的问题,也就解决了借助新加坡长桥账户投资加密ETF的难题。

土木坛子

具体操作非常简单,直接在长桥的APP里申请授权(见上图),等待审核通过即可完成,一个APP里申请两个账户系统,资金互相划转,利用不同的政策实现不同的投资行为。

好在目前去香港办理银行账户非常方便,有了香港银行账号后,再申请长桥香港和新加坡两地的证券账号即可。先办理拥有这些管道再说,免得将来政策变化生变。

长桥官方给土木坛子博客读者配置了一个渠道专属注册优惠,推荐码是:783XQW,专门的注册开户网页链接:

香港长桥:https://app.longbridgehk.com/ac/oa?account_channel=lb&channel=HB100006&invite-code=783XQW

新加坡长桥(可买数字加密货币ETF):https://activity.lbmkt.ing/pages/longbridge/7415/index.html?appid=longbridge&orgid=1&account_channel=lb&lang=zh-CN&channel=HB100006&invite-code=783XQW

渠道专属活动,注册后(注册时填写土木坛子渠道邀请码:783XQW)通常每个月都有丰厚福利奖励(长桥新加坡账号入资对应等值新币,奖励相应免佣等福利)。

因为众所周知的原因,你如果实在还有疑问(包括但不限于境外银行开户、券商账户开户等),可扫描二维码添加我的微信号( tumuhk ),请注明“美股”,我尽力解答你的相关问题。

土木坛子

最后插播一个小福利,能用的U卡不多了,VCard目前一切正常,博主提供福利一枚:VCard黑五圣诞狂欢盛大来袭!半价开卡尽享超值优惠!本次活动将为土木坛子的读者提供10个VCard半价开卡名额,让更多粉丝能够以超值价格拥有专属VCard,享受购物狂欢!

  • 活动时间:2024年11月11日 – 2024年12月25日
  • 参与方式:读者加微信( tumuhk ),注明需要VCard福利,先到先得,每人限一次机会。

VCard注册安装推荐链接(邀请码110316):https://webapp.51vcard.com/#InviteRegisterPage?inviteCode=110316

新的阶级依据

Ai 的普及将会诞生更多不求甚解的普信男。
古典的百科全书式人类不会被赛博囚禁。

推论:
新阶级的划分依据是,是否具备物理世界生活常识。

香港汇丰银行借记卡申请试用经验

HSBC HK Debit Card
之前分享过中国银行香港万事达借记卡(扣账卡),没想到很多朋友对这类信息很感兴趣。这次分享一下与之对应的汇丰银行香港万事达借记卡。

我申请中银借记卡时,顺手就在香港汇丰银行APP里申请了它的万事达借记卡。几天时间后的周末收到了通过EMS邮寄过来的实体卡,一顿操作就绑定到了我的微信和支付宝上。使用下来,我觉得它和中银的卡有所区别。以下是汇丰香港官网对此卡的简单优点介绍:

  • 轻松使用全球主要货币:一卡在手,即可用12种主要货币消费及提取现金。我们会从您的汇丰综合理财账户中相应的货币账户直接扣款。12种货币包括港元、美元、英镑、日元、人民币、欧元、泰铢、澳元、新西兰元、新加坡元、加拿大元及瑞士法郎。其他货币的消费,则根据现行汇率以港元结算。
  • 所有消费免收手续费:无论您是在商店还是网上购物,我们都不会向您收取任何本地或海外交易费用。
  • 全球各地免费提款:在全球汇丰自动柜员机提取现金,手续费全免。
  • 签账可享现金回赠:所有合资格签账免收外币交易费,更可享0.4%现金回赠。
  • 为挚爱申请附属借记卡:与至亲一同享受一卡多币及零手续费的便利。

可以看出,汇丰和中银这家银行相同的是都是万事达借记卡,都是和各自储蓄账户关联,透过万事达网络可以在境内消费和提现人民币,免收外币交易费、不占国人外汇额度。这里主要说一下它们之间的差异。

汇丰申请后很快邮寄实体卡(APP中也可以查看到卡号信息),中银在APP中第一时间申请到了虚拟卡的账号,与虚拟卡信息一致的中银实体借记卡邮寄速度没有汇丰快。收到汇丰实体卡后,直接在APP上激活,然后拨打APP上的电话设置卡密码。

汇丰的借记卡也有消费现金返现,力度是千分之四,和中银是千分之五区别不大。汇丰的港币与人民币汇率和中银几乎一致,和市场中间价几乎持平。

实际使用中,汇丰借记卡在境内使用有一个巨大“BUG”。汇丰采用了欧洲银行通行的安全验证方法,它在支付的时候偶尔会使用网页启动APP二次确认,但此网页需要科学上网手段才能访问,一般情况下内地会因连不上网页导致支付失败。

相比之下,中银借记卡没有采用上述验证手段,因此不会遇到这种因特殊国情导致的问题,也许这就是中资银行的产品和服务更符合国情一些?

但汇丰有一个“致命”好处,它的借记卡可以在全球汇丰ATM柜员机上免费提取现金,真的像一台提款机。中银的借记卡也可以提现,但每次有50元手续费。

此外,两家银行的借记卡都支持申请附属卡,但汇丰只支持附属卡主使用护照作为身份证件,中银则除了护照之外,还可以使用身份证和港澳通行证的组合来申请附属卡。

总体而言,我觉得如果你拥有上述两家银行的香港账户,趁现在开放时机两家的万事达借记卡都去申请,卡的有效期长达10年,且不要年费。拿汇丰的借记卡在境内提现,中银的借记卡国内日常小额支付,组合起来更好用。

中国银行香港扣账卡申请试用经验

中国银行香港万事达卡扣账卡

由于某些原因,我的中国银行香港银行卡里有一点港币,之前是直接通过中银快汇汇到内地的中国银行账户后换成人民币在国内使用。

最近直接在中国银行香港APP里申请了它的万事达扣账卡(支持附属卡),操作路径:APP里“选单”、“账户”、“申请扣账卡”,简单操作后,两个工作日就获批准通过,直接获得虚拟卡的账号、CVV码和有效日期,之后还可申请邮寄实体卡。

中银香港的扣账卡其实就是借记卡Debit Card,因此很好申请——相比之下信用卡难以申请通过,但它由于是和信用卡一样的16位万事达卡号,相当于是没有额度直接使用银行账户余额的准信用卡(但不是信用卡),所以可以很方便地绑定内地微信支付、支付宝、苹果支付、Google支付后在内地消费使用。

绑定后在国内消费人民币很方便,速度很快,有即时短信和邮件提醒,汇率算下来和市场上的汇率几乎一致,直接在账户余额中扣除,并且还有0.5%的消费现金奖励,虽然不多,但好过没有。

和其它境外信用卡、借记卡相比,中银香港的扣账卡除了汇率公平、无年费、消费不占外汇额度外,最大的好处是没有任何额外的汇率转换费之类的费用,像香港众安VISA卡、新加坡OCBC的VISA卡、英国运通信用卡都明确有1.95-2.95%不等的外币转换费。

唯一的美中不足,每次微信、支付宝消费额度超过200元时,需要支付3%的手续费,200以内的小额消费免手续费。中银香港扣账卡默认每天消费额度是50000等值港币,取现额度30000等值港币——但在内地取现每次有50元手续费,额度支持自行APP修改。

香港汇丰银行也支持万事达借记卡实体卡申请(无虚拟卡),在全球汇丰银行提取现金不需要手续费,我还没有申请,有兴趣的朋友也可以申请试用。

和我需要在境内消费外币相反,有些朋友需要绑定境外一些支付场景——比如OpenAI之类的每月订阅服务费,当国内信用卡不被支持时,中银香港借记卡无疑是个不错的选择。

我的建议是趁现在开放申请,先申请为快吧,免得未来说不定就关上大门不让申请了。

跨境汇款神器:熊猫速汇

上次介绍跨境汇款服务Wise后,不少国内朋友向我反馈,国内用户无法通过Wise汇出人民币……由于我是用UK信息注册,所以没有遇到这个政策问题。

对于这种特殊情况,国内朋友完全可以使用熊猫速汇(支付宝、微信的国际汇款合作商之一),专门解决人民币汇出中国大陆和其它货币汇入中国大陆的难题

注册大陆地区熊猫速汇一般都是送10元汇全球手续费折扣券,熊猫速汇给通过土木坛子链接注册的朋友一些额外优惠:

  • 人民币汇出“随机派发10-30人民币手续费优惠券,限时:首笔汇款日本或新加坡的客户,由土木坛子联系渠道部的工作人员领取30元人民币优惠券”;
  • 港币回国“首笔免手续费,支付宝汇率提升券,内部会员汇率提升券(限时无次数),限时免手续费活动,8.88现金红包”;
  • 新币回国“首次免除手续费,支付宝、微信汇率提升券,不限时内部会员免除手续费,每个月不定期派发汇率提升券,8.88现金红包”;
  • 英镑/欧元回国“首笔免手续费,闪付收费4‰,老用户8‰,支付宝汇率提升券、微信汇率提升券”。

人民币汇出为什么有安全合规的保障?

熊猫速汇“Panda Remit”是一家专注于提供快速、安全和便捷的国际汇款解决方案的跨境汇款服务提供商。他们致力于为个人和企业客户提供高效、透明和经济实惠的跨境支付服务,以助用户轻松完成国际汇款。该服务支持资金出国和回国,操作简单,费用透明,具有诸多优势。

熊猫速汇是通过与天津金城银行合作来实现汇款,天津金城银行股份有限公司成立于2015年4月,是银保监会批准成立的全国首批五家民营银行之一。金城速汇产品(汇出中国服务),汇款人信息均由金城银行依法合规采集,且由金城银行提供中国境内全部相关汇出汇款服务,熊猫速汇仅向金城银行提供境外收款人清分服务及向境外收款人提供汇兑服务。

当前熊猫速汇人民币汇出服务汇款单笔限额最低为人民币100元,最高为人民币49000元;根据熊猫速汇合作银行规定与授权,给予每人每年最高30万元人民币汇款额度。

中国大陆人民币资金汇往国外熊猫速汇优惠注册

中国大陆人民币资金汇往国外熊猫速汇优惠注册链接,或者直接扫描上方二维码。

注意,一个内地手机号码可以同时注册:大陆、香港、新加坡等其他各个地区熊猫速汇的账户。比如:你可以使用同一个手机APP切换不同的地区登录,然后可以使用大陆账号从大陆汇款到新加坡、香港、英国,也可以使用香港账号汇款到大陆、新加坡、日本,或者使用新加坡账号汇款到澳洲、美国,随心所欲、一个账户汇往全球。

境外资金汇往中国大陆熊猫速汇优惠注册

境外资金汇往中国大陆熊猫速汇优惠注册链接,或者直接扫描上方二维码。

注册流程:

  1. 注册账户:使用邀请链接注册,享受优惠。
  2. 实名认证:使用正确证件进行认证。
  3. 添加收款信息:填写收款人详细信息。
  4. 确认汇款:提交申请并完成付款。
  5. 确认到账:通常一个小时内到账。

熊猫速汇优点

  • 低成本:手续费仅为80元人民币,相较传统银行可大幅节省。
  • 快速到账:通常一小时内到账,效率高。
  • 无外汇额度占用:人民币汇款不占用外汇额度,但每人每年最高不超过30万人民币
  • 优惠汇率:提供优惠汇率。
  • 操作简单:注册到汇款流程简单,支持在线实名认证。
  • 安全保证:持有金融牌照并接受监管,确保资金安全。
  • 汇款全球:支持40多个国家/地区的汇款,包括iFast英国、OCBC新加坡、Wise等。
  • 费用透明:费用清晰可见。
  • 无需换汇:可直接付款人民币,避免限额问题。

熊猫速汇缺点

  • 非同名汇款,但合法资金来源并提供汇款证明即可。
  • 不同地区汇款需单独实名,实名证件要求不同。
  • 不提供个人IBAN,到账显示的非个人名称,不适合像OCBC的首次同名入金验证需求。

欢迎大家扫码下面二维码加入微信群共同交流汇款经验、技巧和问题(或者添加微信tumuhk,请注明“熊猫”),并领取熊猫速汇给通过我的优惠注册链接不定时发布的内部福利(熊猫速汇工作人员也在群内)。
熊猫速汇内部汇款福利群

如何把钱从新加坡转到香港?Wise使用体验

money

以前我在英国和欧洲时,都是直接到银行操作海外跨境汇款,直到最近几年见JUSTYY博主给我汇款时使用Wise,但我没有这个需求,所以注册了这个Wise账号后也没有亲自试验。

关于Wise

Wise的前身是一家2011年成立的英国金融科技公司,前称TransferWise,是伦敦金融监管局授权的电子货币机构,是伦敦证券交易所上市公司,为全球大多数国家提供国际汇款服务。
Wise提供服务包括国际汇款、借记卡、Wise账户等,中国商户和个人可使用国际汇款和Wise账户汇款、换汇等,外汇可以以极低的汇损提现到国内银联卡和支付宝,或者汇款到国外。中国大陆账户不支持实体卡。

最近因为我想把我新加坡OCBC银行(想开户的朋友参考新加坡OCBC华侨银行线上开户完全指南)上面的一些资金汇到香港的银行账户(想开户的朋友参考香港银行开户经验),然后再通过中银香港和内地之间的免费汇款服务汇到内地,于是体验了一下Wise的国际汇款服务。

作为体验,我尝试汇款3200新加坡元SGD到香港并变成港币HKD,Wise的汇率是1 SGD=5.9604 HKD,扣除Wise的整体汇款费是10.12 SGD(60元左右)后,香港的银行收到了19013.09 HKD。

而如果我直接通过OCBC银行的国际汇款服务,手续费每笔35美元等值,邮费每笔17美元等值,电报费每笔35美元等值,加起至少八九十美元了,因此平均无论是汇率还是手续费,我感觉Wise都不错,Wise的手续费率才千分之三左右。

速度方面,Wise几乎是秒到账,这比银行的跨境国际汇款到账速度快多了——我上次通过国内的工商银行汇款到OCBC也花了几个小时才到账(手续费80元左右),Wise在到账速度方面几乎无可挑剔。

不试不知道,一试吓一跳,原来Wise的服务如此好用。这其实就是专业化,Wise是专门做转账汇兑跨境汇款服务的公司,比起银行自身的国际汇款服务,自然要强得多,就像国内的支付宝做支付,在日常生活中其实已经干翻了各银行的银联支付。

Wise虽是第三方公司,但它也有正规的金融牌照,我通过它申请到了各主流国家银行的银行账号(没有实体卡),Wise甚至还送给了一个VISA的虚拟银行卡号(Debit Card,我使用了非内地信息注册)。

新加坡和香港都没有外汇管制,因此两地之间的资金通过Wise可以自由低成本地流动,当然前提是资金来源合法合规。

各位朋友,趁着国内也还能注册Wise,可以注册一个账号使用,或者留着未来备用。

通过我的Wise注册链接注册,可以获得最高¥4,500等值的免手续费汇款优惠。注册使用其实很简单,通过链接下载APP或者直接在网页上按步骤注册使用即可。

欢迎大家也分享国际跨境汇款这方面的优惠信息和实战经验,让资金自由方便地流动起来。

重构博客友链页面 & 友链朋友圈开源

先来看看效果:友情链接 - PRIN BLOG

自我感觉还是不错的,友链的博客们有什么更新都可以实时展示在页面上,一目了然。作为博主,不用打开 RSS 阅读器就可以查看新文章;作为访客,也可以快速找到更多自己感兴趣的内容,比起原来全是链接的页面,看起来也让人更有点击欲望了。

从临时起意到开发完成总共两个晚上,最速传说就是我!(误)

缘起

前段时间看到有个博客用了这样的一个东西:

当时就感觉卧槽好高端,很有想法。

这种聚合订阅的形式有个名字,叫做 Planet(社区星球)。Planet 通常用于聚合某个领域的博客,然后展示在一个页面上,方便用户一站式阅读,比如:

这种形式在开源社区里比较常见,不过用在博客的友链上我倒还是第一次看到。


就像我在本站友链页里说的一样,独立博客之间的联系基本上就是靠的链接交换和评论互访。一个博客的访客看到了其他博客的链接,点过去看了,然后从对面的友链中,又导航到新的博客……如此往复,我们就依靠着这种从现在看来显得十分古老的方式,维系着这些信息孤岛之间的纽带。原始又浪漫。

不过这里就会涉及到一个用户点击率的问题。我自己之前在维护友链页面的时候,总感觉只放标题和链接看起来效果不怎么好。就算加上描述、头像这些元素,也总觉得差点意思。因为一个博客最重要的其实还是它的内容,仅靠一个网站标题,可能很难吸引到其他用户去点击。

而「友链朋友圈」的这种形式,就像微信朋友圈一样,作为一个聚合的订阅流,展示了列表中每个博客的最新文章。

比起干巴巴的链接,这显然会更加吸引人。虽然我写博客到现在也已经 9 年了,早就佛系了,主打一个爱看不看。不过对于和我交换了友链的博主们,还是希望他们能够获得更多的曝光和点击(虽然我这破地方也没多少流量就是啦……),也希望我的访客们也可以遇到更多有价值的博客。


然而在准备接入的时候,我发现这玩意儿不就是一个小型的 RSS 阅读器么……其实等于是自己又实现了一套订阅管理、文章爬取、数据保存之类的功能。

于是我就寻思,可能直接复用已有 RSS 阅读器 API 的思路会更好,让专业的软件做专业的事。友链的管理也可以直接复用 RSS 阅读器的订阅管理功能,这样增删改也不需要了,我们就只需要封装一下查询的 API,提供一个精简的展示界面就 OK。

技术栈选择

作为行动力的化身,咱们自然是说干就干,下班回家马上开工!

首先是 RSS 后端的选择。

市面上的 RSS 阅读器有很多,我自己主要用的是 Inoreader。然而我看了下,Inoreader API 只面向 $9.99 一个月的 Pro Plan 开放,而且限制每天 100 个请求……这还玩个屁。Feedly 也是差不多一个尿性,可以全部 PASS 了。我也不知道该说他们什么好,也许做 RSS 真的不挣钱,只能这样扣扣搜搜了吧。

另外一个选择就是各种支持 self-host 的 RSS 阅读器,比如 Tiny Tiny RSSMiniflux。我之前部署过 TTRSS,说实话感觉还是太重了。Miniflux 则是使用 Go 编写的,该有的功能都有,非常轻量级,部署也很方便。就决定是它了!

技术栈方面选择了之前一直比较心水的 Hono,部署在 Cloudflare Workers 上。前端方面没有使用任何框架,连客户端 JS 都没几行,基本上是纯服务端渲染。有时候不得不感叹技术的趋势就是个圈,以前那么流行 SPA,现在又都在搞静态生成了。

cf-workers-usage

页面渲染使用了 Hono 提供的 JSX 方案,可以在服务端用类似 React 的语法返回 HTML,挺好用的。不过 CSS 没有用 Hono 的那一套 CSS-in-JS,因为要允许用户覆盖样式,所以要用语义化的类名。最后选了 Less,还是熟悉的味道。

前端文件的构建使用了 tsup,配置文件就几行,爽。

实现

实现思路很简单,就是做一个 Proxy 层,把:

这两个 Miniflux 的 API 包一下。这里要注意不能暴露实际的 API Endpoint,避免可能的恶意攻击。API 缓存也要在我们这一层做好,防止频繁刷新把服务打爆。

缓存策略上使用了 SWR (Stale-While-Revalidate):

  1. 拿到 API 响应后,放到 KV 中,同时把时间戳放入 metadata;
  2. 后续从 KV 读取缓存时,对比当前时间和 metadata 中的时间戳;
  3. 如果经过的时间没有超过设置的 TTL,说明缓存有效,直接返回前端;
  4. 如果经过的时间超过了 TTL,则标记缓存为 stale 状态,依然返回前端
  5. 此时,后端在后台重新请求 API,并将最新的响应写入 KV 中;
  6. 下一次再从 KV 读取时,拿到的缓存就是最新的了。

这样可以保证最快的响应速度,以及相对及时的更新速度,比较适合这种场景。

最后的交付形式其实就是两个 HTML 页面,通过 <iframe> 的形式嵌入到网页中。另外参考 giscus 提供了一个脚本,可以设置参数并自动完成 iframe 的初始化,用户只需要引入一个 <script> 标签即可,非常方便:

<script  async  data-category-id="28810"  src="https://blog-friend-circle.prin.studio/app.js"></script>

friends-page-demo

当然也可以作为独立页面打开,有做双栏布局适配:

blog-friend-circle.prin.studio/category/2/entries

开源

新版博客友链朋友圈的所有代码都开源在 GitHub 上,欢迎使用:

👉 prinsss/blog-friend-circle

这个方案和 hexo-circle-of-friends 并没有孰优孰劣之分,只是侧重点和实现方式不同。不过我这个的一个好处是,如果你已经在用 Miniflux 了,那么可以直接复用已有的大部分能力,不需要再起一个 Python 服务和数据库去抓取、保存 RSS,相对来说会更轻量、稳定一些。

如果你选择使用 Miniflux 官方提供的 RSS 服务,甚至可以无需服务器,部署一下 CF Workers 就行了,像我这样的懒人最爱。

❌