Hi there 👋

Welcome to my blog

停止使用staticfile.org服务

昨天像往常一样打开博客,发现评论没有加载出来。 一开始以为是手机网络问题,用电脑复现了一下,发现twikoo的js访问报错了。 ...

2024-10-17 · 2 min · 526 words · Liudon

使用 ImageMagick 自动添加水印,保护图片版权

背景 细心的朋友可能会发现,我的博客图片都带上了水印。 经过博客被恶意镜像这个事情后,我一直在思考如何防止内容被恶意盗用,尤其是博客里的一些图片。 在当Hugo遇上AVIF,优化图片加载这篇文章里,使用了ImageMagick工具做了图片压缩。 当时文章最后说留了个坑,其实就是今天的这篇内容,利用ImageMagick自动给图片添加水印。 ...

2024-10-12 · 2 min · 771 words · Liudon

如何注册一个.sol域名

Livid大佬新搞了个支持Solana的IPFS/IPNS网关,了解到还有一个.sol的web3域名。 Solana域名服务(SNS)的目标是提供一种去中心化且可负担的方式,将域名(.sol)和链上数据连接起来。这些链上数据可以是SOL地址、 IPFS CID、图片、文本、或者任何其它的东西。 ...

2024-10-10 · 2 min · 625 words · Liudon

奥森公园半日游

假期第三天,腰间盘犯了,在家躺了三天。 假期最后一天,感觉轻了许多,今天北京天气非常好,带娃出来走走。 ...

2024-10-07 · 1 min · 101 words · Liudon

昌平42公里骑行绿道打卡

五一的时候带娃骑过南边这段,网上查了说北边这段不好骑,难得2号下午有空,决定先自己走一遍看看。 从家附近的奥北森林公园开始,骑行到沙河水库,整个行程近30公里,耗时3个小时左右。 ...

2024-10-05 · 2 min · 601 words · Liudon

十月一日爬慕田峪长城

早上5点半起床洗漱,6点出门打车直奔清河站,6点50的火车S515清河-雁栖湖。 虽然坐地铁经常路过清河站,但还是第一次来清河站坐车。 我们提前20分钟到的车站,已经开始排队了。 ...

2024-10-04 · 2 min · 505 words · Liudon

当Hugo遇上AVIF,优化图片加载

这篇文章会介绍基于Github Workflow使用ImageMagick生成AVIF图片,来优化Hugo站点的加载速度。 ...

2024-09-30 · 3 min · 1249 words · Liudon

博客被恶意镜像

起因 9月初的时候,在Google Search Console里发现了一个外链,域名是**.top。 随手点过去看了下,发现居然跟我的博客内容一模一样,就是内容变成了繁体。 ...

2024-09-26 · 3 min · 1149 words · Liudon

Github Pages 部署流程解析

上周末在搭建个人锻炼页面时,遇到个Github Pages部署的困惑。 看了running_page项目文档,是支持部署到Github Pages页面的,对应的操作流程定义在github/workflows/gh-pages.yml文件。 - name: Install dependencies run: pnpm install - name: Build run: PATH_PREFIX=/${{ github.event.repository.name }} pnpm build - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: # Upload dist repository path: './dist' - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 核心逻辑就是上面这段。 ...

2024-09-24 · 2 min · 570 words · Liudon

搭建个人锻炼页面

工作的缘故,平时基本一坐一天,缺少运动。 时间久了,各种毛病也就出来了。 搬到新大楼后,每天中午吃完饭楼下遛个弯,走一走,身体精神也好了很多。 坚持了一段时间,也不了了之了。 ...

2024-09-22 · 1 min · 325 words · Liudon

你好 Follow

Follow: Next generation information browser. 最近博客圈开始流行Follow邀请码,大家各种求码,一码难求。 蹲在Discord群里一周,虽然时有发码,但最终还是狼多肉少,抢不到码呀。 ...

2024-09-17 · 1 min · 271 words · Liudon

