Watch at EaseStories. Answers. Perspective.

WATCH AT EASE · PRACTICAL GUIDE

Tech

Answers to everyday questions, checked for current relevance.

1–24 / 343

Original editorial diagram separating Immich server playback, original resource inspection and Apple Photos Live playback.
Original editorial illustration: each check answers a different question; a static save is not the final acceptance test. Watch at Ease
Tech · PRACTICAL GUIDE

Immich Live Photo download gives a still: check the pair before changing metadata

Remote playback, matching file identifiers and a saved image prove different things. Check the original pair and the restored Photos item before treating a still-only download as a repaired backup.

Original three-column matrix comparing default delete-on-close, Python 3.12 context-exit cleanup and manual cleanup on Windows.
Original technical illustration: choose the deletion boundary before handing a path to another opener. Watch at Ease
Technology · PRACTICAL GUIDE

Python NamedTemporaryFile on Windows: reopen it and still clean it up

The first PermissionError and the later unlink failure have different causes. Choose where deletion happens, then close every secondary handle before that boundary.

Original test matrix comparing an ordinary London time, both repeated-hour occurrences and a missing time after a UTC round trip.
Original technical illustration: both fold occurrences exist, while the spring gap fails the wall-clock round-trip check. Watch at Ease
Technology · PRACTICAL GUIDE

Python ZoneInfo: check missing times without rejecting a valid DST fold

A direct equality check against UTC can reject both occurrences of a real repeated hour. Validate the wall-clock round trip first, then resolve ambiguity and choose an instant key.

Diagnostic flow from the main process through a temp directory and AF_UNIX socket to the fork server.
Original editorial illustration: locate the pre-worker boundary before changing multiprocessing semantics. Watch at Ease
Technology · PRACTICAL GUIDE

Python 3.14 process pools fail in a sandbox? Test forkserver's Unix socket first

A Python 3.14 pool can fail before it serializes any task. Separate an unwritable temp directory from AF_UNIX policy denial, then choose spawn, one worker or a justified context.

Finite chain, actual back-reference and shared acyclic child compared
Original explanatory illustration: object topology, rather than a recursive annotation alone, determines the tested outcome. Watch at Ease
Technology · PRACTICAL GUIDE

dataclasses.asdict raises RecursionError? Choose export fields before traversal

A field filter can run too late. Distinguish a recursive type, a real object cycle and a shared child before choosing a JSON representation.

Three tested connection states with a true transaction flag and different backup outcomes
Original explanatory illustration: the same flag can accompany retrying, completion or refusal. Watch at Ease
Technology · PRACTICAL GUIDE

Python SQLite backup hangs? Check both connections before committing

Separate a pending source write, an active destination and external contention; a transaction flag alone cannot identify the repair.

Original flow diagram that binds a local partial to a strong ETag, appends only a matching 206 response and replaces from byte zero on a full 200 response.
Original technical illustration: response status determines append versus fresh replacement. Watch at Ease
Technology · PRACTICAL GUIDE

curl resume corrupted the file? Bind every range to a strong ETag

A byte offset is not a representation identity. Use Range plus If-Range, append only an exact 206 response, restart cleanly on 200, and verify before atomic promotion.

Original decision flow that inventories a missing Git worktree, preserves its state, then separates moved, temporarily offline and truly deleted paths.
Original technical illustration: classify the missing path before repair, lock or prune. Watch at Ease
Technology · PRACTICAL GUIDE

Git worktree path missing? Repair or lock it before you prune

A missing path can mean moved, temporarily offline or truly deleted. Preserve the per-worktree HEAD and index, classify the state, then repair, lock or prune with an acceptance check.

Original technical diagram showing creation, read-only reopen, SQLite checks, application checks, promotion and later rotation.
Original technical illustration: a backup remains a candidate until the exact file passes structural, foreign-key and application checks. Watch at Ease
Technology · PRACTICAL GUIDE

SQLite backup completed? Reopen and verify the snapshot before rotation

A completed backup call proves that bytes were copied, not that the candidate satisfies your restore contract. Reopen the exact file, run SQLite and application checks, promote it safely, and only then rotate the previous known-good snapshot.

