/Tasker

A free task management system

Primary LanguageJavaOtherNOASSERTION

Tasker 0.2.3
Copyright (C) 2012 Nathan M. Swan
Licensed under the GNU GPL, see the LICENSE file.

Overview
--------
Tasker is a task management system designed to leave little choice to the user,
forcing them to do the unpleasant task rather than the easier and less urgent
task they prefer.

Building
--------
It comes as a NetBeans project, so that can be used, or you can use the ant
build script.

User Manual
-----------
Tasker shows the task you should currently be working on, the "current task."
It hides the other tasks, which are stored in a .tasker file (it automatically
opens the ~/default.tasker file).

The information it displays is:
    1. Absolute effort
        The effort you specified when you created this task, a measure of the
        time and energy required.
    2. Days left
        The urgency of completing the task, a measure of the time left until
        the due date.
    3. Relative effort
        The amount of effort to be spent each day.

These are the operations which change your task list:

    1. Add Task...
        Launches a dialog where you configure your task. The description should
        be a fully descriptive name for what the task is. Effort is, on a 0-100
        scale, the time and energy required to complete the task. Choose the
        date due, or weekly repetitions, for the Due Date.
    2. Put Off
        Puts the current task back into the list, taking out a new task. This
        should be used, for example, with easy tasks that can be responsibly
        put off. Don't use this feature too much, though, or you defeat the
        purpose of Tasker.
    3. Complete
        Declare that the task is finished, removing it from the list of tasks
        And displaying a new task.
    4. Shuffle
        Just like "Put Off," but it considers the current task. Use if, after
        adding a batch of tasks, you want to see if one is more important, or
        if you should continue on your current one.
    5. Taskdump
        Displays info on all tasks to stdout. If you do not know what this
        means, this feature isn't for you.

Technical Details
-----------------
It chooses tasks based relative effort, defined:

    relative_effort = absolute_effort / (days_left + 1)

Absolute effort is a 0-100 user-defined measure of the time and energy required
of the given task, while days_left is the number of days left until the user-
specified due date. Relative effort can be seen as effort per day.

But if the task is late, another formula is used:
    
    relative_effort = absolute_effort * 2 * days_late
    
This puts late tasks at the top of the list.

Tasker doesn't just choose the task with the highest relative effort on the
task list as the next task. Doing so could force the user into doing similar
hard projects, and sometimes they need a break. Instead, it randomly chooses
a task from the list with bias towards higher relative effort.

To be mathematical about it, it chooses the nth index of a list reverse sorted
by relative effort where R is a random number of Gaussian distribution where:

    n = floor(|2R|)
    
It reads from the task file that's been opened, which is in a text-based format
with time measured in millinix-time (milliseconds from the Unix epoch). This
is the grammar (a superset of the tasker0.1 format):

    TaskerFile ::=
        'tasker0.2' ['empty' | NotEmpty]
    NotEmpty ::=
        'current:' Task 'others:' (Others)
    Others ::=
        [Task | Task Others]
    Task ::=
        Description AbsoluteEffort MillinixDueDate
        Description AbsoluteEffort '0 0' DaysOfWeek MillinixFirstDueDate 
        
The description will have underscores ('_') in place of spaces (' ').

Future incompatible versions will have different signatures.