MoreRSS

site iconYeungYeah修改

广东人,精通中文、英文和粤语。喜欢写作和编程。武汉大学本科,南京大学研究生,目前在国内大厂从事后台开发。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

YeungYeah的 RSS 预览

Homebrew 降级安装指定版本应用

2025-03-15 15:21:17

总是习惯性地把所有软件都更新到最新,然后在写博客的时候发现,Hugo 更新后,本地运行出问题了。

ERROR deprecated: site config key paginate was deprecated in Hugo v0.128.0 and subsequently removed. Use pagination.pagerSize instead.
ERROR deprecated: resources.ToCSS was deprecated in Hugo v0.128.0 and subsequently removed. Use css.Sass instead.
ERROR deprecated: .Site.IsMultiLingual was deprecated in Hugo v0.124.0 and subsequently removed. Use hugo.IsMultilingual instead.
ERROR deprecated: .Site.Author was deprecated in Hugo v0.124.0 and subsequently removed. Implement taxonomy 'author' or use .Site.Params.Author instead.

从报错提示来看,就是 Hugo 更新搞出了 breaking changes,升级后直接一些把字段和方法移除掉了。一开始看它的提示,还很贴心地给出替代的字段,然后直接简单替换后发现,跑不起来,并不是那么简单替换就行。于是只能把 Hugo 的版本降回原来的版本。

具体操作如下

  1. brew info hugo. 找出需要降级应用所在的 repo 和路径
    1. 我这里用了镜像,原始的 repo 在 GitHub 上
  2. 到 GitHub 上找到对应 repo 的对应文件
    1. 路径可以参考 https://github.com/Homebrew/homebrew-core/blob/master/Formula/h/hugo.rb
  3. 找这个文件的提交历史,找到需要降级版本的提交 id
    1. 根据 commit 的 id 可以判断出来版本,是由 bot BrewTestBot 提交的
  4. 拿到 commit id 后可以拿到这个安装文件的 url,同时也可以拿到文件的内容
    1. https://github.com/Homebrew/homebrew-core/blob/2fd8dba871a6a5412fa7c00b12ac99b5738cd199/Formula/h/hugo.rb
    2. https://raw.githubusercontent.com/Homebrew/homebrew-core/2fd8dba871a6a5412fa7c00b12ac99b5738cd199/Formula/h/hugo.rb
    3. 把 commit id 和 app 的名字替换一下就可以了
  5. 按照网上看到的办法,可以直接根据 url 来安装 brew install url
    1. 但实际试了一把后发现,会报错 Error: Non-checksummed download of hugo formula file from an arbitrary URL is unsupported! brew extract or brew create and brew tap-new to create a formula file in a tap on GitHub instead.
  6. 于是直接把文件内容 copy 下来保存到本地,然后 brew install ./hugo.rb,安装成功

brew 应用降级成功之后,可以通过 brew pin hugo 锁定版本,避免后续又把它升级了。


在通过 install url 失败之后,又看到一个办法可以降级,看着也很可行,但是构建脚本本地执行的时候出错了,也可以参考下。

1
2
3
4
brew tap-new $USER/local-cmake
brew tap homebrew/core --force
brew extract --version=3.31.1 cmake $USER/local-cmake
brew install $USER/local-cmake/[email protected]

以下是 AI 的解释:

这四条 Homebrew 命令的目的是创建一个本地 tap 并安装特定版本的 CMake。我来逐条解释每个命令的作用:

1. brew tap-new $USER/local-cmake

这条命令创建一个新的 tap(软件仓库)。$USER 是当前用户名的环境变量,所以这个 tap 的名称会是 "你的用户名/local-cmake"。

  • 作用:创建一个新的本地 tap,用于存放自定义的软件包公式
  • 结果:在 $(brew --repo)/Library/Taps/$USER/homebrew-local-cmake 目录下创建一个新的 tap 结构

2. brew tap homebrew/core --force

