If I’ve asked you to review a pull request I’ve raised, please be clear in your comments. Don’t just point out things that I got wrong, take the time to guide me to a way to make it right. Clear Is Kind.
I’ll try to do likewise on the pull requests I’ve been asked to review.
Places hiring for senior software developers shouldn’t bother offering perks like free food or table tennis. I’d be happy with a promise of no more than 20% of the week in meetings and being on an interview panel no more than once a month.
I’ve stopped using the Substack app for reading newsletters. Not because I didn’t like the app. It’s sort of been an unconscious drift away from it. I guess my default reading and discovery patterns only require NetNewsWire and a plain old web-browser.
Finishing off the last part of my tech knowledge setup which is to regenerate the web version when I make a change to the source markdown. I’m using GitHub Actions to do this. Basically, when a change is pushed to the Git repository, an action is fired which will checkout the current site, run the tool to render the new site from the source markdown, commits any changes to the web git repo, and pushes it back to GitHub to be hosted by GitHub pages.
Learnt some potentially useful techniques of GitHub actions along the way. For example, checking out a different than the one of the action. To do this, you’ll need to create a Personal Access Token, pass it in as a secret, and use it with the checkout action.
There is some fine tweaking left to do β pushing changes to the source file which will not result in changes in the generated web version will cause the action to fail β but I think that’s a good stopping point for tonight.
Seeing a lot of retweets from @marco with screenshots of gambling apps ads on peopleβs iOS product page. Ugh! What a terrible user experience. Itβs bad enough seeing these ads on TV. Did Apple foresee this happening when they rolled this ad placement out?
More track works going on, this time involving this pile of ballast in some way.

I can tell myself that I shouldn’t look at another CMS, but I know that I’d just wouldn’t listen. So to save us all time, this is what will happen. I get until the end of Friday to give it a try. If I like it, I move over. Otherwise, I won’t spend any more time on this.
My health insurer had a “cyber attack” recently in which some pretty sensitive data was stolen. They’re sending email updates every few days about it. It’s looking pretty serious: things taken like personal identifying information (PII), Medicare number, information about claims, etc. were taken. Fortunately, it doesn’t look to include payment information, so no need to deal with that.
At this stage, I think I might be one of the lucky ones, relatively speaking. Yeah, seeing PII being taken is annoying. And apart from routine dental work, I haven’t made any medical claims which could potentially be used against me. So for me at least, this is not as bad as it could have been.
But I can see this being a pretty serious breach of trust for some.
π Slow Roads
Endless driving game in the browser. Pretty frickin’ well done. There’s also a Medium post on how it was put together.
(via. Ars Technica)
Just thinking about all the documents I need to write for work. Half the time they’re fill-in-the-form type documents with an informal workflow tack onto it. Fill in the tables or pre-made gaps in this wiki page, mark it as draft (usually by typing “Draft” somewhere), post a link to it on Slack so that others can review it, wait for feedback or approvals to trickle in in the form of Slack messages or inline comments. It’s all soβ¦ manual. π«
I know that software houses have tried to build meta-tools to make these sort of template-plus-workflows documents easily convertible to apps. I think Microsoft was the latest one to do this. I wonder why they never caught on. π€
In a spot of bother this morning. Weβve got sprint planning coming up this afternoon and I have virtually no tickets organised. There might be something in the tech debt backlog I can pull out, but probably not enough for the full two weeks. π₯
Never thought Iβd say this, but Iβm actually looking forward to the hackathon work is putting togeather. Spent the morning writing notes and coming up with ideas for the pitch Iβve signed up for.
I guess it shows that Iβm excited about it, probably for the first time ever (Iβm generally pretty blasΓ© about hackathons). Truth is Iβve been thinking about the problem the pitch is trying to solve for a while and it feels good that the opportunity to work on it has come up.
Weβll see how the teams are organised, but hopefully itβll be accepted.
Audax Toolset Version 0.1.0
Audax Toolset version 0.1.0 is finally released and is available on GitHub. This version contains updates to Dynamo-Browse, which is still the only tool in the toolset so far.
Here are some of the headline features.
Adjusting The Displayed Columns

Consider a table full of items that look like the following:
pk S 00cae3cc-a9c0-4679-9e3a-032f75c2b506
sk S 00cae3cc-a9c0-4679-9e3a-032f75c2b506
address S 3473 Ville stad, Jersey , Mississippi 41540
city S Columbus
colors M (2 items)
door S MintCream
front S Tan
name S Creola Konopelski
officeOpened BOOL False
phone N 9974834360
ratings L (3 items)
0 N 4
1 N 3
2 N 4
web S http://www.investorgranular.net/proactive/integrate/open-source
Let’s say you’re interested in seeing the city, the door colour and the website in the main table which, by default, would look something like this:

There are a few reasons why the table is laid out this way. The partition and sort key are always the first two columns, followed by any declared fields that may be used for indices. This is followed by all the other top-level fields sorted in alphabetical order. Nested fields are not included as columns, and maps and list fields are summarised with the number of items they hold, e.g. (2 items)
. This makes it impossible to only view the columns you’re interested in.
Version 0.1.0 now allows you to adjust the columns of the table. This is done using the Fields Popup, which can be opened by pressing f.

While this popup is visible you can show columns, hide them, or move them left or right. You can also add new columns by entering a Query Expression, which can be used to reveal the value of nested fields within the main table. It’s now possible to change the columns of the table to be exactly what you’re interested in:

Read-only Mode And Result Limits
Version 0.1.0 also contains some niceties for reducing the impact of working on production tables. Dynamo-Browse can now be started in read-only mode using the -ro
flag, which will disable all write operations β a useful feature if you’re paranoid about accidentally modifying data on production databases.
Another new flag is -default-limit
which will change the default number of items returned from scans and queries from 1000 to whatever you want. This is useful to cut down on the number of read capacity units Dynamo-Browse will use on the initial scans of production tables.
These settings are also changeable from while Dynamo-Browse using the new set command:

Progress Indicators And Cancelation
Dynamo-Browse now indicates running operations, like scans or queries, with a spinner. This improves the user experience of prior versions of Dynamo-Browse, which gave no feedback of running operations whatsoever and would simply “pop-up” the result of such operations in a rather jarring way.
With this spinner visible in the status bar, it is also now possible to cancel an operation by pressing Ctrl-C. You have the option to view any partial results that were already retrieved at the time.
Other Changes
Here are some of the other bug-fix and improvements that are also included in this release:
- Audax toolset is now distributed via Homebrew. Check out the Downloads page for instructions.
- A new mark command to mark all, unmark all, or toggle marked rows. The
unmark
command is now an alias tomark none
. - Query expressions involving the partition and sort key of the main table are now executed as a DynamoDB queries, instead of scans.
- The query expression language now supports conjunction, disjunction, and dot references.
- Fixed a bug which was not properly detecting whether MacOS was in light mode. This was making some highlighted colours hard to see while in dark mode.
- Fixed the table-selection filter, which was never properly working since the initial release.
- Fixed the back-stack service to prevent duplicate views from being pushed.
- Fixed some conditions which were causing seg. faults.
Full details of the changes can be found on GitHub. Details about the various features can also be found in the user manual.
Finally, although it does not touch on any of the features described above, I recorded a introduction video on the basics of using Dynamo-Browse to view items of a DynamoDB table:
No promises, but I may record further videos touching on other aspects of the tool in the future. If that happens, I’ll make sure to mention them here.1
-
Or you can like, comment or subscribe on YouTube if that’s your thing π. ↩︎
Follow-up to yesterday’s post: Adam Fusco and I had a bit of a test of this over at social.lol. Turns out when you send a private message, the reply defaults to being private as well. This also applies to replies of replies. Private messages can’t be boosted either. Good to know.
I came this close to sending the Mastodon equivalent of a DM today. That it works by simply setting the visibility of a toot made me wonder if the recipient would need to explicitly do likewise on the reply. This uncertainty turned to concern, and I end up not sending anything.
πΊ The Early Days of id Software: Programming Principles
YouTube recommended this conference talk by John Romero on how id Software did their game development during the early days. Watched it last night, and I really enjoyed it. Amazing how much they got done with what they had.
π Pocket Casts Mobile Apps Are Now Open Source
Wow, I did not expect that. Although I probably should have since it’s owned by Automattic now.
Putting the final touches on the website for the upcoming release of Audax Toolset v0.1.0, and I’m finding myself a bit unhappy with it. Given that Dynamo-Browse is the only tool in this “suite”, it feels weird putting together a landing page with a whole lot of prose about this supposed collection of tools. There’s no great place to talk more about Dynamo-Browse right there on the landing page.
Part of me is wondering whether it would be better focusing the site solely on Dynamo-Browse, and leave all this Audax Toolset stuff on the back-burner, at least until (or unless) another tool is made available through this collection. I’m wondering if I’ll need to rearrange the codebase to do this, and spin out the other commands currently in development into separate repositories.
Dealing with tables in Obsidian reminds me that as much as I think I like working with tables in markdown, the truth is that I really don’t.
Wonder if it would be easier with that alternative markdown table format that the Linux community uses. One where rows are laid out over multiple lines - where each line is a separate column - instead of horizontally with the pipe character.
Bridging The Confidence Gap
I had to do some production work with DynamoDB this morning. It wasn’t particularly complicated work: run a query, get a couple of rows, change two attributes on each one. I could have used Dynamo-Browse to do this. But I didn’t. Despite building a tool designed for doing these sorts of things, and using it constantly for all sorts of non-prod stuff, I couldn’t bring myself to use it on a production database.
I’m wondering why this is. It’s not like I have any issues with using Dynamo-Browse for the non-prod stuff. Sure there a bugs, and things that the tool can’t do yet, but I haven’t (yet) encountered a situation where the tool actually corrupted data. I also make sure that the code that touches the database is tested against a “real” instance of DynamoDB (it’s actually a mock server running in Docker).
Yet I still don’t have the confidence to use it on a production database. And okay, part of me understands this to a degree. I’ve only been using this tool for a handful of months, and when it comes to dealing with production data, having a sense of caution, bordering on a small sense of paranoia, is probably healthy. But if I can’t be confident that Dynamo-Browse will work properly when it matters the most, how can I expect others to have that confident?
So I’d like to get to the bottom of this. After a bit of thought, I think there are three primary causes of my lack of confidence here.
The first is simple: there are features missing in the tool that are needed to do my job. Things such as running a query over an index, or the ability to impose a conditional check on updates. This is a legitimate concern in my opinion: if you need to do something, and Dynamo-Browse doesn’t support it, then you can’t use Dynamo-Browse to do that thing, plain and simple. It’s also the easiest concern to address: either add the feature, or say that feature is unsupported and don’t expect people to use Dynamo-Browse if they need it.
I think the second cause is a lack of insight into what the tool is actually doing. Even though I built the tool and tested it during development, there’s always this feeling of uncertainty in the back of my head while I’m using it when the stakes are high. That feeling of “when I do this, although I think the tool will behave this way, how will the tool actually behave?” Part of this, I think, comes from a decade and a half of being burned by technology as part of my job, and growing a healthy (?) sense of distrust for it.1
I’m sure some of this will resolve itself as I continue to use Dynamo-Browse, but the only approach I know of gaining assurance that the tool is working as intended is if the tool tells me what it’s doing. Logging will help here, but I think some features that provide the user the ability to check what’s going to happen prior to actually doing it would be useful as well.
The third cause is probably a lack of controlled end-to-end testing. There does exists a suite of unit tests with a decent (maybe not good, but decent) level of coverage, but it does not extend to the UI layer, which is a little problematic. It might be that more testing of the application as a whole would help here.
This means more manual testing, but it might also be possible to setup some automated testing of the entire tool end-to-end here as well. What’s going for me is the fact that Dynamo-Browse runs in the terminal, and is responsible for rendering the UI and handling the event loop instead of palming this off to the OS. Looking at some of the features that Bubble Tea offers, it might be possible to run the application headless, and simulate use by pumping in keyboard events. Verifying that the UI is such may be a little difficult, but what I can test is what is actually read from and written to the database, which is what I’m mostly interested in.
I’m still unsure as to what I’ll do to address these three causes of concern. This is still a hobby project that I do in my spare time, and some of the mundane tasks, like more manual testing, sound unappealing. On the other hand, I do want to use this tool for my job, and I want others to use it as well. So I can’t really complain that others choose not to use it if I cannot feel comfortable using it when it matters most. So I probably should do some of each. And who knows, I may actually get some enjoyment out of doing it. I certainly would get some enjoyment from knowing that others can rely on it.
-
Someone once said that an insane person is one that does the same thing twice and expects different results. That someone has never worked in technology. ↩︎