POSTS Application - Introduction and Overview

POSTS application is a well designed personal information management system which aims to make life better.

This POSTS app is more or less an app designed and implemented with my 10 years coding experience.

算起来,POSTS也是十年一剑的一个个人产品吧。从2008年夏天写下第一个C语言程序到现在,我也写代码正好十年有余。说十年一剑,其非一剑磨了十年,也非十年只磨了一剑。十年里其实磨了很多把剑,只是第十年恰好磨了这把剑,也恰好第十年准备做的正是一点。

Philosophy 标准

Good product always persist to something. 好的东西总有些东西。(抑或是工匠精神,抑或是某种执念,或者叫坚持,更甚称之信仰。)

Storyline and Overview 起源与概述

  1. 2017年年中,为满足当时自己的需求,依托于微信公众平台做了一个情侣间的相互留言的应用。
  2. 在使用留言应用过程中发现可以将微信公众平台作为命令行接口(CLI)记录一些生活中的其他事情到后台数据库以便后期处理。
  3. 于是,就初步的开始在留言应用中引入诸如“待办事项”等命令行子程序模块的开发。
  4. 2018年上半年,因为毕业、换工作等等事情而无暇顾及微信公众平台的开发,因此搁置了命令行(CLI)应用程序的开发。
  5. 2018年7月加入新公司,新工作中作为前端工程师开始更加专注于使用JavaScript进行开发;相对于在上一家公司作为技术部门负责人,自己也少了很多琐碎而繁杂的事务(比如团队管理与制度建设、团队协作平台建设、项目管理、运维、后台开发等等)而多了更多的时间专注的研究技术与整理自己的技术储备,以及思考自己的产品。
  6. 作为对之前微信公众平台CLI应用的继续,也作为过去开发经验与技术储备的总结,同时也作为对JavaScript技术群里面Node.js及React的练习(之前对JavaScript的使用更多在采用Angular、jQuery或者VanillaJS的前端项目中,而较少将其使用到Node.js和React),开始计划使用JavaScript技术群里的Node.js+React开发新的CLI应用。
  7. 取RESTful API设计中的POST动词,也参考英语单词Post的本意,然后结合复数命名Convention,给新的CLI应用取名POSTS,也称Posts。
  8. 2018年9月,参加工作且再次恢复单身以后开始有了更多一个人的时间,也突然冷静的发现是时候开始记账了,这样回头总结的时候也可以知道过去时间里我大致的生活路径。
  9. 于是,就有了POSTS应用第一个功能模块账单Bills模块,主要功能为按支付渠道逐笔记录每天的消费情况,且按渠道、按日、按周、按月等指标对消费记录进行统计与可视化呈现。
  10. 技术实现方面,为了避免重复工作,对接微信公众平台的后台程序代码沿用了之前留言应用的基础Python Flask程序基础代码;Python Flask微信后台程序通过JSON RPC over HTTP的技术方案在服务器内部(通过loopback地址127.0.0.1)将我在微信公众平台发送的符合要求的消息转发到Node.js Express实现的POSTS应用程序,并将消息经过处理后持久化到MySQL关系型数据库;前端采用React + Redux + Ant Design为主的技术栈开发,并采用RESTful API与Node.js后台程序进行交互,并采用Nginx进行静态文件伺服及接口请求转发。(当然,作为开发经验与技术储备总结的项目,事实上还采用了其他辅助或增强技术,比如采用MongoDB非关系型/文档型数据库记录用户访问日志、采用D3.js进行前端可视化图表制作、PM2进行进程管理等等。)
  11. 授权认证及其技术实现方面,采用RESTful API中常用的JSON Web Token得以实现,并采用hash算法对密码进行加密、采用加密算法对放置到token数据的用户关键数据进行加密以减少后台程序对数据库的查询次数。
  12. 觉得POSTS应用对别人也可以很有用,所以开始引入多用户体系(包括以外键方式引入用户id到消息记录作为消息记录归属标记)。
  13. 网页端引入以Textarea模拟CLI的输入Input模块,主要功能为拓展仅仅靠微信公众平台输入框输入信息。
  14. 统一消息入口接收消息,记录原始消息作为模板或者素材留作后用,并在分发到各个功能模块的消息记录中添加外部参照(外键)为原始消息记录。
  15. 基于自己对日常任务管理的需求,引入任务Tasks模块,主要功能为将任务进行分类管理,分类主要包括todo、doing、done、shelved、paused以及deleted。
  16. 基于自己对网页链接(包括微信收藏的公众号文章链接等)管理的需要,引入链接Links模块,主要功能为收集网页内容标题及链接,并计划引入网页链接分类及内容摘抄以便之后快速检索。
  17. 基于自己对诸如网页截图、笔迹扫描图片等文件管理的需求,引入文件Files模块,主要功能为收集与整理包括图片在内的各种素材文件,并计划引入文件分类及内容备注以便之后快速检索。
  18. 文件Files模块的实现方面,为减少服务器存储及带宽的负载,引入七牛云作为文件存储。
  19. 计划开发类似于媒体编辑部内容采集(Originals模块及Files模块)、内容编辑、内容审核及内容发布流程的分享Shares模块,为此基于"每个人都是多面性的,不同时刻扮演不同角色”的思路,创造子用户概念并通过子用户角色将子用户分组进行权限管理(比如,有inputer角色的子用户负责分享流程中素材采集、有editor角色的子用户负责对采集的素材进行组合及编辑成可分享的内容、有director角色的用户审批可以进行分享、有publisher角色的子用户负责对可以分享的内容实施分享以及有admin角色的子用户可以操作前述所有操作)。
  20. 完成了支撑分享Shares模块子用户、角色及权限系统模块的开发,其中具有admin角色的子用户负责对其他子用户进行授权操作。
  21. 匠人匠心,计划将更多的想法放到自己的网站里面,比如基于WebSocket的实时通知与提醒中心、更细致的前端埋点及后台数据及日志记录、前端多语言版本、前端多种主题、更少的前端工具及代码库依赖、后端代码采用WebPack打包等等。

* cached version, generated at 2018-12-29 11:52:38 UTC.

Subscribe by RSS