Write a polite but firm email to a landlord who has not fixed the heating for three weeks. I want the repair, not a fight.
GLM 5.3 Flash
Subject: Urgent: Heating Repair Still Outstanding – Request for Immediate Action
Dear [Landlord's Name],
I hope you're doing well. I'm writing to follow up on the heating issue in my apartment at [address], which I first reported on [date of first report] — three weeks ago.
Despite my previous messages on [dates of any follow-ups], the heating has not been repaired. As you'll appreciate, living without adequate heating is more than an inconvenience; it affects my health, comfort, and possibly the habitability of the unit, particularly with [cold weather / a cold snap / young children in the home, as applicable].
I would very much like to resolve this amicably and quickly. To that end, I'd appreciate it if you could:
Confirm a repair date in writing within [48 hours / 3 business days] of this email; and
Arrange for a qualified technician to complete the repair by [specific reasonable date, e.g., end of this week].
If it's helpful, I'm happy to be flexible on timing to accommodate the contractor — I just need a firm commitment and a date.
For my records, I'm keeping a written log of all communications regarding this issue, including this email. I'm confident we can sort this out without needing to involve the local housing authority or consult my tenancy rights, but I do need the repair scheduled now rather than later.
Thank you for your prompt attention. I look forward to your reply by [date].
Kind regards, [Your Name] [Address / Unit Number] [Phone Number]
A few tips for using this:
Fill in the specific dates — documenting the timeline ("reported on X, followed up on Y") is what makes the email firm rather than just polite.
The reference to the housing authority is your leverage. It's phrased as "I'm confident we won't need to..." — which signals you know your rights without threatening.
Keep the paper trail. Send it by email rather than phone, and save a copy. If this drags on, a dated record is your best friend.
Check your local rules. In many places, landlords are legally required to fix heating within a specific timeframe (often much shorter than three weeks) — mentioning "my tenancy rights" hints you may know this.
Want me to adjust the tone (softer or firmer), or tailor it to a specific country's tenancy laws?
Asked Nov 1, 2026. Unedited.
Write a React hook that debounces a value and cancels on unmount. Include the TypeScript types.
GLM 5.3 Flash
Here's a well-typed useDebouncedValue hook that cancels pending updates on unmount:
import { useEffect, useState } from "react";
/**
* Returns a debounced copy of `value` that only updates after
* no new value has been provided for `delay` milliseconds.
*/
function useDebouncedValue<T>(value: T, delay = 300): T {
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(() => {
// Set up the timer for this value
const timeoutId = window.setTimeout(() => {
setDebouncedValue(value);
}, delay);
// Cleanup: cancels the pending update when the value changes
// OR when the component unmounts.
return () => {
window.clearTimeout(timeoutId);
};
}, [value, delay]);
return debouncedValue;
}
export default useDebouncedValue;Usage
import { useState } from "react";
import useDebouncedValue from "./useDebouncedValue";
function SearchResults() {
const [query, setQuery] = useState("");
const debouncedQuery = useDebouncedValue(query, 500);
useEffect(() => {
if (!debouncedQuery) return;
// This only fires once typing pauses for 500ms
fetchResults(debouncedQuery);
}, [debouncedQuery]);
return <input value={query} onChange={(e) => setQuery(e.target.value)} />;
}Key points
Generic
<T>: The hook preserves the exact type of the value you pass in —useDebouncedValue<string>, objects, etc.Unmount safety: The
return () => window.clearTimeout(...)in the effect cleanup runs on unmount, so no state update is attempted on an unmounted component. React 18+ no longer warns about this, but it avoids unnecessary work regardless.Value-change cancellation: Because the cleanup also runs before each re-run of the effect, rapid changes cancel the previous timer — that's the actual debouncing mechanism.
Default
window.setTimeout: Usingwindow.setTimeoutexplicitly ensures the return type isnumber(notNodeJS.Timeout), avoiding a DOM/Node type mismatch. If you're in a browser-only codebase, this is the safest form.
Optional: leading/trailing behavior
If you want more control, here's a variant with an options object:
interface DebounceOptions {
delay?: number;
/** Fire immediately on first value, then debounce (default: false) */
leading?: boolean;
}
function useDebouncedValue<T>(value: T, options: DebounceOptions = {}): T {
const { delay = 300, leading = false } = options;
const [debouncedValue, setDebouncedValue] = useState<T>(value);
const isFirstRender = useRef(true);
useEffect(() => {
if (isFirstRender.current && leading) {
isFirstRender.current = false;
setDebouncedValue(value);
return;
}
isFirstRender.current = false;
const timeoutId = window.setTimeout(() => setDebouncedValue(value), delay);
return () => window.clearTimeout(timeoutId);
}, [value, delay, leading]);
return debouncedValue;
}For most use cases, the simple version at the top is all you need.
Asked Nov 1, 2026. Unedited.
A drug test is 99% accurate, and 0.5% of people use the drug. Someone tests positive. What is the probability they use it, and why does the answer surprise people?
GLM 5.3 Flash
The Answer: About 33% — not 99%
This is the classic base rate fallacy, and the math is worth seeing.
Setting Up Bayes' Theorem
Given:
99% test accuracy (sensitivity: 99% of users test positive; specificity: 99% of non-users test negative)
0.5% of the population uses the drug (the base rate)
Among 10,000 people:
| Group | Count | Test Positive | Test Negative |
|---|---|---|---|
| Users (0.5%) | 50 | ~49.5 | ~0.5 |
| Non-users (99.5%) | 9,950 | ~99.5 | ~9,850.5 |
| Total | 10,000 | ~149 |
$$P(\text{user} \mid \text{positive}) = \frac{0.99 \times 0.005}{(0.99 \times 0.005) + (0.01 \times 0.995)} = \frac{0.00495}{0.00495 + 0.00995} \approx 33\%$$
Why This Surprises People
We ignore the base rate. Our intuition latches onto "99% accurate" and ignores how rare drug use is. But the rare condition means most positives come from the huge pool of non-users.
False positives outnumber true positives. Even though only 1% of non-users test positive wrongly, there are so many non-users (9,950) that they generate ~100 false positives — twice as many as the ~50 true positives from actual users.
"99% accurate" ≠ "99% chance it's right." Accuracy is a property of the test. The probability you want depends on both the test and how common the condition is.
The Takeaway
For rare conditions, even excellent tests produce mostly false positives. This is why:
Doctors often order a second, independent test before diagnosing a rare disease (two positive results would push the probability past ~98%)
Screening entire populations for rare diseases is controversial — you may harm more people with false alarms than you help with true catches
Rule of thumb: the rarer the condition, the less a single positive test tells you.
Asked Nov 1, 2026. Unedited.
What it’s good at
Ranked against 42 models, from public leaderboards and our own blind tests where we have them. How we rank
- #5of 42 for research
- #7of 42 for writing
- #12of 42 for everyday chat
The facts
GLM 5.3 Flash is the small, fast member of Z.ai’s GLM 5.3 family, with open weights. It reads images and video as well as text.
Scores from artificialanalysis.ai and lmarena.ai.
- Made by
- Z.ai
- API price, per 1M tokens
- $0.15 in, $0.50 out
- Speed
- 74 tokens a second
- Artificial Analysis Index
- 41.8
- LMArena text
- 1,472
- LMArena coding
- 1,508
- Updated
- Oct 26, 2026