< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #132 - September 12, 2021

If you are looking for work, check out this month's Who is hiring?, Who wants to be hired? and Freelancer? Seeking Freelancer? threads.

Here are the top threads of the week, happy reading!

Top comment by GeneralMayhem

Lots of people are citing cutting-edge bells and whistles for advanced query plans and data types, but after working at $BIGCO and seeing what exists there (and has existed for years), I get frustrated by the lack of ergonomic and operational essentials in the public-cloud options.

1. Horizontal scaling. PG can do sharding or replication, but that's not the same thing. Manual resharding is something that, once you've experienced it, you don't want to do it ever again, especially when things like Spanner/Cockroach exist. Database-level liquid sharding is such a dramatically superior solution that it makes any system that depends on an enumerated set of master instances seem completely obsolete.

2. Strong commit timestamps, again a la Spanner/Cockroach. Globally-ordered commit times and read snapshots aren't something you'll need in every schema, but when you do, they're magical - suddenly, you can use your OLTP system for strong lease assignment (conditioning other transactions on lease validity), you can construct arbitrary application-level transaction semantics (non-transactional read followed by transactional compare-and-swap is pretty powerful in some scenarios), and all sorts of other things.

3. Interface abstraction. Databases that ship language-support drivers should also ship a fake in-memory implementation for testing purposes that supports the same interfaces and options. There's no reason why I should have to start a subprocess and emulate a network connection to tell whether a query functions properly or not, or whether I've set isolation properties correctly for a pipeline.

