CrazyAirhead

疯狂的傻瓜,傻瓜也疯狂——傻方能执著,疯狂才专注!

0%

说明

「定投搜索」工具是 Mixin 的机器人(Mixin 号「7000103414」),以 Mixin 聊天的方式提供「定投人生」课堂的全文搜索,并返回匹配的课程列表或者课程卡片。

最近学习AI,发现可以用AI技术对「定投搜索」进行些优化改造,然后在查看文档时发现之前写了这篇技术总结,现在稍作调整分享这个「定投搜索」Mixin的机器人制作过程,顺便预告下新版功能。

阅读全文 »

背景

公司的数字安全运营平台是基于 Spring Boot 和 Spring Cloud 进行构建的。考虑到公司有企事业单位的客户,陆续对产品提国产信创的要求。虽然当前信创可能只要求硬件,操作系统和数据库是国产化即可,但底层框架也是国产化的,可以给客户提供更多的国产化保证。

Solon 就是这样的一个选择,Solon 的官网介绍说,Solon 是 Java 「新式」应用开发框架,从零开始构建,有自主的标准规范与开放生态。追求更快、更小、更简单; 提倡克制、简洁、高效、开放、生态;是信通院可信开源社区成员、可信开源项目。Solon 有以下的特色:拥有更高的计算性价比,并发高 2~3 倍,内存省 50%;更快的开发效率:内核小,入门快,调试重启可快至 10 倍;更好的生成和部署体验:打包最多缩小 90%; 更大的兼容范围:非 java-ee 框架,同时支持 java8~java22,graalvm native image。

阅读全文 »

背景

上一篇「基于Mybatis的多租户实现方法」介绍的是Spring Boot使用 Mybatis Plus实现Db层的数据隔离。但在实际的实现过程中,除了涉及Db层的数据隔离,还会涉及租户的识别,缓存的数据隔离,ElasticSearch的数据隔离,任务的数据隔离、消息队列的隔离,同时也包括租户的切换与忽略租户等。

因此在上一篇的基础上,这次尝试把多租户的技术实现写得更完整些,如有不足支持欢迎指正。

阅读全文 »

说明

这次碰到的两个问题,解决后发现都不是什么大问题,解决的方法很简单,但没找到原因前确实花了不少时间进行排查,因此记录下来,方便日后查看。

问题1

Jenkins 编译,通过脚本发布 jar 程序,虽然提示编译成功,但应用未正常启动,通过ps 查看不到对应的进程。

Jenkins 的编译配置是从其他项目克隆过来的,执行正常,区别只是原来的部署脚本,原来是是 Docker 部署,新项目是直接虚机部署。编写的脚本除去一些进程的判断,大致是这样的,看似也不存在问题,另外在终端直接执行脚本是应用是可以正常启动的。

1
nohup java -jar app.jar > out.log 2>&1 &

因为通过 Jenkins 发布就是启动不了。虽然直接执行脚本是可以的,但避免有什么未知问题,还是在脚本中增加了echo 逐条写日志,日志也都有正常打印出来。后来干脆把启动程序的日志的重定向也去掉,此时在 Jenkins 的编译日志中是能看到应用已经启动了,但 Jenkins编译成功后,应用依然没有正常启动。此时能想到的就是nohup没有加&,终端退出应用就结束的情况。

初步开始怀疑 Jenkins 做了手脚,经过一方搜索,发现通过 Shell 脚本发布时,会衍生进程,Jenkins 默认会杀掉衍生进程。需要增加BUILD_ID=DONTKILLME防止衍生进程被杀。可以增加在 Jenkis中,或者增加的执行的脚本中。

