0%

周报系统改进

好像离上一篇水文已经隔了6个月之久。。

万恶之源

本打算写一下技术总结性的blog,但事实只能证明我的确还不是那么勤劳的人。

想想当初花了60rmb/年租了这个域名+10刀每月的vps,还是于心不忍就如此荒废。

去年的由于岗位调整,原本仅有的幸福时光(不用开会,不用接电话,不用整理ppt,也没有人来打扰,安安静静写会代码),还得分出一部分时间来整理9个人的周报!!!

看着内容凌乱的一份份excel表格,原先写一份就够呛的玩意,现在直接超级加倍,尤其是看到交上来的那写的连小学生流水账都不如的周报,(真的,小学生流水账至少还有时间经过结果),还得重新写一遍,想到这里血压已经高了。

沟通成本过高,遂考虑用code的方式解决问题。

需求论证

一开始的想法是使用python来自动化的解析excel并对项目自动规整。但是一想到五花八门的项目名称,对于手写周报根本找不到一个合适的主键来进行规整,于是直接pass这个方案。

于是还是打算从输入表单的入口约束来调整,通过web表单的方式约束生成必填项,规整内容后,再进行导出,也就是搞个类似的xxx平台,以平台当作入口,按照格式填写内容,约束后存入部署在服务器上的数据库,并将格式化数据以表格形式导出即可。

组内成员通过浏览器进行周报填写,直接提交到本地的数据库中,很好,这下连周报邮件都省得收了,hhh.

方案选型

说到做一个xxxxx管理平台,一开始考虑的方案即是前后端分离的B/S架构。Saas概念和小程序推的火热,直接用这套方案绝对是没错了,web平台是天生的轻量级客户端分发。(实际上现在流行的Electron也是基于web技术的GUI APP方案,难道web真要一统天下,hhh)

后端方案无疑是使用python了,为的是快速开发原型(一鼓作气,再而衰,三而竭),而现在最需要的就是一个能用的原型来降低我的血压。

确定好使用B/S之后,下一步就是确定具体的B/S方案。

对一个几乎没有web前端开发经验的人来说, 一开始是找的后台渲染方案, 原因很简单,企图绕过web技术栈中的css。类似于这个blog框架hexo,使用markdown来做样式的静态渲染来生成前端页面。

前端的html+css+js/ts这套方案里,最麻烦的就是布局了,其它入门都没什么难度。

不过在调研了python的后台渲染框架 Django和wegtail之后,发现并没有什么软用,完全没有办法绕过css。

于是果断抛弃纯后台渲染,而使用前后端分离方案,即轻量级后台框架Flask+某个前端框架(实际选了vue)。

饿了么?

其实在真正使用vue之前,对vue仅有一个概念了解,直到看明白了web组件的设计理念,感叹世界上的事情总是符合奥卡姆剃刀原理,大道至简。

果然正确的事情总是不复杂。

于是使用element-ui之后,更坚定抛弃纯后端渲染这种历史悠久的方案。

非常感谢饿了么,不光是靠外卖活过的每一个周末,也开源了element-ui。

原型构建

原型构建花费了大约196个小时,前后足足有1个半月之久。

第一个简单的页面花了足足一晚上,包括看vue api以及css。仿佛经历了第一次学c语言写出hello world的那一天,体会到自工作后久违编程的快乐。

了解原理之后,后面的页面就很快了,花了半天时间写完剩下的。

过完年后,又花了一个礼拜,把后台的框架和数据库模型也搭好。

剩下的时间就是修改各种bug,没错,85%的时间花在了改bug上,前后足足改了快一个月。

由于前后端使用的都是动态类型语言(js和python),动态类型语言的缺点在维护的时候,暴露无疑。(尤其是js里对象/数组的引用属性和普通类型的值属性,可以说是非常弱智的玩意了,参数类型全靠注释。。)

(life is short , i use python这么著名的slogan,一度认为这话应该改为i use python,so life is short)

由于没有类型约束,(非常后悔没有一开始就用ts),加上每天上班,只能下班睡觉前改一点点,基本上跟个阿尔兹海默症患者似的,今天忘了昨天改了啥,然后又接着踩坑。(让我想起了克里斯托弗·诺兰的电影《记忆碎片》里那个靠纹身记忆的男主角)

总结一下?

曾想把整个过程一点点全当技术摘要整理下来。不过光是把原型做出来已经废了很大的精力,着实没有力气再去写什么技术摘要。

想必那些网上愿意总结和分享的人所拥有的对技术的热情必定是在我之上的(我只想补觉)。

动手之前,按照一年52周,每周浪费一个半小时整理周报计算的话,整个原型开发只需要在78小时内做完,那么从时间利用率角度看,对于当年来说就是正收益。

从脑子里的想法变成实际能部署的环境,其中花费的时间精力和dirty work超出预计(正收益已经转换成沉没成本…)

短短一个多月,直到最后部署使用,仿佛又体验了一遍编程"从入门到放弃"的全过程。

即便是简单的想法,落地也并没有想像的那么简单。

想必那些高大上的华丽方案,里面也必然充斥着无数的dirty work,这世界还是需要那些决不妥协的偏执狂们。