I’ve set up an instance of Linkding within PikaPods this afternoon. I’m going try it out as my bookmark manager, given that my Pinboard subscription has expired.

Screenshot of the main page of Linkding with a list of bookmarks on the left and tags on the right

So far, so good. Importing my bookmarks from Pinboard was a breeze. The UI is cleaner that Pinboard as well, although I wish I could change the colour scheme (the purple is a but much).

Bulk editing of links was easy to do. Just run a search and click the “card” icon next to the search box. Checkboxes appear next to the links and you can select the ones you’d like delete, archive, or add or remove tags to. All pretty straightforward.

No social features though, which makes sense given that this is something you host yourself. But I never used the social features from Pinboard, so I won’t miss that at all. Poking around the settings it does look like you can make links public, but I probably won’t need that anytime soon.

One thing I’m excited about is that it sets the title of new bookmarks to that of site automatically if I don’t set one myself. Thank you! Finally! The fact that Pinboard didn’t do this, and just set the title to “No title”, really annoyed me. Such a bleeding obvious feature to add as well, and I don’t know why Pin… okay, breath, not a problem anymore. 😮‍💨

So yeah, we’ll see how this goes.

Dentist today. The only mistake I made with arranging the appointment is booking it for today. Seeing the dentist doesn’t feel like a Thursday thing. Feels more like something for a Tuesday, for sure. Maybe even a Monday. Not Thursday.

🔗 Cheating Is All You Need

New post by Steve Yegge. I always enjoy his writing but please, can someone buy Steve a domain name? He changes blogging platforms so often it’s difficult to follow him (well I guess Twitter would have worked at one point).

Via: birchtree.me

🔗 CSS Wish List 2023

I’ve wanted attr() to be more widely accepted in CSS values since, well, I can’t remember. A long time. I want to be able to do something like:

p[data-size] {width: attr(data-width, rem);}

I realize adding this would probably lead to someone creating a framework […] where all the styling is jammed into a million data-*attributes […], but we shouldn’t let that stop us.

Is it too late to vote for this? I’d love to be able to do this for background images. Relying on JavaScript to get the URL from the attribute and style the element is such a hack.

Via: Jim Nielsen

April usually means controlled burns, and they’re conducting these burns at a bush reserve near my place. I was afraid that the smoke would be an issue, but so far it’s been such a non-issue I was wondering if the burns were actually called off. Apparently not.

Bush with burnt undergrowthBush with burnt undergrowth

About Those Checkmarks

This posts going to be about Twitter. Yes, I know; another one out there. It’s also going to be a bit speculative in nature, so feel free to skip it if you like.

I’ve been reading the coverage over the “retirement” of the legacy verification system, both in the news and on the socials. And what I find interesting about this whole affair is all the new Twitter Blue subscribers complaining about people that had the checkmark choosing not to sign up.

Their displeasure comes through in their tweets on why they think these people choose not to subscribe. Many tout money (these people are too stingy) or logistics (write it off as a business expense). But they don’t give a reason as to why they care. Surely money or logistics is their problem to sort through. Why should you be unhappy that they chose not to join Twitter Blue? I haven’t seen any tweets answering this question.

I’m not surprised by that. I wonder if the reason is that many of those that have acquired a checkmark saw the those with a verified Twitter handle as being part of the in-group; members of an elite club that you cannot get a membership for1. Naturally they wanted to be part of this in-group, and when this new Twitter Blue subscription offer rolled out, they saw an easy opportunity to gain entry.

But the thing about status symbols is that they’re only valuable if the in-group chooses to keep them. When all these formally verified people refuse to sign up to Twitter Blue, and their checkmarks were removed from their handle, so too did the checkmark loose it’s value as an indicator of worth. The checkmark no longer a signals status.

Even worse is this in-group has changed their position to one where not having the checkmark is the sign of status. Suddenly, those that have signed up to Twitter Blue found that their attempts to buy their way in was for naught. And that’s what I think they’re angry about. Their new checkmark doesn’t impart status anymore, since those that had it don’t want it. Now it’s just an indicator that you’ve paid $8 a month, with maybe a hint that you found the symbol important in the first place.

That’s also probably why Musk saw it fit to “pay” for Twitter Blue for accounts with more than a million followers, trying to prop up any remaining status this indicator once had. This raises more questions though. Surely he would have seen that allowing anyone to verify their account would dilute the intrinsic status that came with it. I guess he thought that those with the checkmark felt it important enough to keep it, and it will retain its value as a status indicator.

