Giter VIP home page Giter VIP logo

pyscheduler's Introduction

pyscheduler

For english introduction check out:README_en

做项目的时候大家都需要的做的一个事情是排计划安排,一般有两种做法:一是用类Microsoft Project的软件,这种软件的优点是功能很强大,缺点是有点重,非文本的,想把它嵌入到比如 markdown 文档里面很难;二是自己用表格的语法直接写在一个 markdown 文件里面。我个人比较喜欢第二种做法,这种做法好处是它是纯文本的,不需要借助任务特殊软件就可以展示。它的缺点是功能比较弱:

  • 你如果想要对中间某个任务的时间安排做出调整,那么这个任务后面的所有任务你需要重新排一次。
  • 你无法像Microsoft Project软件那样给你展示整个项目总的资源情况。
  • 你无法对整个任务安排进行筛选,让它只显示某个人的工作

这个小项目的作用就是为了解决前面提到的几个问题。

目前我们支持如下几个特性:

Scheduler 命令行用法

基本用法

scheduler.py [-m <man>] /path/to/work-breakdown-file.markdown

这个软件的输入是一个markdown 文件(已提供,见test.markdown), 你在这个 markdown 文件里面定义你的项目的任务细分,比如下面这段:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 任务细分
* 任务一 -- 2[James]
* 任务二 -- 1[Lucy]
* 任务三 -- 1[James]
* 任务四 -- 2[Lucy]

上面定义了我们这个项目是从2014-08-21开始做,并且定义了我们这个项目的主要工作安排,那么运行以下命令,我们可以得到如下的自动排期表(如果你的 Terminal 使用的是等宽字体的话,你会发现下面这个表格是工整对齐的):

> ./scheduler.py /tmp/test.markdown
任务   | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------ | ------ | -------- | ---------- | ---------- | ----
任务一 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
任务二 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
任务三 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
任务四 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>>> 总人日: 6.0, 已经完成的人日: 0.0, 完成度: 0.00%

大家也许注意到了,你如果把这段输出保存成一个markdown文件,它其实就形成了一个表格。也就是说你只需要维护上面提到的任务基本信息,利用这个小工具可以自动给你生成排期表。

track-progress

跟踪任务进度

当然,随着时间的推移你可以对你的任务的进度进行更新, 我们支持在 breakdown 文件里面对任务进度进行跟踪,生成的排期里面会自动把进度带过去:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 任务细分
* 任务一 -- 2[James][100%]
* 任务二 -- 1[Lucy][80%]
* 任务三 -- 1[James]
* 任务四 -- 2[Lucy]

再次运行你会得到这样的表格:

>  ./scheduler.py /tmp/test.markdown
任务   | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------ | ------ | -------- | ---------- | ---------- | ----
任务一 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 100%
任务二 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 80% 
任务三 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
任务四 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>>> 总人日: 6.0, 已经完成的人日: 2.8, 完成度: 46.67%

filter-by-people

根据任务负责人对任务进行过滤

如果你想只看看所有分配给James的任务,那么加个参数即可:

> ./scheduler.py -m James /tmp/test.markdown
任务   | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------ | ------ | -------- | ---------- | ---------- | ----
任务一 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 100%
任务三 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  

>>> 总人日: 3.0, 已经完成的人日: 2.0, 完成度: 66.67%

track-leave

支持对人员请假情况进行记录

做项目的过程中,人员难免请假,对于已经排好的计划怎么办? 手工调整?不用,你只需要记录谁在哪天请假就好:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 任务细分
* 任务一 -- 2[James][100%]
* 任务二 -- 1[Lucy][80%]
* 任务三 -- 1[James]
* 任务四 -- 2[Lucy]

# 请假情况
* James -- 2014-08-22

再次运行相同命令, 我们会得到如下排期:

> ./scheduler.py -m James /tmp/test.markdown
任务   | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------ | ------ | -------- | ---------- | ---------- | ----
任务一 | James  | 2.0      | 2014-08-21 | 2014-08-25 | 100%
任务三 | James  | 1.0      | 2014-08-26 | 2014-08-26 | 0%  

