< Back to the archive

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

Issue #164 - May 1, 2022

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

Top comment by schoen

In the 1800s, scholars who knew a lot of languages (including, often, several modern and ancient European languages, and increasingly also Sanskrit) started to notice some amazing patterns about similarities in words among all of these languages, including languages from very far apart and that had no visible connection at all from the point of view of their present-day speakers.

As these patterns were explored, they were found to be even more systematic and pervasive than they had appeared. In some cases, one sound would systematically change into another sound from language A to language B.

https://en.wikipedia.org/wiki/Grimm%27s_law

These patterns helped reveal historical connections between most languages of Europe, Central Asia, and South Asia, showing that those languages had descended from the same ancient sources. (Note that this isn't true of 100% of languages in this region -- there are other unrelated families that turned up -- but it's true of a significant majority.)

https://en.wikipedia.org/wiki/Indo-European_languages

The languages that turned out to be related this way included the Germanic family (like German, English, Dutch, and the Scandinavian languages), the Romance family (like French, Spanish, Portuguese, Romanian, and Catalan), the Celtic family (like Irish and Welsh), the Slavic family (like Russian, Bulgarian, and Ukrainian), and also Farsi and all the Central Asian languages related to it, and Hindi/Urdu and all the South Asian languages related to it. Oh, and Greek.

If I tried to list all the languages and language families that were linked up to this family tree, we would probably be here all day, because they go on and on. Just under half the people in the whole world have one or another of them as a native language today!

These languages changed quickly enough in history that most people no longer noticed, or remembered, that most of them were related to one another, yet slowly enough that it's been feasible to deduce an enormous amount of information about the history of particular languages and particular words, once many of the rules and patterns had been identified.

A Grimm's Law example is that the h sound in Germanic languages usually corresponds to the k sound in Romance languages (note that this can be stated much more technically and accurately). So, it turns out that "hundred" and "cent"/"cento"/"centum" actually share the same origin. And "heart" and "cœur"/"corazón"/"καρδία" (origin of "cardiac") (also "cordial"; the root in Latin sounds like "cord-"). And "who" and "que"/"quoi"/"qui" (and similarly for other wh- questions in English and qu- questions in Romance, which were originally hw- sounds in English and kw- sounds in Latin).

Some other examples are t to d ("ten" and "decem"/"diez"/"dez", plus some of the examples above that have a t in English), and f to p ("foot" and the Latin and Greek words from which we get "pedestrian" and "podiatrist", and Romance "pied"/"pie"/"pé"; and don't forget about "father" and "padre"/"pater"/...).

Those are just a couple of the phenomena that people noticed in the 1800s; while the exact development of these patterns gets much more complicated, they've proven to work over and over and over, for hundreds of languages and hundreds of thousands of words!

(... Also, the Grimm from Grimm's Law is one of the Brothers Grimm, from Grimm's Fairytales!)

Top comment by Glench

Here's an all-time great post about why you might consider SQLite in production with data about performance: https://blog.wesleyac.com/posts/consider-sqlite

I use SQLite in production for my SaaS[1]. It's really great — saves me money, required basically no setup/configuration/management, and has had no scaling issues whatsoever with a few million hits a month. SQLite is really blazing fast for typical SaaS workloads. And will be easy to scale by vertically scaling the vm it's hosted on.

Litestream was the final piece of the missing puzzle that helped me use it in production — continuous backups for SQLite like other database servers have: https://litestream.io/ With Litestream, I pay literally $0 to back up customer data and have confidence nothing will be lost. And it took like 5 minutes to set up.

I'm so on-board the SQLite train you guys.

[1] https://extensionpay.com — Lets developers take payments in their browser extensions.

Top comment by zcdziura

The problem is that spam was/is so bad that extreme measures were taken to curb it. There are all kinds of invisible forces that you abutt that can be difficult to figure out, such as IP blacklists and the like. And even if you set everything up properly and host your email with a responsible host, Microsoft will still mark your mail as spam.

I host my own email server with Vultr on an OpenBSD VM using OpenSMTPD and Dovecot, relaying all outbound mail through SMTP2Go (their free tier more than meets my needs). I have all of the necessary DNS entries set to mark my mail as legit, and I sign all outgoing mail using strong 2048-bit RSA keys. Thus far, I'm able to send mail and not have it marked as spam (at least to everyone that I've corresponded with thus far). It was a lot of work to get to that point, but not terrible.

Top comment by mabbo

During a hostile takeover, someone buys 51% of the shares. They then elect a board of people who will approve whatever they want.

Then they can do things like 'merge' the company with some other company they own at a board-approved value-per-share. That value will be much lower than what they paid per share when buying it on the open market, but not so low that the government gets involved. Eg: Musk buys the shares at $50/share, and then 'merges' the company at $25/share, effectively forcing 49% of the shares to be sold at half price. Those shareholders get screwed because they didn't sell their shares during the initial takeover.

Edit: Or, just run the company however they want and share the profits with the other 49%, but ignore their votes, etc.

The Poison Pill says "If a hostile takeover starts, we'll create and sell new shares at a reduced price to existing shareholders- other than the attacker- to prevent the 51% scenario". This is done not to prevent any takeover, but in the interest of the 49% of holdouts who would have been screwed over. It's an effective block against the takeover.

The board represents ALL the shareholders, after all. They don't want to see anyone get screwed.

But now Musk has made a deal that the board has approved. All shareholders get a specific price that is approved. The board wants this to happen, so there's no poison pill.

Top comment by jjav

If the question is literally about just one program source code, the answer is easy: print it out.

All my oldest preserved code (early 80s) is on paper, the things it occurred to me at the time to print out. No fancy archival paper either, just listings printed out on my dot matrix printer onto fanfold printer paper.