中秋爬山

中秋第一天,娃约了同学在公园玩,骑车、滑轮滑,晚上娃带我去了她说非常好吃的一家店吃饭。 晚上回来,想着第二天在家呆一天也是看电视,打算带她爬长城,查了一下,往返的票早已售罄,只好放弃这个方案。 ...

2024-09-16 · 2 min · 704 words · Liudon

Google Adsense的审核之旅

中午的时候,突然收到一条消息,打开一看,提示我的Google Adsense审核通过了。 偶然发现Google Adsense里居然有40美金,想起来是之前老博客加的广告。 ...

2024-09-16 · 1 min · 411 words · Liudon

让你的IPFS站点持久在线:接入Filebase的Names(IPNS)服务

本文会介绍如何接入filebase的Names(IPNS)服务,使你的IPFS站点持久在线。 背景 周末更新博客时,发现workflow的上传IPFS任务执行失败了。 ...

2024-09-04 · 3 min · 1246 words · Liudon

一次简短的青岛之行

刚放暑假的时候,就答应了娃带她去一趟青岛。 8月份要回老家,所以定在了7月中下旬出发。 车票/酒店都订好了,结果来了个台风格美。 出发前一周一直在查天气,就怕去了一直下雨。 ...

2024-08-31 · 2 min · 998 words · Liudon

解决 "undeclared name: any (requires version go1.18 or later)" 编译错误

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest $ $ protoc-gen-go --version protoc-gen-go v1.34.2 $ $ sh make.sh user.pb.go:123:45: undeclared name: any (requires version go1.18 or later) $ 流水线编译报错,其中make.sh文件代码: ... protoc -I=./ --proto_path=./ --go_out=./ --go_opt=paths=source_relative user.proto ... go build 同样的代码在本机编译就没问题,但是放到流水线里编译就报上面的错误。 ...

2024-06-14 · 1 min · 473 words · Liudon

搭建自托管IPFS Gateway服务,替代Cloudflare的IPFS Gateway

背景 4月底的时候,Livid大佬提醒,Cloudflare应该是调整了IPFS Gateway网关策略,我的IPFS镜像博客无法访问了。 没查到Cloudflare的调整说明,不过还好IPFS官方也提供了公共网关gateway.ipfs.io,将域名解析改到官网网关。 ...

2024-05-22 · 3 min · 1262 words · Liudon

302跳转的跨域问题(CORS)

302跳转的跨域问题 场景一:302不返回跨域头 请求 GET /302 HTTP/1.1 Host: liudon.xyz Origin: https://www.baidu.com User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 返回 HTTP/1.1 200 OK Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Cf-Ray: 88535773eaf5107e-HKG Content-Length: 143 Content-Type: text/html Date: Fri, 17 May 2024 11:42:00 GMT Expires: Thu, 01 Jan 1970 00:00:01 GMT Location: https://liudon.org Server: cloudflare Vary: Accept-Encoding 浏览器报错 ...

2024-05-17 · 2 min · 721 words · Liudon

GORM增加sqlcommenter特性

什么是sqlcommenter? sqlcommenter is a suite of middlewares/plugins that enable your ORMs to augment SQL statements before execution, with comments containing information about the code that caused its execution. This helps in easily correlating slow performance with source code and giving insights into backend database performance. In short it provides some observability into the state of your client-side applications and their impact on the database’s server-side. ...

2024-04-18 · 2 min · 742 words · Liudon

源码分析:GORM是如何生成sql的

在gorm下实现sqlcommenter过程中,遇到一些问题,顺便把gorm整个流程梳理了一遍,整理记录一下。 gorm使用示例 package main import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) type Product struct { gorm.Model Code string Price uint } func main() { // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) var product Product db.First(&product, 1) // 根据整型主键查找 } 我们以First查询为例,看一下是怎么转成具体sql的。 ...

2024-04-18 · 6 min · 2737 words · Liudon