大象笔记

知者行之始,行者知之成

开源客户管理系统 SuiteCRM 点击返回按钮报错 ERR_CACHE_MISS

在公司内部署了一套开源的客户管理系统 SuiteCRM, 具体流程参考:Ubuntu Server 22.04 部署安装开源 CRM SuiteCRM 7.14。 但是遇到了一个非常影响体验的问题,经常点击返回按钮报错 ERR_CACHE_MISS。 复现步骤 进入一个超过两页的列表,例如联系人列表 进入列表页第二页,即点击下一页 选择一个联系人,点击,查看详情 点击浏览器的返回按钮 此时浏览器报错:ERR_CACHE_MISS 详细报错信息 中文报错信息: 是否重新提交表单? 要正确显示此网页,请重新提交你之前输入的数据。通过执行此操作,你将重复此页面之前执行的任何操作。 刷新以重新提 ...

阅读全文...

GMail 转发邮件到 QQ 邮箱报错:550 Mail is rejected by recipients

今年开始手机 QQ 邮箱 APP 没法接收 GMail 的邮件了,估计有不可控的原因导致 QQ 邮箱不能继续免费提供 gmail 接收代理服务了。 这就非常的麻烦了,因为很多海外的服务,我都是用 gmail 邮箱注册的。登录时,不少会自动发送邮件验证码。如果我手机不能收到,那基本就没法操作了。。。 不得已,我决定在 gmail 设置里配置自动将收到的邮件转发到 QQ 邮箱。 很简单就能配置成功。 但是遇到了一个问题,转发失败。 具体错误是: 550 Mail is rejected by recipients QQ 邮箱官方解释 出错原因:用户设置个人黑名单或者过滤器拒收 改善建议:如果 ...

阅读全文...

Google 日历的国内替代品 WPS 日历

网络问题,在国内使用 Google 日历很是不流畅。 虽然目前用 VIM Markdown 的方式管理 TODO 挺方便的,但是我还是离不开日历功能,因为大部分的焦虑来源于对时间缺乏概念,总是以为一天的时间是无限的♾️,承诺了太多,安排了过多的任务,导致每天都心情紧张。而日历则能很好的规划一周的时间安排,不至于出现盲目乐观的计划。 所以,我急需一个国内的 Google 日历服务平替。 先说结论吧,我最终选择了 WPS 日历 电脑上使用 WPS 日历网页版 https://rili.wps.cn/ 界面很清新,类似于 Google 日历网页版。虽然比 Google 少了待办等功能,但是已经很不错 ...

阅读全文...

近期读过最好的书,小岛秀夫《创作的基因》

十一假期,缩在沙发里看完了小岛秀夫的《创作的基因》。这是近期看过最好的一本书。 可以媲美斯蒂芬金的《写作这回事》。《写作这回事》在我心目中的地位极高,每当我去上厕所不知道该带哪本书时,这本书就是答案。 为何喜欢小岛秀夫的书? 可能我也是一个孤独的人,里面很多描述能引起共鸣。唯一的问题是,读完这本书,最近睡觉开始多梦。 这本书其实是小岛的一些随笔或博客的合集。虽不连贯,但非常有趣。跟 Twitter 上那个发了几十万条推的家伙,感觉不是一个人。 一些有趣的观点 由于其父亲在他 13 岁就去世了,他从书中寻找人生的榜样 每天去书店,书店里能邂逅自己不曾关注的领域。因为网络信息是筛选过的,只能看到 ...

阅读全文...

迁移服务器是一场修行

历尽千辛万苦,终于在十一假期期间把博客服务器 (sunzhongwei.com) 迁移完成了。旧服务器用了4年,里面跑了无数服务,算是个大试验田。 之所以迁移,一是为了省钱,二是为了强迫自己将 Ubuntu Server 版本升级。 迁移过程,繁琐而漫长。长假期间时间充裕,可以边看电影,边记录,边操作。 整理了一下,迁移操作 TODO 清单有 32 项之多,详见:2024 服务器迁移计划 ⌛️ 拖延 新服务器是半年前购买的,一直拖着,懒得迁移。 这事拖了整整半年之久。因为现服务器还有一个月就到期了,十一假期是最后的迁移机会。 服务器上跑的服务实在太多了,砍掉了三分之二没啥用处的服务。迁移起来还 ...

阅读全文...

阿里云国内 ubuntu 服务器安装 docker