Anything from that era that I didn't print out is gone.

From the late 80s onward I still have all the files that I've cared to save. The general answer to that is that there is no persistent medium, you need to commit to keep migrating that data forward to whatever makes sense every so often.

I copied my late 80s 5.25" floppies to 1.44MB floppies in the early 90s. In the mid 90s I copied anything accumulated to CD-Rs. In the 2000s I started moving everything to DVD-Rs.

From the late 2000s until today I have everything (going back to those late 80s files) on a ZFS pool with 4-way mirroring.

Of course, aside from preserving the bits you also need to be able to read them in a future. Avoid all proprietary formats, those will be hopeless. Prefer text above all else, that will always be easily readable. For content where text is impossible, only use open formats which have as many independent open source implementations as possible to maximize your chances of finding or being able to port code that can still read the file 30-40 years from now. But mostly just stick with plain text.

Top comment by johnklos

RED has always had all sorts of BS licensing gobbleygook. When the first RED cameras finally became available, the software absolute shit. They had all sorts of stuff in their license agreements about not reverse engineering, not redistributing, et cetera.

I had to figure out many parts of their software and make wrappers and separate tools so that queues could be started and run without monitoring, because their software would famously have an error, then just stop, making batch transcoding a full-time job.

I intentionally posted all sorts of things that were in violation of their license agreements in hopes that they'd take note and try to make a stink, but they didn't, probably because they didn't want to raise awareness of how badly their software sucks by fighting with people who were making it better.

The company has always pretended to be much more grandiose than they really are (see their attempt at making a cell phone), but really, they're just OK.

Honestly, though, the quality of their codecs suck. The color information just isn't there. You can watch Netflix and immediately tell which things were shot on RED, because they'll be grainy (which they think is a feature) and will lack nuanced color. Compare with anything shot on, say, Arri ALEXA, and you'll never look at RED the same way again.

All of this is to say that the company probably won't do anything nefarious that would get tons of negative attention, but they do always think they're the Next Big Thing, so you never know when the crazy will outweigh the careful. If it were me, I'd return it.

Top comment by albertzeyer

I usually recommend everyone who wants to learn programming:

- to write some games,

- or alternative to write some tools to be used for themselves to automate or simplify some of their tasks.

Writing games can be so much fun, and is incredibly deep such that you can pretty much touch upon all topics of programming, networking, computer science, algorithms and data structures, artificial intelligence, 3D graphics, GPU programming, low level programming, multi threading, etc. But also, you can start very shallowly and simply.

Writing tools gives you the feeling how useful and productive this can be.

What languages to use depends a bit on taste, background knowledge, and how steep the learning curve can be. I think Python is a good general purpose starting language.

Also, in any case, you should start actively coding right away. I know people who wanted to learn programming but just kept reading books and watching tutorial videos all the time while not really trying it out, and in the end they obviously did never really learn it. You need to have projects, or just random playgrounds. Also, don't start with a big project right away. Do many small projects. Play around.

Top comment by Decabytes

I used an 8gb RPI4 as my main dev computer for a bit. The idea was that if I was wasting cycles it would become a lot more apparent earlier on using the RPI 4 than on my main desktop. Also because I had less stuff on the PI (No steam/games) I had less things to get distracted about. YouTube can play 1080p but because of the slowness consuming video after video is not a smooth experience which stopped me from binging content and not doing what I need to do.

Overall the experiment was positive. The reason I stopped was because I ran into issues getting certain libraries to work correctly on the RPI 4 and it was getting more annoying to solve that than doing my actual work. I did a similar experiment with an RPI3 and while it is definitely slower than the RPI4 the issue was not the speed so much as the RAM. Having Emacs, a pdf manual open, the OS in the background, and the software I was working on running started getting me dangerously close to the 1Gb limit, and I had certain compilations outright fail because of that. I think 2gb definitely gives you the minimum amount of head room to make an RPI4 a viable option. The other bottleneck is the SD card. I think a 4gb RPI4 with a slight overclock, and SSD is would probably the sweet spot for this type of exercise.

Top comment by jupp0r

Supply and demand.

1. Capital controls. Russians are legally not allowed to sell their Rubles anymore. This decreases supply and keeps prices up.

2. A healthy dose of foreign currency ($1B/day from Germany alone) gives the Russian central bank plenty of tools to buy Rubles and increase demand for it to keep prices up.

This does not mean that the existing sanctions aren’t working. Eventually Russian factories will run out of machine spare parts and everything will grind to a halt, people will use their jobs, demand for goods will decrease, other factories will have to close due to lack of demand for their goods, their workers get laid off - you get the idea. This takes time though.

Disclaimer: I’m not an economist, but I do have a subscription to the Economist :)

Top comment by lamontcg

Don't invest for the winners in the recession.

Invest near the depths of the recession for the winners of the recovery where everything looks like its on a firesale.

The problem is of course timing the bottom. And resisting the emotional urge to think nothing could ever recover.

The 2020 extraordinarily V-shaped recovery surprised me a lot.

Given that nothing financial is really popping that hard and a lot of the headwinds we're facing now are just high commodities prices, bullwhip effects from the pandemic, and China is shutting down again, all of those factors are likely to be temporary so any near-term recession is likely to be V-shaped as well.

I suspect this is just a correction and we're close to maximum pessimism and investors should start looking for what to buy in the near term. And if you didn't already sell then you're probably too late and would be looking at locking in any losses that you had and missing the rebound.

But this is a description of conditions as they are today, not a crystal ball of the future. If something detonates tomorrow everything could change (and literally if Russia launches some nukes at Kiev tomorrow everything may change in an instant -- but I'm more considering a financial detonation).