STOPTHAT - Components
STOPTHAT is not one executable, it is a number of distinct components that make up a functioning whole. This section gives an overview of the parts.
The database is probably the most important element, especially after you've invested a bunch of time adding data to it. It's a plain text file with just three columns, separated by tabs. There's a time stamp, then a project ID, then a description of the task. My database looks like this:
13450.36389 0 Away 13450.39059 1 Arrive, check email 13450.40014 10001 Do work on first project 13450.41707 10002 Do some different work on a second project 13450.44673 10001 Do some more work on the first project
- Time stamp
- The time stamp is compact because it's a single number representing both the date and the time.
- Project ID
- Each project has its own unique ID, which acts as a key for more information about that project. A project ID that is just one character long has special meaning.
- The description is just a sentence about what you were doing immediately prior.
Every line in the database defines one single period, but it relies on the line before it to provide the start time for that period. So all of the lines need to be in order, without gaps.
The configuration file is as simple as can be. It has two important jobs.
The first job of the configuration file is to specify some paths on the filesystem. The software uses the configuration file to know where to find the database, and where to store any graphics that are created.
The second job of the configuration file is to define all of the project IDs and their titles. This allows you to have a short project ID in the database, but a descriptive title everywhere else.
The whole software is called STOPTHAT, but the GUI is also called STOPTHAT. It is made with Tkinter, so it can easily be run on Windows and Linux. The GUI is the main interface to the software.
The primary job of the GUI is to add one single line at a time to the database. Every time you switch to a new task, you find the little GUI, select the project you have been working on, type a description of what you have been doing, and hit the big mascot button. Big buttons are easier to hit, which is especially good if you need to hit the button many times per day.
The secondary job of the GUI is to show the most commonly used text reports and graphic timelines. The “Stuff” menu has a list of common reports and timelines. When you select one of these, it is opened in a new window. This lets you review your current day, yesterday, this week, last week, and so on.
The report-generating script is known as STOPWHAT, because you use it to create reports of what you have been working on, in the distant past, in the past year, or yesterday. STOPWHAT tells you, through text output, what you have been doing with your time.
This is a full command-line program with lots of different arguments. You can get a report for a certain date. You can have your report in several text formats. You can group the output by projects. You can group the output by date. You can group the output by projects, then date. You can group the output by date, then project. Everything that I thought would make a report useful is in there.
The GUI can use STOPWHAT to summon some common text reports, and display them in the GUI. Very handy. You can immediately tell your coworker how much time, this week, you've spent on a given project.
The graphic-generating script is known as STOPLOOK, because it lets you look at a timeline representation of your data. So far it generates a timeline, one day in length, that has colored bars, icons, and text. Each project id has a unique color associated with it.
There is a full command-line program that generates the graphics, with a number of arguments. You can specify the day you want to see, which database to interpret, and where to put the file. The result of running the script is to create an image graphic on the file system, which can then be viewed with other tools.
The GUI can use STOPLOOK to summon a timeline graphic for the current day, or yesterday. I am always checking the timeline to see what my day is looking like, and where I'm spending my time.
The Python module is pretty basic. It just holds classes, functions, and operations that are common to all the different components. The GUI, the Report Script, and the Graphic Script all make use of the module.