在我新购的阿里云国内服务器上部署一套环境,然后发现 docker 都安装不了。。。 系统版本 Ubuntu 22.04 无法访问 download.docker.com 如果按照 docker 官方的安装文档: https://docs.docker.com/engine/install/ubuntu/ 会卡在这里 $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc curl: (35) OpenSSL SSL_connect: Connection res ...

阅读全文...

终于成功了,生产服务器 docker 部署 golang 服务

摸索了半天,终于在十一长假之前把线上服务器 docker 部署 golang 服务搞定了。 ❓ 为何要用 docker 部署 golang 服务 因为 golang 以部署便捷著称,编译之后只有一个二进制可执行文件,扔到服务器上就能跑。不需要多余的操作。 而不像 .NET 的 AOT,还需要编译环境跟部署环境系统版本号一致。连交叉编译都不支持。 这么看,完全没有必要使用 docker。 但是,由于生产环境之前为了部署多版本的 PHP,把 MySQL 等服务都放到了 Docker 中。 于是要让 golang 服务器能正常访问 MySQL,也得把 golang 服务部署到跟 MySQL 相同的 ...

阅读全文...

关于 docker alpine 镜像

alpine 这个单词真的很难记住,每次都记不住。 单独的“alpine”可以翻译为“高山的;阿尔卑斯山的;阿尔卑斯山区居民的”等,也可直接翻译为“阿尔卑斯山”或“高山”。其官网首页也确实是一张雪山的照片,是不是阿尔卑斯山就不知道了。发音是,阿尔派恩😊 docker alpine 镜像有多小 > docker.exe images REPOSITORY TAG IMAGE ID CREATED SIZE test la ...

阅读全文...

一条 SQL 搞定供应商的采购记录及合格率统计

需求 在一个 CRUD 的列表接口中,需要统计每个供应商的供货记录总数及合格率。 先上 MS SQL,当然这是豆包 AI 帮我写的: SELECT [Name], COUNT(*) AS Total, CASE WHEN COUNT(*) = 0 THEN 0 ELSE CAST(SUM(CASE WHEN QJudgment = '合格' THEN 1 ELSE 0 END) AS FLOAT) / COUNT(*) END AS QualifiedRate FROM [MyDB].[dbo].[SupplierReco ...

阅读全文...

React 在 for 循环中 setState 最后一次执行结果会覆盖前面的结果

使用场景 在实现一个批量查询的功能,前端使用 React 写了一个组件。 将多行输入分隔成多个搜索词,因为是模糊查询,搜索速度不快, 为了减少等待时间,于是每个搜索词逐一调用搜索接口。 然后,将搜索结果合并到一个数组,每返回一个结果,就立即显示。 有问题的代码 const [results, setResults] = useState<API.Item[]>([]); for (const keyword of keywords) { // 每个搜索词逐一调用搜索接口 let apiResult = await callSearchApi({keyword: keyword ...

阅读全文...

给家里年迈的 DELL 台式机新配了个腾达 USB WIFI 6 无线网卡

起因 家里的这个 DELL 台式机本身是内置了无线网卡的,但是放在小屋时,距离客厅的无线路由器太远,信号很不稳定。 还因此更换了一个更贵的小米路由器,但是偶尔还是信号不好。电脑桌面右下角的 WIFI 图标永远没有满格的时候,总是少一格。。。小网卡你也太不努力了吧 ╮(╯▽╰)╭ 可是,我的手机在小屋里,信号永远是满格。说明还是台式机内置的无线网卡不太行,或者是在机箱里影响信号? 也这样凑合了很久,但是昨晚我实在是受不了了。起因是,最近严重依赖 AI 编程插件来写代码,在网络不稳定的情况下,插件一直显示超时,导致我一行代码也写不出来。。。我终于成为了只会按 TAB 键的笨蛋程序员。 写了几段单元 ...

阅读全文...

通过了 Google Play 的个人开发者账号认证

昨天 Solos 大神说他刚通过了 Google Play 的企业开发者账号认证。我印象中好像没有做过这个认证,不过上个月确实做过一次 Google Payments 的账号认证。为了以防万一,我登录了 Google Play Console 后台,非常醒目的红色提醒: 如果您未在 Play 管理中心内完成账号验证,您的开发者资料和所有应用都将于 2024年10月11日(28天后)从 Google Play 移除。 由于手机上接收不到实时 GMail 邮件,所以一直不知道这事,而且我也很少登录 Google Play Console,差点导致应用被下架。 我先申请了延期认证,很快通过,自 ...

阅读全文...