This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Navigation: The ideal time management application

Braindump

Hmmmmm

There are two reasons for tracking time, the first would be to become a better planner, the other is to try and change the way you distribute your time. Accurate statistics on how much time you spend on activities gives you the insight you need to change things for the better. It's what we call, "getting scientific". Are you spending too much time procrastinating? Feel like you aren't getting anywhere in life? Get the numbers and start doing something about it. Monkey can't help you fix your life, but we try to give you the tools needed to take action.

Backed up snippets

As for the actual implementation Monkey draws heavily from two existing task management applications: OmniFocus and Things.

Ethan Schoonover from the OmniGroup explains the concepts behind GTD and the way OmniFocus supports them in the OmniFocus Basics Video (23MB MOV):

Use cases

Track time

The default time tracking mode is based on that from GTimeLog. Here's how it works:

  1. Let the application know you're going to start logging facts if you haven't done so already (special keyword: arrived)
  2. From that moment on the application will start a timer
  3. Type the action description in the entry field but don't submit it yet
  4. The application will start searching for actions (auto-complete)
    1. This will also auto-complete any terms associated with the action
  5. You have the option to enter a friendly note you can also add extra terms specific for this fact
  6. Start doing the action
  7. Once you determine you're done with the action bring up the time tracker and hit enter
  8. The application will log the duration (from the end of the last fact to the current time)

Everything will then start again from 2.

Fact entry syntax

This is intended to be somewhat of a formal grammar but it's probably not entirely correct.

entry                ::= ( "arrived" | [ ( negative_time | full_time | start_time ) , " " ] , action_description , [ " " , fact_description term , " " , *term ] )

action_description   ::= anything excluding ( and #

fact_description     ::= "(" , anything excluding ) , ")"

term                 ::= "#" , anything excluding # and white space

negative_time        ::= "-" , minutes

full_time            ::= start_time , "-" , end_time

start_time, end_time ::= time

time                 ::= digit , digit , ":" , digit , digit

Some actual real-life examples would be:

Travel through time (Fixing the time machine) #timemachine
-10 Hijack some nuclear weapons (Just met Vladimir) #vladimir #armsdealer #twitchyeye
12:00-13:00 Lunch
10:10 Break

Taxonomy

We probably should not use the taxonomy stuff to define projects.

Taxonomy for menus

There's also a special menu vocabulary which is used to construct a large part of the left sidebar in the main window. Every direct child of the vocabulary becomes a heading and every leaf becomes a list. If there's a custom icon assigned to the term this will also be displayed.

Example of a SQL query for widget

This obviously isn't a real query (we don't have the datamodel ready yet) but gives a good indication of how a query would sorta look like:

SELECT t.name, SUM(minutes) FROM facts f 
INNER JOIN facts_tags ft ON f.fact_id = ft.fact_id
INNER JOIN tags t ON ft.tag_id = t.tag_id
GROUP BY t.name

Syntax

Considering the above mentioned the ideal tracking syntax would probably be something like:

Category: Sub-category: Sub-category: Activity (Description) #tag #another-tag #yet-another-tag

Some other features:

# Add an activity with the end time of the previous activity as the start time and an end time of now minus 30 minutes
-30 Category: Activity (Description)

# Add an earlier activity with a specific start and end time.
10:20-10:40 Category: Activity (Description)

By default an activity entered without a category will end up in the Unsorted category:

Activity (Description)

Project Hamster

Cool features

Hamster has a very cool time slider you can use to easily adjust the time you spent on an activity. Note how previously added activities are displayed in a light gray color.

Room for improvement

Things that possibly could be improved (but may turn out to be silly ideas)

My work on Project Hamster

Submitted bugs

Activities

Short ideas

Extensive ideas

Template

Summary

[...]

Rationale

[...]

User stories

[...]

Implementation

[...]

Experience system

Summary

Perhaps it would be interesting to implement some sort of an experience system which basically equates to tracking time, but instead of on categories and activities you'd do it on technologies (programming languages, software). You could use the tag syntax (see above) to add information as to what technologies are being used. E.g.

Hacking: GNOME: Hamster: Programming (Implementing XP system) #python
Sysadmin (Configuring OSSEC) #linux #ossec

So perhaps really tracking time on tags is just another way to report things.

Combined with a rules system you could automatically add tags so you don't have to do it manually. Rules could be written in Python and executed after an activity is entered. Example:

   1 def rule(fact):
   2     if (fact.activity.name == "Programming" and
   3             fact.activity.category.name == "Hamster"):
   4         fact.tags.append(Tag("python"))

Rationale

[...]

User stories

[...]

Implementation

[...]

Project plan


2024-10-23 10:59