Files
hpr-knowledge-base/hpr_transcripts/hpr4482.txt
Lee Hanken 7c8efd2228 Initial commit: HPR Knowledge Base MCP Server
- MCP server with stdio transport for local use
- Search episodes, transcripts, hosts, and series
- 4,511 episodes with metadata and transcripts
- Data loader with in-memory JSON storage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 10:54:13 +00:00

132 lines
12 KiB
Plaintext

Episode: 4482
Title: HPR4482: doodoo 4 the double deuce
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr4482/hpr4482.mp3
Transcribed: 2025-10-26 01:06:55
---
This is Hacker Public Radio Episode 4482.
For Tuesday, 7 October 2025, today's show is entitled Dudo for the Double Duse.
It is hosted by Jezre and is about 16 minutes long.
It carries a clean flag.
The summary is the last bit of blathering about Dudo, a to-do app to get done done.
Hello HPR listeners, my name is Jezre and this episode is Dudo for the Double Duse.
And this will be the final episode in the mini-series about Dudo, a to-do application that
helps me get done done.
Basic usage of the application is as follows.
User will create a collection and then a user will create items within various collections
of things that need to be done.
So for example, I have a collection called Shopping.
Within Shopping, I will have items that I need to purchase when I am at the store.
So, when I go to the store to go shopping, I take out my phone, open Dudo, and look
to see what items I have under the Shopping collection, put those items in my cards, pay
for them, and then when I am done paying for those items, I can delete them from the Dudo
app.
That is how I do Shopping.
If there is a web-based utility that I use frequently on my phone, then I am going to make
a bookmark of wherever that web utility is and add it to my home screen.
And when that happens, it is important for me that the web app has a unique favicon.
So that when a shortcut is made on my home screen, that favicon is part of that shortcut
graphically.
And a quick glance will show me, oh that is the link to such and such app.
For Dudo, the favicon is incredibly simple.
It is the capital letter D with a slight black outline filled in with brown with little dots
of yellow in the shape of corn kernels.
I am amazingly immature.
Just let me put that out there right now.
Okay good.
That is out of the way.
That graphic is an SVG and it was originally created in Inkscape as a 64 by 64 pixel project.
And then exported as a plain SVG.
A Inkscape file is an SVG and it can be used in the web as an SVG.
But there is extra data required by the Inkscape program embedded in that SVG file that would necessitate
exporting as a plain SVG if one wanted to reduce file size.
And SVGs are not massive in size, well they can be.
But the Dudo icon certainly is not.
But it is even smaller now that I have exported it as a plain SVG.
The other graphic needed by Dudo was the sort of spinner or action indicator graphic that would happen
when there is an API request underway.
And that graphic was also created in Inkscape.
It is a series of circles that are decreasing in size and they are laid out in a circle.
They are using the same Dudo brown and corn yellow coloring as the favicon.
It is possible to animate that SVG in the SVG itself as part of the graphic.
Make an animated SVG. I opted not to go that route because it was a bit more complicated for me to create that sort of graphic.
What I did was I laid everything out in Inkscape to make my graphic again exported as a plain SVG.
And then I used CSS to actually do the animation of that SVG.
It probably would have been best if I did in the SVG itself the animation.
But whatever, it works and it works wonderfully well for what I needed it to do,
which is when I am on a slow connection or latency is really high.
If I press that button to delete an item or edit an item or do something, create an item or delete an item.
It is really when the API calls happen.
And I needed to know that I pressed the button and having that graphic pop up to show me that something is happening worked wonderfully.
While implementing the action spinner or I should say while testing its functionality,
I had to use Chromium instead of Firefox because Firefox does not allow me to set custom parameters for throttling the connection.
All of the parameters Firefox offers are excellent compared to my real world.
And in Chromium I can set a custom throttling setting that represents my real world.
So thank you Chromium, Firefox do better.
During that testing I was using the same item text going into the same category.
Sorry, collection, well I really should have called them groups.
So I was sending the same, and for some reason I wasn't seeing anything happen.
And the reason for that is on the back end there was an error because it is not possible to have two items with the same text in the same collection.
And that necessitated actually fixing an issue with errors being handled correctly.
So now when there is an error on the back end that sends data back to the front end,
the front end can display that error and the user will then know that item already exists within that collection or whatever error may be on the back end.
Honestly I think it is item in the collection that is the only error that is actually thrown.
But what do I know? I mean I only wrote the thing.
The testing of the DoDo application really fell upon the shoulders and was the responsibility of user zero.
And in this case user zero is me. I am the first user. I am basically the only user.
I had thought about using some sort of API testing framework or UI testing framework to help me with this.
And as I started looking into it, it seemed like I would be doing a lot more development writing the test than I would be doing actually writing the application.
So being the lazy developer that I am and software exists because humans are lazy.
I opted not to have a testing framework at all on a larger scale, more professional piece of software absolutely have testing.
But for something as simple as sending a very few API calls, I didn't really think it was a necessity.
And so far I haven't had any major issues.
In the Git repo, which is currently hosted on GitLab, a link will be provided in the show notes.
The code for DoDo is broken up into various directories. And that's to be expected from a software project.
There is a directory called Art Assets. And within that directory are the inkscape source files used to create the two SVGs that are used in the application.
There is a directory called Server. And Server really holds all of the source code for the DoDo application.
There is a make file and a readme file. And then the make file runs all the commands needed to run the server, create the passphrase hash, etc.
In the Server directory, there is a directory called HTML.
And anytime there is a request for a JavaScript file or index file or the CSS file, all those files are in the HTML directory.
They are not compressed. There's nothing to make them smaller than they are, no stripping out of carriage returns, that sort of thing.
So when one is using the DoDo application, it control you, in the browser, will show all the source code.
I want to say easy to read. It may not be that easy to read, but it isn't obfuscated or compressed in any way.
Which if one wanted to use this as a way to help learn something about software development, that's kind of the plan.
You might be a bit cookie if you wanted to use something I wrote to help you learn.
When generated, the passphrase hash file will be saved in the Server directory.
And the data file that is used to store all of the collections and item information is also saved in the Server directory.
It keeps everything all in one place. From a security standpoint, it probably would be better to put that hashphrase outside of the Server directory.
But as long as it's not within the HTML directory, I think I'm going to be okay.
I think. In the DoDo UI, while I was modifying the tab order, so that new item would show up first, a new collection would show up second when pressing the tab button.
I kept running into this issue of having to tab through all of the buttons to get to these buttons at the bottom.
And that's why I changed the tab order. And while doing that, I was looking at the buttons for collections.
And the button for collections at the time was the same as the buttons for items. That would be an edit button and a delete button.
And the edit button is used very little. Sure, I make spelling errors and I don't mind correcting them for myself.
But how often do I do that? Once there's a spelling error and that's the only thing that edit is really used for, once I fix a spelling error, that button is useless and it's just getting in the way.
What I wanted and what I ended up doing was swapping the functionality of that button out for instead of being edit.
I had it be add a new item defaulting to this collection. So for example, if I hit the plus button that is part of shopping, I will see the form for entering a new item and the collection that that item would be a part of would default to shopping.
And or for also, so suppose I wanted to do something on the computer. For example, HPR, the computer, I would hit the plus button next to the computer collection and type in HPR DoDo as my item name and the collection would be pre-selected as computer.
And that is on my DoDo list and once this recording is finished, I'm going to be deleting that from my DoDo list. Yay! Getting done, done!
It was still necessary, however, to have some sort of method for deleting and editing a collection. I mean, so the delete button was modified to the manage collection button.
I think I used three ellipses or three dots from the ellipses as unicode ellipses for the icon on the button, not really an icon just text on a button.
But three dots is sort of a menu item thing on the interwebs, so why not use it here. And pressing that button will display the form for editing a collection.
And also on that form is the option to delete the collection. So instead of having a single button press Delete a collection, which also does not happen very often, there's a button that then will give me a form which will have the option to edit the collection text or just delete the collection.
I really don't do that often, so it's fine.
The last UI update that was coded into DoDo is the persistence of the previously selected collection or previously created collection.
And that works like this. I had a collection that I made called Truck because I needed to do some things on my truck.
And this was before I created the make a new item specific to this collection button for each collection. I was just using the new item button.
If I created a new collection called Truck and that was persisted through the next few new items. So I created the collection truck.
I created a new item and the collection truck was pre-selected in the new item form. To that, I added when I need to do the next oil change.
I also added change the front brakes, which has been done and has been deleted. Yay, getting done, done!
This episode, along with all other episodes in the DoDo series, was recorded in Audacity on a PineBook Pro using a USB Logitech headset that has excellent-ish microphone.
During the series, I would record an episode and then release the previous recorded episode.
So today, as I record episode four, I'm going to be uploading episode three. Because there will be no episode five, I will probably at the same time upload episode four.
Prior to recording this episode, I recorded the audio music, the music. Thank you, music provided by Jezra. Thank you, Jezra.
I recorded the music for episode three. And in doing that, because I was using a wind instrument, I got my lungs working well, first thing in the morning. This is morning for me.
And that is an excellent way to start the day, playing a wind instrument to get the lungs working, to get that oxygen rush into the body, and just start the day on a deep breath.
And on that note, stay immature, get done, done, and let me know how you manage things that you need to do. Do you have a to-do list? Do you write them down? How do you get your done, done?
You have been listening to Hacker Public Radio at Hacker Public Radio.
Today's show was contributed by a HBR listener like yourself. If you ever thought of recording podcasts, you click on our contribute link to find out how easy it really is.
Posting for HBR has been kindly provided by an onsthost.com, the Internet Archive and our Sing.net.
On this otherwise stated, today's show is released under Creative Commons Attribution 4.0 International License.