>>> 总人日: 3.0, 已经完成的人日: 2.0, 完成度: 66.67%

task-break

支持对一个大任务进行拆解

我们有时候会碰到这种问题: 一个任务由很多小任务组成。比如我们做一个网上购物网站,我们可能有几个任务是关于商品的增,删,改,查,很自然的,我们会把描述成这样:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 商品相关
* 增 -- 2[James]
* 删 -- 1[Lucy]
* 改 -- 1[James]
* 查 -- 2[Lucy]

运行命令我们会得到如下的排期:

任务 | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
-- | ------ | -------- | ---------- | ---------- | ----
增 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
删 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
查 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>> 总人日: 6.0, 已经完成的人日: 0.00, 完成度: 0.00%

任务的名字直接显示成,,, 不知道背景的同学完全不知道这个排期在说什么。

因此我们支持把每个大任务的标题自动添加到每个子任务的任务名字里面去,只要添加-t参数:

> ./scheduler.py -t /tmp/test.md
任务          | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------------- | ------ | -------- | ---------- | ---------- | ----
 商品相关: 增 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
 商品相关: 删 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
 商品相关: 改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
 商品相关: 查 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>> 总人日: 6.0, 已经完成的人日: 0.00, 完成度: 0.00%

我们甚至支持一个超大任务的多级细分, 比如下面的这个输入文件:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 交易

## 商品
* 增 -- 2[James]
* 删 -- 1[Lucy]
* 改 -- 1[James]
* 查 -- 2[Lucy]

## 会员
* 增 -- 1[James]

# 娱乐
## KTV
* 唱 -- 2[Lucy]

排期结果是这样的, 两级细分的标题在最终的排期结果里面都有体现:

> ./scheduler.py -t /tmp/test.md             
任务         | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------------ | ------ | -------- | ---------- | ---------- | ----
交易-商品-增 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
交易-商品-删 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
交易-商品-改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
交易-商品-查 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  
交易-会员-增 | James  | 1.0      | 2014-08-26 | 2014-08-26 | 0%  
娱乐-KTV-唱  | Lucy   | 2.0      | 2014-08-26 | 2014-08-27 | 0%  

>> 总人日: 9.0, 已经完成的人日: 0.00, 完成度: 0.00%

show-all-progress

支持显示每个人任务完成情况

在排期的时候我们往往希望每个人分配到的任务相对均匀,这时候我们就希望可以看到所有人被分配的工时的列表,这个只需要指定-s参数即可,比如对于上面的那个输入,输出会是下面这样的:

> ./scheduler.py -s /tmp/test.md
任务 | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
-- | ------ | -------- | ---------- | ---------- | ----
增 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
删 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
查 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>> 总人日: 6.0, 已经完成的人日: 0.00, 完成度: 0.00%
Lucy: 3.0
James: 3.0

show-undone-task

显示没有开始的任务

有时候我们想看看有哪些任务还没有开始做,这个我们也是支持的,比如下面的 breakdown 文件:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 任务细分
* 任务一 -- 2[James][100%]
* 任务二 -- 1[Lucy][80%]
* 任务三 -- 1[James]
* 任务四 -- 2[Lucy]

# 请假情况
* James -- 2014-08-22

如下执行即可显示所有开始的任务:

> ./scheduler.py -n /tmp/test.md
任务   | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------ | ------ | -------- | ---------- | ---------- | ----
任务三 | James  | 1.0      | 2014-08-26 | 2014-08-26 | 0%  
任务四 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  

>> 总人日: 3.0, 已经完成的人日: 0.00, 完成度: 0.00%

更多功能?Try it yourself!

pyscheduler's People

Contributors

jptiancai avatar liuchaofeng1230 avatar lxr0827 avatar xumingming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pyscheduler's Issues

建议增加功能

