Discover more from hrbrmstr's Daily Drop
libredirect; sd; Text Rendering Hates You
If you'd like to retain more privacy when tapping random, drive-by links as you browse your day away, you might be interested in libredirect [GH], a browser extension that automagically subs-out links to common services with ones that are functionally equivalent (i.e. they hit the same content source), but help reduce privacy loss in the process.
Aside: I may seem to drop way too many browser extension links for a dude who regularly cautions against using browser extensions, but you install this one manually, so you can always look for malfeasance before using it.
The project updates a master redirect list in the extension every few days, and has switcheroo support for:
Twitter → Nitter
Instagram → Bibliogram
TikTok → ProxiTok
Imgur → Rimgo
Wikipedia → Wikiless
Medium → Scribe
Quora → Quetre
IMDb → Libremdb
PeerTube → SimpleerTube
Send Files → Send
The less-privacy killing destinations are running instances of each service in the above list, which means you can stand up your own ones and use them if you are super concerned about privacy.
While you're not going to log in to any of these alternative destinations, your resource consumption will not be passed on to the core site. So, you can, say, keep up with what one of your favorite reporters is posting on Twitter, but you aren't going to have a customized timeline (at least not yet). Many of those alternative sites have other functionality as well. For instance, I can get an RSS feed of Ben's tweets, a feature Twitter-proper killed off ages ago, via Nitter instances.
This extension is certainly not for everyone, but if you would like to claw back a bit of your privacy, I highly suggest giving it a go.
In this modern age of flaunting our riches of massive RAM, CPU, and SSD equipped systems by using giant Docker containers as command line executables, it may seem adorable to rely on plain, ol' shell scripts to get things done (though, I guess you can wrap a command to fire up a dockerized tool in a script, too), but many of us still turn to these trusty text-based resources to get stuff done.
I've never liked putting them in a
bin directory, and never really thought about a better way to or actually organize them until I met sd [GH], which describes itself as a "cozy nest for your scripts."
The concept is brilliantly simple. You create a top-level script directory (say,
~/sd) and the directories in the tree below it become a series of command groups, with the final executables becoming subcommands. This is the example tree from the post:
$ tree ~/sd /Users/ian/sd ├── blog │ ├── edit │ ├── preview │ └── publish ├── book │ ├── open │ ├── words │ └── typeset ├── nix │ ├── diff │ ├── info │ ├── install │ ├── shell │ └── sync └── video └── fix
To, say, publish a blog post, you could do:
$ sd blog publish --deploy
If you forget how to build things with nix (I really need to cover nix in one of these drops),
sd's structure will help you with autocompletion (provided you've added such a line in your scripts):
$ sd nix <TAB> diff -- prints what will happen if you run sync info -- <package> prints package description install -- <package> use --latest to install from nixpkgs-unstable shell -- add gcroots for shell.nix sync -- make user environment match ~/dotfiles/user.nix
You can also easily turn handy one-liners into scripts vs aliases.
The blog post goes into more detail on how
sd came to be. If you're as tired of wearing out your
r keys as I am,
sd might be worth taking a look at.
Text Rendering Hates You
We take so much for granted when we use technology. I come from the days of 300 baud modems, tape drives for storage, and incredibly limited RAM systems, so marvel at this thing called an iPhone almost every time that I use it.
It isn't just hardware that we take for granted. When you fire up your browser to visit your favorite site (this one, ofc!), you just start reading and likely have no idea, or ever pause to reflect on, just what it takes to turn stored Unicode bytes in a database or file into the pixels that are rendered into text of any given/chosen font.
That is, you had no idea until today, provided you take some time to read Aria Beingessner's Text Rendering Hates You. I'm fairly well-versed in modern, digital typography and what it takes to render text, but I learned even more through Aria's post.
In case you need a bit more convincing to tap the above link, here's what Aria covers:
Style, Layout, and Shape All Depend On Each Other?
Text Isn’t Individual Characters
Style Can Change Mid-Ligature
Emoji Broke Color and Style
Anti-Aliasing Is Hell
Subpixel Offsets Break Glyph Caches
Subpixel-AA Isn’t Composable
Fonts Can Contain SVG
Characters Can Be Too Damn Big
Selection Isn’t A Box, And Text Goes In All The Directions
How Do You Write That You Can’t Write?
Style Is Part of The Font (Except When It’s Not)
There Is No Ideal Text Rendering
The post is frightfully well-written and is an absolute must-read for anyone even remotely considering getting into the text-rendering game. After reading it, you'll (hopefully) appreciate the humans behind the device and app you're using right now.
Aria is also a mad cool Rust developer, and regularly blogs about all things Rust as well.
In the 🇺🇸, yesterday was National Voter Registration Day. If you are eligible to vote but aren't registered, GO THERE NOW, then vote in November (and all future elections). If you have friends or family who fit that same description, please encourage them to do so as well. ☮