大象笔记

知者行之始,行者知之成

VSCode VIM 插件技巧:使用 Windows 剪切板

需求背景 需要大量搜索某些字符串时(例如,rasa 项目搜索各种 utter_xxx),使用 VIM 模式复制,然后黏贴到 VSCode 的搜索功能,非常麻烦。 还不如鼠标框选 ctrl + c 来的方便。 好在今天在看一篇关于 VSCode VIM 插件使用经验的文章里看到有个配置,可以将 VIM 模式下复制的内容直接存储到 Windows 系统剪切板。 设置方法一 打开 VSCode 设置,搜索 vim clipboard: 勾选 “Use system clipboard for unnamed register” 设置方法二 setting 文件的配置方法 顶部搜索条里,搜素 set ...

阅读全文...

阿里云短信服务运营商报备结果,等了7个工作日终于报备成功

之前在折腾短信验证码收不到的问题(参考 🔗 移动短信验证码又收不到了,需要到阿里云短信服务后台进行运营商报备),苦苦等了 11 天,即 7 个工作日,终于有了结果。但是这个结果说明,一言难尽,看起来也不保证所有运营商都能成功。 因部分运营商不返回报备结果,若报备结果成功但仍有因实名制报备问题导致的短信发送失败,建议您检查签名来源和签名名称是否完全满足“企事业单位名”、“已注册商标”和“已上线APP”的要求。若签名核验无误,可以少量多次尝试使用该签名发送,观察短信发送效果后再开始批量发送。 因为,之前电信和联通基本没啥问题,成功率能达到 99% 以上。有问题的是移动,成功率连 50% 都不 ...

阅读全文...

golang gin 的管理后台多角色路由权限控制

使用 golang gin 实现一个前后端分离的后台管理系统,管理员分为: 普通管理员 超级管理员 超级管理员可以访问一些普通管理员没有权限访问的接口,同时即便同一个接口两种管理员都能访问,但是可以操作的资源不同。如何设计路由及中间件可以实现清晰简洁的权限管理呢? 例如,超级管理员是我的账号,而客户也能登录这个后台,即客户是普通管理员。我作为超级管理员可以看到后台所有的设备,而客户作为普通管理员只能看到自己所属的设备,且只能对自己的设备进行远程锁机,而不能对其他客户的设备进行操作。 我实在是懒得自己想了,就问了一下 DeepSeek。DeepSeek AI 给出的方案,确实比我目前用的单一 ...

阅读全文...

Node 18 报错:Error: error:0308010C:digital envelope routines::unsupported

在新的 WSL Ubuntu 环境下安装 Ant Design Pro 的开发环境(参考:安装搭建 Ant Design Pro V5 开发环境),报错: node:internal/crypto/hash:69 this[kHandle] = new _Hash(algorithm, xofLen); Error: error:0308010C:digital envelope routines::unsupported Node 版本 Node.js v18.19.1 解决方法 在执行 tyarn start:dev 之前,先设置环境变量: export NODE_OPTIONS=-- ...

阅读全文...

windows 中同时使用 vscode 和 wsl git 命令行,每行代码被缀上 ^M 的问题

现在主力开发环境从 VIM 迁移到了 VSCode 下,但是在 WSL 命令行下使用 git 这个习惯一直改不掉,感觉 VSCode 里使用 git 不太方便。但是同时使用 VSCode 和 wsl git 遇到了一个 ^M 后缀的问题。 复现步骤 Windows 系统上,打开 vscode 编辑一个文件 a.md,在不关闭这个文件的情况下。在 wsl Ubuntu 下使用 git status 命令,会发现文件中的每行被加上了 ^M 后缀。 > git status On branch main Changes not staged for commit: modifi ...

阅读全文...

开发多页面网站的 AI 提示词经验总结

之前使用 AI 提示词开发了网站设计稿及原型图,以及一两个页面的小型网站。这次遇到一个需要开发多页面的网站,例如,除了首页,还有不同产品或解决方案的子页面。 🤨 顾虑 之前简单页面可以把发挥的空间完全交给 ai,因为内容简单,且功能常见,ai 能自行推导出适合的布局及功能项。但是,对于企业官网这个类型,由于产品和业务方向众多,且功能有确定性,就不能通过一句话的方式让 ai 准确推测出整站的内容。 一晚上,尝试了几种提示词方案,算是摸索出了一套可行的方法。 ❌ 试错一,DeepSeek 画蛇添足 用了 ai 做设计,没有银弹。简单的设计确实可以一句话让 ai 去直接工作,但是复杂的设计,还是需要 ...

阅读全文...

大赛报名系统上线一个月,我感觉急需开发的两个功能