任务 责任人 所需人日 开始时间 结束时间 进度 单元测试 现场部署 拓展学习 需求更改
任务一 James 2.0 2014-08-21 2014-08-22 0% 100% 50% JQuery 学习 更改样式
任务二 Lucy 1.0 2014-08-21 2014-08-21 0% 90% 100% JQuery 学习 更改样式
任务三 James 1.0 2014-08-25 2014-08-25 0% 80% 30% JQuery 学习 更改样式
任务四 Lucy 2.0 2014-08-22 2014-08-25 0% 70% 10% JQuery 学习 更改样式

添加加班的功能

为什么需要「加班」的功能?难道技术公司就需要「加班」吗?尼玛,当 liuchaofeng 同学提到这个需求的时候我也惊呆了。

后面经过他的解释,还是有场景需要的,比如我们国家的十一长假,长假之前都会有调休 -- 原本不需要上班的星期六、星期日现在需要上班了,那么通过这个「加班」的功能,我们就可以标记这些「星期六」、「星期天」是需要上班的了(从而不会被排期引擎自动跳过)

english translation

How about an english documentation and in-application texts? Your images look promising.

支持定义任务与任务之间的依赖

有时候一个任务必须等另外一个任务完成才能进行,比如测试工作只有等开发到某个程度才能介入,因此有必要支持任务与任务之间的依赖。

Enhancement: Web-only mode

If you would offer an upload-button for markdown,
or even an embedded editor window from some other open source project,
the already existing website could make the whole workflow scale 'in the cloud'.
This could get you a far larger end user base.

优化任务标题的生成逻辑

目前任务标题只是简单地从任务细分文件里面抽取出来,这有时候其实是有问题的。比如我们要做个电子商务的网站,我们可能会有如下的任务:

# 项目基本信息
* 项目开始时间: 2014-08-21

# 用户相关开发
* 添加 -- 2[James]
* 删除 -- 1[Lucy]
* 修改 -- 1[James]
* 查询 -- 2[Lucy]

# 订单相关开发
* 添加 -- 2[James]
* 删除 -- 1[Lucy]
* 修改 -- 1[James]
* 查询 -- 2[Lucy]

这些软件生成出来的计划是这样的:

任务 | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
---- | ------ | -------- | ---------- | ---------- | ----
添加 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
删除 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
修改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
查询 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  
添加 | James  | 2.0      | 2014-08-26 | 2014-08-27 | 0%  
删除 | Lucy   | 1.0      | 2014-08-26 | 2014-08-26 | 0%  
修改 | James  | 1.0      | 2014-08-28 | 2014-08-28 | 0%  
查询 | Lucy   | 2.0      | 2014-08-27 | 2014-08-28 | 0% 

完全看不出来哪些任务是有关用户的,哪些任务是有关订单的。其实对于上面的任务细分文件,理想的输出应该是这样的:

任务                | 责任人 | 所需人日 | 开始时间   | 结束时间   | 进度
------------------- | ------ | -------- | ---------- | ---------- | ----
用户相关开发 - 添加 | James  | 2.0      | 2014-08-21 | 2014-08-22 | 0%  
用户相关开发 - 删除 | Lucy   | 1.0      | 2014-08-21 | 2014-08-21 | 0%  
用户相关开发 - 修改 | James  | 1.0      | 2014-08-25 | 2014-08-25 | 0%  
用户相关开发 - 查询 | Lucy   | 2.0      | 2014-08-22 | 2014-08-25 | 0%  
订单相关开发 - 添加 | James  | 2.0      | 2014-08-26 | 2014-08-27 | 0%  
订单相关开发 - 删除 | Lucy   | 1.0      | 2014-08-26 | 2014-08-26 | 0%  
订单相关开发 - 修改 | James  | 1.0      | 2014-08-28 | 2014-08-28 | 0%  
订单相关开发 - 查询 | Lucy   | 2.0      | 2014-08-27 | 2014-08-28 | 0% 

也就是说要把当前任务的「上下文」带上

进度信息和markdown语法冲突

现在进度和帐号的表示方式是这样的:

[James](100%)

这在markdown语法里是链接的表示方式。可以考虑换成:

[James]<100%>

之类的

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.