项目介绍

项目名称:DoItNow

项目介绍:实可以快捷交互的时间管理工具。(场景)随时随地在网页上打开进行交互,实时更新渲染,能够让人知道需要着手完成的任务的重要情况及时间安排,将每日日程了然与胸;(任务)核心功能:集成日程规划、计划管理、任务清单、备忘录、生活记录于一体,从而帮助时间紧张的群体更好的管理时间。

NABCD分析

  1. Need:不管是管理层各种开会提醒、文档撰写,还是程序员学习框架与实现需求,都需要规划好明确的时间,并且有一种方式来提醒自己截止日期和完成情况,最好还有一种方式其知道自己完成的历史情况。

    不少人在桌面上建立Todo list,设为手机或电脑桌面,但缺陷也非常明显,不能提供实时的交互与更新,也无法主动提醒各项任务,甚至即使是重要性不同,紧迫性不同的任务也占用了几乎相同的位置和注意力。

    这样的情况极不利于日程规划的制定与执行,并且需要个体付出意志力去执行这样的“计划”。我曾今也制定计划,但是由于这种桌面上编辑非常不智能,放弃了制定计划,亟需一种可视化系统,利用多视觉通道,有效展现计划的关键信息。

  2. Approach:设计一种全新的可交互可视化系统,采用“双对数时间线”,设计及实现流程如下:

    • 调研
    • 需求设计:包括概念设计/AR图,功能规格设计/原型设计,技术规格设计
    • 前端:Vue(let react/vue do the MANIPULATION of DOM while let d3.js do the “DRAWING”),Echarts/D3(作为库,实现一些复杂的图表),Axios(作为接口请求后端推送的数据)
    • 后端&数据库:SQLAlchemy(作为模型层控制mysql),Flask(实现业务逻辑和数据处理,为前端提供接口,相比Django更轻量)
    • 测试及运维:数据库使用mysql容器提供服务,后端、前端放置在一个容器中,由Flask统一管理并提供服务。
  3. Benefit:

    image-20210704152055587
    • 日常规划及映射:使用可交互编辑的“圆环图”构建日常规划,并映射到“双对数时间线”上,形成一个linked-view
    • 目标与任务清单:时间线上的任何一点均可作为截止时间,插入任务(默认不设定起始时间,迫近截止时间时逐渐加深),任务可设定百分重要性,距离中心越近的任务重要性和紧迫性越高,按照双重标准对任务进行排序。任务分为Life和Study两类,分别向时间线两侧展开。
    • 生活记录&历史统计:在时间线上某些点处可在线编辑markdown文档并在hover时展示缩略图,点击时打开窗口渲染(能否集成Typora?)
    • 任务提醒:任务接近ddl时告警,自动生成任务清单视图,按照重要性和紧迫性双因素排序。
    • 用户登录:为了保证数据的唯一性,需要按照不同用户保存数据
  4. Competitors:

    • 备忘录
    • 甘特图
    • Todo List
  5. Delivery:在博客、bilibili上写博文,做视频宣传网站。更多的是自用

需求设计

设计理念

  1. 未来比过去重要,离当下距离越近越重要
  2. 每个任务有一个明确的截止时间,其重要性随着到截止时间的距离增加而指数减少(如同遗忘曲线一样)。当任务重要性低于某一阈限,将不再计入任务安排中
  3. 目标、清单、任务、里程碑、日常的相互关系:
    • *目标(WillDo)*是某个时间点需要进行的事物,在此之前的时间内需要围绕这一“目标”做准备
    • *清单(Todo)*提醒自己目前开始需要完成怎样的任务,没有截止时间,以更好地规划时间,将大脑集中在当前应该完成的事项上。
    • *任务(Todo)*是某一段时间内需要进行的事物,有一个明确的截止时间,随着距离截止时间的距离越近而越紧迫。
    • 里程碑(Done)。对于过去的任务,时间线上在时间安排区会自动记录“里程碑”(任务的一种新形式表现),不再出现任务的方格。
    • *日常(Routine)*指作息时间安排,好比乐曲中的节奏,在每个小结(每天)都是固定的,不断重复这一框架。但是一个形式上的框架,不一定要完全遵守这一规定。
  4. 任务按照重要性进行排序,采取颜色深度表示重要性,宽度使用非线性映射表示重要性的排序(不直接表示重要性,能够统一表示)

AR图

image-20210704220059635

功能规格说明(原型设计)

From vika: https://vika.cn/workbench/dstshKJzBGFUpubhU6/viwK1ihPATrQW

image-20210716230646912

接口设计

主视图函数

x表示横坐标,t表示相对时间(相对当前),T表示绝对时间,w表示宽度,y表示纵坐标,Δt\Delta t表示任务ddl到目前的距离,imp表示任务预设重要性,priority表示任务当前重要性,order表示任务重要性排序。

则存在函数:

  • x=tαx=t^\alpha
  • p=i(12)βΔtp = i \cdot (\frac{1}{2})^{\beta\cdot\Delta t} 正比于 w,但低于5%不计
  • o=sort(p)o = sort(p)

固定化参数,减少随机性

对象

即数据库需要存储什么?定义逻辑上的功能,再推理物理上的实现

  • RoutineManager 包含多种Routine,在不同天上使用不同Routine,持续24h
    • [routine: Routine]
  • Routine
    • name: str
    • description: str 包含Routine的规则,markdown文本便于渲染
    • begin: Time
    • end: Time
    • (persist: TimeDiff) 依赖属性
    • [routine]
  • Time
  • WillDo
    • name: str
    • description: str
    • time: Time
    • importance: int(0~100)
  • ToDo 需要在begin和end中指定一个或多个(任务和清单不区分),完成后自动变为Done
    • name: str
    • decription: str
    • begin: Time
    • importance: int(0~100)
    • beta: float(0~1)
    • finished: bool
    • end: Time 如果方框被勾选,自动结束,并以此刻为结束时间
    • color: Color