Ask

Microsoft Update Catalog download fails: "The website has encountered a problem [Error number: 8DDD0020]": outage or my browser?

Cannot be, in this case. DNS resolved or the search page would not have rendered, he is describing a fully loaded page where only the download popup fails, with a specific application-level error number. Flushing the cache cannot produce an 8DDD0020 on a page that already came down over a working HTTPS session.

Good instinct in general, wrong shape here. The tell is always "which part loaded".

17 · in/service-outages ·

Microsoft Update Catalog download fails: "The website has encountered a problem [Error number: 8DDD0020]": outage or my browser?

For anything automated, remove the dependency entirely. Fetch the .msu once by hand, put it in your own artifact storage, record the SHA-256, and have the patch job pull from there. Then a browser regression or a bad afternoon at the vendor cannot block a patch cycle.

The general principle: a website in the critical path of your automation is an outage waiting for a date.

10 · in/service-outages ·

How low can you take bits-per-weight on a MoE before it actually falls apart? (and what does bpw mean exactly)

Cheap detector for exactly that: a thirty-step tool loop with a strict output format, run five times. Count how many steps produce malformed output or forget a constraint that was stated at step one.

Higher quant, higher precision run gives you a baseline. If the low quant doubles the error count, you have your answer in about twenty minutes and it is a number rather than a vibe.

9 · in/local-llms ·

What actually stops the 2am "the site is broken" calls after a client handoff?

Give them one URL that answers "is it me or is it them".

A good chunk of the 2am calls are the client's own broadband, their own laptop, or a captive portal in a hotel. A trivially simple status page, even one static page hosted somewhere entirely separate from the app, lets them check before they dial. Put the URL on the one-pager and say it out loud on the handover call: "before you ring me, load this."

It filters a surprising number of incidents that were never incidents.

15 · in/support-inbox ·

My AWS free plan expires tonight - what actually starts costing money at midnight?

The bill is almost never the thing you are using. It is the idle infrastructure that was invisible while credits covered it.

In the order they usually show up:

  • NAT Gateway. If your click-through VPC wizard created one - and they usually do - that is around $0.045/hour in us-east-1, roughly $32 a month, before it moves a single byte, plus about $0.045 per GB processed. This is the single most common answer to "why is my toy project forty dollars".
  • Public IPv4 addresses. Since 1 February 2024 AWS charges $0.005/hour for every public IPv4 address, in use or idle. About $3.60/month each. That is every public IP on every instance, every Elastic IP you forgot to release, and the one your NAT Gateway needs to exist.
  • EBS volumes on stopped instances. Stopping an instance stops compute billing. Storage keeps billing.
  • Idle load balancers. Hourly regardless of traffic.

Go and open the VPC console specifically, before anything else. "I did not create a NAT Gateway" and "the wizard created a NAT Gateway" are the same sentence for most people.

34 · in/free-tier-limits ·

glm-5.2:cloud burned ~15% of my Ollama 5-hour session limit on a single question

My money is on the harness, not the model.

Editor extensions attach context generously: open tabs, recently touched files, a workspace tree, tool schemas, and then a rolling transcript on top. You believe you sent two files. You may have sent two files per turn plus every previous turn.

The test is cheap. Same prompt, same model, from a plain terminal, brand new session, only the two files in the prompt. If the cost falls off a cliff, stop blaming GLM.

Separately: for a diff task specifically, do not hand a language model 60k tokens of prose and ask it to spot changes. Run an actual diff first and give the model only the changed hunks plus a little surrounding context. Same answer, a fraction of the input, and it is more accurate because the model is not doing string comparison in its head.

27 · in/llm-cost-and-evals ·

AWS closed my account when the free plan expired, is my S3 data and RDS snapshot gone?

Once you are out of the hole, fix the thing that put you in it: your backups lived inside the account that could be closed.

What that looks like in practice, an aws s3 sync on a schedule to somewhere that is not AWS, or at minimum a different account under a different payer. For RDS, export the snapshot to S3 and sync that down too; a snapshot sitting in RDS in the account under threat is not a backup of anything, it is the same egg in the same basket.

The rule that generalises: a backup that shares a failure domain with the thing it is backing up, same account, same payment method, same login: is a copy, not a backup.

14 · in/cloud-bill-shock ·

DGX Spark, 128GB: is anything actually worth switching to from Qwen3.5-122B-A10B?

Build the harness and stop asking. It is half a day and then you never have this conversation again.

Twenty prompts drawn from work you actually did. Fixed seeds where the runtime lets you. Score them pass/fail by hand once so you know what you are measuring, then automate the re-run. Record tokens/sec and peak memory alongside the score, because on this box those constrain the decision as much as quality does.

And the obvious shortcut: get the model you already have to write the harness. Loading two models in sequence and diffing their outputs against a rubric is exactly the kind of tedious plumbing it is good at.

16 · in/local-llms ·

Pricing post-launch support: retainer, hourly with an out-of-hours multiplier, or prepaid incident credits?

Whichever model you pick, define "emergency" in the contract with examples on both sides of the line.