这条命令强制重新 tap Homebrew 的核心仓库。

  • 作用:确保 homebrew/core 仓库(包含官方软件包公式的主仓库)被正确 tap,--force 参数强制执行,即使该 tap 已经存在
  • 结果:确保可以访问 homebrew/core 中的软件包公式,这是后续提取 CMake 公式所必需的

3. brew extract --version=3.31.1 cmake $USER/local-cmake

这条命令从 homebrew/core 中提取特定版本的 CMake 公式到你的本地 tap 中。

  • 作用:从官方仓库提取 CMake 3.31.1 版本的公式,并将其放入你刚创建的本地 tap 中
  • 结果:在你的本地 tap 中创建一个 [email protected] 公式文件

4. brew install $USER/local-cmake/[email protected]

这条命令安装你本地 tap 中的特定版本 CMake。

  • 作用:使用刚刚提取的公式安装 CMake 3.31.1 版本
  • 结果:在你的系统上安装 CMake 3.31.1 版本

退掉佳明手表

2025-03-15 13:06:54

之前就一直心动想要摆脱苹果生态,尝试使用其他的设备,避免被生态绑架住。首当其冲的,就是电量有点不太行的 Apple Watch。原本想要换一个安卓的手表,但是看了一下各家的安卓手表,基本也需要绑定自家的手机和软件生态。然后现在使用 iPhone 的情况下,支持也不太好,很多功能会缺失掉,因此迟迟没挑好。

既然各家的安卓手表挑不中,干脆挑一个运动手表,不绑定手机厂商,安卓与 IOS 阵营都能通用。于是刷了几天小红书,选中了几乎是最多人用的佳明,挑了一个价格和 Apple Watch 差不多价格的手表下单。

用了几天之后发现,从 Apple Watch 转向运动手表,真的像是从现代社会退化为原始社会,运动手表,可谓是与智能没有一点关系。运动手表,尤其是像佳明这种专业的运动手表,其实是 for 专业运动水平的人和跑者使用。而我对手表更需要的,可能还是因其智能性能在生活当中带来的便利,我更需要的,还是智能性,能够帮我在日常生活在手表上完成一些很方便的操作,而不是在运动上的专业性。尤其是手表不能控制手机闹钟,没有了我才意识到这个对我来说,其实是个刚需。就运动记录上,感觉佳明和我之前的 Apple Watch 差不了多少,该有的,我能看懂的好像大家都有,对我来说好像也没有太大的提升和意义。

看来还是逃离不了苹果生态,逃离不了 Apple Watch,只能乖乖退掉佳明手表,重新戴上 Apple Watch。

2024 年度记录

2025-01-04 10:06:50

度过作为纯种打工人完整的一年,简单地写点流水账,记录下今年的一些事情与想法。

一月

终于去香港办银行卡了,虽然遇到了一些预料之外的问题,去到发现电信电话卡在香港漫游无效没信号的问题,不过有惊无险,最后还是顺利办成并当场下卡。

从这刻开始,我也开启了我的美股投资之路。通过美股这个渠道,我对投资和赚钱有了更多的思考。在去年工作之后,我就觉得搞钱才是最重要的事,但具体该怎么搞钱、如何在不工作之外还能有收入,当时还没有太多的想法。如今接触到美股投资后,虽然不可能通过投资马上赚大钱,但起码看到了希望,尤其是看到一些转行当专职 trader 的同行还能养活自己并过得不错之后,更让我觉得这条路有可能性。

核心还是需要:做好准备,等待机会。 多攒钱,积极寻找机会,be open,不局限于某一条路子。

