大象笔记

知者行之始,行者知之成

国庆假期处理的第二例网站服务器被刷流量,导致 Linode Server 宕机

国庆第一天,刚处理了国内的阿里云个人博客服务器被刷爆带宽。 而国庆第五天,一大早就收到海外的一个网站服务器(Linode Server)的宕机通知邮件。 早上一起床就赶紧登上了服务器,发现是网站服务器被刷流量,直接导致服务器负载过高,网站无法访问。 攻击流量特征 几乎全部的垃圾流量都是在刷一个站的博客列表页面,路径如下: /latest-blog?mdrv=<xxx.com>&start=<random_number> /latest-blog?=1&pagespeed=%27%3Fpagespeed%3D%27&start=2750 正常的 ...

阅读全文...

随机生成家庭住址及工作单位,职务等个人资料的在线工具

开发完了公司内网的人事管理系统,开始动手测试,发现里面的测试数据惨不忍睹,全是 111,222 这样的名字,员工资料里全是数字,显得系统异常粗糙😵‍💫。明天就要给人事部门演示了,这样可不行。于是我就用之前开发的 随机生成身份证号,手机号,邮箱地址的微信小程序 生成了一堆测试数据,界面里面看起来像个正式一点的人事系统了。但是,还有一部分数据没法自动生成,例如,家庭住址/户籍地址,工作单位,职务这些信息。 于是,我想干脆借此机会把这个工具再完善一下,就加上了更多的个人资料字段随机生成,效果如下: 本来想加上一些工资卡开户银行的信息想想算了,怕引起敏感词问题。同时增加了网页版本,方便在不方便登录微 ...

阅读全文...

git blame 确认代码中的屎是不是自己拉的

今天在排查一处程序 bug 时,发现一段代码写的逻辑实在乱,完全没有印象正确的逻辑应该是怎样的。 于是想查看这段代码是不是自己写的,什么时候写的,为什么这么写的。 直接在 VSCode 的 github copilot 的 Chat 窗口中问了一下: 如何通过 git 命令查看某段代码是那个提交修改的:例如: line1 line2 line3 得到的回答是,可以试试 git blame 命令。试了一下,非常好用。 git blame 示例 例如, 我想查看 models/product.go 文件中第 10 到 13 行的修改记录,可以运行: git blame -L 10,13 mode ...

阅读全文...

Magento 服务器磁盘空间被图片缓存占满

最近批量导入了一批 Magento 产品信息,不知道为何直接导致服务器磁盘空间被占满。 而导入的产品也不多,不到1万个,理论上不应该占用上 G 的空间啊。 使用 ncdu 工具排查 使用之前的磁盘空间分析工具 ncdu。使用方式参考: 使用 ncdu 命令分析 linux 磁盘空间占用 发现,最占磁盘空间是 Magento 的项目目录。占了 76 G。 然后,在结果里面逐级进入子目录,发现最占空间的 Magento 子目录是: pub/media/catalog/product/cache 占了 56 个G。这个目录里全部是产品图片的缓存,即各种尺寸的缩略图。 不得不说,ncdu 真是运维神 ...

阅读全文...

工作周报自动生成,基于 Git 历史的 AI 提示词

每个周写周报是最浪费生命的事情之一,之前就吐槽过一次。本来是部门范围内提交就可以了,现在变成了公司所有人都需要提交,还要抄送人事部门,保证人事部门的 HR 也能看懂 🥲 这就很头疼,比如花费了一天时间完成了复杂的文件资料管理功能,但是提现在周报里就是一句话“实现了文件资料管理接口”。看起来没啥工作量的感觉 😅 比起写周报,还是写代码简单快乐一点。 今天周一,傍晚临下班提交 git commit 时,准备顺便把提交内容复制一份到周报文件里,这样就能省去周五下午花时间再整理。突然想到,为何不能让 ai 根据 git 提交历史信息自动生成周报呢🤔 great idea!于是动手试验了一下,效果非常满 ...

阅读全文...

Magento 的批量导入机制,及数据库表 importexport_importdata

找了半天 Magento 无法批量导入的问题,最后发现是 crontab 里设置了一个定时任务,每半小时 restart php fpm 的 docker 容器。导致 Magento 的批量任务没有执行完,就被 restart 中断了。如此反复,导致没有一个批量任务导入成功的。 我在 Magento 日志中,没有找到任何的相关日志,完全靠翻看数据库表结构,盲猜 magento 的导入机制,才解决这个问题的。 记录一下排查中学到的 Magento 无用知识: 数据库表 有个数据表,名为 importexport_importdata,记录了需要导入的产品信息。 实际数据来源就是,后台上传的 c ...

阅读全文...

人事管理系统开发之三,员工编号号批量生成

