2025-04-18 09:14:15
现在主力开发环境从 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:
modified: a.md
会看到,除了最后一行,每行被加上了 ^M 后缀。
> git diff
--- a/a.md
+++ b/a.md
-hello
+hello^M
world
^M 代表的是回车符 CR,也就是 \r。
Windows 下返回 true
C:\Users\Lenovo>git config core.autocrlf
true
WSL Ubuntu Linux 下无返回
> git config core.autocrlf
返回值及含义
关闭 vscode 时,使用 git status 就不会出现这个问题。
说明 ^M 是 VSCode 自动实时给加上的。
两方都对,不需要配置。
避免同时使用就行了,使用 vscode terminal 中的 git 命令就行。
2025-04-17 20:58:02
之前使用 AI 提示词开发了网站设计稿及原型图,以及一两个页面的小型网站。这次遇到一个需要开发多页面的网站,例如,除了首页,还有不同产品或解决方案的子页面。
之前简单页面可以把发挥的空间完全交给 ai,因为内容简单,且功能常见,ai 能自行推导出适合的布局及功能项。但是,对于企业官网这个类型,由于产品和业务方向众多,且功能有确定性,就不能通过一句话的方式让 ai 准确推测出整站的内容。
一晚上,尝试了几种提示词方案,算是摸索出了一套可行的方法。
用了 ai 做设计,没有银弹。简单的设计确实可以一句话让 ai 去直接工作,但是复杂的设计,还是需要人工去梳理,或者半自动化的去梳理需求,然后汇总之后,再交给 ai 去生成。
这是我动手前,想出的策略。于是,我先把汇总的需求,发给了 DeepSeek 和 gemini,让其先生成一个用于开发网站的提示词大纲。结构类似
但是,对比发现,DeepSeek 对于网站风格和功能的梳理能力远不如 claude 3.7。DeepSeek 生成的网站开发提示词虽然很酷,但是缺乏美感😔。
对美观度有要求的网站,不要让 ai 基于 bootstrap 去实现,可以基于 tailwind css 之类的,或者不使用 css 框架。否则生成的效果有点死板。
基于 GitHub copilot edit 模式开发,edit 有个问题,就是在开发代码量大的功能是,经常会报错。错误五花八门,没有什么规律。之前是,开发几个页面,就中断了。现在可好,啥都没生成,憋半天,直接报错😂
所以,我改用了 agent 模式。GitHub copilot agent 模式,相对 edit 模式要稳定一点,但是也是执行十几分钟就 502 😮💨 等待 ai 干活的时间⌛️ 焦躁不安。现在最常用的提示词变成了,“接着上面未完成的部分,继续”。但至少比 edit 好那么一点🤦♂️
但是,今天发现无论是 edit 还是 agent 都不稳定。估计服务器扛不住了吧。今天切换到了头条的 Trae AI IDE,里面内置的 Doubao-1.5-pro 模型完全媲美 claude 3.7。
在之前生成网站代码的提示词上(参考 Claude 开发网站网页的 AI 提示词),直接加上首页功能列表即可。
在生成了首页之后,再依次使用提示词
基于首页 index.html 的风格,生成 Contact Us 的页面 contact.html,图片使用 unsplash 的素材
就可以更高效的完善各个页面。
2025-04-15 08:50:02
在开发完某个大学生大赛报名系统之后,我的手机号码被加到了技术支持栏目。昨天下午就接到了两个学生咨询电话。虽然解决过程算是轻松愉快,但是晚上我总结了一下,这个时间花费的毫无价值。因为只能被动地的应付上门问题,而且这个客服工作不产生任何价值。为了以后不因此类事情占用过多时间,我觉得有必要加上两个功能。
即 faq 功能。让学生遇到问题时,先自行解决。至于功能位置,可以放在这些地方:
主要用于记录每日处理的学生咨询问题内容,及答复。所以,并不是一个严格意义的工单功能,因为不需要直接对学生开放,主要用于统计常见问题,及记录客服工作量,方便写周报。
同时,高频常见的咨询问题,可以一键转换为 faq 条目。
产生问题的根源是报名界面没有充足的说明信息,或者引导。导致学生在报名过程中产生疑惑,无法自行解决。举个简单例子,参赛组别上,具体应该选择本科生组,还是研究生组,还是博士生组,对于本科生博士生混合组队的情况,就没有具体的说明,如果在组别选项下拉框旁边加上一段说明问题,或者 faq 链接,参赛学生就能自行解决。
好了就记录到这里吧,坐车🚌的时候整理笔记确实比较高效!
2025-04-12 14:41:38
Linux 宿主机上通过 mount 挂载了一个 s3 对象存储(参考:s3fs-fuse 将 Linode Object Storage 挂载到 Ubuntu Server 本地文件系统)。并且修改了 /etc/fstab 文件。
但是,在 docker 中,对应的目录还是显示的没有挂载前的目录结构和文件内容。
docker 容器重启即可。例如,命令
docker compose restart xxx
如果是卸载挂载盘,参考前文(🔗 ubuntu server 下使用 /etc/fstab 挂载的 s3 存储目录,如何卸载掉)也是同样的需要 restart docker 容器才能在容器生效。
需要注意,一定不要忘记使用
df -h
命令查看是否成功卸载了,因为会遇到卸载不成功的情况,而且没有任何错误提示。😅
可以把 docker 容器想象成一个跟宿主机类似的系统。宿主机在没有使用 mount 命令时,也是无法挂载生效的。如果只修改了 fstab 配置文件,不执行 mount 命令,宿主机也是需要重启系统才能看到挂载的 s3 object storage。
docker 中执行 mount 命令太长,不方便操作。还不如 restart 容器方便。
还是之前的感觉😂,用了 docker 很多地方是反直觉的,很容易漏掉操作。
Linux 运维经验喜 +1 ✌️
2025-04-11 15:17:30
今天不是特别忙,看了一下后台的数据统计,感觉用户注册量没有预想的那么多。 所以担心会不会是阿里云短信验证码发送不稳定造成的,因为之前遇到过移动用户收不到短信验证码的问题。参考:签名黑名单,阿里云通知短信发送失败。 上次解决了,就没有再关注过。
但是进到短信服务后台,我还是震惊了。。。
4 月份 11 天,成功率 84.28% (失败25条);而 3 月份整个月,成功率 71.43% (失败116条)。
而且失败的短信有一定的规律性:
而,我之前通过阿里云工单上个月反馈了这个问题,但是稳定了两个周,之后就惨不忍睹了。。。
看完统计,我又去短信服务后台看了一下签名管理。我发现新增了一个运营商报备的功能。。。 上个月还没有这个功能啊,估计是新增的功能。由于阿里云后台绑定的不是我的手机号,我同事收到了这个短信,但是没有在意,因为以为通过工单已经解决了。哎。
而且后台还新增两条醒目的提示:
【短信服务-实名制报备说明】根据工信部及各级运营商的要求,短信发送前需要完成实名制报备,会影响历史已使用签名的发送成功率。为了提升签名实名制报备的成功率,建议您按照最新要求进行调整,报备时长7-10个工作日,详见阿里云短信实名制报备成功率提升建议
【重要】因运营商执行策略的差异,会出现报备结果为“报备成功”但部分短信发送失败的情况,请按照 签名合规性公告 检查签名来源和签名名称。若签名不符合规范,请更换或申请新的签名,优先推荐使用“企事业单位名”的全称或简称。若签名核验无误,建议您少量多次尝试使用该签名向三大运营商手机号发送短信,待发送成功率符合预期后再开始批量发送。
从描述来看,即便报备成功,还是会因为短信签名问题,导致接受不到验证码短信的情况。。。
但是公司的名字太长了,多达 10 几个字,总不能只用公司的原名吧。
点击了报备,只能等结果了。同时在前端增加了收不到短信的提示说明,让用户去尝试使用非移动的手机号接受短信,或者联系客服来绕过短信验证码。
其实,我不理解,就一个短信验证码的固定模板,完全插不进去任何非法或者营销的内容,这种短信还能被拦截,移动真是xx啊。
2025-04-09 16:58:03
我想开发一套企业内部使用 OA 系统,使用 golang gin 开发,让 AI 推荐了几个流程管理的库,即工作流引擎。
发现大部分找到的都是 Java Sprint Boot 的实现,但是我还是希望用 golang gin 去实现。毕竟 golang gin 目前用的最顺手,也积累了大量的内部功能库,而且服务器资源占用低。加上是集团内几个公司一块使用,使用现成的开源实现,也达不到要求,估计也很难改。还不如自己基于工作流引擎模块去自己实现。
但是看了几个感觉比较复杂。理解成本有点高,例如:
最后,我找了一个中文的库,同时包含后端和前端的实现。
https://github.com/go-workflow/go-workflow
虽然是 6 年前的项目,而且没有更新了。但是我感觉可以参考一下。使用 gin 重写一下。
我主要是看中其中的数据结构说明,及流程说明。而且是中文的比较好理解。
除了 README,还有一处接口说明:
https://github.com/go-workflow/go-workflow/blob/master/EXAMPLE.md
但是这个接口中每次需要传 userID 是不太合理,存在隐患。
看起来是基于 vue2 的前端组件。
目前唯一的担心是,如果没有采用 BPMN,以后会不会遇到发现没有兼容的场景。