Episode: 4554 Title: How I do todo Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4554/hpr4554.mp3 Transcribed: 2026-07-31 16:13:48 (official HPR transcript) --- This is Hacker Public Radio Episode 4554, for 2026-01-15 Today's show is entitled, "How I do todo" The host is Jim DeVore and the duration is 00:17:00 The flag is Clean, and the license is CC-BY-SA The summary is "This is how I manage my personal todo list. " Hello, hacker public radio friends. I am Jim DeHore, a long time listener, first time show host. I am an engineer currently working with embedded software and construction equipment. I have been involved at the intersection of computers, electronics, and controls for about 50 years. I have a strong tendency to build and repair things myself even when it doesn't make economic sense. I simply enjoy learning new things and working with my hands. This is an episode on how I manage my personal to do list using genetroponys to do.txttility, send file format, and a collection of apps and scripts. The intent here is to not provide step by step to plant some ideas that you might want to follow up on. Ironically, creating a show has been on my to do list for at least a year. Checking that off today. This show is not explicit. Looking back at my history with to do. I believe this show might be relevant because it combines a need that most of us have for independence from services in a hackable architecture. I was a daytime or paper-toting person for many years. It worked, but it took a lot of effort to maintain. In the late 19, I switched to it to do app on my Palm Pilot. Eventually that became a trio 755 phone slash PDA. The keyboard finally died on that phone after four and a half years. I went to an Android-based phone about 2008. It replaced all the PDA functions that I enjoyed on my Palm Pilots. I dimly recall having access to it to do app. Maybe a commercial service that had shut down my memory as fuzzy. I found Gina Trapani's file format and bash grip. I don't even know if I'm pronouncing her name correctly. My pronunciation is from a guide to the city in Italy. I believe she was the founder of lifehacker and that's how I found it. She created a simple structured text file format. In the 2D.TXT, it has one line per task with this format. Each field is separated by a space. First field is optional. It's an X that marks completion of that task. Second field is also optional. It is a priority in capital and a capital letter in parentheses. Field 3 is optional. It is the ISO completion date. Field 4 is optional. It's the ISO creation date which must be specified if you have got a completion date specified. Field 5 is the free form to do.field.field 6 is one or more of the following. TXT, this is a single word that starts with a plus character. A context is a single word that starts with an AT character. Field 7 is optional key value tags. For example, a due date might be represented. This DUE colon ISO formatted date. And there's other files in this system. AttitudeDue.sh, the command line version of the utility. A configuration file that helps the to do system find all its files and extensions. Done.TXT that holds the archive to do. I replicate the to-dos through Dropbox. You can also use Google or the DIY sink or don't sink it all. At home with my laptop, I don't sink. I read the file from a network share that is synced on my NASBOX as Dropbox limits the number of devices on their free plan. I don't have anything against paying, but Dropbox's prices are structured for heavy users. A handful of text files is all that I think. You can learn more at http colon slash slash to do txt.org. Genus Focus was on the command line at least initially, but what caught my attention was that it was a structured file format that was being supported by other developers and was simple to manipulate with scripts. Her bash script also supported extensions. I love that multiple apps support this format. Linux desktop Windows Android Phone, and of course she can use a simple editor. I believe that Apple is also supported. I'm just not in that ecosystem. She has links on her page to folks that have created them as well as extensions and plugins that folks have written to extend its capabilities. So what apps am I using? On my Android phone, I'm currently using simple tasks. It's not the most full featured of them out there, but it has been very solid and bug-free in my use case. On my Linux desktop, I use q2dxt. The about page as multiple credits based on the original code base by David Ellen Talk. On my NAS box, I'm running Genus to do dot txt bash scripts with some custom add-ons. Dropbox hosts that to do dot txt and done dot txt files to keep everything in sync. This is a very hackable architecture. Harry Larry would love this. It's a text file format. Here's what I really love. I've got a low-end Synology NAS that lets me run nightly scripts and the resulting files are synced to my phone, desktop, laptop computers, through Dropbox and the network shares. It also allows me to grab the to do dot txt and done dot txt for information. For example, if you've got a new year's resolution exercise three times a week, you can grab done dot txt to see how many times you check that off in a year. Hopefully this gives some ideas. I love this because if I'm not happy with how it works, I can change it. I want something new. I add it. I've got a script that runs on my NAS and does the following every night. First of all, it checks all the files into get and tags that with the day's date. This is nice, especially when I develop a script and I can retrieve earlier versions when things go south. And I have done that. Nothing like waking up to a wiped out to do file. I secondly, I scrub all high-asky from the files. I'm living in a seven-bit text world. Your localization may have different requirements. This uses a simple TR command. For me, one of the web-based interfaces I had previously used with this file had problems with high-asky. And with apologies to my international audience, I think these tools work with other encoding. I just don't have any experience there. Thirdly, I insert a daily affirmation into the to-do file. This simply selects a single random line for a large text file collection using a quick and dirty Python script. It then is appended as a priority A to-do, allow me to read it and check it off. Fourthly, I remove blank lines. It's really easy to add blank lines during copy and paste yet I don't want to waste any time manually deleting them. This is a simple grab command. 5. I reconcile merge conflicts. Dropbox occasionally can't resolve a conflict where changes have been made, perhaps by the nightly script and something that I had just done on my phone. Dropbox names this in a way that I can easily run automated diffs. This is gone by calling to do underscoremerge3.py. I don't recall where I found this script. I don't believe I wrote it and it doesn't have any attribution. Differences are added to the working file with a tag and a priority. It allows me to decide whether I need them or not. 6. I add creation dates on any lines that don't have them. Some of the apps will include how old a particular task is or allows you to sort by creation dates. Do this you have to have them and not all the apps I use have the option to fully add a creation date. This is a simple Python script I wrote. 7. I inject recurring events. I found a wonderful to do.txt extension called ice underscore rec u r or ice recur. I was using version 1.6 by Robin Lee Powell. The source is posted on GitHub include a link in the notes. The basic idea is that you have a configuration file with one line for each to do line with additional instructions to indicate when to add it. This would not only support it complicated calendar recurrence constructs but it would also do a laugh time since the date was last completed. To do.txt is the working file but when you complete a task in it and it is archived it is moved to done.txt. This script would look at the completion date for that text and done.txt. It would not add it until it defined time had elapsed. It also would not all add task if you had not completed it. Solving the problem of not generating duplicates with and with my former to do configuration I had to do that manually. Not a good use of my time. This ran well for years on my low powered custom built DIY server. One day I had a hardware failure and I took the easy route and bought this Synology. It's DES220J NAS as an experiment. As a side note, it has been a pretty good experience with hardware for a limited Synology. Since I bought it, Synology has since introduced some shenanigans requiring Synology-branded drives that run counter to my DRM-free preferences. When it dies, I will likely go to the container route on another custom server. One of my migration problems is that ice recurrent needed Ruby. Ruby wasn't available on my budget. Synology box. So I converted it to Python 3. This was fun. It was a good excuse to learn some Python. I also kept the original structure largely intact and included a clumsy test environment. It is called PIE underscore recur and I posted the source on GitHub. I'll include that in the show notes as well. Eight. I would grapple report of everything I did yesterday for the Nile Report. This is dead sample. I'm not using the S. at the moment, but I've considered opinion it to my daily journal, text files. Nine. I removed duplicates from the to do.txt file. I still managed to get duplicates occasionally. For example, my daily affirmation pulls around the line from file of affirmations. It doesn't check for duplicates. Genus page had an extension for this that worked. Well, 10. I bumped down the priority of task based on time. Now this is an experiment that I've since discontinued. I use priorities A, B, and C. I use C for follow-up items and none. Based on the creation date, this utility moved a week old A to a B. It would move a month old B to a C. It would move a six month old C to nothing. This is an attempt to emulate how the human brain tends to forget. If you have an A priority task that hasn't been touched in a week, it probably isn't a high priority task. If you keep adding stuff to the list the next thing you know you have just second nearly six hundred tasks, nobody wants to look at that glance. So A priority stuff is stuff I checked during the day. Stuff I'm trying to get done that day. B priority is just stuff that I checked once a day. This is stuff I'm trying to get done in the next two weeks. C priorities are stuff that I checked once a week. This is stuff I'm trying to get done in the next three months. C priorities, as I said, are checked once a week. These are follow-up items largely. Blank priorities rely on having a project or a contacts tag to bring them up. Might have a list of things that I wanted to serve for more information for example. This prompted me to create a tag to accept items from this process. If during review of a lower priority task and I decided it really needs to be higher, I can reassign the priority and add an at NV tag. I call this utility fergesson.py, where fergesson is German for and to forget. NV is nished for Gesson which is to not forget. Now I'm not German, but I live there for short time and I love their culture. Recently I noticed that I had a lot of NV tags that were pluttering my file. I decided to remove them and comment it out this utility while I rethink the process. 11. I air check for orphans. In this step I check for tasks that have blank priorities and no projects. This would be lost from review in the unprioritized pile so this utility bumps them to an A and tags them with at orphan. This allows me to review and tag them correctly. Other fun stuff I've done with this. I have template files. For example I've got a packing list and I can manually concatenate this file to my to-do.txt file and now the packing list is on my phone and I can check things off as I stuff them into my suitcase. Frozen cons. This environment is robust its flexible. It's not perfect. One of my prior Android apps had three variants. One for Dropbox Anking, one for Google Drive Sanking and one that did no Sanking. Apparently app rather Google's App Store declared that they were too similar in my choice. A Dropbox Anking version is no longer in the Play Store. Yes I can sideload it but where is the motivation for developer continuing to develop it? My fear is that something would come along and it would be broken without a correction on the horizon. Google is tightening up their security on each release and it drives changes in the apps. There's a lot of varieties of apps supporting multiple platforms and I believe Google's changes are a threat to this ecosystem. I don't use Google to sync my to-do files but that is likely used by many. I do use an Android app on my phone while I love the command line I believe a phone for this use case needs a simple touch interface. A lot is easy for me to customize a nightly processing of the files on my NAS box maintaining an Android app is another level that I'm not prepared for today. Years ago I decided to minimize the overlap between my personal and work lives and for a variety of reasons I stopped using this ecosystem at work and started using Microsoft's to-do and yes it work where you are in a Windows Office 365 environment which is an all-bad Windows 11 now. It work is much better than the Linux PC system that I last ran at home. I'm happy with Linux at home and would not use Windows 11 even if it were open source at home. I spotted a Python IPPI for Microsoft's to-do recently and I planned to start playing with it. I'm a bit torn. I'm near retirement and unlikely to use this once I leave the corporate work place. It's recurring capabilities are much weaker than what I have at home. Given my tendencies toward procrastination it will probably still be on my work to do list when I retire. So, what are other folks using in this space? I'd love to hear back in the comments if you've got something that you prefer perhaps that should be a show. I know there's a lot of paid services in this space that just goes against my nature to pay for something and be at the mercy of their decision to continue to offer the service or not. Thank you. You have been listening to Hacker Public Radio at Hacker Public Radio.org. Today's show was contributed by a HPR listener like yourself. If you ever thought of recording podcast, click on our upload link to find out how easy it is. Hosting for HPR has been kindly provided by an AnHonestHost.com, the Internet Archive, rsync.net, and our mirror network. Unless otherwise stated, today's show is released under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.