——后记不用浪费时间看。

engineercms开源仓库

梦想

从2016年开始,某次去下川岛出差,路上的时候,脑子中开始出现项目管理系统的概念,为何不能利用网络来实现项目上的一些管理呢,比如资料共享,流程。然后就上网去搜,那个时代,搜项目管理,会出现redmine,project这一类的网页端it业界使用的项目管理系统,就是管代码开发的。可是我要的是工程设计管理,但为他们这些简洁和方便的设计所吸引,后来又看到了project wise。

追求

所以,后面的一切,我都追求极简。
极简的环境搭建。极简的数据库,极简的部署,极简的编译,极简的移植,极简的权限,极简的富文本编辑器,极简的上传组件,极简的手机端,无客户端,用微信小程序,用完即弃,onlyoffice用docker load 离线包,然后run。
这个时代是网络服务的时代,单机软件已经越来越被淡忘了吧。

弃坑

开始看到说ROR(ruby on rails)是非常好的非常新的语言,学了好几个星期(还打印出台湾的教程 rails-101),可是连环境都搭建不起来,我去。
一个偶然的机会,看到有人提到go(类似于多年后有人提到froala,终于弃掉百度ueditor富文本编辑器……这文风像极了《百年孤独》里的名句:“多年后……面对行刑队……”),于是就尝试了。最最喜欢它的就是编译后直接执行,使用的人不需要为它搭建服务环境。2006-01-02 15:04:05为go的标准格式,据说诞生于那个年份。
它这个go很适合我们搞工程的人来写点东西,不像c#那么复杂。
开发环境也是如此简单,将go解压,配置一下环境变量就行了。
代码编辑器用sublime,随便拷贝到哪里都能用。
我现在想,搞开发,大家都会忽略我这种搞工程的,联网困难的人,还使用win系统的人吧,所以,环境搭建在linux系统,mac等上是不是特简单的问题,到网络不好,win系统上,就是一个绊脚石了。
所以,后续的很多东西,我都希望支持离线包的安装。先下载下来,再安装。在线安装,很多都搞不成。别忘了,很多局域网不允许联网。
数据库我就用sqlite嵌入式,不用跑服务。

求学

最开始写代码,从无闻的beego视频看,他教我们用beego框架写一个blog。
数据库的设计是一个拦路虎,完全没有概念,关系型,什么三大范式啥的。
看mysql的设计书,基本搞清楚了关系。《MySQL超新手入门》。
可是到后来设计的时候,或者用beego的orm时(没有join,缺憾太大),现在看来,还是没学好,关联查询用的太少了,写的代码就很啰嗦。为何不早点用gorm来联合查询呢,并且可以将查询结果映射到结构体。

《MySQL超新手入门》
https://segmentfault.com/a/1190000000456552
廖雪峰的官方网站——小白的零基础SQL教程
是廖雪峰,不是阮一峰
https://www.liaoxuefeng.com/wiki/1177760294764384

MDN webdocs由浅而深,讲变化过程,非常容易理解。
javascript异步
https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Asynchronous
javascript箭头函数表达式
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arrow_functions

感触

所以,咱们的书籍都是循序渐进,先讲简单的方式,根本不是终极解决方案。一般人看会了一点就会上手去写了,结果,好的东西放在后面,写了很久,才发现不是最优的解决方案。所以,学习应该看那些比较高级的开发案例,什么多并发,多服务,微服务,分布式,websocket,之类的,框架比如goframe这种,但是当时没有。数据库orm用gorm,xorm没有将关联查询映射成struct的功能。再比如beego的路由应该用namespace自动路由和swagger自动化文档配合,生成API DOC,不要去一行行写路由。框架也是,比如goframe框架就提供很多高级的功能。
过程中遇到一些没有文档的包,只好去看源码了,比如casbin和flow,eyeblue。
开始跨平台编译由于sqlite的驱动使用了gcc导致在win下编译的,去到linux下运行不了。现在只能在linux里编译。

成果

每次有点点突破都令人兴奋,不断改进,也放弃和淘汰一些。从富文本编辑器说,由Markdown到ueditor到froala,上传组件从uploadjs到webupload到inputfile,文章展示页面从csdn版到wordpress风格,树状侧栏从treeview到可编辑的,缺少拖动。
开发了onlyoffice协作调用和文档(权限)管理,利用flow做了通用流程,整合了mindoc进行书籍创作(并为代码做贡献),参考了eyeblue的文件分享提取码,开发了小程序端多项目切换,再继续整合一下视频直播livego,flv.js页面播放,photoswipe相册,minio做分布式文件存储,elasticsearch做全文检索,online3dviewer展示三维模型等。
一个特别的现象是,局域网部署在linux上几乎没出现过问题,但云服务器的winserver系统就三天两头出问题。
linux一共出现过2次吧,一次是cms每天早上8.00会像小程序端定制了信息提醒的人发送消息,而局域网是发不了的,导致程序崩溃。

# app.conf
#####定时任务####
######定时提醒打卡#####
tasktime = "* 30 8 * * 1-5"

# main.go
    time1, err := web.AppConfig.String("tasktime")
    if err != nil {
        logs.Error("获取tasktime ->", err.Error())
    }
    if time1 != "" {
        tk1 := toolbox.NewTask("tk1", time1, func() error { controllers.SendMessage(); return nil }) //func() error { fmt.Println("tk1"); return nil }
        toolbox.AddTask("tk1", tk1)
        toolbox.StartTask()
        defer toolbox.StopTask()
    }

一次是linux的系统盘满了,进行分区的扩展。https://zsj.itdos.net/docs/engineercms_008/engineercms_009#7rtpt

作者:秦晓川  创建时间:2020-03-26 20:59
最后编辑:秦晓川  更新时间:2024-11-22 18:38
上一篇:
下一篇: