-
I must say, Feedbin does a good job making Twitter threads actually nice to read. I haven’t seen it work for every thread, but when it does, if feels almost like you’re reading a blog post. So much better than reading it in Twitter.
-
ποΈ Really Specific Stories, featuring yours truly.
Had the privilege of being a guest on @martinfeld’s excellent show about podcasting. Check it out, then make sure you listen to the other episodes because they are all really good.
-
Currently binging on Epic Engineering Failures from the Great Courses. The details of the failures are interesting, but the course also covers a lot on structural engineering, which I never expected to find just as facinating.
-
Google, please; fix the locale detection logic in Sheets. Every newly created spreadsheet has the wrong locale set by default, and I always need to explicitly change it to AU. As fun as it is to use Β£ for currency, or month/day/year for dates, I prefer to use what I’m use to.
-
Spotted this morning as I was walking to breakfast. π¦
-
Intermediary Representation In Dynamo-Browse Expressions
One other thing I did in Dynamo-Browse is change how the query AST produced the actual DynamoDB call.
Previously, the AST produced the DynamoDB call directly. For example, if we were to use the expression
pk = "something" and sk ^= "prefix", the generated AST may look something like the following:
The AST will then be traversed to determine whether this could be handled by either running a query or a scan. This is called “planning” and the results of this will determine which DynamoDB API endpoint will be called to produce the result. This expression may produce a call to DynamoDB that would look like this:
Continue reading β -
Did a cleanup of all the half-finished posts I had lying around as drafts. Many of them have been cluttering up the Draft section for a few months now.
The original goal was to have a “bank” of posts that I could publish on days I had nothing else to say. I guess that didn’t quite pan out as expected. Since starting this idea, I think there were two banked micro-posts that I eventually published. The rest turned into ambitious, half-finished pieces of writing that became larger over time as I rewrote sections and added additional threads of thought. Eventually they became so large and overworked β without being anywhere close to finished β that it became too much of a hassle to keep them around.
I guess when it comes to posting stuff, I need to either publish it immediately, or at most a few days after it’s written. Keeping it around with the belief that I can publish it “later” means they’ll be little chance that it’ll see the light of day.
-
Dinner at The Mint. This is my table, which is the same table I sat at last time I was here, in January 2020. Feels like a bit of a bookend in a way.
-
Along the boundary of Melbourne Port.
-
π Dithering: 13 Sept 22 - Discord AI
Enjoyed the discussion on Midjourney and AI images, but it was the final two minutes on the UIs of Slack and Discord that I found to be the most interesting part of this episode.
-
Sunny day today. Might need to bring out the hat once again.
-
Really tired this morning. Work up last night due to a production incident. Must say that nothing goes out to prod quicker than a 3 AM change you hope will just shut the damn PagerDuty alerts up.
-
Letting Queries Actually Be Queries In Dynamo-Browse
I spent some more time working on dynamo-browse over the weekend (I have to now that I’ve got a user-base π).
No real changes to scripting yet. It’s still only me that’s using it at the moment, and I’m hoping to keep it this way until I’m happy enough with the API. I think we getting close though. I haven’t made the changes discussed in the previous post about including the builtin
Continue reading βpluginobject. I’m thinking that instead of a builtin object, I’ll use another module instead, maybe something like the following: -
I miss working on monoliths. Micro-services are just so painful to test. So many moving parts you need to get working before you can even start.
Then you’ve got serverless stuff. Go to test those, and wow, you’ll wish you were testing micro-services. π
-
Saw someone at work use Numi to show some maths so I’m giving it a try. Only just started using it but I already like it. Feels very similar to Tot and Boop: a small MacOS utility that fits nicely in that middle-ground between Calculator and a spreadsheet.
-
Absolutely incredible seeing how far AI image creation has come. I know this was years in the making, but with all the recent launches, it feels like the change has happen over mere months. Will need to give it a try.
-
At least one photo will be taken at this event (well technically the setup of the event).
-
Discovered that I can use a URL shortener to grab a link from my Android phone and open it on my iPad. I guess that means Iβm finally up to speed on the awesome ideas of 2007. π
-
My whimsical side might be developing a little. I’m starting to come round to the wiggly seek bar in Android.
-
Rail works.
-
The Australian Republic Question
With the passing of Queen Elisabeth II, the talk of whether Australia should become a republic will probably start making the rounds once more. I don’t consider myself a royalist, and when the last referendum on the issue came around, I voted in favour of becoming a republic. The idea of having the British Royal Family as the head of state of a country halfway around the world seem anachronistic to me, and I was disappointed when the referendum failed.
Continue reading β -
Flags at half mast at the school today to mark the passing of Queen Elizabeth II.
-
Those worried about video-centric podcasts ruining the format can allay their fears. The killer feature of podcasts is that you can listen to them without having to pay attention to anything visual. Video may fill a nitch, but I canβt see it taking over the entire format.
-
I’ve been tinkering around with Pico-8 game development recently. I like how limiting it is. Expectations are not too high, which helps given that I’m hopeless at the non-coding aspects of game design, like artwork.
It’s quite a joy. Reminds me a lot of making games in QBasic back in the day.
-
And while we’re on the subject of tests: make it easy for me to launch tests quickly from the IDE. Refusing to run a test because a particular environment variable is not set is really annoying, especially when a suitable default value would work 90% of the time.
-
The unit test I’m working on uses so many mocks it’s infuriatingly difficult to change anything. I wonder if a better approach is to just mock out external dependencies and use the actual services in the test. May not be as unit-ey, but would make it easier to move things around.
-
Finished version 0.0.3 of Audax Toolset yesterday. The code has been ready since the weekend, but it took me Sunday morning and yesterday (Monday) evening to finish updating the website. All done now.
Now the question is whether to continue working on it, or do something different for a change. There are a few people using Dynamo-Browse at work now, so part of me feels like I should continue building features for it. But I also feel like switching to another project, at least for a little while.
I guess we’ll let any squeaky wheels make the decision for me.
-
π emperror.dev/errors
Drop in replacement for the github.com/pkg/errors package. The original package is archived as there’s a plan to change how Go handles errors. But not all of us are ready to adopt this yet.
-
Detecting When GetItem On DynamoDB Returns Nothing
I was trying to remember how best to detect when a GetItem call to DynamoDB returns no values. That is, when there’s no item with that key in the table. This is in a project that is using v2 of the Go AWS SDK.
After poking through some old code that did this, it looks like the way to do so is to check that the returned
Continue reading βItemfield isnil: -
Some Photos of The Yarra Trail
Went for a very short walk of the Yarra Trail around Heidelberg on Saturday. The evening light was really lovely so I though I’d take some photos.
Continue reading β -
Milestone
For a while, I’ve been trying to maintain a writing streak. I need to write at least one blog post or journal entry a day. Today that streak has been maintained for a full year.
I will admit that the streak was not completely continuous: I had to go back a few times and retroactively add a post. But even so, I’m quite please with reaching this milestone. Onward to the next one.
Continue reading β -
It could be that I’m just an old fogie that doesn’t like whimsy, but chalk me up as someone who doesn’t like the wiggling seek bar in Android’s playback notification.
-
Currently reading: On Writing Well, 30th Anniversary Edition by William Zinsser π
Only a few chapters in, but so far a great read.
Via Rec Diffs #188
-
I make something and not share it with anyone, I become frustrated.
I make something, share it with others, and they donβt use it, I become disappointed.
I make something, share it with others, and they do use it, I become terrified.
Thereβs no middle ground here, is there?
-
Knocked off some merge requests from my inbox and about to start work on a nicely sized development task. Looking to be a good Friday for coding. π§βπ»
-
I’ve been using Dynamo-Browse all morning and I think I’ll make some notes about how the experience went. In short: the command line needs some quality of life improvements. Changing the values of two attributes on two different items, while putting them to the DynamoDB table each time, currently results in too many keystrokes, especially given that I was simply going back and forth between two different values for these attributes.
So, in no particular order, here is what I think needs to be improved with the Dynamo-Browse command line:
- It needs command line completion. Typing out a full attribute name is so annoying, especially considering that you need to be a little careful you got the attribute name right, lest you actually add a new one.
- It needs command line history. Pressing up a few times is so much better than typing out the full command again and again. Such a history could be something that lives in the workspace, preserving it across restarts.
- The
set-attranddel-attrcommands need a switch to take the value directly, rather than by prompting the user to supply it after entering the command (it can still do that, but have an option to take it as a switch as well). I think having a-setswitch after the attribute names would suffice.
Finally, I think it might be time to consider adding more language features to the command line. At the moment the commands are just made up of tokens, coming from a split on whitespace characters (while supporting quotes). But I think it may be necessary to convert this into a proper language grammar, and add some basic control structures to it, such as entering multiple commands in a single line. It doesn’t need to be a super sophisticated language: something similar to the like TCL or shell would be enough at first.
It might be that writing a script would have solved this problem, and it would (to a degree at least). But not everything needs to be a script. I tried writing a script this morning to do the thing I was working on and it felt just so overkill, especially considering how short-lived this script would actually be. Having something that you can whip up in a few minutes can be a great help. It would have probably taken me 15-30 minutes to write the script (plus the whole item update thing hasn’t been fully implemented yet).
Anyway, we’ll see which of the above improvements I’ll get to soon. I’m kinda thinking of putting this project on hold for a little while, so I could work on something different. But if this becomes too annoying, I may get to one or two of these.
-
Found a service this morning which was sending HTTP requests with a timeout of 1 second. This was causing problems in the service it was calling, which was unable to satisfy the request in that time. Who sets the HTTP request timeout to 1 second? Seems pretty low to me.
-
You can tell I’m bored at work when I spend time building stupid little utilities for myself instead of actually doing the task I should be doing. Today’s stupid little utility: a TUI tool to list merge requests I’ve posted for review. Saves a trip to the browser.
Just to be clear: these are fake task names so nothing about what I’m actually working on is disclosed. Hope the suspicious looking Jira task numbers give that away.
-
Thinking About Scripting In Dynamo-Browse
I’ve been using the scripting facilities of dynamo-browse for a little while now. So far they’ve been working reasonably well, but I think there’s room for improvement, especially in how scripts are structured.
At the moment, scripts look a bit like this:
const db = require("audax:dynamo-browse"); const exec = require("audax:x/exec"); db.session.registerCommand("cust", () => { db.ui.prompt("Enter UserID: ").then((userId) => { return exec.system("/Users/lmika/projects/accounts/lookup-customer-id.sh", userId); }).then((customerId) => { let userId = output.replace(/\s/g, ""); return db.session.query(`pk="CUSTOMER#${customerId}"`, { table: `account-service-dev` }); }).then((custResultSet) => { if (custResultSet.rows.length == 0) { db.ui.print("No such user found"); return; } db.session.resultSet = custResultSet; }); });This example script β modified from one that I’m actually using β will create a new
Continue reading βcustcommand which will prompt the user for a user ID, run a shell script to return an associated customer ID for that user ID, run a query for that customer ID in the “account-service-dev”, and if there are any results, set that as the displayed result set. -
Some Things I Found Out While Browsing a Substack Newsletter in The Wayback Machine
I did a quick search for that blog post in the the Wayback Machine. I couldn’t find the post but the Substack newsletter was there. I guess Substack does allows archiving of newsletters with the “substack.com” domain after all (if it’s something that they can even control).
Anyway, here are a few things I’ve found out while browsing through a Substack newsletter in the Wayback Machine:
- Clicking “Let me read it first” works: it slides away and the most recent posts show up. Guess it’s just a simple HTML overlay blocking the home page.
- Open all links in a new tab. Just clicking them will run some JavaScript which, I guess, tries to load the post directly from Substack, resulting in an error if the newsletter is taken offline. Opening the link in a new tab will get the post directly from the Wayback Machine.
- Clicking the archive tab seems to bring up the blog archive briefly, but then some JavaScript β which I guess is trying to load the archive from Substack? β replaces it with an error (why does everything need to be JavaScript?!) I’m guessing that the actual HTML is still there so it might be possible to get it if you disable JavaScript. I haven’t tried this though, so this is only a hypothesis.
As for the post itself, it turns out that it was in my Feedbin archive all along, so the search in Wayback Machine wasn’t actually necessary. Now the trick is to find a way to prevent Feedbin from purging old posts. π³
Continue reading β