普通视图

Received before yesterday流动

Golang database/sql 数据库断线自动重连机制解析

2025年4月30日 17:37

最近有个交接服务的数据库要升级版本,升级最后切换瞬间会有一个闪断。

这里业务侧需要确保有自动重连机制,否则会影响服务。

因为是交接的服务,得通过代码再确认一下。

  •  

Golang默认Http Client导致的cannot assign requested address错误

2025年4月29日 20:20

问题表现

重现代码:

package main

import (
	"fmt"
	"io"
	"net/http"
	"time"
)

func main() {

	client := &http.Client{
		Timeout: time.Duration(3) * time.Second,
	}

	for i := 0; i < 100; i++ {
		go func() {
			for {
				req, _ := http.NewRequest(http.MethodGet, "https://baidu.com", nil)

				rsp, err := client.Do(req)
				if err != nil {
					fmt.Println("request failed", err)
					continue
				}

				rsp.Body.Close()

				body, err := io.ReadAll(rsp.Body)
				if err != nil {
					fmt.Println("read body failed", err)
					continue
				}

				fmt.Println(string(body))
			}
		}()
	}

	select {}
}

启动后,随着请求越来越多,很快就出现了"cannot assign requested address"错误,服务器出现大量TIME_WAIT连接。

  •  

清明踏春,爬山看海

2025年4月6日 22:47

自从买了登山杖,娃一直说想去爬山。

前段时间天气一直不好,山上也还是光秃秃的,就一直没去。

趁着清明假期,带娃爬山去。

去年假期去过一次香山,路上超堵,这次还是选择了离家不远的百望山:好爬不累。

  •  

购入小牛G400T电动车

2025年3月26日 22:07

去年10月底,考虑到老的绿源电动车已经骑了5年,电池越来越不行,马上要冬天了,考虑换个新电动车。

到各个品牌店里转了一圈,发现都没有车子,说是新规的缘故,要到11月份才能有新车。

  •  

北京的三月飞雪

2025年3月16日 18:33

盼了一冬天的雪没下,开春了,来了场大雪。

  •  

wrenAI本地LLM模型部署

2025年3月16日 17:28

Open-source GenBI AI Agent that empowers data-driven teams to chat with their data to generate Text-to-SQL, charts, spreadsheets, reports, and BI.

WrenAI 是一个开源的Text-SQL 的工具,通过导入数据库结构,通过提问的方式生成SQL。

  •  

天津一日游

2025年3月16日 16:35

娃看完中华寻宝记,一直想去天津转转。

大年初九,返京第二天,带娃错峰去一趟天津。

7点出门,直奔北京南站,一路不敢耽搁,在发车前10分钟赶上了车。

  •  

2024年终总结

2025年3月7日 22:23

2024年已经过去3个月了,这篇年终总结从元旦拖到了现在。

2024年是我的本命年,这一年发生了很多事,这一年过的并不太如意。

早就想要总结这一年,但不知道从哪下笔。

  •  

停止使用staticfile.org服务

2024年10月17日 22:34

昨天像往常一样打开博客,发现评论没有加载出来。

一开始以为是手机网络问题,用电脑复现了一下,发现twikoo的js访问报错了。

  •  

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

2024年10月12日 23:32

背景

细心的朋友可能会发现,我的博客图片都带上了水印。

经过博客被恶意镜像这个事情后,我一直在思考如何防止内容被恶意盗用,尤其是博客里的一些图片。

当Hugo遇上AVIF,优化图片加载这篇文章里,使用了ImageMagick工具做了图片压缩。

当时文章最后说留了个坑,其实就是今天的这篇内容,利用ImageMagick自动给图片添加水印。

  •  

如何注册一个.sol域名

2024年10月10日 21:37

Livid大佬新搞了个支持Solana的IPFS/IPNS网关,了解到还有一个.sol的web3域名。

Solana域名服务(SNS)的目标是提供一种去中心化且可负担的方式,将域名(.sol)和链上数据连接起来。这些链上数据可以是SOL地址、 IPFS CID、图片、文本、或者任何其它的东西。

  •  

奥森公园半日游

2024年10月7日 22:24

假期第三天,腰间盘犯了,在家躺了三天。

假期最后一天,感觉轻了许多,今天北京天气非常好,带娃出来走走。

  •  

昌平42公里骑行绿道打卡

2024年10月5日 17:21

五一的时候带娃骑过南边这段,网上查了说北边这段不好骑,难得2号下午有空,决定先自己走一遍看看。

从家附近的奥北森林公园开始,骑行到沙河水库,整个行程近30公里,耗时3个小时左右。

  •  

十月一日爬慕田峪长城

2024年10月4日 22:43

早上5点半起床洗漱,6点出门打车直奔清河站,6点50的火车S515清河-雁栖湖。

虽然坐地铁经常路过清河站,但还是第一次来清河站坐车。

我们提前20分钟到的车站,已经开始排队了。

  •  

博客被恶意镜像

2024年9月26日 22:18

起因

9月初的时候,在Google Search Console里发现了一个外链,域名是**.top

随手点过去看了下,发现居然跟我的博客内容一模一样,就是内容变成了繁体。

  •  

Github Pages 部署流程解析

