木匣子

Web/Game/Programming/Life etc.

木匣子 2026 on Astro

上一篇博客已经是 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。本文会简单记录一下迁移的过程,以及一些想法。

以 Maildir 方式备份邮件

2023 年就这么过去了。AIGC 的出现让很多事情发生了改变。我使用搜索引擎的频率急剧降低,连查阅维基百科的次数也少了很多。AI 使得学习一些新的领域的门槛变得非常低,虽然它帮我打开了探索新世界的大门。但另一方面,不知道为什么我的表达欲也下降了很多。我觉得很多东西不再需要记录。大部分东西已经埋藏在那几千万亿的参数里。

十二月底,我没有像以往一样做点年终总结。相反,我翻了翻很多以往留下的文字、项目的备份。清理了网盘、NAS,把没用的东西都删除掉了。

后疫情之中国行

Plan

大流行(Pandemic)结束之后,我和 LP 就一直盼望着找个时间带四岁的曦仔回中国去见见从未某面的亲人。直到今年三月份我们才敲定行程,买了好六月份的机票,并请了一个月的年假。

曦仔两岁的时候就办好了护照,但是一直没能如愿出行。去年圣诞节的时候我们一家人和朋友相约去了新西兰,领略了自然风光的上限。发现曦仔对三个多小时飞行也没有很排斥。但这次他要面对的是九个半小时的飞行时间。去程是白天,于是我们早早准备了各种可以让他在飞机上打发时间的小玩意。

我的 Covid 经历

2020年中,坐标墨尔本,夫妻两人全职工作,娃刚满一周岁,工作日接送早教中心。在起初的一年多的严格封城下,如果没有开看世界各地的疫情短报,我甚至玩笑般地怀疑这个病毒是不是真的存在,毕竟也没有亲眼见症身边有谁被感染或者隔离。

2021年,看着曲线平缓,甚至一度有数周没有新增。感觉完全解封有了盼头,但是随即年底出现了新变种 Delta 和 Omicron 曲线激增。中间有三个月连早教中心都关闭了。娃两岁多,受疫情影响,我们俩都换了全职远程工作,但是在家带娃还是非常有挑战。身边开始有同事和朋友接连中招,多数是轻症,还有同事家里的老人因 Covid 离世。

创建自签名 SSL 证书

疫情仍然在继续,但是维州已经开始恢复生机。我大概又歇了小半年,除了工作时间,下班之余几乎没有碰与技术相关的东西。同时由于近来关注了太多社会新闻,反而让自己陷入了政治性抑郁。刷推的时候刷到一个无聊的放置类手游竟随手下载来玩了一个星期,也算放空一下自己,转移注意力,好重振旗鼓。 回顾了一下半年多以前开发的 Axidraw Web,有不少可以分享的点东西,准备挑几个记录一下。

AxiDraw 是一个双电机的二维绘图仪。可以将 SVG 绘制到纸面上。在研究完它的底层串口协议后,我尝试用 javascript 实现了一个能在网页上运行的 Web 小程序,能通过 WebUSB API 与 AxiDraw 单片机直接进行通讯,同时实现了 SVG 的绘制功能。

WebUSB

在开发 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);

写在 2021 年末

又过了没写博客的一年。曦仔已经两岁半了,这一年真是喜忧参半。然而疫情还是一眼望不到头。

家庭

一年前,休了一年半产假的 LP 重新回到工作岗位。这回如愿的换了个工作,离开了她在澳洲的第一个雇主。曦仔也开始了 Childcare 之旅,而我已经经历了大半年的远程办公(Working from home)。

虽然远程办公让我有更多的时间休息,免于通勤的奔波,不过这也是曦仔夜惊症(Night terror)非常严重的时期。他的睡眠不再像一岁的时候那样安稳。每天深夜都要哭闹数次,且处于非清醒状态。夜晚我们只好轮流值守,不过多半时间曦仔只要妈妈的怀抱。于是到了白天我们拖着疲惫的身驱把他送去日托,然后投入工作。而这样的情况持续了八九个月,直到最近才有所好转。这大概也是工作休息之余我再没有精力书写博客的原因。

