去年我的工作计划之一,是开展对企业质量有关人员的培训和考核。培训可以用腾讯课堂或其他会议系统,培训后的考核却没有现成的应用。飞书中有考试模块,但我希望考试过程中能够开启用户摄像头,以确保参考者是其本人。考试过程中,系统会通过摄像头抓取画面传输到服务器端。
何不自己动手做一个?回头看,根据github记录,我是去年5月份写下第一行代码。7月份,在一次和上级的交流我无意中透露了自己在做的工作,领导说我们正在做一个考试系统啊,你再做就是重复劳动了,完全没有必要。我只好放弃了。
到去年秋天,领导说的系统迟迟没有上线。我也不时想起那些尘封的代码,觉得可惜。当初想做这个,工作上用只是原因之一,更主要的时我喜欢这个从零开始,到完成一个完整作品的过程。而且我知道要实现的一些功能会对自己现有的知识带来挑战——例如如何在浏览器调用用户摄像头,如何截图,又如何传输到服务器端,我完全没有头绪。但我笃信一点——只要你想,总有办法能够实现。写代码如此,别的事情同理。
去年10月3日,我带着笔记本电脑在图书馆泡了一整天,重启了这个项目。那个国庆假期大部分时间是抱着笔记本度过的。然后整个10月的业余时间基本上也都花在这上面。我又找到了写代码的状态,不断地遇到难题,不断地搜索答案,不断地尝试,然后一个一个地解决。虽然所有困难终有答案,但寻找答案的过程是备受折磨的,有时整整一周毫无进展。然而乐趣也正在与此,搁下代码去工作,去散步,一有空闲问题会在脑中盘旋,而且常常答案就突然冒了出来。
项目进展顺利,但去年11月上级开发的系统上线了。我有轻微失落,因为这个系统的目的之一不存在了。但系统基本功能已经初具雏形,不能再放弃。之后就断断续续地进行。上个周按计划应该开展第一期培训。通知如期下发,但那时系统只是在我笔记本上的开发环境里运行,从没有真正上线在服务器上跑过。说起来真是运气,2月6日刚刚申请了IBM Linux One三个月的免费试用。上传到服务器,排除了几个故障之后,运行得竟如丝般顺滑流畅。马上联系几个人注册测试,反馈都还不错。
在线培训上周按时举办,培训结束前发了考核的通知。按照计划培训后两天在系统上模拟考试,之后两天正式考试。培训结束当天晚上我出去吃饭,路上本能地掏出手机打开浏览器访问系统——“无法显示”,刷新几次仍然如此,我心掉入冰窖,一晚上饭菜无味,已经做好熬夜捉虫的准备。回家以后打开电脑,却又显示正常,虚惊一场。
今天(注:2022年2月28日)是正式考试的最后一天,到现在为止共有289个用户注册,进行了2684次模拟或考试。除个别用户反馈登录问题外,系统运转平稳。若没有意外,这个项目已完成使命。真是幸运,在基本完全没有测试的情况下,系统还能跑起来。
按计划,行业协会正开发一个考试系统,上线后我这个系统会停止使用。虽然我不认为别人开发的系统会比这个更好用,但我也没有长期维护这个系统的打算——不比创建的过程,繁琐的修补维护工作是无聊的。到时也许这个系统又像以前的项目那样尘封起来,也许会在github上公开源码供别人参考借鉴。
这个项目前端使用React,后端使用Django Rest Framework,技术上没有多大的难度,充其量也只是又一个实现了CRUD(增删查改)的web应用。不过我在从无到有的创建过程中得到了极大的享受,获得了满足感和成就感。Do something, Make stuff. 是为记。