MoreRSS

site iconSunZhongWei | 孙仲维 修改

博客名「大象笔记」,全干程序员一名,曾在金山,DNSPod,腾讯云,常驻烟台。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

SunZhongWei | 孙仲维 的 RSS 预览

批量生成测试数据:MySQL SQL for 循环脚本,批量执行一个 insert 语句

2026-01-04 14:27:19

正在测试一个招聘功能,需要生成一堆测试数据,放到某个公司下。

虽然之前尝试过 golang 的 faker 库,参考:自动创建测试数据的库 go-faker。 但是,我感觉,还是不如直接写 SQL 语句来的自由方便。

这里记录一下如何批量生成 MySQL 数据库测试数据的步骤:

先录入一条测试数据

在 web 管理后台,或者 MySQL WorkBench 的 GUI 界面。手动录入一条测试数据记录。

用 Web 管理后台的好处是,可以顺便测试一下开发的管理页面功能是否有 bug。

生成单条的 insert SQL

在 MySQL WorkBench 里,查询显示当前数据表的所有记录。

可以复制某一行(copy row),然后 paste row 黏贴,点击 apply,就能看到对应的 insert SQL 语句。 这条语句记录下来,后面会用到。

SQL 的 for 循环插入

让 AI 写了个 SQL for 循环。这要是让我写,我是写不出来的。。。

use some_db;

-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE batch_insert()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE max_count INT DEFAULT 10; -- 设置循环次数

    WHILE i <= max_count DO
        -- 执行插入语句,这里用变量控制
        INSERT INTO `job`
		(`title`, `company_id`, `location`)
		VALUES
		(CONCAT('后台开发', i), '1', '烟台');

        SET i = i + 1;
    END WHILE;
END$$
DELIMITER ;

-- 调用存储过程
CALL batch_insert();

-- 删除存储过程
DROP PROCEDURE IF EXISTS batch_insert;

把里面的 insert 语句替换成自己的即可。

然后后面就可以调用存储过程来批量插入测试数据了。

这个比正常的 faker 库方便的地方是,可以自由指定某个字段的值,例如给某个公司插入 100 条招聘信息。 要灵感得多。

Emoji 作为网站 favicon,Twitter 开源的一个 Twemoji 项目

2025-12-31 11:19:12

最近喜欢使用 Emoji 作为页面内的图标,可以省去引入三方图标库的麻烦。而且美观度也非常好。

但是 favicon 图标是否也可以直接使用 Emoji 呢?直接使用是不行的,因为 favicon 要求是一张图片或者 SVG。 于是,我找到了一个有趣的实现,就是这个 Twitter 开源的 Twemoji。

Emoji 作为网站 favicon

Twitter Emoji (Twemoji)

A simple library that provides standard Unicode emoji support across all platforms.

简单翻译一下,它是一套开源的表情符号(Emoji)图标库。这个项目的核心理念是 “Emoji for everyone”,致力于让所有人、在所有平台上,都能自由地使用一套标准、美观且一致的表情符号。

Emoji 对应的图片链接

Twitter 官方的地址已经访问不了 https://twemoji.twitter.com ,可以到下面这个网站找到每个 Emoji 对应的图片链接地址:

https://favicon.io/emoji-favicons/

例如日历 Emoji 对应的地址:

https://cdn.jsdelivr.net/npm/[email protected]/2/svg/1f4c5.svg

日历 Emoji 图标

公司内部 MES 系统二次开发系列

2025-12-29 07:59:37

todo

  • 新建一个数据库只读账号
  • 把数据表结构导出,给 ai 分析每个表的作用,以及不同表之间的关联性
  • Oracle 测试环境。能否用 docker 安装
  • 如果 Oracle 不方便搭建测试环境,是否可以用 golang gorm orm 的 mysql 替代,上线时切换为 Oracle
  • mes 基本概念的了解。问 DeepSeek
  • 找本 mes 的书,有目的性的看看
  • 先实现一个最简单的扩展概念
  • 沟通开发周期
  • 基于 AI 重构一套 MES 系统
  • 基于 AI 构建大中型系统的工作流

DONE

  • 确认是否能拿到源码。已确认,这套拿不到。理论上,买的,有一种版本是带源代码的,那种的贵一些