借着办卡的机会,我顺便在香港玩了一天。上次去香港应该还是初中的时候。作为一个广东人,虽然对香港的各种信息接触得比较多,看似很熟悉,但实际上这才是我第二次去香港。不过会粤语、熟悉香港文化,去玩也没遇到什么问题。香港这个城市还是有许多吸引我的地方,让我想起初中时的志愿是到香港大学读书。现在其实有机会拿到 hkid 去香港工作,但各种因素让我迟疑,尤其是“待七年”这个门槛太高。不过,去生活不行,多点去玩还是可以的。第一次去香港之后,回来我就马上把签注更新成了一签多行。

二月

过年,越来越没什么年味和感觉,也可能是年纪大了,对过年也越来越没什么期盼。过年逐渐演化成回乡下吃饭,亲戚间互相探亲吃饭,各种吃饭的模版一般的场景,并不喜欢。

三月 & 四月

own 的一个项目终于要上线了,期间外部合作机构各种幺蛾子,各种出问题,上线后也还有很多手尾需要跟进。不过最终的业务效果还是极好的,上线的这一年带来了极高的 TPV。虽然说技术是为了业务服务,但很现实的一点是,真的拿到了好的业务成果之后,还会 credit to 技术人员上吗?想起内网曾经看到的一个吐槽贴,庆功会上各种人都在,唯独不见技术人员。

再结合年度绩效出来后的年终奖和调薪,更加让人想笑 (我这个新人连这个500都没) 更加意识到打工没什么前途。


女朋友的考研成绩也出了,初试高分,复试准备了两周后也顺利拿下,终于上岸,可喜可贺,算是弥补了当年的遗憾。

五月

打卡汕头。虽然高中时身边有不少潮汕同学,但直到现在才第一次去。对汕头的印象,全是牛肉火锅和甘草水果。

六月

和团队团建去了马来西亚,时隔七年再次出国,而且也还是去马来西亚。海岛的景色确实还可以,浮潜也很有意思。

去东南亚旅行消费确实低,来回的机票全包也才 900+。逐渐开始意识到,其实出国玩并没有想象中那么麻烦,性价比也挺高的。新的一年希望能有更多机会解锁不同的国家(但还得先解锁各国签证)。

九月 - 十一月

三个月参加了三个同学的婚礼,身边的同学和朋友开始逐渐结婚成家了。还是挺多感慨的,见证着身边同龄人进入下一个人生阶段,偶尔也会想:什么时候轮到我呢?我并不恐婚恐育,相反甚至还有点向往婚姻、家庭与小孩。然而结婚也没那么简单,结婚意味着两个家庭的结合,不是两个人领证就完事,还需要考虑方方面面的各种因素。不过麻烦归麻烦,还是需要面对的,也不会去逃避。希望这两年能让这个喜事发生。

十二月

公司的年度体检拖到年底才去做,所幸体检结果没啥大问题。工作以来自我感觉身体没以前好了,以前常常和别人自嘲说,我们这行是拿命换高薪。现在真工作了,发现工作确实会是一种损耗,both 生理上和心理上。如何面对这些损耗并尽可能减少它们带来的影响,这是我工作中最重要的一个课题。

生理上影响最大的一个点是运动时间少了。读书时时间充足,几乎每天都有时间运动,即使没运动,每天的步行量也足够。但工作后很容易一周都没运动(当然也有一部分原因是工作累了自己懒得动)。于是也在寻找一个高效且自己能坚持的运动方式,让自己动起来。之前买了一个壶铃,运动效果确实不错,当成 HIIT 都可以,但坚持了一个月就闲置了。

最近这个月重拾了游泳。其实从小就很喜欢游泳,小时候的夏天一放假家里人就会带我去游泳,也练出了自认为还可以的游泳技能。后面上大学后就基本没怎么接触游泳了。现在重新游泳后,开始在有泳道的专业泳池游(小时候游的泳池真的就是一个大池子)。接触游泳的人多了,再加上用手表开始记录自己的游泳情况,才发现其实我也不是那么会游。

在小城市里,会游泳的人没那么多,泳池也没那么专业,可能大多数人去游泳实际上是在玩水。在这样的环境里游得最好,其实也不代表什么。但处于其中的话,还是会被环境与平台局限着眼光与想法。

