101 private links
Derek and Sean commiserate about the latest generation of MacBooks, Slack, and the state of the Web.
https://romainl.github.io/the-patient-vimmer/0.html
https://romainl.github.io/the-patient-vimmer/1.html
https://romainl.github.io/the-patient-vimmer/2.html
https://romainl.github.io/the-patient-vimmer/3.html
https://romainl.github.io/the-patient-vimmer/4.html
https://romainl.github.io/the-patient-vimmer/5.html
https://romainl.github.io/the-patient-vimmer/6.html
https://romainl.github.io/the-patient-vimmer/7.html
https://romainl.github.io/the-patient-vimmer/8.html
Map functions are hard to "get" in the abstract. This looks at two mental models that helped me understand them better.
Switching from primitive types to product types can improve confidence in correctness and compiler errors, but not without a cost.
logrotate for docker logs
Good example for generating password using different wrappers or bindings of the crypt() function
I use this to manually change password in /etc/shadow for users created only as opensmtpd users which has no shell access (/usr/sbin/nologin)
The quickest way, using python3 is:
python -c 'import crypt; print(crypt.crypt("password",crypt.METHOD_SHA512))'