👋 Let's Try This Again
I haven't been the most consistent writer here, so I'm trying a new format: Links and Learnings. Each week I'll post a few links to articles or posts that I read over the course of the week - usually related to technology or science, maybe history, or even just plain entertaining, but always something I felt was worth sharing! This format is partially inspired by my early interactions with the web; exploring hobby/interest sites by following "resource" links, but it's also similar to some bite-sized newsletters out there. Without further ado, here's this week's Links and Learnings.
💥 Shebang Lines
You may be familiar with Shebang lines if you've ever worked with a scripting language like Python or PHP. It's a way for a script to specify what program should execute it if you try to exec
it - you add a line to the top of the file, usually like #! /usr/bin/python
to signify calling ./script.py
should be run like /usr/bin/python script.py
. I've been writing a lot more PHP recently since I joined Misfits Market, and while I've been using scripting languages for a long time, I've never looked into the full syntax of the Shebang (or hash bang) line.
Recently I took a detour one day to read the syntax! It turns out you're able to pass one (1) argument along with the Shebang line to the executing process, which might be a useful trick int the case of bash for setting shell flags, as an alternative to setting one in the beginning of the script. There's also other tricks in there for producing less brittle scripts by delegating to env
for selecting the right executor program, as well as a little on the difference between a "first-class" script and the rest vis a vis process inspection - scripts will launch as their own process, instead of as the executing program (i.e. you'll see script_that_does_something.php
instead of php -f script_that_does_something.php
).
📉 Memory Optimization on iOS with... Go? by the Tailscale team
Hey linker, can you spare a meg?
This was a really fascinating technical post written by the Tailscale team about how they optimized the memory usage of their iOS VPN application, but also about their engineering principles and strategy. I'm in awe of the technical competence and polish presented in the post; a team strong highly product oriented, in complete understanding of the critical path of its system from the networking layers (as expected of a VPN company), to Go garbage collection and memory management, and to iOS memory paging and accounting. They speak to their investment in Go (they maintain a fork of it, but submit patches upstream to source) and how they make decisions (with a candid understanding of their competency and what they see and use as assets).
🤔 Double Whammy: (Web) UX with Moden Tools
I'm grouping these next two links together because I've not sure they're both related to something I'm been thinking a massive amount about lately - giving users more control over the web and the applications we build on it.
In this post, Jim Nielsen writes about a talk Kyle Simpson delivered at You Gotta Love Frontend Conference in 2019, about Progressive Enhancement. A major point Kyle delivers is to think about building and delivering software for users that defer to their preferences, rather than enforcing and requiring a particular styling, interaction pattern, and experience. In fact some of this idea harkens back to some of fundamental protocols of the web itself - HTTP. When sending an HTTP request to retrieve a resource (visiting a website), you also send it metadata about what human language you'd prefer it in, and even about what format you'd like the response to be in; what if you could similarly send information about what sort of experience you'd like to have? Nielsen goes on to implement a version of that configurable website fidelity, implementing different versions of his site that you can go on there and check out!
In Programming Portals, Maggie Appleton speaks to the history of computing. Up until the 80s, users interacted with a computer through a textual interface - the command line. Then GUIs splashed onto the scene, exposing the usefulness of a computer by framing it recognizable, accessible and more easily interact-able ways; a huge leap forward in usability. It created access for End Users, people who didn't, or couldn't interact with a computer through the unassuming but powerful text interface - opposed to those who could, and did - Programmers. Maggie speaks to people and projects that have tried to frame and close the growing gap between the two over the years (one of my favorites is Bret Victor and Ink&Switch. There's so much I want to write about this field and topic that I can't do in this limited format here, but suffice to say I'm happy that (1) there's people talking about and innovating in this field, and (2) these patterns that close the gap between Users and Programmers are making its way out to an application near you soon (if it's not already there).
🌍 Changing Worldviews
I haven't historically been the best at geography so I wasn't surprised when this interactive story-telling site busted some geographical misconceptions of mine. Coming from a US / North America-centric worldview, I discovered most of Africa is above the equator (2/3rds! by surface area), and that South America, typically depicted mostly South of North America (well, that much is true), it's not as inline longitudinally - all of South America is actually east of Jacksonville, Florida!
🙏 And That's All Folks
That's a wrap! I hope you enjoyed this week's links!