需求 人事管理系统中,员工入职的时候,需根据公司前缀生成唯一的员工号。 TODO 找几个知名公司的工卡看看员工号的格式 确保公司信息表中有公司前缀的字段 整理成文档。可以节省其他人收集的时间 按照入职时间顺序生成员工号。参考之前生成设备序列号的规则,复用一下这部分代码。 线上改表 问题的本质 员工号是做什么用的?如果没有员工号,会影响公司运营么? 方便客户投诉时使用。。。因为用名字投诉不方便,也容易重名,用员工编号最合适。 作为员工的唯一标识符 作为员工的登录账号 作为员工的考勤打卡号。作为一些三方考勤设备的标识。 作为员工的薪资发放账号 老员工的问题 按理说应该按照入职时间顺序生成员 ...

阅读全文...

人事管理系统开发系列

在使用 Golang Gin 开发一套公司内部使用人事管理系统。至于为何不使用企业微信或者钉钉,飞书之类的现成系统内置的人事管理模块。领导们给出的原因是,公司内部架构太复杂,企业微信内置模块不支持。 但是实际上,我感觉还是人事部门负责人并没有完整了解过这些平台的人事管理模块,其实是足够灵活配置的,满足需求。只是这些人懒得去了解罢了。不过多抱怨这些了,让开发就开发吧。 这个开发的过程非常的枯燥无趣,而且这种成熟的内部系统,开发再多也没有产出和价值。所以,我觉得边开发,边整理遇到的问题。才能不至于写着写着代码,就想去划水。 系列章节 人事管理系统开发之一,办理入职功能的一起编辑填写功能的实现方 ...

阅读全文...

人事管理系统开发之二,员工资料上传

需求 人事管理系统里设置了一堆员工需要上传的资料清单。当然,包含必须上传的和非必须上传的。 必须上传的,包括毕业证,学位证等 非必须上传的,包括各种资格证书,离职证明等 在编辑员工信息时,会拉取这个清单,显示在界面上。HR 或者员工可以选择上传对应的文件。 接口设计 原有的资料清单接口不做变化,保留,用于资料清单的后台增删改查编辑之用。 需要新增一个资料清单列表接口,可以提交员工 ID,在拉取资料清单的同时,返回: 该员工已经上传了哪些资料 上传时间 上传人 (有可能不是员工自己上传的,而是 HR 或其他管理员上传的) 再就是需要: 上传资料接口。即上传指定员工的某个类型的资料。传递 ...

阅读全文...

最近心慌,入手大表盘的小米手环 pro 9 监测心率

最近看到不少打羽毛球嘎了的兄弟,恰好最近总感觉心慌,担心心率有问题,就下单了一个小米手环,上一个还是五代,没想到九代 pro  就变成了这种大表盘,还挺好看👀 大表盘的小米手环 pro 9 ,这就是个手表哈😄 界面风格很像苹果手表,当然我只用过苹果手表一代,不知道现在是什么样子。续航号称20天,带了一晚上,早上醒来,电量还是100,夸张了。 我关注的功能 我需要用到的功能其实很少,主要是 随时关注心率。❤️ 跳太猛了,就躺平歇歇 闹钟。午休时,可以脱离手机闹钟。而且震动模式也不打扰别人 久坐提醒。坐久了,提醒我起身出去摸鱼一会,放松一下老腰 其他功能,其实我基本用不到。所以,简单纠结了一 ...

阅读全文...

golang gin 项目中添加多个 cmd 命令行工具,如何进行目录组织

需求 之前开发的大赛报名网站终于进入了收尾阶段,比赛已结束,现在需要把参赛选手上传的资料及视频文件导出,做备份。 正好借此机会了解一下如何在 golang gin 项目中添加一堆命令行工具。 为何要引入 cmd 目录 之前把导出数据的功能,都放到了 gin API 接口中,然后通过 swagger 的文档管理界面调用,再保存。 但是,这样搞有个坏处,就是导致 swagger 文档中,会多出很多不需要前端使用的接口。 此外,像视频批量导出这样需要长时间执行的功能,需要更多详情日志的场景,也不适合放到 API 接口中。 所以,我需要将这些功能从 HTTP API 接口中剥离出来,放到单独的命令行工 ...

阅读全文...

magento 2.4 使用 SKU 搜索产品,返回一堆无关的产品

问题现象 Magento 2.4 中,使用类似 “ab-cd-e-9”这样的 SKU 去搜索时,会发现返回了几千个产品。 而排在前面的并不是我想要搜索的 SKU 完全匹配的产品,而是一些无关的产品。 "ab-cd-e-9”两侧加上双引号能解决,但是用户不会这样干。 之前处理过一例 magento 1.7 的远古版本的 SKU 搜索问题, 参考 Magento 网站中无法通过 SKU 搜索到产品的问题排查 解决方案是,改成 LIKE 的方式。但是 magento 2 之后没有了这个配置,直接使用了 Elasticsearch。在后台没法切换 MySQL 的搜索方案。 github is ...

阅读全文...