aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md128
1 files changed, 128 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6167659
--- /dev/null
+++ b/README.md
@@ -0,0 +1,128 @@
+Task Time Tracker
+=================
+
+A tool to keep track of the time spent on tasks.
+
+# Why use it?
+
+Why not? Besides, you'll be able to create, duplicate, move, rename,
+archive, restore and delete tasks at the distance of one (or two) key
+stroke(s). You'll also be able to edit the time spent on a task by
+adding, subtracting or setting the time you want. But that's not all!
+
+With the Track'n'Close technology, you won't need to keep the app always
+open. Once you start tracking time for a task, the app will keep track
+of it, even if you close it or turn off your computer.
+
+Count seconds, minutes, hours, days, and even years... all the way up to
+infinity\* thanks to the not-so-new technology of 64 bit integers.
+
+Be amazed by the compact interface that automatically adapts the time
+representations while maximizing the displayed precision.
+
+Cleanup the workspace by moving your finished tasks to the archive. Want
+to bring back some archived tasks? No problem, just switch into the
+archive view and restore them.
+
+Ever felt like your data is being held hostage? Not anymore! Import and
+export your tasks using the widely supported CSV text file format.
+
+Want to be part of the last frontier? Grab the bleeding edge version 2
+which brings: sorting capabilities; better text input with UTF8
+support; possibility to archive and reset all current tasks with a
+single command; and allows to merge tasks with the same name. As an
+extra , you'll need to export and re-import your tasks due to some
+database incompatibility (oh, the joy).
+
+And if you don't like what you're seeing, this is your lucky day!
+Because you have access to the source code, you can adapt it to your
+needs!
+
+**Task Time Tracker - *You may not need it, but I enjoyed making it!***
+
+*\* Although the app cannot count to infinity, it surely displays it (∞)
+if the time goes to 9999.5 years or above. Also, it will display a minus
+(-) if you force a time to have negative values.*
+
+# Why create such tool?
+
+I like to keep track of the time spent on my daily job's tasks. It helps
+me be aware of time pits, and improve my time estimates. This motivated
+me to search for a simple app that allowed to take measurements without
+too much effort.
+
+After skimming through all cloud-based and too-complex apps, I
+eventually landed on some text-based user interface (TUI) apps. The one
+that almost convinced me was [worklog](https://github.com/atsb/worklog),
+but I just couldn't come to terms with its interface.
+
+So, after spending more time than I'd like to admit searching for a task
+time tracker, I decided to take matters on my own hands. Maybe I just
+needed to improve my search-fu. Maybe it was just an excuse to write
+some code. Either way, I wasn't turning back.
+
+# Why use C and ncurses?
+
+I've been looking for an excuse to revisit C, which I haven't used for
+more than a decade, and this seemed like a good opportunity: a simple
+app with a small set of features. But how would I build the user
+interface? I didn't want to learn an advanced toolkit just for this
+small project, and since the TUI apps had somehow resonated with me, I
+decided to try out the ncurses library which has been surviving the test
+of time.
+
+Because this was an hobby project focused in exploring C and its
+standard library, I allowed myself to obsess with whatever details I
+wanted to. This serves to justify the lousy code, and explains the fun I
+had.
+
+Overall, it was a satisfying experience with occasional moments of
+frustration whenever "string" manipulations were required. And now that
+the first part is completed the best part begins: let's try to implement
+it in Jai and get some hands-on experience of how the two compare. See
+you on the other side. 🖖
+
+# What is Jai?
+
+Jai is a temporary name used for the programming language being
+developed at Thekla, Inc.
+
+# Why port it to Jai?
+
+Because I love to explore, and I needed an excuse to try out the Jai
+compiler I got access in the meantime. This allowed me to experiment and
+compare this new programing language against the original C
+implementation.
+
+During the initial pass to port the code, I made some small adaptations
+due to syntax differences, and improved some data types (finally, I
+could replace all those `*u8` with proper `string`). The initial pass
+was easy, so I decided to add some features I missed while using the app
+on my daily job.
+
+Still, the ncurses dependency was bothering me. Although the language is
+well prepared to interact with C/C++ libraries, and I was able to
+quickly setup the necessary bindings to use ncurses, it didn’t fell
+right… this dependency was blocking me from building this app for
+different operating systems (OS). Could I replace ncurses with something
+native to this language? Yes… but that require much reading and coding,
+and that’s what I did.
+
+After surfing an uncountable number of websites and manuals about linux,
+terminals, escape codes, and whatnot, I ended up creating
+[TUI](https://github.com/gudinoff/jai-modules), a simple terminal user
+interface module that provides basic functionalities similar to the
+[ncurses library](https://en.wikipedia.org/wiki/Ncurses), written in Jai
+to allow portability between OSs.
+
+Working with this new language was a joyful experience. Most of the time
+it felt like I was simply cleaning up (simplifying) the code, with very
+little friction. There was no hiccups setting up the project or adding
+new modules, it all just worked. I really hope this language gets to
+spread its wings.
+
+# License
+
+Licensed under GPL-3.0-or-later.
+
+SPDX-License-Identifier: GPL-3.0-or-later