From 535c4b2ddb1b6236807f67ce1cab40de03962d1b Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Sun, 8 Jan 2023 11:36:20 -0500 Subject: [PATCH 1/4] first draft --- _posts/2022-01-07-kalendar.md | 27 +++++++++++++++++++++++ assets/images/screenshots/kalendar01.png | Bin 0 -> 93734 bytes 2 files changed, 27 insertions(+) create mode 100644 _posts/2022-01-07-kalendar.md create mode 100644 assets/images/screenshots/kalendar01.png diff --git a/_posts/2022-01-07-kalendar.md b/_posts/2022-01-07-kalendar.md new file mode 100644 index 0000000..50b91ff --- /dev/null +++ b/_posts/2022-01-07-kalendar.md @@ -0,0 +1,27 @@ +--- +layout: single +title: "I Was About to Write a To-Do App for the Linux Desktop... and then I found Kalendar." +date: 2022-01-08 22:45:00 +categories: [Software Development] +tags: linux python qt6 qt desktop kde +comments: true +--- + +![kalendar01](/assets/images/screenshots/kalendar01.png){:class="img-responsive" .align-center} + +2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I'm able to write comfortably without googling syntax every five minutes. Quickly my team's Github repo filled up with borderline-unnecessary one-off scripts to solve all sorts of niche problems in our environment. Due to the nature of being a system administrator at a SaaS-heavy company, most of these scripts deal with third-party APIs: moving data from "service a" to "service b", pulling information about "service c" and correlating it with "service d", etc. These types of scripts are fun to write because they have narrow scopes and easily achievable goals, and I find completing them to be immensely satisfying. + +Filled with confidence in my Python skills I set out to embark on my first GUI project - a desktop to-do application with CalDAV sync. I built a local-only terminal client, I bought a book and started learning PyQT, and I sat down today to write the first of a series of blog posts where I would document the project. I got to the part of the blog post where I confidently say that there are currently no Linux desktop apps with this functionality, and I thought "maybe I should Google this once more and confirm there's really nothing out there." Well, shit. + +## Enter Kalendar + +The last time I researched this space, there were no functional standalone to-do apps that support CalDAV sync. The closest I could find was Thunderbird, my beloved email client, which is far more complex than what I'm looking for. Kalendar didn't even pop up on my radar. Even today when I searched, I almost didn't find it. I ended up seeing it on the Nextcloud Tasks Github page in a list of compatible apps with sync. Within minutes, I had it installed and synced with my tasks in Nextcloud, and WOW, this thing is good. + +It bills itself mainly as a new calendar app, but my task lists feel right at home here. The task view is designed almost exactly as I envisioned for my own app, toggleable lists on the left and tasks on the right. Type on the bottom and hit enter to quickly create a new task and it quickly syncs up to Nextcloud. I hate how good this is. + +## What now? + +I've lost all motivation to write my own app, but I still want to learn GUI development! I've got my remedial Python skills and my QT6 book ready to go! If this was ten years ago, there would probably be lots of voids to fill in the Linux desktop app space, but as it stands today there are very few missing pieces. + +Does anyone have any desktop app ideas? Something missing from their day-to-day workflow? Are any projects you know of using PyQT that I could contribute to? Please let me know in the comments or send me a message! + diff --git a/assets/images/screenshots/kalendar01.png b/assets/images/screenshots/kalendar01.png new file mode 100644 index 0000000000000000000000000000000000000000..013b174a2cb5c78cc2720166c010adbf98b00c02 GIT binary patch literal 93734 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%0A7E_xsTV@1VKYx# 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 literal 0 HcmV?d00001 From ce142465b8938801d0e97c6f0339cdfaf72aa8cd Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Sun, 8 Jan 2023 12:52:49 -0500 Subject: [PATCH 2/4] final draft --- _posts/2022-01-07-kalendar.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/_posts/2022-01-07-kalendar.md b/_posts/2022-01-07-kalendar.md index 50b91ff..e2bf139 100644 --- a/_posts/2022-01-07-kalendar.md +++ b/_posts/2022-01-07-kalendar.md @@ -1,7 +1,8 @@ --- layout: single title: "I Was About to Write a To-Do App for the Linux Desktop... and then I found Kalendar." -date: 2022-01-08 22:45:00 +date: 2023-01-08 12:45:00 +excerpt: "2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I was able to write comfortably without googling syntax every five minutes..." categories: [Software Development] tags: linux python qt6 qt desktop kde comments: true @@ -9,19 +10,19 @@ comments: true ![kalendar01](/assets/images/screenshots/kalendar01.png){:class="img-responsive" .align-center} -2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I'm able to write comfortably without googling syntax every five minutes. Quickly my team's Github repo filled up with borderline-unnecessary one-off scripts to solve all sorts of niche problems in our environment. Due to the nature of being a system administrator at a SaaS-heavy company, most of these scripts deal with third-party APIs: moving data from "service a" to "service b", pulling information about "service c" and correlating it with "service d", etc. These types of scripts are fun to write because they have narrow scopes and easily achievable goals, and I find completing them to be immensely satisfying. +2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I was able to write comfortably without googling syntax every five minutes. Quickly my team's Github repo filled up with borderline-unnecessary one-off scripts to solve all sorts of niche problems in our environment. Due to the nature of being a system administrator at a SaaS-heavy company, most of these scripts deal with third-party APIs: moving data from "service a" to "service b", pulling information about "service c" and correlating it with "service d", etc. These types of scripts are fun to write because they have narrow scopes and easily achievable goals, and I find completing them to be immensely satisfying. -Filled with confidence in my Python skills I set out to embark on my first GUI project - a desktop to-do application with CalDAV sync. I built a local-only terminal client, I bought a book and started learning PyQT, and I sat down today to write the first of a series of blog posts where I would document the project. I got to the part of the blog post where I confidently say that there are currently no Linux desktop apps with this functionality, and I thought "maybe I should Google this once more and confirm there's really nothing out there." Well, shit. +Filled with confidence in my Python skills I set out to embark on my first GUI project: a desktop to-do application with CalDAV sync. This is an app I feel has been missing on Linux, something akin to Apple Reminders where I can use my own backend for sync. To get started, I built a local-only terminal client, bought a book to start learning PyQT, and I sat down today to write the first of a series of blog posts where I would document the project. I got to the part of the blog post where I confidently say that there are "currently no working Linux desktop apps with this functionality". Then I thought, *maybe I should Google this once more and confirm there really is nothing out there*. Well, shit. ## Enter Kalendar -The last time I researched this space, there were no functional standalone to-do apps that support CalDAV sync. The closest I could find was Thunderbird, my beloved email client, which is far more complex than what I'm looking for. Kalendar didn't even pop up on my radar. Even today when I searched, I almost didn't find it. I ended up seeing it on the Nextcloud Tasks Github page in a list of compatible apps with sync. Within minutes, I had it installed and synced with my tasks in Nextcloud, and WOW, this thing is good. +The last time I researched this space, there were no functional standalone to-do apps that supported CalDAV sync. The closest I could find was Thunderbird, my beloved email client, which is far more complex than what I was looking for. [Kalendar](https://apps.kde.org/kalendar/) didn't even pop up on my radar. Even today when I searched, I almost didn't find it. I ended up seeing it on the [Nextcloud Tasks Github page](https://github.com/nextcloud/tasks#apps-which-sync-with-nextcloud-tasks-using-caldav) in a list of compatible apps with sync. Within minutes, I had it installed and synced with my tasks in Nextcloud, and WOW, this thing is good. -It bills itself mainly as a new calendar app, but my task lists feel right at home here. The task view is designed almost exactly as I envisioned for my own app, toggleable lists on the left and tasks on the right. Type on the bottom and hit enter to quickly create a new task and it quickly syncs up to Nextcloud. I hate how good this is. +Kalendar bills itself mainly as a new calendar app, but my task lists feel right at home here. The task view is designed almost exactly as I envisioned for my own app; toggleable lists on the left and tasks on the right. Type on the bottom and hit enter to quickly create a new task and it syncs right up to Nextcloud. Right click on a task to easily set priority and due date, or add a subtask. I hate how good this is. ## What now? -I've lost all motivation to write my own app, but I still want to learn GUI development! I've got my remedial Python skills and my QT6 book ready to go! If this was ten years ago, there would probably be lots of voids to fill in the Linux desktop app space, but as it stands today there are very few missing pieces. +I'm now a happy Kalendar user, and I've lost all motivation to write my own app, but I still want to learn GUI development! I've got my remedial Python skills and my QT6 book ready to go! If this was ten years ago, there would probably be lots of voids to fill in the Linux desktop app space, but as it stands today there are very few missing pieces. There's a great app for pretty much everything. -Does anyone have any desktop app ideas? Something missing from their day-to-day workflow? Are any projects you know of using PyQT that I could contribute to? Please let me know in the comments or send me a message! +Does anyone have any desktop app ideas? Something missing from their day-to-day workflow? Are any projects you know of using PyQT that I could contribute to? Please let me know in the comments or send me a message. Trying to seize on some motivation here! From 7057e88bc357b53c74a1bd777922ad7eadb407e7 Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Sun, 8 Jan 2023 12:57:28 -0500 Subject: [PATCH 3/4] add kalendar tag --- _posts/2022-01-07-kalendar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2022-01-07-kalendar.md b/_posts/2022-01-07-kalendar.md index e2bf139..ffad35a 100644 --- a/_posts/2022-01-07-kalendar.md +++ b/_posts/2022-01-07-kalendar.md @@ -4,7 +4,7 @@ title: "I Was About to Write a To-Do App for the Linux Desktop... and then I fo date: 2023-01-08 12:45:00 excerpt: "2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I was able to write comfortably without googling syntax every five minutes..." categories: [Software Development] -tags: linux python qt6 qt desktop kde +tags: linux python qt6 qt desktop kde kalendar comments: true --- From 1b7861fcbac5e2d2293b74120c3dd29ce63f9dca Mon Sep 17 00:00:00 2001 From: Ray Lyon Date: Sun, 8 Jan 2023 13:04:54 -0500 Subject: [PATCH 4/4] minor corrections --- _posts/2022-01-07-kalendar.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/_posts/2022-01-07-kalendar.md b/_posts/2022-01-07-kalendar.md index ffad35a..cf11ffe 100644 --- a/_posts/2022-01-07-kalendar.md +++ b/_posts/2022-01-07-kalendar.md @@ -10,19 +10,19 @@ comments: true ![kalendar01](/assets/images/screenshots/kalendar01.png){:class="img-responsive" .align-center} -2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I was able to write comfortably without googling syntax every five minutes. Quickly my team's Github repo filled up with borderline-unnecessary one-off scripts to solve all sorts of niche problems in our environment. Due to the nature of being a system administrator at a SaaS-heavy company, most of these scripts deal with third-party APIs: moving data from "service a" to "service b", pulling information about "service c" and correlating it with "service d", etc. These types of scripts are fun to write because they have narrow scopes and easily achievable goals, and I find completing them to be immensely satisfying. +2022 was a great year for my Python skills. I had some unique problems to solve in my day job that got me over the hump of learning the language, and finally I was able to write comfortably without Googling syntax every five minutes. Quickly my team's Github repo filled up with borderline-unnecessary one-off scripts to solve all sorts of niche problems in our environment. Due to the nature of being a system administrator at a SaaS-heavy company, most of these scripts deal with third-party APIs: moving data from "service a" to "service b", pulling information about "service c" and correlating it with "service d", etc. These types of scripts are fun to write because they have narrow scopes and easily achievable goals, and I find completing them to be immensely satisfying. -Filled with confidence in my Python skills I set out to embark on my first GUI project: a desktop to-do application with CalDAV sync. This is an app I feel has been missing on Linux, something akin to Apple Reminders where I can use my own backend for sync. To get started, I built a local-only terminal client, bought a book to start learning PyQT, and I sat down today to write the first of a series of blog posts where I would document the project. I got to the part of the blog post where I confidently say that there are "currently no working Linux desktop apps with this functionality". Then I thought, *maybe I should Google this once more and confirm there really is nothing out there*. Well, shit. +Filled with confidence in my Python skills, I set out to embark on my first GUI project: a desktop to-do application with CalDAV sync. This is an app I feel has been missing on Linux, something akin to Apple Reminders where I can use my own backend for sync. To get started, I built a local-only terminal client, bought a book to start learning PyQt, and I sat down today to write the first of a series of blog posts where I would document the project. I got to the part of the blog post where I confidently say that there are "currently no working Linux desktop apps with this functionality". Then I thought, *maybe I should Google this once more and confirm there really is nothing out there*. Well, shit. ## Enter Kalendar -The last time I researched this space, there were no functional standalone to-do apps that supported CalDAV sync. The closest I could find was Thunderbird, my beloved email client, which is far more complex than what I was looking for. [Kalendar](https://apps.kde.org/kalendar/) didn't even pop up on my radar. Even today when I searched, I almost didn't find it. I ended up seeing it on the [Nextcloud Tasks Github page](https://github.com/nextcloud/tasks#apps-which-sync-with-nextcloud-tasks-using-caldav) in a list of compatible apps with sync. Within minutes, I had it installed and synced with my tasks in Nextcloud, and WOW, this thing is good. +The last time I researched this space, there were no functional standalone to-do apps that supported CalDAV sync. The closest I could find was Thunderbird, my beloved email client, which is far more complex than what I was looking for. [Kalendar](https://apps.kde.org/kalendar/) didn't even pop up on my radar. Even today when I searched, I almost didn't find it. I ended up seeing it on the [Nextcloud Tasks Github page](https://github.com/nextcloud/tasks#apps-which-sync-with-nextcloud-tasks-using-caldav) in a list of compatible apps with sync. Within minutes, I had it installed and synced with my tasks in Nextcloud, and **wow**, this thing is good. -Kalendar bills itself mainly as a new calendar app, but my task lists feel right at home here. The task view is designed almost exactly as I envisioned for my own app; toggleable lists on the left and tasks on the right. Type on the bottom and hit enter to quickly create a new task and it syncs right up to Nextcloud. Right click on a task to easily set priority and due date, or add a subtask. I hate how good this is. +Kalendar bills itself mainly as a new calendar app, but my task lists feel right at home here. The app opens instantly, and the task view is designed almost exactly as I envisioned for my own app; toggleable lists on the left and tasks on the right. Type on the bottom and hit enter to quickly create a new task and it syncs right up to Nextcloud. Right click on a task to easily set priority and due date, or add a subtask. I hate how good this is. ## What now? -I'm now a happy Kalendar user, and I've lost all motivation to write my own app, but I still want to learn GUI development! I've got my remedial Python skills and my QT6 book ready to go! If this was ten years ago, there would probably be lots of voids to fill in the Linux desktop app space, but as it stands today there are very few missing pieces. There's a great app for pretty much everything. +I'm now a happy Kalendar user, and I've lost all motivation to write my own app, but I still want to learn GUI development! I've got remedial Python skills and my QT6 book ready to go! If this was ten years ago, there would probably be lots of voids to fill in the Linux app space, but as it stands today there are very few missing pieces. It feels like there's a great app for pretty much everything. -Does anyone have any desktop app ideas? Something missing from their day-to-day workflow? Are any projects you know of using PyQT that I could contribute to? Please let me know in the comments or send me a message. Trying to seize on some motivation here! +Does anyone have any desktop app ideas? Something missing from their day-to-day workflow? Are any projects you know of using PyQt that I could contribute to? Please let me know in the comments or send me a message. Trying to seize on some motivation here!