以前的自己有点坐井观天了,这不仅是游泳,还有许多方面。被自己的思维、想法,或者各种因素局限了。还是得打开自己,be open and keep exploring.

被生态绑架的数据

2025-01-03 20:49:51

才用了两年多的 Apple Watch,现在电量已经开始撑不住了。目前电池健康度是 85%,晚上充满电后睡前戴上,第二天晚上七八点就会弹出 10% 的低电量警告。如果晚上需要去游泳,还得专门早上起床后给手表补一下电,确实有点顶不住。

打算换一个手表。继续用苹果的话,从 S7 换到 S10 感觉提升也不大;换成 Ultra 又觉得有点太贵了。于是考虑换个安卓厂商出的手表,看上了华为的 GT5 Pro。非华为手机也能用,只需要安装一个华为运动健康的 APP。不过这样一来,记录的数据就得全部存放在华为运动健康当中。这样的话,这些数据还属于我的吗?

其实有点好笑,我用他们的产品产生的属于我自己的数据,却无法对其拥有绝对的掌控权。某种程度上,这些数据存在他们的 APP 中,似乎就成了他们的数据。但这并不是华为一家会这样,几乎所有安卓厂商都有自己的健康 APP和手表,生成的各种监测数据也只能同步到各自的 APP 和生态当中。

不过,现在在用的苹果也一样。如果我不用 iPhone,健康与健身的所有数据,我同样没有办法迁移出来继续使用。这也是一直阻碍我换手机回归安卓的一大原因。

科技越发展,数码生态越完善,反而越建立起了生态上的壁垒。生态之间的迁移太过痛苦,甚至可以说是必然会有成本。迁移必须做出取舍(trade-off),选择任何一方都会有不足之处,无非是看自己能接受哪些问题作为妥协点。但其实这种取舍一直都存在,只是以前生态未完善时积累的数据还不够多。而现在,工作之后,时间和精力也不像以前那样充裕,去适应新的生态变得更加困难。

所以要换啥呢?一直在想,却始终想不出一个结果,这样就一直拖着不换了吧😂。然而,想换的心已经有了,拖着其实并不能打消这个念头。看什么时候彻底忍不了了吧。

Ahr999 in TradingView

2024-12-31 11:34:44

近段时间开始关注 BTC 大饼现货,并且在找机会逐步进场持有。其中我主要是通过 Ahr999 指标来判断入场时机,这个指数来自于《囤比特币》

具体的定义可参考