2024年9月24日 21:30

上周末在搭建个人锻炼页面时,遇到个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年9月22日 16:57

工作的缘故,平时基本一坐一天,缺少运动。

时间久了,各种毛病也就出来了。

搬到新大楼后,每天中午吃完饭楼下遛个弯,走一走,身体精神也好了很多。

坚持了一段时间,也不了了之了。

  •  

你好 Follow

2024年9月17日 00:53

Follow: Next generation information browser.

最近博客圈开始流行Follow邀请码,大家各种求码,一码难求。

蹲在Discord群里一周,虽然时有发码,但最终还是狼多肉少,抢不到码呀。

  •  

中秋爬山

2024年9月16日 23:56

中秋第一天,娃约了同学在公园玩,骑车、滑轮滑,晚上娃带我去了她说非常好吃的一家店吃饭。

晚上回来,想着第二天在家呆一天也是看电视,打算带她爬长城,查了一下,往返的票早已售罄,只好放弃这个方案。

  •  

Google Adsense的审核之旅

2024年9月16日 23:18

中午的时候,突然收到一条消息,打开一看,提示我的Google Adsense审核通过了。

偶然发现Google Adsense里居然有40美金,想起来是之前老博客加的广告。

  •  

一次简短的青岛之行

2024年8月31日 21:24

刚放暑假的时候,就答应了娃带她去一趟青岛。

8月份要回老家,所以定在了7月中下旬出发。

车票/酒店都订好了,结果来了个台风格美。

出发前一周一直在查天气,就怕去了一直下雨。

  •  

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

2024年6月14日 20:41
$ 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

同样的代码在本机编译就没问题,但是放到流水线里编译就报上面的错误。

  •  

302跳转的跨域问题(CORS)

2024年5月17日 20:13

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

浏览器报错

  •  

GORM增加sqlcommenter特性

2024年4月18日 21:25

什么是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.

  •  

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

2024年4月18日 21:14

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年3月16日 10:09

18年的时候办了张工银亚洲的银行卡,好几年没有用过了。

今年想起来了,发现网银登不上了,密码忘了。

最悲剧的是,试了超过10次,账户冻结了。

打95588咨询了一下,说是可以内地见证方式修改密码,只需要带上港澳通行证和身份证即可。

  •  

加速Cloudflare访问

2024年2月21日 20:25

背景

博客架构

这是当前的博客架构,文件保存在Github仓库,通过Cloudflare Page提供访问。

国内访问情况

众所周知,在国内,Cloudflare的CDN属于反向加速,平均耗时在1.5s左右。

  •  

2023年终总结

2024年1月4日 18:41

2023年过完了,是时候来个总结了。

博客

2023年一共更新了15篇内容,共计12000字。

Google Analytics全年统计

访问Top3的文章:

  •  

2023年12月北京暴雪记录

2023年12月16日 10:15

记录暴雪下普通打工人的生活。

12月14日 周四

北京的雪已经连着下了两天了。

12月11日,也是因为下雪,晚上打车打到10点半才叫到车。

所以这次下雪后,晚上就早走了。

  •  

使用Hugo实现响应式和优化的图片

2023年12月10日 08:29

继续我们的博客优化之旅,本篇内容我们将介绍如何使用Hugo实现响应式和优化的图片。

问题

在之前文章里,通过腾讯云数据万象实现了图片优化能力,具体的可参考文章累计布局偏移修复方案改进 —— 自动生成图片宽高

经过一段运行后,发现这里有一个弊端。

Run hugo --gc --minify --cleanDestinationDir
Start building sites … 
hugo v0.119.0-b84644c008e0dc2c4b67bd69cccf87a41a03937e linux/amd64 BuildDate=2023-09-24T15:20:17Z VendorInfo=gohugoio

ERROR Failed to get JSON resource "https://static.***.com/64412246-9050f100-d0c1-11e9-893a-f9b0766533ad.png?imageInfo&t=1698674110": Get "https://static.***.com/64412246-9050f100-d0c1-11e9-893a-f9b0766533ad.png?imageInfo&t=1698674110": stream error: stream ID 1; STREAM_CLOSED; received from peer
ERROR Failed to get JSON resource "https://static.***.com/SkRx5uFwQ8Cliyq.jpg?imageInfo&t=1698674110": Get "https://static.***.com/SkRx5uFwQ8Cliyq.jpg?imageInfo&t=1698674110": stream error: stream ID 3; STREAM_CLOSED; received from peer

随着图片数量增多,因为需要调接口查询图片信息,这里构建耗时变长,同时也特别容易出现超时导致构建失败。

  •  

加速Google Analytics

2023年12月2日 09:25

起因

Google Analytics是一款优秀的流量分析服务,集成方便,使用简单。

最近在优化页面访问速度,发现Google Analytics是一个优化点。

优化

1. 访问加速

国内访问Google Analytics很慢,同时还面临着各种广告屏蔽插件拦截。

  •  

使用Google Indexing API加速博客收录

2023年10月27日 19:32

对于一个新站点来说,总是想着能让搜索引擎快点收录网站内容。

今天,我们就来介绍一种利用Google Indexing API接口,通过Github Actions实现部署时通知Google抓取页面内容。

  •  
❌