ngrx-graph: Static Analysis and Graph Visualization for NgRx Applications
A CLI that parses your Angular NgRx source code and generates DOT/SVG graphs revealing how Actions, Effects, and Reducers connect, including aliases and nested dispatches.
Personal blog about software engineering, AI, and more.
A CLI that parses your Angular NgRx source code and generates DOT/SVG graphs revealing how Actions, Effects, and Reducers connect, including aliases and nested dispatches.
After years of accumulating Cloudflare settings, I reviewed every option on the Free plan. Here's what I kept, what I disabled, and why.
A technical walkthrough of every layer that powers this website: Astro for static generation, Bun for tooling, Cloudflare Pages for delivery, and all the smaller decisions in between.
A lunch conversation about Astro sparked a complete website rebuild: new framework, new workflow, new languages, and a more personal vision for what a website can be.
How I'm integrating Angular's new AI toolbox into a real enterprise Angular workflow.
A reflection on the cameras I have owned, what each one taught me about photography, and how the tool shapes the story.
After nine years hosting my personal site on GitHub Pages, I moved to Cloudflare Pages. This post explains why: not because GitHub Pages stopped working, but because my goals changed.
How to run AI coding assistants locally on a 16 GB MacBook Pro M1: what models fit in memory, which tools actually work, and what to skip.
A software engineer's curated Brewfile: the macOS development tools worth installing, from terminal utilities to editors, explained with daily-use context.
Design and implementation of a browser-first investment portfolio tracker built with React, TypeScript, and Vite: state handling, caching, and chart interaction explained.
A practical guide to essential Git commands: configuration, branching, merging, rebasing, stashing, and more, with examples for everyday developer workflows.
A guide to Angular content projection: the different types (single-slot, multi-slot, conditional), when to use each, and how to build flexible, reusable components.
How to correctly render arrays in React JSX: why repeating elements is a problem, and how to use map() with keys to build lists cleanly.
How to use the GitLab API with Python to fetch repository data, automate git operations, and integrate GitLab into your development workflow.
Personal notes from attending PyConDe and PyData Berlin 2019: talks, workshops, and highlights from the Python and data science community conference.
An introduction to RxJS Observables: what they are, how they differ from Promises, and how to use them for reactive programming in JavaScript and Angular.
How to dynamically create custom Selenium WebDriver classes with a parametrized browser binary path using Python decorators.
How to fix the unlabeled home directory issue encountered when upgrading from Fedora 23 to Fedora 24, with the exact SELinux relabeling steps.
Step-by-step guide to compiling Vim from source on Linux to enable Python support, client-server mode, and other features missing from distribution packages.
How to set up the Schunk Powerball LWA4P robot arm with MoveIt and ROS: the steps, pitfalls, and a complete install script from real lab experiments.
A guided tour through a Vim and Neovim configuration: plugins, key mappings, and settings accumulated over years of daily use, with explanations for each choice.
How to install OpenCV on a Python 2.7 OpenShift cartridge while staying within the 1 GB quota limit, with a complete bash script for the setup.