From 588089c6e57e102adaba27459a0e2c4a79cc4982 Mon Sep 17 00:00:00 2001 From: Joost Agterhoek Date: Tue, 22 Oct 2024 13:53:43 +0200 Subject: [PATCH] last two blog posts --- content/posts/basic-javascript.md | 2 +- content/posts/little-challenges.md | 80 ++++++++++++++++++ .../little-challenges_2024-10-21_17-24-01.png | Bin 0 -> 27750 bytes 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 content/posts/little-challenges.md create mode 100644 static/images/little-challenges_2024-10-21_17-24-01.png diff --git a/content/posts/basic-javascript.md b/content/posts/basic-javascript.md index 0d434e5..a828ac5 100644 --- a/content/posts/basic-javascript.md +++ b/content/posts/basic-javascript.md @@ -16,7 +16,7 @@ First off, I don't know any JavaScript 🙈. It's a gap in my (beginner) program But for some reason, I **wasn't** able to do both after each other ➰. Finally, I found a solution: I had to do both at the same time 🙃 Basically, I found an answer without understanding the answer 💢. But, for the time being, a quick and dirty solution to my very personal problem is good enough. As I start learning JavaScript, I could reinvestigate this script further. For now, here is the code I have, which I still have to edit [per the very nice and helpful comments the creator of the ObsidianSimpleTimeTracker-plugin gave me](https://github.com/Ellpeck/ObsidianSimpleTimeTracker/issues/58). -The next thing would be to build this out to a neat table, to actually give the overview that I want (this still produces a list that is too long). There's always room for improvement 👷. +The next thing would be to build this out to a neat table, to actually give the overview that I want (this still produces a list that is too long). I could explore `dv.table()`, which [should be able to take an array of data](https://blacksmithgu.github.io/obsidian-dataview/api/code-reference/), like tracker entry names and time duration I gathered before. There's always room for improvement 👷. ```js let api = dv.app.plugins.plugins["simple-time-tracker"].api; diff --git a/content/posts/little-challenges.md b/content/posts/little-challenges.md new file mode 100644 index 0000000..a528db2 --- /dev/null +++ b/content/posts/little-challenges.md @@ -0,0 +1,80 @@ ++++ +title = 'Incremental learning with little challenges' +date = "2024-10-21" +updated = 2024-10-21 +[taxonomies] +tags = ['programming', 'Obsidian', 'JavaScript'] ++++ + +# Baby steps + +A little while ago, I wrote [a blog post](https://joostagterhoek.nl/posts/basic-javascript/) about my first experience with Obsidian, more specifically with DataviewJS. DataviewJS is an API in Obsidian that allows you to excute JavaScript and access the dataview indices and query engine. Basically, if the default Dataview query language to list, filter, sort or group data isn't enough for you, you're free to write your own logic. For me, the goal was to take all the time trackers created with the amazing ObsidianSimpleTimeTracker-plugin and show the worked hours per task or project. This worked, but not entirely in the tabular format I wanted. + +# Fiddling + +I was happy that my basic JavaScript fiddling worked, but it didn't yet provide me with what I needed: a solid overview of the hours worked per task or project, per day. As a security analyst I am increasingly more involved with various projects that require me to keep note of my worked hours. A table would be the optimal overview for what would be a very long list of data per worked day, over the course of multiple weeks and months. + +# Execution flow + +Eventually, I managed to fix my issue and organize the output of every daily time tracker in a single row, with formatted time values (xh, xxm xxs) per project or task. As I know in advance what my daily tasks are, I didn't have to make this part dynamic. But it did present me with the problem of how to have a row entry for each day, where I wasn't sure what project or task I worked on that day. Basically, if I have project 1, 2, 3 and 4, how can I make sure the table rows for Tuesday (worked only on project 1) and Thursday (worked on projects 2, 3 and 4) are the same? What helped me, was think it all through: what data do I want to represent in the table, what data type do I need for that, how (and when) in my logic will I fill that data? + +# The way I did it +In the end, I chose for string values per entry name (name of a task or project) and their durations. Every time I iterate over an existing time tracker entry, I check for the entry name and fill the string value of the corresponding duration (`entry_name == duration, socc_duration = getTickerEntryDuration`, basically). Iterating over every existing tracker in my Obsidian vault, I first iterate over the individual tracker entries and fill the string variables as stated. Once this is done, I push these values to a premade JavaScript object, with key-value pairs like `date: dateBasedOnObsidianNoteName, socc:socc_duration`. Then, I build an Obsidian Dataview table with the `dv.table()` function, which I pass this dynamically updated JavaScript object, which then displays rows for each iterated tracker and its entries. + +# The code + +Enough jabbering, where's the code? Here it is, which results in this nice looking table, that displays best in a Canvas view. + +The code: +```js +let api = dv.app.plugins.plugins["simple-time-tracker"].api; + + +const duration = [{datum: '', socc: '', tdw: '', cloud: '', studie: '', pauze: ''}] + +let entry_date = '' +let entry_name = '' +let entry_duration = '' + +let socc_duration = '' +let cloud_duration = '' +let tdw_duration = '' +let studie_duration = '' +let pauze_duration = '' + + +for(let page of dv.pages('"tijd-bijhouden"').sort(p => p.file.name, 'desc')) { + // load trackers in the file with the given path + + let trackers = await api.loadAllTrackers(page.file.path); + + if (trackers.length) + + for (let {section, tracker} of trackers) { + let number_of_trackers = tracker.entries.length; + for( let i = 0; i < number_of_trackers; i++) { + if (tracker.entries[i]) + entry_date = page.file.name + entry_name = tracker.entries[i]['name'] + if (entry_name == 'socc') + socc_duration = api.formatDuration(api.getDuration(tracker.entries[i])) + else if (entry_name == 'cloud') + cloud_duration = api.formatDuration(api.getDuration(tracker.entries[i])) + else if (entry_name == 'tdw') + tdw_duration = api.formatDuration(api.getDuration(tracker.entries[i])) + else if (entry_name == 'studie') + studie_duration = api.formatDuration(api.getDuration(tracker.entries[i])) + else if (entry_name == 'pauze') + pauze_duration = api.formatDuration(api.getDuration(tracker.entries[i])) + + } + + duration.push({datum: page.file.name, socc: socc_duration, cloud: cloud_duration, tdw: tdw_duration, studie: studie_duration, pauze: pauze_duration}) +} +} + +dv.table(['datum', 'socc', 'cloud', 'tdw', 'studie', 'pauze'], duration.map(r => [r.datum, r.socc, r.cloud, r.tdw, r.studie, r.pauze])); +``` + +Edited screenshot of the code in action: +![](/little-challenges_2024-10-21_17-24-01.png) diff --git a/static/images/little-challenges_2024-10-21_17-24-01.png b/static/images/little-challenges_2024-10-21_17-24-01.png new file mode 100644 index 0000000000000000000000000000000000000000..d46dc3d220d776c78eadcb5af1effc09b6a416db GIT binary patch literal 27750 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 R