Versun

对待生命,不妨大胆一点,因为我们终将失去它



Twitter的中文字符长度的计算

2025-02-19
我的 CMS 在博客交叉发布到 X 上时,如果内容较多老是会因为字数限制的原因而发布失败。
研究了下发现 X 对非英文字符的计算和其它平台不一样,在Mastodon和Bluesky上,一个中文字符均算做一个字符数,但 X 却算做 2 个字符数。
所以,我添加了下面2个函数,一律将非ASCII的字符算做2个字符数,虽然代码不怎么好看,但能用
def count_chars(str)
  str.each_char.map { |c| c.ascii_only? ? 1 : 2 }.sum
end

def truncate_twitter_text(str, max_length)
  current_length = 0
  chars = []

  str.each_char do |c|
    char_length = c.ascii_only? ? 1 : 2
    break if current_length + char_length > max_length
    current_length += char_length
    chars << c
  end

  chars.join("")
end

TIL:手动更新Dokploy

2025-02-18
自部署的 Dokploy 在 UI 上一直无法完成更新,所以在 官方 Repo 的 Discussion 里找到了手动更新的方法
curl -sSL https://dokploy.com/install.sh | sh -s update

儿童的计算机教育

2025-02-17
最近我家7岁的娃突然对计算机很感兴趣,所以开始找些适合儿童的 CS 课程。
还好之前在 54321周刊72期 里有收集过该类资源,全部来自树莓派基金会,故在此分享下我整理的相关链接:
- 计算机课程:提供了 5-16岁 的课程,注意,这并不是课程视频,而是课程资源,比如 PPT 课件等,需要家长/老师根据这些资源自行教学
- Find a path:提供了8个不同类别的学习资源,比如 Scratch、 micro:bit、Raspberry Pi等,可以针对性的教学

以上两个资源完全免费,而且质量很好,比国内随便哪个上万的儿童编程课要好很多,非常建议有娃的程序员收藏使用。

ps: 后续相关资源也会在这里持续更新


Tapestry应用

2025-02-17
刚通过这篇文章发现了 Tapestry 应用,这是一个类似 Follow 的阅读器,可以订阅各种信息来源,创建自己的信息流。
不同的是它只做 iOS 端,并且有插件系统
2024年一月开始在 Kickstarter 上众筹,并达成目标($177,840 / $100,000),耗时一年的开发,2025年2月发布了正式版。
界面看起来还不错:
tapestry-app-1

tapestry-app-2

TRMNL电子墨水仪表盘

2025-02-14
TRMNL
挺酷炫的一款产品,目前支持66个第三方的内容,比如显示 RSS 、Wikipedia、Redit 等。
image.png 311 KB

129美金起售,如果你是世界500强企业的员工,可免费送一台
每家公司仅限一台设备,仅限美国境内,因为我们没钱🤣
image.png 162 KB



Meta FAIR AI Demos

2025-02-14
Meta FAIR AI Demos
这是 Meta 公司最新的 AI 研究成果的 Demo 展示,
目前网站上有4个 demo:视频对象选取、语音翻译、手绘图转动画、AI语音故事创作,都挺有意思的,体验挺不错的

使用 rubocop 自动格式化每次的代码提交

2025-02-13
起因:经常在 push 代码前忘记格式化,所以干脆将该动作放在 CI 里自动格式化代码 ( 适合Github代码库 )
步骤:修改 rails 默认生成的 ci.yml 文件,将 lint job移到最上方,并修改如下:
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
  
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: .ruby-version
          bundler-cache: true
  
      - name: Lint code for consistent style
        run: bin/rubocop -f github -A
  
      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: "style: auto fix by rubocop"
然后将 /vendor/bundle 加入到 .gitignore 中,防止 auto-commit 提交了 bundle 里的缓存文件。
最后,在 repo 的 Settings / Actions / General / Workflow permissions 中勾选 Read and write permissions 确保写入权限。

