Web/Game/Programming/Life etc.
上一篇博客已经是 2024 年初的事了。那篇的开头聊到 AIGC 改变了很多事情,尤其是我的表达欲下降了很多,觉得很多东西不再需要记录。结果博客就真的停在了那一篇,一晃两年零九个月。
在这期间我疯狂地感受 AI 的进化之旅,从 ChatGPT 3.5 一步狂蹦到 ChatGPT 6 Astra,以及 Claude Code + Opus 5.5、Cursor + Grok 4.7,特别是 AI agent 的进步令人刮目相看!我和 AI 一起做了很多原来力所能及之外的事。有空的时候可以把它们扒出来写一写,秉承我厚积薄发的态度。
这两天把目光移回了博客,跟 ChatGPT 讨论了一番写博客的意义、当前博客的状态以及技术栈。发现不管是前端还是后端都有很大的变化。我也觉得是时候回到这个角落收拾打扫一番,给未来的自己或者朋友们再写点属于我自己的东西,而不是完全由 AI 生成的东西。
在工作上,我的重心仍然在 React 和 TypeScript 技术栈。而 hexo 已经略显老旧,经过一番讨论,我决定把博客从 hexo 搬到了 Astro 上:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
这是 Astro 在 npm 上的自我介绍。和 hexo 一样,它也是 JavaScript 生态里的,只不过这次的代码大多换成了 TypeScript。
另外我的博客文章也不再和博客程序放在同一个 repo 里,而是改为直接从我的 Obsidian 笔记库读取。是的,我把我所有的个人知识库整合到了 Obsidian Vault,采用 AI agent 来管理。当然这不代表博客的文章会由 agent 来写,最多让它帮我查个错。
说来也巧,这次帮我把博客搬起来的,也还是 AI。本文会简单记录一下迁移的过程,以及一些想法。
2020年中,坐标墨尔本,夫妻两人全职工作,娃刚满一周岁,工作日接送早教中心。在起初的一年多的严格封城下,如果没有开看世界各地的疫情短报,我甚至玩笑般地怀疑这个病毒是不是真的存在,毕竟也没有亲眼见症身边有谁被感染或者隔离。
2021年,看着曲线平缓,甚至一度有数周没有新增。感觉完全解封有了盼头,但是随即年底出现了新变种 Delta 和 Omicron 曲线激增。中间有三个月连早教中心都关闭了。娃两岁多,受疫情影响,我们俩都换了全职远程工作,但是在家带娃还是非常有挑战。身边开始有同事和朋友接连中招,多数是轻症,还有同事家里的老人因 Covid 离世。
疫情仍然在继续,但是维州已经开始恢复生机。我大概又歇了小半年,除了工作时间,下班之余几乎没有碰与技术相关的东西。同时由于近来关注了太多社会新闻,反而让自己陷入了政治性抑郁。刷推的时候刷到一个无聊的放置类手游竟随手下载来玩了一个星期,也算放空一下自己,转移注意力,好重振旗鼓。 回顾了一下半年多以前开发的 Axidraw Web,有不少可以分享的点东西,准备挑几个记录一下。
AxiDraw 是一个双电机的二维绘图仪。可以将 SVG 绘制到纸面上。在研究完它的底层串口协议后,我尝试用 javascript 实现了一个能在网页上运行的 Web 小程序,能通过 WebUSB API 与 AxiDraw 单片机直接进行通讯,同时实现了 SVG 的绘制功能。
在开发 Axidraw Web 的时候,由于 WebUSB API 需要在安全的浏览器环境下(Secure Contexts)才能使用。在较早的 Chrome 浏览器上(version 83 之前),localhost 是否属于 Secure Contexts 尚未确定。而这类 API 默认只对 https://localhost 开放。在我写这篇文章的时候,文档中已经明确将 localhost 定义为安全环境。如果在开发环境中使用了较老的浏览器或者其它的自定域名,还是需要自行提供 TLS 支持。主要工作就是提供一个自签名证书,然后在 web server 中使用:
import express from 'express';
import https from 'https';
import fs from 'fs';
const app = express();
app.use(express.static('dist'));
const options = {};
try {
options.key = fs.readFileSync('server/cert/dev.key');
options.cert = fs.readFileSync('server/cert/dev.crt');
} catch (e) {
console.error('Please create and install the SSL cert first.');
process.exit(1);
}
const server = https.createServer(options, app).listen(8443);又过了没写博客的一年。曦仔已经两岁半了,这一年真是喜忧参半。然而疫情还是一眼望不到头。
一年前,休了一年半产假的 LP 重新回到工作岗位。这回如愿的换了个工作,离开了她在澳洲的第一个雇主。曦仔也开始了 Childcare 之旅,而我已经经历了大半年的远程办公(Working from home)。
虽然远程办公让我有更多的时间休息,免于通勤的奔波,不过这也是曦仔夜惊症(Night terror)非常严重的时期。他的睡眠不再像一岁的时候那样安稳。每天深夜都要哭闹数次,且处于非清醒状态。夜晚我们只好轮流值守,不过多半时间曦仔只要妈妈的怀抱。于是到了白天我们拖着疲惫的身驱把他送去日托,然后投入工作。而这样的情况持续了八九个月,直到最近才有所好转。这大概也是工作休息之余我再没有精力书写博客的原因。
前阵子在处理动森二维码的服装预览模型的时候,玩了一下 Blender。于是又勾起了我小时候玩 3D Max 的回忆。于是好想给手上这台 Macbook Pro 2016 配个显卡,深入学习一下 3D 建模。
于是在网络上搜索了好一阵,发现可以使用 eGPU(外置显卡坞)将独立显卡接到 Macbook 上使用。苹果的官网有一篇文章介绍了目前各个版本的系统支持的 eGPU 以及显卡的情况。
仔细看了一圈下来,发现由于历史原因近几年新出的 Macbook 并不支持 nvidia 显卡。看来是没法享受最近要发布的 RTX 3080 系列,只能选择 AMD 显卡。经过简单的预算,最终选择了 Razer Core X 和 AMD RX 5700 XT 来体验一番。
继上回给 Apollo Link 打补丁过去了几个月,本想翻看一下之前的那个 Pull Request 是否已经被 Merge,结果没想到原来的 Apollo Link 库已经被弃用了。新版的 Apollo Link 被重构后集成到了 @apollo/client 包中。不过并没有修复前面 PR 提到的问题。更糟糕的是之前使用的打补丁的方式无法起作用了。新的 selectHttpOptionsAndBody() 函数被专门放置到一个独立的 module 文件中。并且在提供的 cjs bundle 里,它直接被 createHttpLink 函数引用。所以之前的替换方法没办法在函数被引用前进行「狸猫换太子」。
那么是否有其它成本比较低的方式进行补救?于是我简单的搜索了一下 Webpack 的官方文档,很快找到了一个叫 NormalModuleReplacementPlugin 的内置插件。使用它可以非常方便地替换指定的模块文件。
new webpack.NormalModuleReplacementPlugin(
resourceRegExp,
newResource
);