重新用ChatGPT写一个生成小学生口算练习题的web页面

几年前自己用Python写过一个小学生100以内的口算练习题生成的web页面:生成口算练习题web服务

其实不需要搞这么复杂,而且没有写好html和css,导致居中都没有,也不能调整字体大小,也没有刷新重新生成的按钮,总之很挫很挫。

根本原因就是我不会写前端代码。。。

现在有了ChatGPT,就尝试让他写一个纯web的练习题生成页面,我只给了他4次提示,他就做到了:

100以内加减法口算练习题生成web页面

下面是交流过程:

prompt1:帮我写一个web页面,要求是可以通过一个按钮随机一个低年级小学生练习100以内加减法口算的习题集,每次生成100道题,每行4道题,共25行,并且要求居中显示,字体大小可以调节,方便A4纸打印。

ChatGPT:生成了一堆代码,包括html、css、js(因为代码量比较多,所以他中断之后要告诉ChatGPT继续写)

我试着整理之后跑了下,报了2个错误,我又问了两个问题:

prompt2:这个网页点生成习题集按钮后报错:Uncaught TypeError TypeError: Cannot set properties of null (setting ‘innerHTML’),怎么解决?

prompt3:调整字体报错:Uncaught TypeError TypeError: Cannot read properties of null (reading ‘value’),怎么解决?
prompt4:对于小学生来说,减法口算不应该出现负数,另外100以内的加法结果也不能超过100,需要修改下代码。
这样几次交流,就生成了一个非常符合我预期的口算练习题生成web页面了,还是非常给力的。

基于ChatGPT的code review机器人试用体验

经组内同学孙中夏 推荐,今天在Curve代码库试用了一个基于ChatGPT的代码review机器人,github地址:https://github.com/anc95/ChatGPT-CodeReview

 

具体的执行流程和算法原理我没研究,应该也研究不明白,这里就讲讲怎么在GitHub仓库上配置这个bot,以及实际的review效果如何。

 

ps. OpenAI的key是杭研AI团队提供的,感谢支持~

 

部署配置

参考https://github.com/anc95/ChatGPT-CodeReview#usage这里的描述即可:

  1. 安装这个bot的GitHub APP

  2. 安装好之后,在这个APP页面点“Configure”

  3. 选择你要应用到的账号及代码仓库,注意你要有代码库的管理员权限

  4. 之后进入到代码库的主页,进入“Settings”标签

  5. 进入“Secrets and variables” — “Actions”

  6. 注意切换到“variables” tab项,再点“New repository variable”

  7. 填入name和value,name是“OPENAI_API_KEY”,value就是openai的key了

 

ps. 我用的是GitHub app方案,不是GitHub action,试了action方案没跑起来,有懂行的可以给点指导。

试用效果

尝试创建一个pull request,比如:

PR创建完成后,稍等片刻,就可以看到cr-bot开始review代码了。

 

单就review效率来说,比人工评审代码要快太多倍了,我上面两个提交都是直接从一个分支合并到另外一个,代码改动量很大,但是cr-bot还是几分钟就搞定了,人工的话估计得好几天还不一定review的很细致。

 

review效果感受

大家可以自行去查看上面两个测试PR的review效果,我这里截图几个我觉得有代表意义的代码review结果。

 

上面这个pr,是我去年提交的(golang我只看过基本语法,第一次写实际代码,所以请忽略我粗鄙的编码),这次重新提交一下看看ChatGPT code review bot的效果,可以看出,他指出了我代码里很多问题,其中第3条,是有一个外部curve用户实际遇到过的偶发问题(执行命令卡很久才返回),我自己怎么测都跑不出来,用户那边几乎必现,后来还是组内golang高手小伙伴重构了这段代码才解决。其他几点问题也都是非常有参考价值的。

 

这个评审意见不需要解释,还是比较有效的。

 

 

  • 配置项也能review:

 

 

 

 

增加简单功能的commit可以理解代码意图,这一点还是很不错的。

 

总体来说,还是有不少帮助作用的,至少可以让人工评审节省不少时间,比如bot可以辅助解释新提交代码的作用,指出常见错误,给出改进建议等。

 

如果配合ChatGPT的交流窗口,把有问题的代码片段再次单独交给他评审,可能会有更多的收获:

 

更多细节可以翻阅上面给到的两个测试PR的review记录。

 