Ahr999 = ((比特币价格/200日定投成本) * (比特币价格/指数增长估值)

  • 指数增长估值= 10^[5.84 * log(币龄) - 17.01]
  • 币龄 = 当前日期距离2009年1月3日的天数
  • 200日定投成本 使用几何平均值

通常认为:

  • Ahr999 < 0.45 时,表示市场极度恐慌,是很好的买入机会
  • Ahr999 > 1.2 时,表示市场可能过热,需要注意风险
  • 0.45 < Ahr999 < 1.2 时,属于相对合理区间

最开始打算是直接写个脚本跑在服务器上,定时计算,进入合适的区间就发 tg 消息提醒。写好调试好发现,我的服务器限于网络环境,无法调用 API 拿到数据,只能放弃。又转念一想,其实也算是个交易指标,干脆拿去 TradingView 上搞一个,写个指标画出来,并且加一个通知,如果指标跌破区间,就通过 TradingView 发邮件提醒。通过这个过程,也学习一下 TradingView 的脚本编写。

具体效果见下图

以下脚本代码主要通过 AI 辅助写出,有需要的话可以自取添加指标。这里指标只能针对日区间数据,需要把变更区间设置成 1d.

//@version=6
indicator('BTC AHR999 Index', overlay = false)
// 确保在日线图表上使用
if not timeframe.isdaily
runtime.error('请在日线图表上使用此指标')
// 计算币龄(从2009年1月3日开始)
GENESIS_TIMESTAMP = timestamp('2009-01-03')
days_since_genesis = (time - GENESIS_TIMESTAMP) / (1000 * 60 * 60 * 24)
// 计算指数增长估值
// formula: 10^(5.84 * log(币龄) - 17.01)
exp_growth = math.pow(10, 5.84 * math.log10(days_since_genesis) - 17.01)
// 计算200日定投成本(简单移动平均)
// sma_200 = ta.sma(close, 200)
f_gma(src, len) =>
sum_logs = 0.0
for i = 0 to len - 1 by 1
sum_logs := sum_logs + math.log(src[i])
sum_logs
math.exp(sum_logs / len)
length = input.int(200, 'Length', minval = 1)
gma_200 = f_gma(close, length)
// 计算 AHR999 指数
// formula: (比特币价格/200日定投成本) * (比特币价格/指数增长估值)
ahr999 = close / gma_200 * (close / exp_growth)
// 为了使所有指标在同一个视图中可见,进行数值缩放
scale_factor = 1000 // 可以根据需要调整这个缩放因子
scaled_close = close / scale_factor
scaled_gma_200 = gma_200 / scale_factor
scaled_exp_growth = exp_growth / scale_factor
// 绘制所有指标
plot(ahr999, 'AHR999', color = color.blue, linewidth = 2, precision=3)
plot(scaled_close, '当日收盘价', color = color.green, linewidth = 1, precision=3)
plot(scaled_gma_200, '200日定投成本', color = color.orange, linewidth = 1, precision=3)
plot(scaled_exp_growth, '指数增长估值', color = color.purple, linewidth = 1, precision=3)
// 添加 AHR999 的参考线
hline(0.45, '极度抄底区', color = color.green, linestyle = hline.style_dashed)
hline(1.2, '中性', color = color.gray)
hline(4, '极度卖出区', color = color.red, linestyle = hline.style_dashed)
// 添加图例说明
var tbl = table.new(position.top_right, 4, 2, bgcolor = color.new(color.black, 70))
table.cell(tbl, 0, 0, '指标', text_color = color.white)
table.cell(tbl, 0, 1, '实际值', text_color = color.white)
table.cell(tbl, 1, 0, '收盘价', text_color = color.green)
table.cell(tbl, 1, 1, str.tostring(close, format.volume), text_color = color.green)
table.cell(tbl, 2, 0, '200MA', text_color = color.orange)
table.cell(tbl, 2, 1, str.tostring(gma_200, format.volume), text_color = color.orange)
table.cell(tbl, 3, 0, '指数估值', text_color = color.purple)
table.cell(tbl, 3, 1, str.tostring(exp_growth, format.volume), text_color = color.purple)

博客 RSS 抓取失败

2024-12-29 11:50:22

上两周收到 NJU-LUG Blogroll 维护者的一封邮件,告诉我本博客的 RSS 抓取出了问题,让我有空时看一下。由于最近两个月没更新博客,也没时间关注,所以并未注意到抓取存在问题。昨天更新了一篇文章后,今天发现阅读量依然是零。打开 Follow 一看,才发现 Follow 的抓取也出问题了。

收到邮件时,我在本地测试了一下,RSS 是可以正常打开的。随后查看 NJU-LUG Blogroll 提供的失败日志,提示访问超时。初步判断可能是 CDN 出了问题。

于是登录又拍云,检查了一下 CDN 的配置,最终发现了一个加速区域的配置项。默认配置是国内加速,这会导致海外的请求被路由到国内的 CDN 节点。看起来问题应该就出在这里——海外访问(比如 GitHub Action)最近可能无法正常访问又拍云的国内 CDN 节点,导致超时,从而无法抓取 RSS。

将配置改为全球加速后,我在 Follow 中重新抓取,问题顺利解决。