Get ruthless about Swift concurrency
Actors and cancellation are easy to describe until one task outlives the screen.
First step: Build a small feed with cancellation, retries and tests.
Related reference →Personal notebook / Curiosities
Interview guideI keep a list of interesting problems and subjects because good ideas rarely show up at a convenient time. It ranges from mobile security and hardware to cooking, travel and getting outdoors. This is the personal side of the site, separate from my project portfolio.
The projects section covers systems I built; this collection is simply a set of topics that interest me. These are interests and possible future projects, not completed work or a record of my work history.
A small implementation or a concrete failure case usually tells me more than a broad claim about how a system should work.
I write about implementation decisions and mistakes, not just the polished result. Sometimes the bug is the most useful part.
Hiking, cameras, recipes, dogs and exploring new places. A laptop is nice, but sometimes it can stay home.
Actors and cancellation are easy to describe until one task outlives the screen.
First step: Build a small feed with cancellation, retries and tests.
Related reference →I want measurements, not a hunch about why scrolling stutters.
First step: Capture a trace, fix one bottleneck and compare before/after.
Related reference →Device signals are useful; they do not magically authorize an API request.
First step: Map replay protection, challenges and server verification.
Related reference →Authentication should survive cancellation, migration and weird device states.
First step: Prototype enrollment, sign-in and recovery without hiding edge cases.
Related reference →A network request is not a storage strategy.
First step: Write a sync contract with conflict resolution and explicit retries.
On-device inference is interesting when the memory and battery numbers behave.
First step: Measure cold start, peak memory and latency on actual hardware.
Related reference →State ownership gets interesting as soon as the process is killed.
First step: Build a screen with process recreation and UI tests.
Related reference →Cancellation and backpressure tend to show up at inconvenient times.
First step: Reproduce three race conditions and write deterministic tests.
Related reference →Attestation is one input to risk, not a permission slip.
First step: Build a verification decision table for backend outcomes.
Related reference →A smooth demo and a smooth cold start are two different things.
First step: Run baseline profiles and instrument a representative device.
Related reference →I want to know what happens after a week offline, not just a minute.
First step: Add a persistent queue, sync ordering and conflict tests.
Keys, backups, rooted devices and token lifetimes are part of the design.
First step: Write a small Keystore threat model with negative tests.
Related reference →Duplicate requests happen. A duplicate charge should not.
First step: Test simultaneous retries, timeouts and ambiguous results.
Related reference →Transaction isolation is easier to remember once it breaks a toy system.
First step: Write concurrent sessions showing phantom reads and write skew.
Related reference →I want an answer to 'where did the request go?' without guessing.
First step: Trace one request through API, queue, and worker, including failures.
Related reference →At-least-once delivery sounds fine until the consumer forgets idempotency.
First step: Implement backoff, deduplication and a dead-letter queue.
Readiness, liveness and resource limits deserve a hands-on rehearsal.
First step: Kill a dependency and watch whether rollout and recovery behave.
Related reference →A backend bug can live three layers below the API handler.
First step: Capture a trace and explain each hop from client to server.
Execution chain, persistence, network behavior, mitigations. Keep it reproducible.
First step: Use a safely isolated sample or public analysis and cite the evidence.
Related reference →Android has enough IPC, permissions and background behavior to keep me busy.
First step: Map components, communications and data flow from public reports.
Related reference →I want to get faster at understanding a program without trusting its labels.
First step: Work through a legal challenge with Ghidra and LLDB.
Object IDs should never be the authorization policy.
First step: Write a vulnerable endpoint, fix it and show regression tests.
Related reference →It's worth knowing exactly what fails when freshness or binding is missing.
First step: Model nonces, replay windows and key rotation in a toy protocol.
Related reference →Designing tools is only half the story; secure operation matters too.
First step: Finish my current book, then summarize the engineering lessons.
Related reference →Signed packages and dependency graphs aren't the whole trust story.
First step: Diagram one incident from source to artifact to downstream impact.
Related reference →If a prompt change helps two examples and breaks eight, I'd like to know.
First step: Add golden cases, refusal/permission checks and regression history.
Related reference →The model can ask. The server still has to say yes or no.
First step: Exercise cross-tenant, scope and approval failures.
Related reference →Retrieval quality is a system problem, not just an embedding problem.
First step: Compare chunking, recall and citation correctness on a test corpus.
A model should beat a simple baseline before it gets fancy.
First step: Implement linear regression, classification and evaluation from scratch.
Related reference →P50 without P99 and a realistic traffic mix is an optimistic story.
First step: Benchmark batching, limits and failure behavior with synthetic requests.
Privacy, speed, power and model distribution all pull in different directions.
First step: Run the same small task on both platforms and log constraints.
Prompt injection, exfiltration and overprivileged connectors are not theoretical.
First step: Draw trust boundaries and test malicious retrieved text.
Software behaves differently when a motor and battery are involved.
First step: Log sensor input, control decisions and failure states.
I want to get closer to the electronics instead of stopping at the API.
First step: Build a sensor board, simulate it and test power draw.
Pairing, bonding and stale connections are great bug habitats.
First step: Instrument a lab device pair and record a reproducible trace.
Power, connectivity and backups matter when the Wi-Fi disappears.
First step: Run an offline workday drill and note what fails.
Reproducing crashes and network failures is easier on my own equipment.
First step: Add isolated services, monitored power and a recovery plan.
A useful case study explains the decision and the failure, not just the shiny result.
First step: Document one real bug with evidence, tradeoffs and tests.
Related reference →A README is a user interface too.
First step: Add examples, reproducible tests and a concise threat model.
Related reference →Teaching something is a great way to discover what I don't understand yet.
First step: Take one small concept and build a runnable lab.
Related reference →Real stories are better than memorized interview poetry.
First step: Write four accurate project stories with the evidence and tradeoffs.
Related reference →Shipping is fun. Finding a problem worth paying for is a separate skill.
First step: Validate demand before designing the dashboard.
Good technical feedback can save someone a week of debugging.
First step: Review a small PR or publish a troubleshooting guide.
I'd rather make five dishes really well than bookmark another fifty.
First step: Keep notes, adjust one variable and cook them again.
Related reference →Food, transit, neighborhoods and a camera: pretty good research tools.
First step: Build a slow itinerary instead of a checklist sprint.
A bit of nature between debugging sessions sounds healthy.
First step: Pick one trail-focused trip and plan around the weather.
My laptop doesn't need to come on every walk.
First step: Choose a local trail and keep a small photo log.
A donation, volunteering, transport or a small bit of useful software.
First step: Find a local rescue with a specific, real need.
I want to remember places instead of only my camera roll's file count.
First step: Publish a small set with locations and context.
Related reference →Walking around a place teaches you things a search result won't.
First step: Pick a neighborhood, leave space in the itinerary and get lost responsibly.
Finishing a book is nice; remembering why it mattered is better.
First step: Add a sentence of my own after each finished book.
Related reference →