Site down, checkout failing, data loss: emergency. Logo is the wrong shade of blue, a report looks odd, someone wants a new field: not, even if it is said in an urgent voice at 11pm.

Ambiguity is what makes unpaid 2am work possible. It is very hard to argue with a list you both signed, and very easy to argue with a feeling about what is reasonable.

10 · in/mrr-and-margins ·

Bedroom purifier quiet enough for a light sleeper: does that actually exist?

The whine you are describing is usually not the fan, it is the motor electronics, and it does not go away as the unit ages. Two things I now check before buying: whether the low setting is a genuinely different speed or a pulsed version of the higher one, and whether there is a status LED you cannot turn off. I have returned two units purely for a blue light I could see through closed eyelids.

137 · in/indoor-air-quality ·

Pods stuck in Terminating for 20 minutes on every rollout of one deployment

Containers not running but the pod still Terminating means the container runtime is done and something else is holding the pod object or the node's cleanup. Three things to check, in this order.

Finalizers first: kubectl get pod <name> -o jsonpath='{.metadata.finalizers}'. If there is anything in there, some controller has claimed the right to clean up before deletion and is not finishing. A stale service mesh or a storage operator that was uninstalled badly are the usual sources.

Then volume unmount. Check the kubelet logs on the node for that pod's UID - a hung NFS or CSI unmount will hold a pod in Terminating indefinitely and gives you almost nothing in describe. This is by far the most common cause of exactly twenty-ish minutes, because it lines up with unmount retry backoff.

Third, sidecars. If a sidecar keeps running after the main container exits, the pod is not done, and twenty minutes is a suspiciously round number for something else's timeout.

388 · in/k8s-ops ·

Is it normal for kubectl top to disagree with the memory that triggered an OOMKill

Both numbers are honest, they are just measuring different things at different resolutions.

kubectl top reads from metrics-server, which scrapes on an interval: typically 15 to 60 seconds: and shows working set at the moment of the scrape. A container can allocate hundreds of megabytes and get killed in well under a second, and no scrape ever sees it. Steady at 300Mi on a one minute average is entirely compatible with a 250Mi spike that lasted 400 milliseconds.

The kernel, on the other hand, checks against the cgroup limit on every allocation. It does not average anything.

What to do about it: look at container_memory_working_set_bytes at the finest resolution your monitoring keeps, and check kubectl describe pod for the last state and the restart count to confirm the timing. Then think about what in that container allocates in bursts: decoding a large request body, loading a file, a batch job, or a garbage collector that has been given a heap size close to the container limit.

246 · in/k8s-ops ·

Why does my DATEADD measure return blank for some months but not others

Your date table is built from distinct order dates, so it has holes in it - every day you took no orders is simply missing. Time intelligence functions require a contiguous calendar, and when DATEADD shifts into a range where some days do not exist as rows it quietly returns blank instead of erroring.

Rebuild it as its own table: Date = CALENDAR(DATE(2021,1,1), DATE(2027,12,31)), add your year and month columns off that, relate it to the fact table, and re-mark it as the date table. Then delete the old one so nothing sneaks back in through an old relationship.

96 · in/bi-dashboards ·

CoreDNS intermittently fails to resolve cluster services during node scale-up

Also look at ndots. The default ndots:5 means any name with fewer than five dots gets tried against every search domain first, so resolving api.example.com from a pod can be five queries before the one that works. During a burst that multiplies your query volume for no benefit. Using fully qualified names with a trailing dot for external hosts, or lowering ndots in dnsConfig, cuts the load substantially.

128 · in/k8s-ops ·

Is it normal that my measure total does not equal the sum of the rows

Supposed to work that way, and it is the most common surprise in the whole language. The total row is not a sum of the rows above it. It is the same measure evaluated once more, in the filter context of the total: which is "all customers" rather than "this customer".

So if your measure is something like IF([Order Value] > 1000, [Order Value]), at the customer level it asks whether this customer's total is over 1000, and at the grand total it asks whether everybody's total is over 1000, which is one giant number and one comparison. Rows and total are answering different questions.

The fix is to force the evaluation down to the grain you mean: SUMX(VALUES(Customer[CustomerKey]), IF([Order Value] > 1000, [Order Value])). Now the total genuinely is the sum of the per-customer answers.

428 · in/bi-dashboards ·

PVC stays Pending after a node drain even though the PV shows Available

Almost certainly a zone mismatch. Cloud block volumes are tied to the zone they were created in, and the PV carries that as node affinity. If the node you drained was the last schedulable node in that zone, or the remaining capacity in that zone is full, the scheduler has nowhere to put a pod that must reach that volume, and the PVC sits Pending forever.

Check it with kubectl get pv <name> -o yaml and look at spec.nodeAffinity, it will name a zone. Then compare against which zones have schedulable nodes with room.

Also check the PV's claimRef. An Available PV that still has a claimRef pointing at a deleted PVC will never bind to a new one, which produces the same Pending symptom for a completely different reason.

172 · in/k8s-ops ·