在开发完某个大学生大赛报名系统之后,我的手机号码被加到了技术支持栏目。昨天下午就接到了两个学生咨询电话。虽然解决过程算是轻松愉快,但是晚上我总结了一下,这个时间花费的毫无价值。因为只能被动地的应付上门问题,而且这个客服工作不产生任何价值。为了以后不因此类事情占用过多时间,我觉得有必要加上两个功能。 ❓ 常见问题搜索功能 即 faq 功能。让学生遇到问题时,先自行解决。至于功能位置,可以放在这些地方: 顶部菜单 每个输入框的右侧或者下方 右下角的伪人工客服窗口。可以引入关键词搜索,或者 rasa 类的基于自然语言的机器人客服。参考:对话机器人 Rasa 中文系列教程 📝 工单功能 主要用于 ...

阅读全文...

Linux 宿主机挂载 s3 对象存储,docker 内没有生效问题

❓ 诡异的现象 Linux 宿主机上通过 mount 挂载了一个 s3 对象存储(参考:s3fs-fuse 将 Linode Object Storage 挂载到 Ubuntu Server 本地文件系统)。并且修改了 /etc/fstab 文件。 但是,在 docker 中,对应的目录还是显示的没有挂载前的目录结构和文件内容。 👌 解决方法 docker 容器重启即可。例如,命令 docker compose restart xxx 🗑 卸载 如果是卸载挂载盘,参考前文(🔗 ubuntu server 下使用 /etc/fstab 挂载的 s3 存储目录,如何卸载掉)也是同样的需要 res ...

阅读全文...

移动短信验证码又收不到了,需要到阿里云短信服务后台进行运营商报备

今天不是特别忙,看了一下后台的数据统计,感觉用户注册量没有预想的那么多。 所以担心会不会是阿里云短信验证码发送不稳定造成的,因为之前遇到过移动用户收不到短信验证码的问题。参考:签名黑名单,阿里云通知短信发送失败。 上次解决了,就没有再关注过。 但是进到短信服务后台,我还是震惊了。。。 4 月份 11 天,成功率 84.28% (失败25条);而 3 月份整个月,成功率 71.43% (失败116条)。 而且失败的短信有一定的规律性: 都是移动的号码 3 月份失败集中在 22 ~25 号,这 4 天 (成功率 30% 以下) 4 月份失败集中在 1 日这一天。(成功率 53%) 而,我之前 ...

阅读全文...

golang 开发 OA 系统,工作流引擎选型

我想开发一套企业内部使用 OA 系统,使用 golang gin 开发,让 AI 推荐了几个流程管理的库,即工作流引擎。 发现大部分找到的都是 Java Sprint Boot 的实现,但是我还是希望用 golang gin 去实现。毕竟 golang gin 目前用的最顺手,也积累了大量的内部功能库,而且服务器资源占用低。加上是集团内几个公司一块使用,使用现成的开源实现,也达不到要求,估计也很难改。还不如自己基于工作流引擎模块去自己实现。 但是看了几个感觉比较复杂。理解成本有点高,例如: GoFlow:Workflow 引擎, https://github.com/s8sg/goflow/ ...

阅读全文...

利用 AI 开发微信小程序的一些技巧总结

清明假期基于 AI 开发了一个小程序的功能,参见前文(大象成本计算器微信小程序,快速计算物品的日均成本)。虽然使用 ai 节省了不少调试界面和基础逻辑的时间,但是我依然感觉效率不是很高。 举例说明,这个小程序功能涉及到前端界面,前端 js 逻辑,以及后台 golang 的服务器接口,及 mysql 存储。如果直接让 ai 去实现,实际是在两个完全不同的前后端项目中分别开发的。最直接的问题就是,字段名称对应不上。遇到字段比较多的功能,光统一字段名称就得忙活好一会,而且枯燥乏味。 🏃‍♀️ 流程优化 于是我今天总结了一下,感觉下面的开发逻辑更合理一些,可以节省字段不统一的手工调整耗时: 工具新建 ...

阅读全文...

[Magento 2 定制化开发] 之十三:删除产品详情页的 Add to Cart 添加购物车按钮

之前通过 magento 2 的配置去掉了 Add to Cart 按钮,但是在非 main website 的产品详情页,还是能看到这个添加购物车按钮。无语。。。 我决定来点治本的方案,直接修改主题代码,不去浪费时间了解配置了。而且修改代码反而更直观更灵活一些。 特征代码 行动前,首先要找到代码的特征,从详情页查看添加购物车按钮的代码。 <button type="submit" title="Add to Cart" class="action primary tocart" id="product-addtoca ...

阅读全文...