Scott started putting together a mobile chicken tractor. The metal tube is repurposed from one of those canvas covered pavilion things that came with the house. Massive wind storm, years ago, took it out. It’s been a hop arbor and now a chicken tractor. Since it articulates a little bit, it fits the contours of the ground. We still need to mount some fencing … well, sand it down a bit and repaint it too! But it’s a large, portable space for the chickens to roam when we’re not hanging out in the yard keeping an eye on them.
Musing on Pardons
Understanding Exponential Growth
Using the data from https://covidtracking.com/data/national/cases: in the most recent seven day span (10-16 November), 1,056,346 people in the US have been infected with this coronavirus. The total number of cases yesterday was 11,047,064. That means 9.562% of the *total cases* in the US were new cases in the past week.
This is how exponential growth works — and why you heard a lot about ‘flattening the curve’ earlier in the year. If you put a penny on the first square of a chess board, double it and put two pennies on the second square, double it and put four pennies on the third square, and continue in that fashion … mathematically, you have 2^n pennies on each square, where n is the numeric sequence of the square, 0-63. On the last square in the first row, square #7, there are 2^7 pennies — 128 pennies, or a buck and twenty eight cents. Not a lot. And the end of the second row, you have 2^15 pennies — 32,768 pennies. That’s $327.68 — over three hundred bucks. A lot more than a buck, but not a huge amount of money. But you’re up to 2^23 at the end of the third row — 8,388,608 pennies or $83,886.08. Eighty three grand is a lot of money. By the time you get to the mid-point on the board, the end of the fourth row, you have 2^31 pennies on a square. 2,147,483,648 pennies for $21,474,836.48 — over twenty million dollars. A lot of money, but it’s possible. The second half of the chessboard is where exponential growth becomes unsustainable. The end of the fifth row is 2^39 — 549,755,813,888 pennies. The end of the sixth row is 2^47 — 140,737,488,355,328 pennies. The end of the seventh row is 2^55 — On the final square, you have 2^63 … 9,223,372,036,854,775,808 pennies for $92,233,720,368,547,758.08 … 92 quadrillion dollars. If the going price of Earth is only five quadrillion dollars, you’re putting a marker for the entire solar system (and then some) on that last square.
And that ignores the accumulating total — while you have 92 quadrillion dollars on the final square, you have another 92 quadrillion dollars on the entire rest of the board. Now, obviously, we are not doubling our rate of infections every day. But we’re entering “second half of the board” territory just the same.
Always A New Low
Discourse acme.sh Script Failure
I had a hellacious time updating the certificate on my Dockerized Discourse server — the acme.sh script doesn’t have a slash delimiter between the hostname and the ./well-known folder within the URI. Which means the request fails. Repeatedly.
[Sat Oct 10 00:01:09 UTC 2020] _post_url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/7784162898/nr42-g' [Sat Oct 10 00:01:09 UTC 2020] _CURL='curl -L --silent --dump-header /shared/letsencrypt/http.header -g ' [Sat Oct 10 00:01:10 UTC 2020] _ret='0' [Sat Oct 10 00:01:10 UTC 2020] code='200' [Sat Oct 10 00:01:10 UTC 2020] trigger validation code: 200 [Sat Oct 10 00:01:10 UTC 2020] sleep 2 secs to verify [Sat Oct 10 00:01:12 UTC 2020] checking [Sat Oct 10 00:01:12 UTC 2020] url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/7784162898/nr42-g' [Sat Oct 10 00:01:12 UTC 2020] payload [Sat Oct 10 00:01:12 UTC 2020] POST [Sat Oct 10 00:01:12 UTC 2020] _post_url='https://acme-v02.api.letsencrypt.org/acme/chall-v3/7784162898/nr42-g' [Sat Oct 10 00:01:12 UTC 2020] _CURL='curl -L --silent --dump-header /shared/letsencrypt/http.header -g ' [Sat Oct 10 00:01:13 UTC 2020] _ret='0' [Sat Oct 10 00:01:13 UTC 2020] code='200' [Sat Oct 10 00:01:13 UTC 2020] discourse.example.com:Verify error:Fetching https://discourse.example.com.well-known/acme-challenge/XY02T_40TL92IADByQ45JMj4JzC2qJCatVd2odJMAlU: Invalid host in redirect target [Sat Oct 10 00:01:13 UTC 2020] pid [Sat Oct 10 00:01:13 UTC 2020] No need to restore nginx, skip.
Turns out that’s my bad config — I’ve got a reverse proxy in front of Discourse, and we don’t use the clear text http site. The reverse proxy just bounces you over to the https site. Two problems — one, I failed to put the trailing slash after my redirect, s http://discourse.example.com/.well-known/blah is being redirected to https://discourse.example.com.well-known/blah
<VirtualHost 10.1.2.3:80> ServerName discourse.example.com ServerAlias discourse Redirect 301 / https://discourse.example.com </VirtualHost>
That’s easy enough to fix — add the trailing slash I should have had anyway. But the subsequent problem is that the bootstrap nginx config that is used to serve up the validation page only listens on port 80. So I cannot redirect the clear-text traffic over to the SSL site. I have to reverse proxy the clear text site as well (at least whenever the certificate needs to be renewed).
ProxyPass / https://discourse.example.com/ ProxyPassReverse / https://discourse.example.com/
Voila, a web server with an updated certificate.
New Teams Features for Developers
|
|||
|
|||
|
|
|||
Short Story Outline
Movie/story idea — All of the crazy conspiracy theories Trump parrots are actually true. The deep state looking to undermine him. The conspiracy to steal the election, twice. The QAnon idea that Democrats are secret pedophiles or cannibals or whatever looking to take over the country and Trump has been ordained by God himself to save us. Except, unlike mainstream stories where good triumphs over evil … the bad guys win and the savior lives out his life in exile.
Center-Right
Coop Floor and Roost
Bloomberg’s Millions
I wonder if the lesson from Mike Bloomberg’s 2020 election investments might be “dumping money into advertisements has limited benefit”. A hundred million dollars to fund groups driving people to polls. Or free public transport rides on election day. Or groups helping people navigate voter registration (possibly including fees and transportation to where-ever non-driver photo IDs are issued). Maybe those would have been more productive ways to blow a hundred mil.




