Ok, I’m all in on Obsidian for my note taking now. I’ve found myself using it at work every day this week. The editor they’ve got in the latest version is quite nice. And now that their mobile apps are out, it’s great that I can now access my notes on any device.
Useful thing to know about Go: you can do lookups on a nil
map:
var xs map[string]string = nil
x, hasX := xs["hello"]
The result will simply be the zero value of the particular type. In this case x
will be the empty string.
🔗 Who is ready for a fleet of cubesats flying over cities, displaying ads?
The well of bad ideas may not be bottomless, but it certainly is deep.
An Alternative To The Reply All Idea For Micro.blog
Just thinking about Micro.blog conversations and the discussion about having a way to reply all. I wonder if a better alternative is to be able to “follow” conversations, with new replies from anyone showing up in the timeline. This can be completely opt-in per conversation — including for posts that are made by you — so that those that want the old way to continue working as is don’t loose anything.
It has one other advantage: I’ve seen conversations in Micro.blog that I had no real interest in participating in (usually because I have nothing to add) but I was interested in following along. Usually these are people asking for recommendations, and others post theirs as replies. Being able to “subscribe to new replies” would allow me to get updates to these as they come in, rather than have me check-in on the conversation thread every hour or so.
Anyway, that’s the idea. Let me know what you think.
Tinkering around with some tools I use to help me at work. One, a CSV editor which runs in the terminal, has a command-line interface that is so wimpy I’m having trouble resisting the urge to rip it out and replace it with something like TCL. I don’t need another distraction.
The (Annoying) Way To Get the Current MacOS Appearance Scheme From the Command Line
Ok, here’s something bizarre.
I’m trying to get the current MacOS appearance scheme — either light or dark mode — from the terminal. The way to do this is by running this command (source):
defaults read -g AppleInterfaceStyle
If MacOS is in dark mode, this will print Dark
. But if MacOS is in light mode, the command will print… an error:
2022-10-04 09:15:18.058 defaults[35844:466643]
The domain/default pair of (kCFPreferencesAnyApplication, AppleInterfaceStyle) does not exist
Running defaults read -g
confirms what the error message says: the AppleInterfaceStyle
key is not set when MacOS is in light mode.
Why was this chosen as the way to do things? Now I need to capture and parse stderr just confirm that the reason an error occurred was because MacOS is in light mode; as oppose to some other, possibly legitimate, reason.
A tad annoying I must say.
There a so many good, high quality TV shows available at the moment. And yet I have little interest in watching any of them. They feel like such a time investment. Of course, the alternative is vegging out to YouTube, so where’s the real time-sink here?
New blog alert: lmika.day
Started a check-in blog, similar to manton.coffee. Having a record of places I’ve been to has been something I’ve been thinking of for a while, and I suspect all the travel this year, plus the recent talk about Meridian, nudged me to start keeping one.
Trying Obsidian for note-keeping at work again. I used it a lot in my last job, but I never really liked how the markdown was styled, so I stopped when I started working where I am now.
One other reason why I didn’t keep using Obsidian was that I always forgot to launch it. Out of sight is out of mind for me, and I never think of launching it when I need to write something down. This means that most of my notes usually end up in Tot or various untitled TextEdit windows.
Fortunately, the styling of the markdown editor is closer to my taste in the recent version, so I’ll give it another go. I’ve also added Obsidian as a login item so that it shows up as soon as I log in now.
Homeward bound.