Anyway, this could be all pretty obvious to a first year psychology student, but I found it all very revealing. It’s certainly interesting seeing this play out over the last couple of days.


  1. I know that’s not the point of this verification status, but it does seem like many saw it as an “I’m an important person” signal. ↩︎

Note to self: a shell script will always be quicker and easier to write than a Go program for a throwaway thing, no matter how much you wished it to be otherwise.

Day One and Project Jurassic

So, Day One is in danger of being sherlocked by rumor’s of Apple’s upcoming journaling app:

Mayne echoes the sentiment of several app developers who have been frustrated when Apple launched in-house competitors to the apps they have introduced to the ecosystem, often copying features those apps innovated and adding functionality that only Apple can offer, per the iPhone’s privacy and security policies and APIs.

I’m a user of Day One and I have my doubts that Apple’s app would be a drop-in replacement for my journaling needs. And I think the reasons why Day One works for me — and could be made to work better — are also opportunities for Auttomatic to differentiate Day One from project Jurassic.

The first is access to user’s data. If Apple’s going to leverage the data it has access to on the phone, then Auttomatic should go the other way, making it dead easy for services outside Apples ecosystem to add stuff to people’s journal. Have a blog? Post photos to Flickr? Track movies in Letterboxd? Wouldn’t it be nice to get this into your Day One journal, safe and secure? A public API that these services can use to add posts to user’s journal would go a long way here. These services can offer an export option straight from the app, and Day One can be the private collection of all things a user does on the web, sort of like a private blog.

And yes, I know there’s that IFTTT integration, but I found it to be pretty crummy (all the post formatting was stripped and images were not uploaded). And it would be a pretty ordinary user experience to have these services say to their users “hey, if you want the stuff you track here in your journal, you have to create an account at this other service.” I guess all these services could publish this information as RSS feeds, and I would settle for that, if the IFTTT integration is actually working.

But arguments about IFTTT aside, the point is that Day One should fully embrace other services getting user’s data into their journal, and the best way to do this is with a public API. I know it won’t work for all their journals (one’s encrypted E2E should remain so) but the user’s should have that option, and services should be empowered to allow this.

And let’s not forget the largest trump card Automattic has over Apple: an Android app and web app. I haven’t used the web app but I use the Android app all the time. I can’t imagine Apple releasing an Android version of their journalling app, particularly if they’re gearing it towards health and leveraging all the private data people have on their iPhones. Automattic should keep working on both the Android and web app, so that users not completely in Apple’s ecosystem can keep journals.

So I don’t think Auttomatic has much to fear about project Jurassic. But they can’t rest on their laurels. They should embrace the platforms outside of Apple and iOS to really differentiate Day One, and keep it a favourite of mine for journaling.

Nerd Counterflex

You know that Washington Post article that has the list of websites Google used to train Bard? I been seeing people post screenshots of their sites in the training set on their blogs and Mastodon. This morning I read a post from Chris Coyier about it:

My largest corpus of writing to date is on the web at css-tricks.com (along with many other writers), so naturally, I’m interested in seeing if it was used. (Plus, I’ve been seeing people post their rank as a weird nerd flex, so I’m following suit.)

I’d suggest reading it. The post is more than just him flexing his ranking in the training set.

Well, I got curious to see if any of my writing was there. Here’s the result:

Screenshot of Washington Post article with Bard training set with ‘no results’ showing up for lmika.org

I guess you can call this a form of a nerd counterflex?

None of my other sites were there either. There was “lmika.com”, but that’s not me. Maybe having that was good enough for Google.

So yeah, you won’t be seeing Bard sharing any of my… “insightful” thoughts about code reviews anytime soon. 😄

Options For Self-Hosting Code Repositories

I’m considering something that some might say is stupid: I’m looking at options for self-hosting my personal code repositories.

I’m coming around to the idea of having my own domain for things like Go packages. It’ll provide more opportunities for adding some structure to my repos, rather than having them all hang off a single github.com/lmika namespace. Plus, my personal code management system is reasonably good at the moment so, naturally, the time has come to change all that 😛.

One option is to setup something myself. An idea I have is to get Forgejo running in a VPS managed by Hetzner. I had a go setting up Forgejo up to run on an empty Ubuntu server with PostgreSQL, but I didn’t get very far as I’d also have to setup things like a non-root user account, Nginx reverse proxies, and SSL certificate provisioning — stuff I can do, but all very tedious. Also, Forgejo’s installation guide is pretty incomplete. Good instructions for download it and setting up the database, but very little after that (where were the instructions about requiring a non-root account? That would have been nice to tell me).

