It has been a while that I tried . With the new Tracker plugin (AI haha) for we get head tracking without annoying IR LEDs or reflecting stripes just by reading the webcam video feed. This is apparently fast enough to try without a dedicated nowadays. And all that on a PC. Took some fiddling but the concept still works. What a time to be alive.

Demo: https://makertube.net/w/groS1wpAhP8XYE75vJwX32

HowTo: https://simpit.dev/systems/opentrack/

I got my hands on a 2nd hand and I’m really impressed so far. Still checking out it’s features using . Came with a dongle so when connected to a display (and _some_ sort of keyboard) it basically turns into a complete workstation. How awesome is that?

Already sorry that I can’t keep it for myself since it’s a birthday present but I definitely tasted b… err… I want one too. Mebbe for my own birthday? Pretty please?

After self-hosting my email for twenty-three years I have thrown in the towel. The oligopoly has won. by Carlos FenollosaCarlos Fenollosa (cfenollosa.com)
Many companies have been trying to disrupt email by making it proprietary. So far, they have failed. Email keeps being an open protocol. Hurray? No hurray. Email is not distributed anymore. You just cannot create another first-class node of this ne[...]

And I’ll keep doing it – out of spite: https://beko.famkos.net/2020/02/02/reclaim-your-mailbox/ Alas that’s my personal stuff. I understand your move for business mails. Anyway, where I come from I can always use FAX and that will never die 🤪

I track my working hours with timewarrior. That’s a CLI program that has a lot of nifty features and can also be hobbled together with taskwarrior to automated time tracking when a task is started. The taskwarrior on the other hand gets my todo list from various bugtrackers as sources, like Redmine and Jira, using bugwarrior-pull.

With this set-up I’ve my to-dos and my tracked hours available on the terminal, where I spend most of the day anyway. This is more or less comfortable for me but there is a huge drawback.

At the end of the months I’ll need some numbers and as it goes each company or customer has it’s own time tracking system (or even wants a csv export!) so I’ve to backfill the real systems each month. That’s a very tedious work especially if time has to be logged on specific tickets or customers and booking is done with quarter hours so I’ve to do some quick math in my head all the time.

In theory timewarrior has me covered on this because it has a summary view that is basically fine but this can not be used to grepped or sorted for certain tickets because it displays the date for each day only once.

Another nifty feature is the timewarrior export function that results in a JSON. The result is somewhat limited though since it will for example not display and durations and there is as far as I know no way to change this.

Demo how the various views or exports of timewarrior look (And yes, not _everything_ I work on is tracked here :P)

This is where jq (a lightweight and flexible command-line JSON processor) comes in. This little tool is seriously underrated and it allows me to change the format and the values of the JSON export on the fly by calculating for example time durations on the fly, reformats start and end dates so import functions of table calculation programs, like LibreCalc, can read the values as date (we all know that Excel reads anything as date already) and displays me the tracked time in quarter hours for each entry so it’s for most cases a no brainer now to backfill another time tracking system with this. The result can also be easily sorted now to find for example times for a specific ticket by grepping for it’s id.

timew export :week | jq -r '["id", "start", "end", "duration", "quarter_hours", "description"], 
    (.[] | 
        # make sure .end is set (may be empty for currently active tracked time)
        .end = (.end // (now | strftime("%Y%m%dT%H%M%SZ"))) |
        .duration = ( (.end | strptime("%Y%m%dT%H%M%SZ") | mktime) - (.start | strptime("%Y%m%dT%H%M%SZ") | mktime) ) |
        # round duration to quarter hours
        .quarter_hours = (.duration / 3600 / 0.25 | ceil*0.25) |
        [
            .id,
            # urks, localtimes are a mess in jq, ymmv - as long as it is consistent off I do not care tho
            (.start | strptime("%Y%m%dT%H%M%SZ") | mktime | todateiso8601), 
            (.end | strptime("%Y%m%dT%H%M%SZ") | mktime | todateiso8601), 
            (.duration | strftime("%T")),
            .quarter_hours,
            (.tags | join(", "))
        ]
    ) |
    @csv'

The resulting csv file can be imported into most table calculation software now or read manually in a more comfortable way.

Timezones are still an issue. There are so many open tickets on jq on this that I don’t even bother.

Ymmv, as usual 🙂