Brandon Zhang

Brandon Zhang

Square Migration经验总结

这篇属于我自己总结下最近在工作中写一个图片迁移脚本的经验总结。 * 不要假设本地和stage服务器正常使用,部署到生产环境就可以也正常使用 * 刚开始可能想尽快的把实际的功能实现出来,但最后部署到生产环境一旦脚本跑不了调试就很麻烦,而且像这个情况cron没有执行还无法顺利调适,所以后续写类似这样的迁移脚本,先从logs开始,写一个好的logs有助于后续顺利查找问题所在 * 如果是比较急的脚本,比如这次的脚本涉及export和import,是否可以分成两个阶段,先写export,因为export出来的所有图片需要进一步处理,这期间需要时间,那么这个时间其实完成可以用来写import的部分,这样总体节省时间,更高效 * 另外是或许需要备选方案,就比如这次的cron在生产环境执行不了,导致剩余的200多个events没法导出,然后后来又写了一个手动导出的按钮来操作,那么其实刚开始的时候就应该需要想到这个备选方案,所以凡事多想一步吧
1 min read
当对一个爱好太有激情时

当对一个爱好太有激情时

去年11月中旬买的二手长焦镜头,从此一发不可收拾,对拍鸟的热情越来越强,以至于现在都不想写个人项目了,一有时间就花在拍鸟上,无论是到森林或湿地公园,或者研究相机,镜头等设备,再或者看一些其他摄影师的拍鸟视频。然后在开始拍鸟之前,写自己的个人项目是很有激情的,一般早上会在麦当劳吃个早餐,然后打开电话开始忙活。 所以说每个人每个阶段钟爱的事情都或许会不一样,这也正是神奇的地方了。那么拍鸟可以让我更专注的置身于自然环境中,放慢脚步,有时候还需要在一处地方守株待兔,可以让自己的心境慢下来,另外我相信也可以好好磨练自己的耐心,我好像耐心一直都不是特别好,希望这个爱好可以带来不一样的改变。 这里还想记录下在龙岩碰到的一位老爷爷,今年87岁了,还背着和我一样的长焦镜头在公园里拍照。我那天在公交车等车,他看到我手上拿着相机,于是我们聊起来了,后来我们一同坐公交车前往附近的一个公园,我看到腿脚都不是特别灵巧了,走路还有一些晃荡,但是对于摄影的热情确却是满满的。和我聊了一路,知道他是从退休后开始接触摄影了,那会全国到处去拍鸟,然后国外还去过俄罗斯和缅甸,让我很吃惊。国内就西藏和西北一些地方没去,因为海
4 min read
Git Commit pre-commit检查

Git Commit pre-commit检查

记录一个pre-commit检查,判断当前项目是否使用正确的用户名来提交Commit。 如果使用的IDE是VS Code,默认情况.git文件夹是被隐藏的,需要打开设置,然后搜索“exclude”,取消隐藏.git 文件夹。然后添加一个pre-commit文件,并允许执行这个文件。 touch .git/hooks/pre-commit touch .git/hooks/pre-commit.mjs chmod +x .git/hooks/pre-commit 因为我想用Node.js写,所有在这里再调用pre-commit.mjs文件。 #!/bin/sh # This shell script simply triggers your Node ESM script. node .git/hooks/pre-commit.mjs 接下来添加我们需要检查的git用户名和邮箱地址。 #!/usr/
1 min read
CloudPanel配置ActivityPub,让其他服务器用户可以直接关注WordPress博客

CloudPanel配置ActivityPub,让其他服务器用户可以直接关注WordPress博客

