et — The Trivial Time Tracker
This is the project page for et, a software package for tracking time expenditure. et is the brainchild of Ethan Blanton.
This package provides simple time and effort tracking functionality, such as might be used for filling out time cards or billing customers. It is organized for use in a semi-distributed environment, where it may be convenient to check in and out of tasks on more than one machine (e.g., on a desktop when in the office, and a laptop on the road) and then aggregate those logs for reporting.
The user interface is designed to be comfortable for long-time Unix users who prefer names “worn down to three-letter nubbins, like stones smoothed by a river.” (Neal Stephenson, In the Beginning was the Command Line) For example, checking into a task is accomplished with et ci <taskname>, and checking out is simply et co. Reports for the calendar week (starting on Monday, because that's how I count them) are generated with et r w. If this seems scary, et is probably not the tool for you.
et does very little to protect you from yourself, by design. For example, It uses a mostly-plaintext simple database format with primitive locking for manual hackability (lockfile ~/.etdb/lock is a perfectly suitable locking mechanism if you want to modify the database manually), but expends minimal effort on robustness to botched manual hacks. It is not intended that one should edit the database directly, but rather understood that one might need to do so anyway.
On the other hand, et tries to be responsible with your data. Mutable metadata is stored using a move-before-write mechanism, so that a botched update (due to full disk or other problems) will hopefully not leave you in an unrecoverable state. Time tracking logs are append-only and opened with O_APPEND so that corrupt entries will not damage historical data.
For the time being, et is hosted here on kb8ojh.net, although I have created a Bitbucket clone for convenience.
You can clone the et repository with this command:
hg clone https://kb8ojh.net/hg/et/
et is implemented in Ruby and has no particular dependencies. The codebase is poorly documented, but is not particularly large or complex. There is a test suite with moderate coverage.