大象笔记

知者行之始,行者知之成

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

在服务器上挂载了 Linode Object Storage 之后,想要获取某个 bucket 下的所有文件列表。 发现用 ls 命令非常慢,尤其是文件数量非常多的时候。例如 2 万多个文件,ls 命令不知道要等待多久才能返回结果。 因为 Linode Object Storage 兼容 S3 协议,所以我想试试用 AWS CLI 工具来获取文件列表,将结果保存到文本文件中。 因为本机是 Windows,WSL 下的 Ubuntu 还是 18.04 版本,版本有点旧了。所以,我打算直接在 Windows 上安装 AWS CLI 工具来使用。 下载安装 https://docs.aws.amaz ...

阅读全文...

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

最近用 Gemini 3 Flash 开发非常爽,于是我想如果能程序化调用 Gemini API 就更好了,可以自动化一些日常的任务。 而我印象中 Google 是提供了一些免费的 AI API 额度的。于是我查了一下确实有免费的额度可以使用 Gemini API。 在 Google AI Studio 上申请免费的 API Key 后,就可以使用 Gemini API 了。下图是一些免费可用模型的额度列表: 速率限制 速率限制通常从以下三个维度进行衡量: 每分钟请求数 (RPM) 每分钟 token 数(输入)(TPM) 每日请求数 (RPD) 速率限制按项目应用,而不是按 API 密 ...

阅读全文...

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

由于经常要发微信公众号文章找封面配图,现在用某包生成的图片,右下角都带着“某包 AI 生成”的字样。 之前还可以通过小米手机内置的图片编辑,轻松抹去水印,但是昨天突然发现,用澎拜 OS 系统内置去水印功能后,右下角增加了“AI 生成”的字样。估计是现在法规严格了吧,强制所有 AI 模型都加上了估计。这是不给我活路了么 🥲 不过天无绝人之路,我找到一个好办法: 直接使用 huggingface 里部署的 Z-Image-Turbo。省去了每次都需要手动去掉水印的繁琐操作。 https://huggingface.co/spaces/Tongyi-MAI/Z-Image-Turbo 这个应该是阿里 ...

阅读全文...

Oracle 表空间扩容,给 MES 系统续命

公司购买了一套内部使用的 MES 系统。使用后,隔一段时间就会出现系统卡顿的情况,需要开发商进行远程解决。 他们每次都是执行了几个 Oracle 数据库的操作命令,然后系统就恢复了。 由于我只有 MySQL 的使用经验,对 Oracle 数据库完全不了解,所以记录一下,方便以后参考。 奇怪的 alter 语句 alter tablespace SOME_DATA_1 add datafile 'E:\some_path\some_file.dbf' size 3000m; alter tablespace SOME_DATA_2 add datafile 'E:\some_path\anot ...

阅读全文...

图片颜色分析工具,在线提取图片主色调,分析颜色分布

在开发一个公司的新网站,为了尽快上线,我直接复用了之前的项目的页面模版。 但是,之前项目的色调过于艳丽,而且跟公司新业务的 logo 色调不符。 我决定修改这个前端模版的主色调。页面主色从 Logo 图片里提取,是个不错的选择。 于是我写了一个小工具,在线提取图片的主色调,并分析颜色分布,方便我挑选合适的颜色用在新网站上。 在线体验地址: https://www.sunzhongwei.com/tools5/image-color 界面效果 只需要上传一张图片,工具就会自动分析图片的主色调,并生成颜色分布图表,展示每种颜色的比例。 同时,工具还会给出每种颜色的 RGB 和 HEX 代码,方便 ...

阅读全文...

Golang Template include 嵌套子模版时的变量重命名

Golang Template 开发网页时遇到一个模版内变量命名的问题。 问题 多个不同页面需要使用同一个子模版,比如推荐产品列表这个子模版,需要在产品列表页、首页、404页面、搜索页面等多个页面使用该子模版。 子模版目前是这样定义的, product_cards.html: {{ range .Items }} <div class="product-card"> <a href="{{ .URL }}" class="block"> <h3 class="product-name&qu ...

阅读全文...

Go 项目版本号自动管理,并发布 git tag

最近使用 Golang 开发的网站项目比较多,所以把一些常用的功能写成了一个公共库,放在 GitHub 上,方便在其他项目中通过 go get 使用。 这个公共库的版本号需要通过 git tag 来管理。每次发布新版本时,都会在 git 上打一个 tag,然后在其他项目中通过 go get 来获取最新版本。例如: go get github.com/sunzhongwei/hades@v1.0.2 手动打 git tag 的烦恼 手动设置很容易漏掉 v 前缀,例如,v1.0.2 一不小心就写成了 1.0.2。 这个问题还不容易被察觉 🥲,在其他项目中需要 go get 新版本时,如果还继续使 ...

阅读全文...

golang gin static 强制以文件方式下载

用 golang gin static 实现了一个文件下载功能,同时下载前需要先鉴权。例如: // serve /download under a group that enforces token validation g := r.Group("/download") g.Use(DownloadAuthMiddleware()) g.Static("/", downloadPath) DownloadAuthMiddleware 是一个中间件,会判断文件下载链接中的 token 参数是否过期。 这个加载功能,在本地开发环境是一切正常的,但是到了线 ...

阅读全文...