Blog
Documenting my journey through software engineering, embedded systems, and continuous learning. Each post explores practical challenges, design decisions, and lessons learned from building real systems.
When 'Close to the Hardware' Isn't Close Enough
- From a Rust HAL blinky to bare-metal C: writing the same LED without any framework
- Vector table, linker script, startup code: tracing the boot sequence by hand
- Why bit 0 of the reset vector matters and how `.data` makes it from flash into RAM
- The goal: see what 'close to the hardware' actually means once MCAL and AUTOSAR are out of the way
Read article →
From Read-It-Later to Zettelkasten: Automating My Reading Workflow with n8n
- From neglected Raspberry Pi to a VPS setup that automates my reading workflow
- n8n connects Readeck, Claude, and Forgejo into a Zettelkasten pipeline
- Only highlights and notes go to the LLM, not the full article
- A PR-based review flow: the generated note lands in my inbox every morning
Read article →
Beyond Busyness: Why Output Is Not Value
- Newport, Kim, Farley, Martin: different worlds, same conclusion
- Greenfield or legacy: flow, trust, and small batches create value in both
- Regulatory constraints are rarely the real barrier, organizational belief is
- The job is not to produce code, it is to reduce complexity and create value
Read article →
When 'It Works' Is No Longer Enough
- From working prototype to production-ready: refactoring a physics simulation
- Factory, Strategy, Builder patterns eliminate code duplication and silent failures
- std::variant over inheritance: compile-time safety instead of runtime crashes
- The goal: move error detection from runtime checks to compiler guarantees
Read article →
From Defensive Programming to Type-Driven Design
- Defensive programming: catching errors at runtime through discipline and process
- Type-driven design: making invalid states impossible at compile time
- In C: half the code is error handling. In Rust: types prevent the errors
- The goal: move safety from manual checks to compiler guarantees
Read article →
Why I Do Not Like Linux Distro Hopping but Keep Doing It Anyway
- From Xubuntu to EndeavourOS to Mint to Arch, each switch sharpens understanding
- Simplicity is not a limitation but a deliberate choice
- Easier to build aligned systems from scratch than reshape misaligned ones
- The real goal: a system that enables focus instead of distracting from it
Read article →
Dr. Strangelove or How I Learned to Stop Worrying and Love Testing
- TDD is not a testing technique but a design method
- Test behavior, not implementation: the key insight that changed everything
- Verification vs. Validation: building the product right vs. building the right product
- Tests as a safety net: refactor with confidence, not fear
Read article →
From C to Rust - Evolving Programming Languages in Automotive Development
- C remains essential for hardware-near programming where every cycle matters
- C++ bridges low-level efficiency with modern software design patterns
- Rust offers memory and thread safety at compile time without runtime cost
- The future is hybrid: choosing the right language for the right layer
Read article →