My contribution is what not to do. Put a bottle with a bit of fluff in it through a filter, decided it was fine, and inked a piston filler with it. Three weeks later flow got worse and worse and there was a grey film inside the barrel. It took a long soak, several flushes with pen flush and a lot of swearing. The ink was free. The evening was not.
Tobias Renn
@null_pointer_ok
Backend developer, mostly Go and a little Rust when I want to feel humbled. I like boring architectures that survive a Tuesday outage.
68 credit Contributor
- From answers
- 0
- From questions
- 69
- Lifetime
- 69
The mistake I made was switching tariff to fix a problem that was actually a system problem. My seasonal performance was around 2.9 because the flow temperature was set high by the installer and two rads were undersized. Fixing the flow temperature and swapping two radiators did more for my bills than any tariff change, and it made the tariff change work better afterwards. Check your flow temperature before you optimise the price of the electricity.
Mechanics of moving them, so you do not schedule it badly. A domain cannot be transferred within sixty days of registration or of a previous transfer, so anything you bought or moved recently has to wait. You need the auth code from the losing registrar and the domain must be unlocked, and transferring adds a year to the expiry rather than losing it. Do them in batches of five, not twenty three in an evening.
Small disagreement with "never put blobs in D1" as a general rule, since people will read this thread later. Under a couple of hundred kilobytes, in a table you rarely select from, it's fine and one store is genuinely simpler.
What kills you is selecting the blob column by accident. D1 responses have to be serialised out of the database and back through the worker, and a SELECT * on a table with fat rows will feel like the network is broken. If you do keep blobs in D1, put them in their own table with the key, so a careless select can't reach them.
The thing I would undo is the fixed bathroom. It ate a fifth of the floor, we used the shower nine times in two years, and the toilet did not need a room. Second van has a cassette in a cupboard and an outdoor shower off the back doors, and it feels twice the size.
this is the practical version of what i was actually asking. right now getUser() is imported in about thirty places but it does go through one file, so that's survivable.
this is a much more convincing reason than anything i'd read. it's a support decision with an auth-shaped implementation, not a security upgrade.
Cheaper middle option that worked for me: monthly in-person lesson plus a video I send between lessons. My teacher charges a small fee to watch a five minute clip and reply, which catches the technique drift without a full lesson. Not every teacher will do it, but it is worth asking, and it made the whole thing affordable when I could not do fortnightly.
Minor but worth knowing: sunset minus 15 minutes is often too late in winter anyway because of cloud and terrain. Once you fix the hour, you may find you want minus 30 in the winter months. An elevation based trigger, firing when the sun drops below about minus 4 degrees, tracks perceived darkness far better than a fixed offset does across the year.
Practical notes from running the HTTP API nightly for about a year. It's a normal https request, so it's slower per query than a binding inside a worker - batch your statements rather than looping row by row from node, or the round trips will dominate.
Also the response shape isn't identical to the binding's, so if you share code between a worker and a script, wrap it once. I didn't and spent an hour on a results versus result[0].results mismatch.
Replacing the answer sheet rather than moving the site is the sentence I needed a month ago.
Both can be true. Use the HTTP API from your laptop for ad-hoc work, keep the narrow endpoint for anything that runs unattended.
Bandaid while you find the real cause: a cron job every five minutes that pings the gateway three times and, on failure, bounces the interface, then reboots if that fails twice in a row. Not elegant, but a timelapse with a six hour hole in it is worse.
Before you tune anything else, check the arithmetic on requests against allocatable rather than capacity. A pod requesting 4 CPU will never schedule onto a 4 vCPU node, because the kubelet and the OS reservation mean allocatable is always meaningfully less than capacity. I have watched two different teams lose an afternoon to a request that exactly matched the instance size and looked like it should just fit.
Worth adding that some cheap plugs technically route but do it very badly, with a routing table of about five entries. If you have a lot of sensors, one purpose built repeater beats five plugs that all think they are routers.
I sized a pool off usage graphs once and could not work out why half the nodes sat at 30 percent utilisation while pods went unschedulable. Every deployment had a request set to a round number somebody typed in 2021 and nobody had revisited. Fixing requests to something near reality freed more capacity than the node resize I was about to do, and it was free.
Chop it, bury it, forget it. Whole peels in a heap are still recognisable next spring.
One thing that's cheaper than all of the above for a reset endpoint specifically: stop making the response depend on whether the email exists, and add a delay plus a proof-of-work or turnstile check.
Most of the value in hammering a reset endpoint is enumeration. Once the endpoint says the same thing in the same time regardless, the attack stops being interesting and your rate limiting only has to handle volume rather than cleverness.
Also worth setting MAXDBDAYS to 7 and deleting the existing database if it has grown to a few hundred MB. Compacting a large sqlite file on a card that is already limping is not a fun way to find out how fragile it is.
Durable versus fragile is a good filter generally. Anything that depends on somebody else's HTML is fragile by definition, and anything that only touches your own data will still work in three years.
Also check what brand of cell you are buying. Cheap coin cells from a strip of twenty for a couple of dollars are frequently near their shelf life already and give you three months instead of two years. It is one of the few places where paying for a name brand genuinely pays back.