Original explanatory illustration of three post-eof calls with zero new output and unused_data growing from5 to20 bytes.
Original explanatory illustration: actual CPython3.12.14/zlib1.3.2 observations from three bounded calls; no infinite loop was run. Watch at Ease
Technology · PRACTICAL GUIDE

zlib loop keeps running at eof? Separate retained input from the next gzip member

Twenty-eight local checks distinguish post-end tail replay, first-member-only output and a truncated second member that still emits every expected plaintext byte.

Original explanatory illustration showing cached deep True becoming False after clear_cache while an old dircmp list remains empty.
Original explanatory illustration: actual CPython 3.12.14 observations; clearing the module cache does not refresh an old computed list. Watch at Ease
Technology · PRACTICAL GUIDE

dircmp.diff_files stays empty? Refresh both result stores and check every common file

A 28-check local experiment shows why clear_cache(), a fresh default dircmp and a deep recheck of diff_files can each leave different bytes undetected.

Original explanatory illustration comparing an existing ZIP alias, is_file=True, is_symlink=False and stored Unix link-type bits.
Original explanatory illustration: actual CPython 3.12.14 results; a False predicate coexists with stored Unix link metadata. Watch at Ease
Technology · PRACTICAL GUIDE

zipfile.Path.is_symlink() always False? Check the runtime and stored member type

Twenty local controls separate a Python 3.12 predicate stub, Unix-marked ZIP metadata, CRC integrity and what the standard extractor actually creates.

Original diagram showing syntax validation, byte decoding and canonical Base64 validation as separate gates.
Original illustration: validate the alphabet, decode the bytes, then enforce one canonical spelling. Watch at Ease
Technology · PRACTICAL GUIDE

Python validate=True accepted two Base64 spellings? Enforce canonical padding bits

Python’s strict alphabet check and RFC 4648 canonical encoding are different guarantees. Use canonical=True on Python 3.15+, or decode and re-encode exactly on older releases.

Original explanatory diagram of default export loss, the CPython3.12 NOTNULL reader boundary and the single-null-row writer error.
Original explanatory illustration: actual CPython3.12.14 controls; keep raw fields and test writer and reader separately. Watch at Ease
Technology · PRACTICAL GUIDE

Python CSV loses None versus empty strings? Check the runtime and wire contract

A quoting constant can exist before its reader behavior works. Twenty local controls distinguish recoverable parsing trouble, irreversible export loss and a narrow text-or-null fallback.

Original technical illustration comparing Zg== with Zh== for f and Zm8= with Zm9= for fo, including the final six-bit groups on the tested CPython 3.12.14 runtime.
Original technical illustration: strict decoding accepted both spellings in each pair; re-encoding produced only Zg== and Zm8=. These are local CPython 3.12.14 results. Watch at Ease
Technology · PRACTICAL GUIDE

Python Base64 validate=True still accepts aliases? Check pad bits and runtime

Strict decoding and a single canonical spelling are different checks. Seventeen local controls separate pad bits, runtime options, size limits and the meaning of decoded bytes.

Diagram showing put increasing a Python queue unfinished-task ledger, task_done decreasing it, and join waiting for zero
Illustration: queue emptiness and task completion are different states; join follows the unfinished-task ledger. Watch at Ease
Technology · PRACTICAL GUIDE

Python queue.join() hangs? Audit unfinished tasks and worker liveness

Separate an empty container from the unfinished-task ledger, surface dead consumers, count sentinels, and choose graceful or immediate shutdown without faking completion.

Original diagram comparing six active borrowed-buffer cases and two independent-copy cases on CPython3.12.14 and NumPy2.3.5.
Original technical illustration: six borrowed cases blocked close until cleanup; two independent copies retained values after closure. Local CPython3.12.14/NumPy2.3.5 only. Watch at Ease
Technology · PRACTICAL GUIDE

mmap cannot close exported pointers? Trace every borrower before changing the array

A released parent or deleted array name can leave a slice or alias alive. Prove whether the result borrows the mapping or owns an independent copy.