4. Declarative schemas, and a well-defined update process (that isn't human-written DDL), are essential at any sort of organizational scale. Every time I see an "ALTER TABLE" statement checked into a repository, I tear my hair out.

5. Queue support, where message publishing/consumption is transactional with other read/write operations. You can always build a queue with a time-keyed table, but it's kind of a pain in the ass to get all the edge cases right. It's much better as a first-class concept supporting automatic sharding, retries, batching, and bounded-out-of-order delivery with a global cursor.

Top comment by stickfigure

I'm 48 and have gone through this process countless times, it feels like familiar rote:

1. Explore the subject almost randomly. Neither depth-first nor breadth-first; just follow threads that seem most useful or most interesting. Books, articles, videos, classes, whatever - it doesn't matter as long as you don't get bored. Dabble in all of them. If there are any practical skills involved (motion, writing code, etc) start doing those immediately.

2. At some point you get the ah-hah! moment. It is like the fog lifts and you can suddenly see the landscape. You don't know everything but now it seems like further knowledge is just a process of filling holes. You wield your knowledge to accomplish what you need by filling specific holes on-demand. Everything fits together like jigsaw puzzle pieces.

The time between #1 and #2 can be short or long depending on the complexity of the subject. But the experience of #2 is a massive dopamine rush. The main thing you need is patience; don't get frustrated and give up, you know that if you just keep poking around, eventually that dopamine rush will come.

Top comment by mprovost

I'm publishing a book doing exactly this, rewriting one Unix utility per chapter from the BSD C version into Rust. The first two chapters for true/false and yes are published, with head, wc, cat, cut, rev, and uniq coming soon as I finish editing and typesetting each.

https://rftgu.rs/

Top comment by lucgommans

If you install TrackerControl, no root needed (it pretends to be a VPN to capture your traffic, but is not a real VPN), you will see which apps try to talk to tracking services and thus also which ones talk to Google.

It also as a 'traffic log' feature which, when turned on, shows live which app is talking to which tracker.

Note that, especially if you turn on blocking services marked as essential in the setup, you will need to unblock a lot of CDNs and tracking services for many apps to work including Spotify, your browser, etc. Of course you can also just whitelist apps completely, or temporarily turn all blocking off altogether. But by default it will block trackers, since that's kind of its point. This has the side effect of blocking virtually all advertisements.

Top comment by c7DJTLrn

This thread doesn't inspire confidence. It's mostly small and unproven projects, some maintained by hobbyists.

I think the mess we're in with GUIs is because we've failed to find a way to convey at a very high level what the inputs and outputs of software are. In a utopian world, you'd define what you want the user to see and how the user can interact with the information. Something would then work out how to lay that for you (in a way that makes sense to a human) and construct a GUI using native OS APIs.

Instead, we have only three options that I'm aware of:

* Use a framework that ignores the native APIs, throws away the OS design language and does all the rendering inside

* Build separate applications for each platform

* Use Electron and potentially reuse work you already did on the web version

When looking at it this way, it's easy to see why Electron is popular. Not that I'm a fan of it in any way.

I think what we need is a lot of really smart people to come together to reinvent the presentation layer.

Top comment by pjmlp

Basically Turbo Pascal overshadowed all other Pascal dialects and then Borland got greedy, decided that Fortune 500 were going to be their main customers in detriment of the small dev shops.

Additionally Anders got fed up with the ongoing culture and finally accepted the invitation of former ex-colleges to join Microsoft.

So J++ was born, then .NET, and most of the folks on Windows just moved from Delphi into C#.

Top comment by kingsloi

I had to livestream my child's funeral. I didn't want to use an iPad, or have an iPhone in someones hand livestreaming to facebook, as I thought I needed to do better, being a techie, so I rolled with my own.

Someone recommended Owncast (should out to Gabe), tried it on my System76 Meerkat that I use for my TV, and it worked a treat. I bought an Asus ZenScreen so I could use a portable monitor (without its own power supply), and just use a single extension cord for the Meerkat. I wanted to keep it as bs-free, and simple as I could.

I had issues getting the monitor to work, even though S76 had something in their FAQ about setting it up. I tried and failed, and with the funeral fast approaching, I emailed their support (months after I had purchased), not only was it answered pretty quickly, but I got a personal call from them with instructions on how to fix my issue, and it worked! Can't rate them high enough - and Pop!_OS is a bloody wonderful OS!

Top comment by mindcrime

- Mountain biking (albeit this is on pause right now, as I sprained my right shoulder about 3 weeks ago in a pretty gnarly MTB crash)

- Road cycling (I don't do as much of this and it originally started out just as cross-training for MTB, but I do enjoy a certain amount of road cycling for its own sake)

- BMX (this is where it all started for me. I don't ride BMX much these days, but I keep a bike or two around in case the urge hits)

- Fishing (mostly freshwater, mostly targeting largemouth bass, but sometimes I'll target catfish or crappie or something)

- Trail running

- Bushcraft / camping / etc

- Reading (in terms of fiction I read a lot of sci-fi, fantasy, thrillers, spy/espionage stuff, and horror. Non-fiction, aside from tech stuff, I like reading philosophy, history, biographies, pop science (is that too close to tech?) and business stuff (again, is that too close to tech?)

- Shooting (I don't get to the range much these days, but it's something I used to do a lot more of when I lived out in the sticks and had a place where I could shoot on our family's property)

- Tinkering with old cars (this is another somewhat neglected hobby these days, just due to various constraints. But one day I hope to get back to more of it)

- I used to spend some time involved in wrestling/jiu-jitsu and other related pursuits but age and too many injuries (mostly from mountain biking, see above) have caught up with me and I've been away from that stuff for a while. The urge is sometimes still present, but pragmatically speaking, it's not really a realistic pursuit for me anymore)

Top comment by igotsideas

I had been working in a call center for 4 years and had not had any growth whatsoever. I was broke, lost, and felt trapped at my job. I would look at job postings on dice and monster but didn’t have any of the skills mentioned and thought I would have to go to college to get a decent position. I didn’t have the money to go back to school so I tried something else. I e-mailed 30-40 tech companies, asking if they had any internships to get my foot in the door. Two companies replied back. First company was a desktop support position and the second company was a marketing internship at a coding bootcamp. I took the unpaid internship at the bootcamp. I realized I didn’t enjoy marketing right away but stuck with it cause it was better than a call center and I wanted to learn how to code. I ended up becoming friends with some of the engineering instructors and that’s when I was introduced to programming. They told me what to focus on, study, and build. So when I wasn’t at work or the internship, I was reading and building. After a while, I got my first job and been writing code for almost 8 years now.

I can’t lie, I got into it because of money but I ended up enjoying building web apps and solving problems.

Things that I enjoy now are the people. So many cool, smart, and helpful devs out there. The flexibility is really nice.

There wasn’t one book or website. Honestly, reading documentation or learning a concept and just practicing that one thing until you completely understand it helps me. There’s just so many resources online now so I’m sure there’s something for everyone.

Edit: wanted to answer more of OP’s questions.

Top comment by kace91

1 - Took care of his teammates at a level that bordered comedy. If you said in passing "oh man there's never knives in the lunch room" and he heard you, the next day you'd see a new pack of knives there. Taught me to consider every minor opportunity for improvement that life throws at you.

2 - Casualness in the face of problems. If a junior came and told him that production was down, he would just laugh and say something like "ok man that's gonna be a fun story next Friday, let's take a look". That mentality of "everything is solvable, nothing is worth being angry at" was really contagious.

3 - If he didn't believe something was good, he wouldn't do it just to do what's expected. That includes canceling meetings we were invited to with a "nah this can be an email", making technical choices that were against common knowledge at the time if he felt it made sense, or being fully honest during daily meetings, sometimes saying things like "yesterday I didn't do anything productive whatsoever. I was not focused, but I expect to perform better today". Again very powerful as a formative experience for junior devs, as the honesty was a total antidote to impostor syndrome.

He was a great dev in technical terms as well, but I don't think his technical choices mattered even a fraction of the leadership aspect.