不足之处

  1. 多次提交同样的代码,每次给出的review结果是不相同的,可能某次的评审建议是相对更合理且全面的,其他的几次不一定,或许需要多给他review几次,然后再综合几次的评审意见进行代码评估

  2. 无法完整的理解某个大的功能特性的设计方案和实现思路,打个形象的比方,就是组内A同学从来没有参加过功能点X的方案设计和评审工作(主要由B同学负责),然后让A同学直接去review B同学提交的代码,就有类似的效果,只能理解函数或代码片段,没有全局意识

  3. 个别review建议可能不一定正确,需要再进行人工判断,这一点也类似人工review,代码评审人提的建议也不一定是正确的

  4. 太长的新增的源文件,好像会无法评审

  5. 如果没有别的建议,bot会给出一堆通用建议,比如增加UT用例、lint检查、注释、log等等,这一点其实也不能说是不足吧

 

使用Python+selenium抓取职位和公司信息

做这个事情的目的是,想看下全国和江浙沪宁,招聘ceph、块存储相关职位的公司有哪些,再分析下其中哪些公司可以尝试联系起来,看看是否有兴趣用curve。

一开始想着用requests或者更专业的scrapy写爬虫脚本,但是试了requests库之后,发现啥也抓不到,被网站反爬虫了。。。

只能试着用selenium来弄,好几年没用它了,有点生了,折腾了大半天才算能凑合用。

selenium需要自己pip安装,chromedriver需要自己下载:https://sites.google.com/chromium.org/driver/home

输出结果大概长这样:

 

 

本博客访问域名开启HTTPS

使用certbot进行免费域名SSL证书的申请和更新。

因为我的os版本比较低,所以是用snap进行安装,高版本的Ubuntu系统可以直接apt install certbot就能安装了。

最后配置定时任务crontab,定期执行certbot renew操作即可定期更新域名证书。

然后就可以使用https访问域名了,http也会默认跳转到https。

100. 相同的树

题目链接:https://leetcode.cn/problems/same-tree/

自己写了一个,用递归遍历,同步记录遍历的节点到vector,空节点用比较大的负数表示,但是会重复遍历一些子节点(虽然也能正确判断两棵树是否相同)。下面这个是官方答案。另外我也尝试用循环遍历,但是记错了,用了stack,而不是queue。空了试下queue。

 

98. 验证二叉搜索树

题目链接:https://leetcode.cn/problems/validate-binary-search-tree/

没能把中序遍历和搜索二叉树联系起来,看的评论区题解。

 

谁是最亲近的人?

记不清从啥时候开始,只有我老婆记得我的生日。农历生日,真是记不住,连我自己也都不知道农历是什么日子。

犹记得18周岁生日那天在大学宿舍听收音机(是的,收音机,暴露年龄了),广播里的主播说今天是光棍节(11.11,也就是现在的双11),那是我第一次知道还有光棍节这个说法,本来以为4个1,好兆头啊。当时也正被感情困扰(不过单相思罢了),以为这辈子就是光棍命了。

幸好老天眷顾,在研究生快毕业的时候遇到了现在的老婆,还算顺利的过了11年。这几年聚少离多,但感情还算不错,日子也能过得下去(除了俩儿子有点气人)。

希望以后的日子全家人也平平安安,健健康康,顺顺利利。

我老婆常说,孩子长大了就不是自己的了,是他们自己一家子的,只有夫妻才是同路人。

95. 不同的二叉搜索树 II

题目链接:https://leetcode.cn/problems/unique-binary-search-trees-ii/

这题不会,直接看的题解。

 

立个flag

感觉不把flag立起来就一直不能静下心来动手写代码,先立起来,看看啥时候能搞定:

  • 先写一个brpc的服务,学一学brpc怎么玩的,最简单的实现一个http服务(get、post)
  • 再写一个braft应用,在多个节点上实现一个分布式的id查询和自增服务

 

2022-11-09

下载brpc代码库,v1.3版本分支,Ubuntu 22.04上完成编译,完成echo_c++ example代码编译和运行。下一步适当修改,改造成一个http的服务。

2022-11-11

简单改了下Echo示例代码,加了个rpc参数,表示消息长度,改成了http协议:

运行结果:

curl请求:

 

HTTP service,读文件内容:

运行结果:

 

 

 

236. 二叉树的最近公共祖先

题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

不会做,看的答案。

原理是先遍历二叉树,用hash map记录所有节点的父节点,然后分别遍历p、q节点的父节点并染色(用hash map记录节点是否染色过),遇到重复染色的节点即为二者的共同祖先节点。