cd /etc/nginx/sites-enabled/ sudo vim photos.heybran.tech.conf 修改前的location ~ /.well-known配置。 server { // ... existing rules location ~ /.well-known { auth_basic off; allow all; } } server { // ... existing rules } 更新第一个server block的location ~ /.well-known配置,同时在下一个server block里面添加一个location ~ /.well-known/webfinger配置。 server { // ... existing rules location ~ /.well-known { auth_basic off; allow all; proxy_set_header Host $host; proxy_set_header
1 min read
AI预审代码的Pros & Cons

AI预审代码的Pros & Cons

我们公司于2025年底在我们的项目中添加了AI预审代码,然后最终再给到Senior同事审核。 Pros * 确实可以发现真人审核不容易发现的漏洞,人工审核不容易发现问题是仅审核在git diff里面出现的代码,而AI可以扫描整个项目的代码来分析PR中的代码所存在的问题 * 降低Senior同事最终审核代码的成本和时间 Cons * 每次提交commit修复PR,AI会审核一次,但是每次审核AI不是报告出所有的问题,目前的模型审核的效果是每次跑会随机提出不一样的问题,每次审核需要花大概7到10分钟左右,基于每次审核所报告出的问题不一样,开发者需要跟AI审核周旋好几次,所以这种情况不比人工审核有效,人工是单次审核,把所有的问题列出,一般很少会遗漏问题 * 不环保
1 min read
我犯了歧视性别的错误

我犯了歧视性别的错误

正在地铁回宿舍的路上,在手机上登陆博客后台,记录下去年菲律宾参加WordCamp Asia时,自己当时一个愚蠢的潜意识行为。 当时在看两位开发者在台上合作分享一个他们公司的一个WordPress项目,其中有提到Web Components,熟悉我的伙伴知道我对Web Components是偏爱的。这两位是一男一女,在他们的talk结束后,他们下了舞台,然后我主动上前去想跟他们交流下具体是如何在项目中使用Web Components的,然后我潜意识里就走向男的开发者,提了问,简单聊了几句然后要求和他来张自拍合影。合影结束我往座位走回去的时候我发现自己做出了一些严重的错误: * 为什么我没有和女开发者打招呼? * 为什么我不是向女开发者提问? * 为什么合影时我没要求女开发者一起?当然第三点在前面两点没有做到时显得过分多余。 我其实是犯了一个在业内常出现的一个错误,大部分人潜意识觉得互联网圈子内,男性开发者是占主导地位的,所以也就导致我不知觉的做出这样的行为。其实,如果我是那位女开发者,也会觉得尴尬或者感到被歧视,因为在台上他们的演讲并没有分主次关系,两位都是业内优秀的开发者。
2 min read
山西之行

山西之行

出发前几天看福州到长治的机票还可以就买了。2025.11.28早上8:55的飞机,多亏了新开通的福州滨海快线,刚好赶上。飞行2个小时20分钟左右。长治机场就在城区边上,我选择直接走路到城里。机场路一路两边很多鸟可以拍,不过这些鸟太容易被脚步声惊扰,所以并没有拍到一张好的。 午饭找了一家当地的小吃,不过我好像吃不惯。 入住旅馆放下行李后,地图看到附近有一个老顶山国家森林公园,不假思索就出发了。公园其中一个山顶上有一座巨大的关帝铜像。 照片是下山后在山脚下通过长焦镜头拍的,否则实现不了这样的角度。爬上铜像要花25元,就没上去。 吃完晚饭后回到旅馆,看了《浪浪山小妖怪》,非常好看。因为今天是周五,九点的时候和伙伴们进行了线上英语角。 9.29 今天准备前往国家湿地公园去打鸟。坐公交时被司机感动到,我没注意看车号,公交车开出去的时候我才示意要乘车,大概开出20米后我看车停了下来,于是我飞奔过去,尴尬的上车,司机跟我说了一句当地方言,我没听懂,估计是说: 怎么刚才车停下来的时候没上车?我听不懂,直接回了几句谢谢。 十点左右到的漳泽湖国家城市湿地公园,拍了一天照,午饭都没吃,因为舍
5 min read
编程

PHP静态函数回传类型:static 与 self 的差异

这是AI解释的,搬到这里来免得自己忘了。 在PHP静态方法(static method)的回传类型提示中,使用 static 和 self是两个常见的选项。它们都表示方法可能返回一个类实例,但它们在继承和多态性(Polymorphism)方面的表现有所不同。 使用 self (类型被锁定) 当在 ParentClass 中使用 : ?self 时,回传类型永远锁定为 ParentClass。 class ParentClass { // 尽管 new static() 实际创建的是 ChildClass 实例, // 但类型提示被锁定在 ParentClass。 public static function factory(): self { return new static(); } } class ChildClass extends ParentClass {} // 呼叫 ChildClass::factory() $instance
1 min read

阅是读书,历是出行

随年纪越来越大,越觉得阅读和出行的对于一个人修行的重要性。现在这个快节奏的社会的人们最大的一个问题是不能与孤独独处。一旦人们闲下来或者觉得无聊时,那么各种消极的想法就会涌现到脑海,于是我们努力着摆脱这个孤独,无论是电视,刷短视频等等,都是在让自己脱离孤独,以至于暂时逃避那些消极的想法。 最近读完的《心流》这本书,真的体会很多,非常建议看到这篇文章的你也去读一读,你会感谢我的。 这会儿我在从重庆回福州的火车上,在手机上的Ghost博客后台编写的文字。这次出行也成功说服自己入手了一台二手单反,佳能EOS 80D,配的EF-S 18-135mm镜头,接下来应该可以重新拾起摄影的热情。我是很相信命运的,如果没有这次的出行,可能买相机的执行力还要拖延很久,拖延原因是不知道选哪个型号,以及是否购买新机还是二手。 有几年没用相机了,不过之前用的也是佳能型号,所以设置熟悉起来相对容易些,在奉节三峡之巅和白帝城拍了一些。 图揽:三峡之巅,白帝城佳能EOS 80D,单色和彩色原图。Brandon ZhangBrandon Zhang 写着写着好像博客正文和标题并不是很搭配,不过无所谓了,本博客主
2 min read
给Ghost Gallery组件增加放大图标
Ghost

给Ghost Gallery组件增加放大图标

Ghost Gallery组件在移动端的样式和桌面端的样式一致,这样在手机上看图片过于小,不过它支持lightbox功能,点击图片可以放大,所以问题不是很大,但是可能很多用户不知道点击图片来放大查看,例如这位朋友所提交的issue一样:https://github.com/TryGhost/Casper/issues/948 我也在issue底部留言的我的个人解决方案,就是在图片右上角增加一个放大图标,提醒用户图片是可以点击来放大查看的,CSS代码在issue留言中已经说了,就是几行简单的代码。 <style> .kg-gallery-image { position: relative; &::after { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdH
2 min read
太姥山之行
旅行

太姥山之行

9.19 中午到的太姥山站,出站后转8路公交车到太姥山游客中心。淡季门票90元,我以为宁德户口有优惠,结果没有。 景区出来后,到镇上找了一家饭店,吃的炒溜溜粉。 其实应该吃个锅边的,店门口正在做锅边。 一看颜色就知道是纯的地瓜粉做的,味道应该和老家一样。 晚饭后等不到公交车于是打车到的火车站前往温岭。 9.20 今天早上去逛了温岭市博物馆,看到了一个国宝重器,温岭下面一个村出土的商代的蟠龙纹青铜盘。 不过居然发现这个国宝旁边的英文介绍标签,居然把英文单词dynasty给拼错了。 博物馆逛完在附近找了一家面店吃的特色姜汤面,有鱼有虾,虽然价格38元挺贵,不过味道确实很不错的。 午饭后走到一个公园,在湖边休息和看书。 9.21 早餐吃的当地嵌糕,其实很和平常见到那种山东煎饼差不多,只是这个嵌糕不是煎的,有点类似米糕的感觉,不过不是很吃的惯。
2 min read
个人项目该怎么开展比较合适?
编程

个人项目该怎么开展比较合适?

平常工作期间写公司项目的业务需求,都是有一个明确的scope,准确的知道完成任务是什么样的一个状态,完成一个需求就会有满足感,然后提交到代码评审,评审过了再提交给测试,有一个完成的多人参与的一个流程,这样的话我们潜意识里觉得是成功的完成了一个业务需求,对自己的付出做出一个肯定,从而刺激我们的大脑,说好样的,而且也不会感到疲惫或者困惑。 那么对于个人项目,这其中的区别就很大了,不知道这个是否适应于所有人,起码对于我自己而言,刚开始一个个人项目的时候激情满满,好像一坐下来可以写大半天不休息的那种,但是随着项目越写越复杂,激情在渐渐减弱,这种减弱不是说对项目不感兴趣了,而是我们并没有很好的一个规划,一直处于写的状态,然后没有给自己做一个清晰的规划,到底写到哪里算是完成今天的任务,久而久之我们的大脑就会不适应,达到不了写公司项目的那种刺激,而且写个人项目仅仅是个人参与,没有其他人的正面反馈,那么这其中就很需要将这个项目scope做一个完整且清晰的规划,比如今天写哪个需求,写到哪里算结束,然后写好了怎么鼓励自己,而且可以达到一个有效的循环,而不至于导致burnout,这是很值得思考的一个问题。
3 min read