Skip to content

Latest commit

 

History

History
175 lines (129 loc) · 6.32 KB

README_en.md

File metadata and controls

175 lines (129 loc) · 6.32 KB

pyscheduler

When we are in a project, we need to make plans, there are usually two ways to do it: The first is to use a software like Microsoft Project, this kind of software have rich features, but there is one downside which I don't like: they are too heavy, it is different to embbed the project plan into a text file like Markdown file; The second is to utilize the table syntax to write the plan directly in a markdown file. Personally I prefer the second approach: it is pure text, you do not rely on any special app to display it; It also has its downside, it is hard to maintain:

  • If you want to change the scheduled time for on of the tasks, you need to re-schedule all the tasks after it.
  • You can not see all the resource usage for the whole project like what Microsoft Project did.
  • You cann't filter the tasks according to some perticually critera.

This tiny software is to solve the above issues.

Currently we support the following features

Scheduler Command Line

Basic Usage

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

The input file for the command line tool is a markdown file(see test_en.markdown for an example), you can define the tasks of your project in a file, e.g.

# Task basic info
* ProjectStartDate: 2014-08-21

# task breakdown
* task1 -- 2[James]
* task2 -- 1[Lucy]
* task3 -- 1[James]
* task4 -- 2[Lucy]

The above file defines that the project starts from 2014-08-21, and defines the tasks of the project, now run the following command, we get an auto-scheduled project plan(If you use a Fixed-Width Font you will find that the table generated is well aligned)

> ./scheduler.py -e /tmp/test.markdown
Task  | Developer  | Man-days | Start Date | End Date   | Progress
----- | ---------- | -------- | ---------- | ---------- | ----
task1 | James      | 2.0      | 2014-08-21 | 2014-08-22 | 0%
task2 | Lucy       | 1.0      | 2014-08-21 | 2014-08-21 | 0%
task3 | James      | 1.0      | 2014-08-25 | 2014-08-25 | 0%
task4 | Lucy       | 2.0      | 2014-08-22 | 2014-08-25 | 0%

>> Total mandays: 6.0, Finished mandays: 0.00, Progress: 0.00%

You may have already noticed that if you save the output into a markdown file, the content is actually a table. i.e. **You only need to maintain the task list and how much time every task takes, this software will auto-schedule the plan for you.

Track task progress

As time flies, you need to update the status of each task, we support to update the status in the task breakdown file, e.g.

# Task basic info
* ProjectStartDate: 2014-08-21

# task breakdown
* task1 -- 2[James][100%]
* task2 -- 1[Lucy][80%]
* task3 -- 1[James]
* task4 -- 2[Lucy]

re-run the command, you get a new updated plan:

>  ./scheduler.py -e /tmp/test.markdown
Task  | Developer  | Man-days | Start Date | End Date   | Progress
----- | ---------- | -------- | ---------- | ---------- | ----
task1 | James      | 2.0      | 2014-08-21 | 2014-08-22 | 100%
task2 | Lucy       | 1.0      | 2014-08-21 | 2014-08-21 | 80%
task3 | James      | 1.0      | 2014-08-25 | 2014-08-25 | 0%
task4 | Lucy       | 2.0      | 2014-08-22 | 2014-08-25 | 0%

>> Total mandays: 6.0, Finished mandays: 0.00, Progress: 46.67%

Filter tasks by people

If you want to check out all the tasks assigned to James, add a -m param:

> ./scheduler.py -m James /tmp/test.markdown
Task  | Developer  | Man-days | Start Date | End Date   | Progress
----- | ---------- | -------- | ---------- | ---------- | ----
task1 | James      | 2.0      | 2014-08-21 | 2014-08-22 | 0%
task3 | James      | 1.0      | 2014-08-25 | 2014-08-25 | 0%

>> Total mandays: 6.0, Finished mandays: 0.00, Progress: 0.00%

Track Vacation

During a project, it is almost inevitable that someone will ask for leave for some time, but the plan is already scheduled? how? re-schedule the plan manually? No! Just record the vacation record(take a look at the vacation section):

# Task basic info
* ProjectStartDate: 2014-08-21

# task breakdown
* task1 -- 2[James][100%]
* task2 -- 1[Lucy][80%]
* task3 -- 1[James]
* task4 -- 2[Lucy]

# vacations
* James -- 2014-08-22

re-run the command again, we get the following plan:

> ./scheduler.py -e -m James /tmp/test.markdown
Task  | Developer  | Man-days | Start Date | End Date   | Progress
----- | ---------- | -------- | ---------- | ---------- | ----
task1 | James      | 2.0      | 2014-08-21 | 2014-08-25 | 100%
task3 | James      | 1.0      | 2014-08-26 | 2014-08-26 | 0%

>> Total mandays: 6.0, Finished mandays: 0.00, Progress: 46.67%

Break big tasks

Sometimes we may encounter this kind of issue: A task is made up of several small tasks. e.g. If we are developing an online shopping website, we might have several tasks related with product: Create, Update, Delete, Retrieve, and we want to group these related task together:

# Task basic info
* ProjectStartDate: 2014-08-21

# Basic
* task1 -- 2[James][100%]
* task2 -- 1[Lucy][80%]
* task3 -- 1[James]
* task4 -- 2[Lucy]

## Product
* Create -- 2[James]
* Delete -- 1[Lucy]
* Update -- 1[James]
* Retrieve -- 2[Lucy]

# vacations
* James -- 2014-08-22

re-run the command(with a new option: -t) we get:

> ./scheduler.py -e -t /tmp/test.md
Task                   | Developer  | Man-days | Start Date | End Date   | Progress
---------------------- | ---------- | -------- | ---------- | ---------- | ----
Basic-task1            | James      | 2.0      | 2014-08-21 | 2014-08-25 | 100%
Basic-task2            | Lucy       | 1.0      | 2014-08-21 | 2014-08-21 | 80%
Basic-task3            | James      | 1.0      | 2014-08-26 | 2014-08-26 | 0%
Basic-task4            | Lucy       | 2.0      | 2014-08-22 | 2014-08-25 | 0%
Basic-Product-Create   | James      | 2.0      | 2014-08-27 | 2014-08-28 | 0%
Basic-Product-Delete   | Lucy       | 1.0      | 2014-08-26 | 2014-08-26 | 0%
Basic-Product-Update   | James      | 1.0      | 2014-08-29 | 2014-08-29 | 0%
Basic-Product-Retrieve | Lucy       | 2.0      | 2014-08-27 | 2014-08-28 | 0%

>> Total mandays: 12.0, Finished mandays: 0.00, Progress: 23.33%

There is more features, try it yourself!