AWS CLI 命令行工具获取 Linode Object Storage 上的文件列表

2025-12-26 17:23:05

在服务器上挂载了 Linode Object Storage 之后,想要获取某个 bucket 下的所有文件列表。 发现用 ls 命令非常慢,尤其是文件数量非常多的时候。例如 2 万多个文件,ls 命令不知道要等待多久才能返回结果。 因为 Linode Object Storage 兼容 S3 协议,所以我想试试用 AWS CLI 工具来获取文件列表,将结果保存到文本文件中。

因为本机是 Windows,WSL 下的 Ubuntu 还是 18.04 版本,版本有点旧了。所以,我打算直接在 Windows 上安装 AWS CLI 工具来使用。

下载安装

https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

直接使用里面 msi 安装包下载安装即可。

确认安装完成

打开 PowerShell 或 CMD,输入以下命令:

> aws --version
aws-cli/2.32.23 Python/3.13.11 Windows/11 exe/AMD64

说明安装成功。

登录、身份认证

如果直接执行以下命令,会提示无法找到凭证:

> aws s3 ls --endpoint=https://ap-south-1.linodeobjects.com

Unable to locate credentials. You can configure credentials by running "aws login".

但是 aws login 的输入提示,我完全看不懂。。。所以改用 aws configure 命令来配置身份认证信息, 即,输入 Access Key 和 Secret Key。

> aws configure
AWS Access Key ID [None]: MY_ACCESS_KEY_ID
AWS Secret Access Key [None]: MY_SECRET_ACCESS_KEY
Default region name [None]: us-east-1
Default output format [None]: json

查看 bucket 列表

配置完成后,执行 ls 命令来测试一下,注意,这里需要加上 --endpoint 参数,指定 Linode Object Storage 的 endpoint 地址,否则会默认连接到 AWS 的 S3 服务。 后续的所有命令都需要加上这个参数。

> aws s3 ls --endpoint=https://us-east-1.linodeobjects.com
2024-04-03 14:49:24 a.sunzhongwei.com
2025-04-12 11:36:26 b.sunzhongwei.com

不加 --endpoint 参数的话,会报错:

An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation: The AWS Access Key Id you provided does not exist in our records.

或者:

An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: Unknown

换个 region 的 endpoint 地址试试

例如,换成新加坡的 endpoint 地址:

> aws s3 ls --endpoint=https://ap-south-1.linodeobjects.com

导出某个目录下的所有文件列表

例如,导出 a.sunzhongwei.com/cache/ 目录下的

aws s3 ls s3://a.sunzhongwei.com/cache/ --recursive --endpoint=https://us-east-1.linodeobjects.com > filelist.txt

recursive 参数表示递归列出所有子目录下的文件。

注意,s3:// 后面是 bucket 名称,然后是目录路径。不要加上 endpoint 地址。endpoint 地址是通过 --endpoint 参数传递的。

处理返回的文件列表数据格式

注意,如果是 Windows 11 下的 PowerShell 执行上述命令,导出的文本文件 filelist.txt 会是 utf16le 编码格式的。 utf16le 编码需要转成 utf8 才能继续使用 linux shell 工具处理。转换很简单,用记事本打开,然后另存为 utf8 编码格式即可。

然后用 VSCode 打开文件,确认一下返回的数据格式,在 WSL Ubuntu 下使用 awk 命令处理数据,例如提取出文件路径:

awk '{print $NF}' filelist.txt > result.txt

$NF 代表每一行的最后一列。

PowerShell 里面没有 awk,我即便用 AI 生成 PowerShell 命令,我也看不懂里面的参数格式,太抽象了,还是 Linux awk 命令更直观一些。

免费 AI 大模型 API 接口,Gemini 3 Flash 预览版的 Golang 代理实现

2025-12-25 13:08:31

最近用 Gemini 3 Flash 开发非常爽,于是我想如果能程序化调用 Gemini API 就更好了,可以自动化一些日常的任务。 而我印象中 Google 是提供了一些免费的 AI API 额度的。于是我查了一下确实有免费的额度可以使用 Gemini API。

在 Google AI Studio 上申请免费的 API Key 后,就可以使用 Gemini API 了。下图是一些免费可用模型的额度列表:

Gemini 免费可用模型的额度列表

速率限制

速率限制通常从以下三个维度进行衡量:

  • 每分钟请求数 (RPM)
  • 每分钟 token 数(输入)(TPM)
  • 每日请求数 (RPD)

速率限制按项目应用,而不是按 API 密钥应用。每天的请求数 (RPD) 配额会在午夜重置。实验性模型和预览版模型的速率限制更为严格。

API Key 申请地址

https://aistudio.google.com/api-keys

Gemini 3 Flash 预览版也有免费的额度

https://ai.google.dev/gemini-api/docs/pricing?hl=zh-cn#gemini-3-flash-preview

不过免费的额度有各种限制:

  • 每分钟请求数 (RPM):5次
  • 每分钟输入 token 数 (TPM):250K
  • 每天的请求数 (RPD):20次

看起来有点少,但是对于一些简单的自动化任务来说,已经足够了。 例如,我 Github Copilot 一个月 1000 次的 Gemini 3 Flash 额度,我也就用了 10% 左右。也就是 100 次左右。每天才几次。

golang 库

https://github.com/googleapis/go-genai

Google 官方提供的 golang 库,可以方便地调用 Gemini API。安装:

go get google.golang.org/genai

使用起来非常简单, 示例代码:

import "google.golang.org/genai"

client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:   apiKey,
	Backend:  genai.BackendGeminiAPI,
})

parts := []*genai.Part{
  {Text: "What's this image about?"},
  {InlineData: &genai.Blob{Data: imageBytes, MIMEType: "image/jpeg"}},
}
result, err := client.Models.GenerateContent(ctx, "gemini-2.5-flash", []*genai.Content{{Parts: parts}}, nil)

把这个服务部署在海外服务器,就能在国内访问 Gemini API 了。

量大管饱的 gemma 3 系列模型 API

gemini 那些 API,大部分都限制在每天 20 次请求,5 次每分钟请求数。 如果遇到需要大量请求的情况,可以使用 gemma 3 系列模型,这些模型日限制在 14.4K 次请求,完全够用。

但是没有提供 Golang 的 API,只有 python 和 nodejs 的 API。

https://ai.google.dev/gemma/docs/core/gemma_on_gemini_api?hl=zh-cn#rest

不过看 curl 的示例非常简单:

curl "https://generativelanguage.googleapis.com/v1beta/models/gemma-3-27b-it:generateContent?key=xxx" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
  "contents": [{
    "parts":[{"text": "Roses are red..."}]
    }]
   }'

把 Key 写在 URL 里也是一种创举,完全不考虑被泄露的风险。。。🥲 Google 也有不专业的开发啊。

不过会看到 Gemini 系列则是正常的在 HTTP Header 里传递 Key。估计是不同团队搞的。

于是用 Golang 实现了一个简单的 gemma 3 系列模型的 API 调用。 判断请求的模型是 gemma 3 系列模型的话,就走 gemma 3 的调用逻辑,否则走 golang 官方库的调用逻辑。

到此,就实现了一个完整的 Gemini API 代理服务,支持 gemini 系列和 gemma 3 系列模型。 后续就可以在这个基础上,做一些自动化的功能了。

生成无 AI 水印图片的在线工具

2025-12-25 12:35:28

由于经常要发微信公众号文章找封面配图,现在用某包生成的图片,右下角都带着“某包 AI 生成”的字样。 之前还可以通过小米手机内置的图片编辑,轻松抹去水印,但是昨天突然发现,用澎拜 OS 系统内置去水印功能后,右下角增加了“AI 生成”的字样。估计是现在法规严格了吧,强制所有 AI 模型都加上了估计。这是不给我活路了么 🥲

不过天无绝人之路,我找到一个好办法:

直接使用 huggingface 里部署的 Z-Image-Turbo。省去了每次都需要手动去掉水印的繁琐操作。

https://huggingface.co/spaces/Tongyi-MAI/Z-Image-Turbo

这个应该是阿里开源的一个图片生成模型 Z-Image-Turbo,使用起来很简单,也是输入提示词,设置图片宽高比例就能开始生成。效果感觉跟某包的效果没有什么差别。其实主要是考验提示词的详细程度。

操作界面

no_watermark.jpg