这样每次提交,即可自动使用 rubocop 格式化代码,非常方便

在 Docker 容器中获取和显示 Git 部署版本号的折腾记录

2025-02-11
昨天晚上,我准备给我的 CMS 添加显示 deploy git hash 的功能,方便跟踪当前博客部署所使用的最新提交 hash,以判断是否需要更新,或者更新是否成功。
最开始,我直接执行 git 命令获取 HEAD 所在的 hash 值(commit)
    def self.git_version
      @git_version ||= `git rev-parse HEAD`.strip[0..7]
    end
但失败了,非常低级的错误:系统没有找到 git 命令。。。。

随后,我在 Dockerfile 中添加了 git 包,以便系统安装 git (commit)
commit-f63d2c5f9c27fea9dea19afb1d827683b2501c87

但又失败了:
fatal: not a git repository (or any of the parent directories): .git
我忘记 Dockerfile 中的 COPY 命令默认是不会复制 .git 目录的。

所以最后决定直接在 Dockerfile 中执行命令并输出 hash 到 REVISION 文件中,然后 Rails 直接读取该文件即可。
Dockerfile 添加了下面的代码:
COPY .git /rails/.git
RUN git rev-parse HEAD > REVISION  && \
    rm -rf .git
RUN chown -R rails:rails REVISION
重新 git_version 函数:
  def self.git_version
      @git_version ||= begin
        if File.exist?("REVISION")
          File.read("REVISION").strip[0..7]
        else
          "NA"
        end
      end
    end
最后在相关的 html.erb 文件中添加:
<span>Depoly Git Hash: <%= VersunCms::Application.git_version %></span>
效果如下
deploy git hash

AI正在造就一代文盲程序员

2025-02-10
AI is Creating a Generation of Illiterate Programmers | N’s Blog
我不再阅读文档。既然人工智能可以即时解释,为什么还要费心呢?
我甚至不再阅读错误信息,而是直接复制粘贴。
我成了一个人肉剪贴板,只是我的代码和 LLM 之间的中介。
以前,每一条错误信息都能让我学到一些东西。现在呢?解决方案神奇地出现了,我却什么也没学到
现在,我只需执行人工智能的建议。如果不奏效,我就改进上下文,然后再次询问人工智能

我太熟悉这种感觉了,从早期的Github Copilot,再到Codeium、Cursor、Windsurf,一路见证了AI的代码能力突飞猛进,直到2024年12月底的年终总结时,我发现我的代码能力进步缓慢,成为了一个面向上下文的程序员。
于是,我做出了改变:
  1. 不再续订Cursor和Windsurf
  2. 使用Perplexity代替谷歌搜索
不再直接让AI提供代码,而是回归传统方式 - 通过关键词搜索来理解错误信息,自主调试解决问题。虽然在遇到困难时,我常常怀念Cursor和Windsurf这类工具带来的便利,也会被它们不断推出的新功能所吸引,但我还是克制住了使用的冲动,当我重新开始阅读文档、分析错误日志、一步步排查问题时,虽然过程更艰辛,但每解决一个问题都能带来更大的成就感。

经过一个多月的坚持,我重新找回了编程的乐趣。现在我不再试图与AI较劲,而是将其视为辅助工具和良师益友。
以前总是想着如何更快地完成任务,现在却发现慢下来的过程中,我对代码的理解更深入了,解决问题的思路也更清晰了。
在编程学习的道路上,有时"慢"反而是最快的方式。
AI确实是个强大的工具,但更重要的是要懂得如何恰当地使用它。就像一个经验丰富的程序员,知道什么时候该查文档,什么时候该请教同事一样,我现在也学会了在合适的时机寻求AI的帮助,而不是过分依赖它。

电影《魔法坏女巫》

2025-02-09
昨晚看了2024年12月在北美上映的电影《魔法坏女巫》,音乐不好听,满满的尬点,虽说是音乐剧,但《爱乐之城》就很好看很好听,就这片听说一周票房过亿,无法理解