1
2
3
BUILD_ID=DONTKILLME
```bash
nohup java -jar app.jar > out.log 2>&1 &

调整后一切正常。那为什么使用 Docker 部署正常呢?Docker容器启动不是 Shell 脚本的衍生进程。

# 问题2

因为项目采用了 Docker 部署,因为Docker的隔离性,容器内的应用无法操作宿主机,因此通过SSH连接宿主机,执行宿主机的命令并生成文件。这个部署在开发机一个正常的功能,在部署到另一台测试机后无法正常使用。

初步排查的时候只知道文件未正常生成,因为执行的命令依赖一个环境变量`HOME`,在终端中变量是有设置的,且其他目录也没有找到生成的文件。

因为一开始没有增加日志,于是重新增加日志打印,日志正常打印。继续增加 SSH 的返回值,返回的 exit code 是 0,返回结果是空,说明需要执行的命令是正常执行的。增加打印SSH 执行的命令,命令在终端里是可以正常生成文件的。

于是就有被带歪了,就开始想会不会因为封装的SSH的配置有问题,修改各种配置都测试了下,还是没有结果。

重新静下来思考,要不把依赖的变量,替换成实际的路径看看,于是多增加执行一个SSH 命令,`echo $HOME`,并增加了对应的日志打印。结果发现程序中无法读取环境变量`HOME`,于是确认`HOME`是配置的`/etc/profile`中的,重新source,不行,重启机器,依然不行。

后面修改成在`~/.bashrc`中配置,可以正常读取。

# 小结

两个问题都不难,但都属于自己的只是盲区。虽然能使用Jenkins进行编辑发布,虽然可以使用Jsch执行ssh命令,但只是凑巧起作用而已,稍微碰点以为情况就歇菜了,还是等多读文档。

说明

写本文是因为需要使用iOS版的Mixin Messenger需要有美区的苹果ID,当然可以购买苹果ID,但从安全和使用方便的角度来看,应该拥有自己的苹果ID。

注册的过程参考了「美区APP Store上架ChatGPT了!保姆级教程」和「注册美国区Apple ID保姆级教程」的方法,发现都不能注册成功。第一个链接的问题是支付方式已经不能选无,导致无法在完成App Store的支付检查。第二链接是通过Create Your Apple ID - Apple进行注册的,但提交时,会提示「创建用户时无法完成你的情况,此时无法创建你的账号」。

因此,主要参考链接一结合虚拟信用卡的方式,完成美区苹果ID的注册。以下该方法的具体步骤。

注意:本方法只在手机中验证通过,请使用手机操作,不要用电脑。 操作未截图,使用了链接一中的截图。

步骤

  1. 如果已经登录的苹果ID是国内账号,先退出登录。「设置」> 「头像/Apple ID」> 「退出登录」,输入密码后确定。

  2. 设置手机的区域为美国,「设置」> 「通用」> 「语言与地区」> 「地区」,选择美国。如果是英文显示时,注意是「 United States」,而不是其他。这步尤为重要,因为后续注册账号时没有地方可以填写区域,而是根据系统设置的区域来的。

  3. 创建Apple ID,「设置」> 「Apple ID」> 「忘记密码或者没有苹果ID」> 「创建 Apple ID」。

  4. 输入姓名和出生日期,注意年龄大雨十八岁否则会有限制。名和姓也要要英文名。

  5. 输入新邮箱,可以关闭公告。注意邮箱之前不能注册过Apple ID。

  6. 设置密码。

  7. 输入电话号码,短信验证。此处电话号码可以是中国区电话,已注册过的电话也没有问题。

  8. 验证电子邮箱,「设置」> 「头像/Apple ID」> 「验证电子邮箱」。

  9. 打开App Store,正常已经进入美区。

  10. 搜索「Mixin Messenger」,可以看到,确认是美区账号了。点击「获取」> 「安装」,输入密码。

  11. 此时会弹出当前账号需要进行支付检查,因为支付信用卡未准备好,暂不点击「检查」。

  12. 开通虚拟信用卡,该步骤为电脑操作。可以使用NobePay,或者FomePay。NobePay是最低账户充值500元(充值也是要收1%的手续费),开卡充值不限。开卡费1~3美元(根据卡段不同),服务费3%;FomePay开卡10美元,最低充值32美元,未实际使用其他费用未知。可以根据自己的情况进行选择,我自己使用的是NobePay,这里以NobePay进行说明。

    • 注册,https://www.nobepay.com/ ,点击「立即注册」,按提示填写。

    • 实名认证,「个人中心」 > 「我的账户」> 「我的认证」,按提示进行认证。

    • 绑定收付款人,「个人中心」 > 「我的账户」> 「添加收付款人」,按提示进行添加。

    • 充值,「资金中心」> 「快速充值」> 「在线充值」,点击「立即充值」,使用支付宝或者微信进行扫码支付。

    • 开卡,「我的卡片」> 「快速开卡」,选择「卡段」,选择「扣款账户」,输入「充值金额」,生成「随机地址」(参看步骤14),点击「开卡」,等待开卡成功提示。

    • 查看卡片信息,「我的卡片」>「卡片列表」,点击「管理」> 「查看卡片」。

  13. 生成随机地址,该步骤为电脑操作。使用https://www.meiguodizhi.com 生成美国地址,记录下对应的,街道地址,城市,州,邮编等信息,。

    最好选择以下的免税州:

    • 蒙大拿州 Montana

    • 俄勒冈州 Oregon

    • 阿拉斯加州 Alaska

    • 特拉华州 Delaware

    • 新罕布什尔州 New Hampshire

  14. 该步骤为手机操作,接步骤11,点击「检查」,选择「信用卡/借记卡」(注意此时已经没有「无」这个支付选项了),按提示填写步骤12中的信用卡信息,继续添加步骤13获取的账单寄送地址信息。

问题

以下为我在注册时碰到的问题。

  • 进入App Store时提示,连接服务器时出现问题

尝试了连接服务器时出现问题的方法,都没能解决,最终因为里面的提示地区和时间,发现自己是地区选择错误,选择了「American Samoa」导致的,应该选择「United States」,通过重新注册账户解决。

链接

说明

使用 Maven 时可以通过配置 Profile,进行不同环境变量的编辑,同时可以在资源配置文件中通过@@的方式profile定义的变量。
在查看 Solon 的开发文档时发现 Gradle 使用属性参数也能支持类似 Profile 的扩展。于是做了验证,并记录其中碰到的问题。

阅读全文 »

说明

使用 Solon 初始化工具的生成的Gradle项目,打包后生成的是的单个 Jar 文件,一开始以为是Fat Jar,但解压包之后,发现里面包含的是classes文件,而不是Jar文件。这不是像Spring Boot一样的Fat Jar,而是一种 Uber Jar 的格式。

Fat Jar

Fat Jar很好理解,一个 “肥胖的” Jar,指的是 Jar 包里面包含所有依赖包的 Jar 包。

Uber Jar

Uber Jar的原单词是Über Jar,是德语单词,但是大多数输入法上德语Ü很难打出来,所以就成了”Uber”,可以解释为 “Over” ,可以理解位为 “完整或全部” 的意思。

Uber Jar指将所有依赖项和自己的代码打包到一个Jar包里面。

和Fat Jar一样,是一个可以执行的Jar,只是包里面的是Classes文件,而不是Jar文件。如果不特别对比的情况下,可以把 Uber Jar 和 Fat Jar 等同对待。

阅读全文 »

笑来老师说,每一个类比都是一笔财富。

对「类比宝库」采用了「定投搜索」一样的命令格式:所有输入将格式化成 /命令 参数 (/command args )的格式。

目前支持的 command 有:

  • /s,查询包含相关关键字的类比。
  • /add,添加类比。
  • /thx,返回感谢列表,感谢列表是不定期更新的。

当发送的消息不包含命令时,会默认加上 /s 命令,这样可以减少输入,如发送的消息是「时间」时,等同于发送「/s 时间」。

命令的先后顺序无关,如发送以下消息,效果是一样的:「/s 时间 测试」,「时间 /s 测试」,「时间 测试 /s」。

如果发送了不支持的命令格式,不会返回任何消息,只会将消息设置为已读状态。

以下截图:

image.png
一个的Mixin群的用法,可以自己创建一个群,把「定投搜索」和「类比宝库」都添加到群成员列表里,使用@的方式发消息,此时会收到对应机器人的回复,如下图:

WechatIMG244.png
战友们可以自行尝试,如果发现工具的问题,可以添加我的微信「Crazy_Airhead」,或Mixin号「1091586」,进行反馈,谢谢。

对定投搜索来说,每接收到一条消息(输入),实际上是一条命令,因此对接收的消息做了一个格式化:所有输入将格式化成 /命令 参数 (/command args )的格式。

目前支持的 command 有:

  • /s,检索课程并返回课程清单。
  • /d,检索课程并返回课程卡片。
  • /thx,返回感谢列表,感谢列表是不定期更新的。

当发送的消息不包含命令时,会默认加上 /s 命令,这样可以减少输入,如发送的消息是「极客」时,等同于发送「/s 极客」。

命令的先后顺序无关,如发送以下消息,效果是一样的:「/s 极客 测试」,「极客 /s 测试」,「极客 测试 /s」。

如果发送了不支持的命令格式,不会返回任何消息,只会将消息设置为已读状态。

以下是一些命令截图:

image.png
WechatIMG244.png
战友们可以自行尝试,如果发现工具的问题,可以添加我的微信「Crazy_Airhead」,或Mixin号「1091586」,进行反馈,谢谢。

是什么

「定投搜索」是一个免费的Mixin机器人,是「定投人生课堂」课程搜索工具,可以通过关键字检索「定投人生课堂」的课程内容,返回课程列表。

如何使用

  1. 登录Mixin,点击搜索「7000103414」,确认是「定投搜索」后添加机器人。

  2. 把搜索关键字发给该机器人,机器人会返回检索到的课程列表(结果最多10条课程)。

    • 支持多关键字,关键字之间使用空格分隔。

    • 支持命令模式,使用/开启命令模式,当前只支持/d,表示返回课程详情,除了返回查询结果,还将一并返回查询结果的课程的卡片。如:机会成本 /d,可以在下面的图中看到返回结果。

  3. 听课。

    • 从结果中复制课程标题到「定投人生课堂」搜索该课程,开始听课。

    • 如果返回课程详情,直接点击卡片,授权后开始听课。

WechatIMG239.png
WechatIMG238.png

常见问题

搜索不到结果

  • 技术原因,课程内容是语音的,使用的是语音识别技术,可能无法完全识别,可能识别错误,可能存在错别字,导致检索不到,另外中文需要分词,分词的结果可能会和我们的预期不一致,导致检索不到。

  • 客观原因,没有导入课程数据,或者确实没有匹配的关键字。

  • 可能的解决办法,调整关键字重新搜索。

数据如何获取

手工整理。请不要找我索取课程数据,整理自己的课程笔记更重要,请听「学习的真相」的「必要关联」和「三个大脑」。

数据何时更新

课程数据是手动整理的,无法保证与课程内容的实时同步,只会不定期导入。

功能是否会更新

目前功能基本可用,暂无功能计划,后续可能会增加命令模式的命令。

如果大家有新的想法,可以反馈。

是否收费

免费。如果觉得「定投搜索」工具确实对你有帮助,欢迎打赏,打赏本文即可。

其他问题

其他问题可以添加我的微信「Crazy_Airhead」,或Mixin号「1091586」,进行反馈和沟通。

为什么

偶尔会想起一些模糊的课程内容,想重听一遍课程,但定投人生课堂只能按标题内容模糊搜索,于是只能凭记忆在Mixin中找,可能半天过去了还找不到自己想要的课程,这过程其实是挺痛苦的。在「定投人生课堂后花园」的里也会看到类似的查找课程的问题,于是有了做这个工具的想法。

之前为「且慢且慢且慢」写作群的战友提供过写作练习工具,但因为服务器和域名过期等原因,服务就中断了,非常抱歉。计划做这个工具的时候是想收费的,因为提供服务需要成本,实际做的过程中时候发现不需要公网服务器也可以提供服务,于是少了收费的欲望,本着服务战友的想法,于是决定免费开放服务。

此次提供的「定投搜索」工具,因为用了自家的NAS,理论上是可以长期服务战友们。如果「定投人生课堂」提供了更好的搜索功能,这个「定投搜索」工具也就没有存在的意义了,到时会停止服务。

在提供服务期间,如果出现无法使用的情况,请战友们及时反馈。

感谢

刚开始有做「定投搜索」这个工具的想法时,小熊老师(微信号「huashichenxiong」)给了不少积极的反馈,让我开始实际编写这个工具;中间因为工作忙没怎么做,小熊老师又不停地鼓励;现在能提供服务,也是和小熊老师讨论Mixin机器人开发,打破自己的做微信公众号的思维定势(微信的机器人和微信公众号不是同一个物种),于是趁着放假时间赶紧完成剩下的工作。总之非常感谢小熊老师,如果没有小熊老师的鼓励,这个工具不知道什么时候才能完工。

感谢Mixin好友「字友与自由」,Mixin号「39488252」,帮忙解答了机器人无法接收消息的问题。他写了个Java版的SDK(https://github.com/tooonly/mixin-java-sdk),有需要战友的可以自己获取。