I also tried getting the Docker image running it with Dokku. That took care of the reverse proxy and user account, and I managed to log into the frontend, but I couldn’t get Git to checkout a test repo using SSH. I suspect the SSH listener in the Docker container will need to be on a separate port to the SSH listener on the host; and both the container and host will need separate domain names, since I’d probably need to setup different SSH configs to use Git for both of them. Anyway, I haven’t completely written this approach off, and I may have another go at it if I want to host it myself.

One other thing I’d like to get working is a CI/CD pipeline. I got quite used to having GitHub Actions run the tests when I push commits, and having something similar would be really nice. It looks like Forgeio is building an integrated CI/CD pipeline which is exciting. But the question becomes where the runners should go. Separate host? That’ll start to make things a little expensive. I guess I can start without them, at least for the moment.

Another option is Gna, which offers managed instances of Forgejo and Woodpecker CI. It’s €10.00 /month, which is a decent price for something managed. But I do have questions about the company. Not that I’m worried about them snooping or anything, and the fact that they’re charging me means they have a business plan. But will they be around in 5 years? Granted these feelings are coming from visiting their website, but it does feel a little slapped together. Hmm.

The third option is going with GitLab. Hetzner seems to offer that as a one-click option, as does Digital Ocean (well, the Enterprise edition), and yeah that might work. I did create a GitLab instance for a hackathon once, so it’s something I could probably manage. But I don’t really love GitLab’s UI. I don’t know why I’m put off by it; after all, it’s not like Gitea’s UI is particularly special (I’m sorry, but everything looks so amateur. Please work on the padding of your elements). Maybe I can learn to love it if it means administering the thing would be easier.

Anyway, that’s the current feeling. We’ll see if I go through with any of this.

It’s always fun playing the “which faraway land is closer to me” geography puzzle when setting up an online services that doesn’t have a presence in Australia.

Options to select a location for a new server with choices of 2 cities in Germany, 1 city in Finland, and 2 cities in United States

The answer is Hillsboro, OR — 13,021 KM from Melbourne.

Dear The Economist,

Please restore the witty headlines you use for your articles to the digital edition. That’s one of the reasons why I read you. I know you include them as postscripts at the bottom, but it’s not the same.

Sincerily,

Me

Sunny day today, yet a bit chilly. So the hat and jacket ensemble is out at the moment.

Adding a new feature to dynamo-browse and now I’m beginning to wonder if this is why JavaScript has both a null and undefined type. In short: dealing with null pointers suck. They suck in Go and I’d imagine they’d suck a million times more in C. Better to have a dedicated type representing an undefined value, with all the associated methods to simplify the code.

The thing is: JavaScript should’ve not exposed this to the user. Do they really care that nil and undefined are two separate things? Was it worth the added confusion. Hmm. I’ll try not to make the same mistake.

Got to use one of the software tools we build and sell at work for a “real” purpose today, as in not just to test something. Felt good. Don’t get to do that super often.

Maybe, before AI swallows our careers to the point where we’re little more than glorified prompt engineers, they’ll be a brief period of time where AI does the boring things in software engineering. Leave us to do the fun stuff like write the code. They can review it for us, like some fancy linter.

🎵 Going Home: Theme from Local Hero

This week’s earworm. Apparently I loved this track when I was a little kid. Well, apart from the very 80’s sound (not a criticism), I’d say the younger me had great taste.

This teeny tiny lizard made its way into my house somehow. I’ve seen it on and off over the last week, but I managed to catch it and put it outside. There’s another one running around that I’ll also need to find and rescue.

Small lizard perched on my left index finger Close-up of the small lizard sitting on my finger

🔗 The Windows 11 Trash Party

There is no way to turn this news feed off. The best you can do is “manage interests” which kicks you out to msn.com to have you tell it what topics you prefer.

Definitely not trying Windows 11. I hate software that pushes news onto you, unsolicited and with no easy way to turn off! I’ve have my news sources that I read and trust. I don’t want things pushed to me from sources with some commercial agreement that doesn’t have my interests in mind.

I’d argue that Google Reader shutting down was probably one of the best things that could happen to RSS. It might’ve been bad at the time, but it gave way to services like Feedbin that respect open standards and bring new users to the format, like myself. Having a large company like Google suck up all the oxygen in the room can’t have been good for RSS long term.