大象笔记

知者行之始,行者知之成

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

在开发一个公司的新网站,为了尽快上线,我直接复用了之前的项目的页面模版。 但是,之前项目的色调过于艳丽,而且跟公司新业务的 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 参数是否过期。 这个加载功能,在本地开发环境是一切正常的,但是到了线 ...

阅读全文...

Docker Compose 配置容器的工作目录(working_dir)

使用 Docker Compose 配置文件,新建了一个 alpine 镜像的容器。 里面运行了一个 golang gin 开发的 web 应用。没想到,又踩了一个 docker 配置的坑 🥲 我感觉踩的 docker 坑多得数不过来啦 相对目录问题 我发现了一个线上的 bug,线上服务器中,使用 golang 创建的相对路径的目录,结果发现目录创建在了根目录 / 下,而不是预期的 /app 目录下。 本地开发机,没有使用 docker,目录位置都是正常的 线上服务器,使用 docker 部署的,目录位置不对。全部到了根目录下。 线上服务器,不使用 docker,使用 systemd 直接运 ...

阅读全文...

昆汀推荐的21世纪10部电影

近日,知名导演昆汀·塔伦蒂诺在播客节目中,正式揭晓了他心目中自21世纪以来最为杰出的电影作品榜单。据悉,这份精心挑选的片单共收录二十部影片,其中位列前十的电影如下: 《黑鹰坠落》 《玩具总动员3》 《迷失东京》- 2025-12-07 看完。英文名为 《Lost in Translation》,中文名翻译的不太好 《敦刻尔克》 《血色将至》- 2025-12-08 看完。神剧本,只有老美才能拍出这种类型的神片 《十二宫》 《危情时速》 《疯狂的麦克斯:狂暴之路》 《僵尸肖恩》 《午夜巴黎》 正好最近不知道看什么,是个值得参考的清单。我决定从迷失东京开始 🤣 (周末看了一下,开屏雷击,建议独 ...

阅读全文...

Golang Gin Static 缓存大坑:embed 文件无法被 CDN 和浏览器缓存

Golang 最爽的一点是,可以打包时将静态文件 embed 进二进制文件中,部署时只需一个可执行文件,极大简化了部署流程。 例如,网站的 js 和 css 文件,可以 embed 进二进制文件中,而无需发布时再额外拷贝一堆静态文件。 但是,最近我发现了一个浏览器缓存问题! 😓 问题现象 今天早晨,我还没起床,突然想看看最新开发的一个网页版手机租金计算器是否能在微信里正常打开,主要是担心微信对某些 js 特性的支持不好。 结果发现,页面一片空白,但是刷新了几次就正常了。有点懵,打开阿里云 ESA 的请求日志,发现访问 css 文件时,每次都回源站请求。 其中一次源站没有响应,导致页面空白。这 ...

阅读全文...

Cloudflare VS 阿里云 ESA :开发者眼中的“流量黑洞”与“免费天堂”

最近一周同时经历了国内网站服务器和海外服务器被大规模 CC 攻击的经历。 恰好同时使用了阿里云 ESA 和 Cloudflare 两种不同的防护服务,也通过这两家的服务分别解决了国内和海外的 CC 攻击问题。 经过几天的折腾,算是有了一点点的经验收获。这里主要说一下阿里云 ESA,因为 cloudflare 大家可能都比较熟悉了。 而我则是先使用的阿里云 ESA,之后才使用的 cloudflare。我用 cloudflare 时,也是完全依据使用 ESA 时积累的经验。 先说好的地方 经过一周多的使用,算是掌握了基本的阿里云 ESA 内置的 WAF (Web Application Firew ...

阅读全文...