Photos of Lake Tuggeranong
This morning I went to Tuggeranong, south of Canberra. After a cafe breakfast I took a walk around the lake. It was a lovely spring morning for it: cloudy, mild but slightly on the cool side. It was also quite a decent walk: probably took an hour and 20 minutes, and I didn’t even cover the entire lake. All in all, a nice way to begin the day.
🔗 Google suffers from a digital petro curse
Hearing the story about Stadia reminded me of this post by DHH. His thoughts on why Google can’t keep a new product around for more than a few years is insightful.
Google’s damaged reputation made the death of Stadia a self-fulfilling prophecy. No one buys Stadia games because they assume the service will be shut down, and Stadia is forced to shut down because no one buys games from it.
What’s there more to say? 🤷
🔗 Cloudflare’s CAPTCHA replacement lacks crosswalks, checkboxes, Google
I wonder: if Google, as many suspect, is using CAPTCHA for image recognition training, how certain are they of the positive results? If everyone were to start clicking anything other than crosswalks, would that screw up their training data?
Birds in the hand.

Things Dynamo-Browse Need
I’m working with dynamo-browse a lot this morning and I’m coming up with a bunch of usability shortcomings. I’m listing them here so I don’t forget.
The query language needs an in
operator, such as pk in ("abc", "123")
. This works like in
in all the other database services out there, in that the expression effectively becomes `pk = “abc” or pk = “123”. Is this operator supported natively in DynamoDB? 🤔 Need to check that.
Likewise, the query language needs something to determine whether an attribute contains a substring. I believe DynamoDB expressions support this natively, so it probably makes sense to use that.
Longer term, it would be nice to include the results of the current result set in the expression. For example, assuming the current result set has these records:
pk sk thing place category
11 aa rock home geology
22 bb paper home art
33 cc scissors home utensils
and you want to effectively query for the rows where pk
is equal to the set of pk
in the current result set, having a way to do that in the expression language would save a lot of copy-and-pasting. An example might be pk in @pk
or something similar, which could produce a result set of the form:
pk sk thing place category
11 aa rock home geology
11 ab sand beach ~
22 bb paper home art
22 bc cardboard shops ~
33 cc scissors home utensils
33 cd spoon cafe ~
Another way to do this might be to add support for filters, much like the expressions in JQ. For example, the second result set could be retrieved just by using a query expression of the form place = "home" | fanout pk
, which could effectively do the following pesudo-code:
firstResultSet := query("place = 'home')
secondResultSet := newResultSet()
for pk in resultSet['pk'] {
secondResultSet += query("pk = ?", pk)
}
For dealing with workspaces, a quick way to open up the last workspace that you had opened would be nice, just in case you accidentally close Dynamo-Browse and you want to restore the last session you had opened. Something like screen -r
. I think in this case having workspace files stored in the temporary directory might be a problem. Maybe having some way to set where workspace files are stored by default would work? 🤔
For dealing with marking rows, commands to quickly mark or unmark rows in bulk. There’s already the unmark command, but something similar for marking all rows would be good. This could be extended to only mark (or unmark) certain rows, such as those that match a particular substring (then again, using filters would work here as well).
It might be nice for refresh to keep your current row and column position, instead of going to the top-left. And it would also be nice to have a way to refresh credentials (could possiably be handled using the scripting framework).
And finally, if I have any doubt that the feature to hide or rearrange columns would not be useful, there was an instance today where I wish this feature was around. So, keep working on that.
I’m sure there will be more ideas. If so, I’ll post them here.
An idea for anyone maintaining a 2FA app. When there’s only a few seconds left for an OTP code, start fading the numbers out.
I only look at the time remaining indicator about half the time, usually when I have a bit of time to enter a code. Other times when I’m under a bit of pressure to login, I just look at the code and start entering it, only to stop because the number changed without me noticing.
Seeing it start to fade is a good indicator that the code will change and that I should probably wait for the next one.
The best Slack shortcut I learnt today is Shift+Esc. This will mark all messages as read. 😌
I had some trouble trying out status.lol yesterday. Turns out the reason was that I was using the API key from meta.omg.lol. instead of from home.omg.lol. Once that was fixed, sending status updates worked without any problem.
As a change of pace, I’ve picked up a frontend ticket at work today. TypeScript, React, GraphQL: yes, I’m using it all. I know a little of each so I’m not coming to it completely cold. But it’s still all quite new to me so there’s still that sense of doing something novel.