在 macOS 上使用 eGPU 的体验

前阵子在处理动森二维码的服装预览模型的时候,玩了一下 Blender。于是又勾起了我小时候玩 3D Max 的回忆。于是好想给手上这台 Macbook Pro 2016 配个显卡,深入学习一下 3D 建模。

于是在网络上搜索了好一阵,发现可以使用 eGPU(外置显卡坞)将独立显卡接到 Macbook 上使用。苹果的官网有一篇文章介绍了目前各个版本的系统支持的 eGPU 以及显卡的情况。

仔细看了一圈下来,发现由于历史原因近几年新出的 Macbook 并不支持 nvidia 显卡。看来是没法享受最近要发布的 RTX 3080 系列,只能选择 AMD 显卡。经过简单的预算,最终选择了 Razer Core X 和 AMD RX 5700 XT 来体验一番。

给 Apollo-Link 打补丁 II

继上回给 Apollo Link 打补丁过去了几个月,本想翻看一下之前的那个 Pull Request 是否已经被 Merge,结果没想到原来的 Apollo Link 库已经被弃用了。新版的 Apollo Link 被重构后集成到了 @apollo/client 包中。不过并没有修复前面 PR 提到的问题。更糟糕的是之前使用的打补丁的方式无法起作用了。新的 selectHttpOptionsAndBody() 函数被专门放置到一个独立的 module 文件中。并且在提供的 cjs bundle 里,它直接被 createHttpLink 函数引用。所以之前的替换方法没办法在函数被引用前进行「狸猫换太子」。

那么是否有其它成本比较低的方式进行补救?于是我简单的搜索了一下 Webpack 的官方文档,很快找到了一个叫 NormalModuleReplacementPlugin 的内置插件。使用它可以非常方便地替换指定的模块文件。

new webpack.NormalModuleReplacementPlugin(
  resourceRegExp,
  newResource
);

动森二维码生成器:服装类(后篇)

前篇写到动森二维码生成器的二维码划分规则以及预览模型的 UV 贴图。根据我的设想,接下来我要在 Aseprite 画板上将这个模型渲染出来,并将用户绘制的图案通过 UV 贴图的方式绘制到模型上。而目前我所拥有的东西只有:调整过 UV 贴图坐标的 6 个衣服模型、在 Aseprite 读取和写入像素的 Lua API,还有记忆中模糊的图形学知识。本文简单记录一下我当时的思路,以及遇到的一些细节问题,如果对实现有兴趣,可以直接访问 Github 上的该项目。

动森二维码生成器:服装类(前篇)

在开发动森二维码生成器的时候,对于服装类设计的生成,一开始我并没有很好的想法。游戏中对贴图的是分块绘制的,并且有一个动态模型可以展示衣服绘制的效果。对比同类工具 Animal Crossing Pattern Tool(下称 ACPT),他们也提供了 3D 模型用于展示贴图效果。但要如何在 Aseprite 中实现展示 3D 模型,我并不是很有把握,毕竟这是一款用于绘制 2D 像素图的工具。另外如何给贴图分块,也需要深入分析。本文先记录一下贴图的划分,之后再写一篇分析 3D 模型的渲染。

键盘快捷键

全局

?
快捷键帮助
/或⌘K
搜索
gh
首页
ga
归档
gt
标签
gc
分类
gg
回到顶部
G
跳到底部
h
较新一篇 / 上一页
l
较旧一篇 / 下一页
Esc
关闭弹窗

文章列表首页、归档、标签、分类

j
选中下一篇
k
选中上一篇
o或Enter
打开选中的文章

阅读文章和其他页面

j
向下滚动
k
向上滚动
yy
复制本页链接
c
跳到留言