Articles
Technical Leadership: Stop Acting as the Proxy

TL;DR Help clarify the problem, then step out: connect the decision-maker with the affected person instead of carrying the decision back and forth.
One leadership pattern I have become more careful about is what happens when a problem moves beyond my decision authority. In technical and organizational work, this happens more often than it first appears. Someone raises an issue, I help clarify it, challenge some assumptions, gather context, and try to move the situation forward. At some point, however, the remaining question genuinely requires a decision I am not authorized to make.
Read more →My Local AI Setup, Six Months Later: 48 GB, Qwen3.8, and a Different Bottleneck

TL;DR Six months after the 16 GB setup: 48 GB, one default 27B model, Splash inference in LM Studio, and 64K context, because the constraint moved from fitting a model to keeping long agent sessions usable.
A few months ago, I wrote about running a useful local AI development setup on a MacBook Pro with 16 GB of unified memory. At the time, memory shaped almost every decision. I experimented with smaller models, limited context carefully, and looked for a combination that was capable enough for coding while still leaving room for my IDE, containers, browser, and the rest of my development environment.
Read more →Technical Leadership: Give Autonomy a Time Boundary

TL;DR Autonomy works when the team owns the approach and the leader makes the outcome, the fixed constraints, and the review point explicit.
I have found that giving a team room to decide can become surprisingly vague if the expected outcome and timing are left implicit.
Read more →My Local AI Coding Toolkit: How I Keep Agents Fast and Token-Efficient

TL;DR How I optimize the environment around AI coding agents to reduce token waste and keep sessions efficient.
AI coding agents have become part of my daily workflow. I use OpenCode and Claude Code for everything from exploring unfamiliar codebases and investigating bugs to implementing changes, reviewing code, and working through architectural questions.
Read more →ngrx-graph: Static Analysis and Graph Visualization for NgRx Applications

TL;DR ngrx-graph scans NgRx codebases via AST parsing, resolves aliases and nested actions, and outputs focused or project-wide action flow graphs in DOT/SVG. One command replaces hours of manual code tracing.
If you have ever traced an action through a sprawling NgRx codebase, wondering which effect listens to it, which reducer handles it, and whether some other effect silently dispatches another action in the chain, you know the pain. Manual code traversal works until it does not. One missed dispatch() call buried in a mergeMap. Your mental model breaks.
Read more →How I Configure Cloudflare for My Website

TL;DR A systematic review of every Cloudflare Free plan setting, what stays on, what gets disabled, and the principles behind each decision.
Open your Cloudflare dashboard today and you'll find dozens of features for improving performance, security, and reliability. Some are enabled by default, others are recommended, and new capabilities appear regularly as the platform evolves. With so many options available, I wanted to better understand how each setting contributed to my website.
Read more →How This Website Works: A Technical Look at the Stack

TL;DR A complete technical breakdown of how this site is built, from Bun + Astro content pipeline to Cloudflare deployment, minimal JavaScript, and performance optimizations.
In a companion article, I wrote about why I rebuilt this website with Astro and how that decision grew into a much larger project. That article was about the journey and the thinking. This one is about the outcome: how the website actually works, every layer from writing a post to it appearing in a reader's browser.
Read more →A Lunch Conversation Changed My Website

TL;DR How a casual lunch discussion led to rebuilding this site with Astro, modernizing the entire stack, and rethinking it as a personal digital workshop rather than a traditional portfolio.
Some of the most enjoyable projects I've worked on have started in surprisingly ordinary moments. A conversation introduces a new idea, someone shares an experience from their own work, or I come across a different way of approaching a familiar problem. The conversation eventually ends, everyone returns to their daily work, yet one small idea continues to occupy my thoughts. Over the following days that idea slowly grows into documentation, notes, experiments and, occasionally, an entirely new project. Looking back, I can trace many of my favorite learning experiences to moments exactly like these, and rebuilding my personal website became another one of those unexpected journeys.
Read more →Making Angular AI Work in Real Projects

TL;DR AI tools are great at generating code, but real Angular projects succeed only when you give them rich project context, architecture boundaries, and conventions.
AI can generate a component, write a test, or explain a compiler error. But in real applications, results depend more on project context than model capability. It doesn't understand your architecture, your conventions, or the boundaries you built over years.
Read more →Every Camera Tells a Story

TL;DR A personal reflection on how cameras shape our photography, creativity, and the stories we choose to tell through images.
Every now and then, I catch myself looking at new cameras. I open another review, compare another specification sheet, or watch yet another photographer explaining why this year's camera is better than last year's. It always begins with a simple curiosity, and before I realize it, hours have passed. Somewhere between comparison videos, photography forums, and used listings, I find myself imagining what it would be like to own a different camera.
Read more →Nine Years on GitHub Pages, Why I Finally Moved to Cloudflare

TL;DR Why I migrated this site from GitHub Pages to Cloudflare after nearly a decade, including the migration process, challenges, and discovered trade-offs.
For nearly nine years, my personal website lived on GitHub Pages. It was free, reliable, and required almost no maintenance, so why migrate? A recent move to Cloudflare Pages prompted this post, which covers the motivation behind the change, the migration process, the issues encountered, and the trade-offs discovered along the way.
Read more →Local AI on a MacBook Pro with 16 GB RAM: What Actually Works
TL;DR Practical guide to running local AI coding assistants on a 16GB M1 MacBook Pro, what works well, what doesn't, and the real setup trade-offs.
Running AI coding assistants locally sounds appealing: no API costs, your code stays on your machine, and you get a Claude Code-like experience for free. But getting it to actually work well on a 16 GB MacBook Pro M1 takes more trial and error than most guides admit.
Read more →Essential Development Tools: My Brewfile Setup
TL;DR My curated list of essential macOS development tools via Homebrew that significantly boost daily productivity and workflow enjoyment.
As a software engineer, our toolset shapes how we work and what we can accomplish. Over time, I've curated a collection of essential tools that boost my productivity and make development more enjoyable. Here's a breakdown of my Homebrew setup, featuring the tools I use daily.
Read more →Portfolio: a lightweight personal portfolio tracker
TL;DR This post explains the design and implementation of a simple browser based personal portfolio tracker built with React, TypeScript, and Vite, covering requirements, challenges, and solutions for state handling, caching, and charts.
This post explains the design and implementation of a small browser-first portfolio tracker. It focuses on requirements, the challenges encountered, and how the final solution addresses them, including code snippets that illustrate the state handling, caching, and chart interaction.
Read more →Mastering Git Commands: A Practical Guide
TL;DR A practical selection of essential Git commands that help developers track changes more effectively, collaborate smoothly, and manage project history with confidence.
Git is an indispensable tool for version control, enabling developers to track changes, collaborate effectively, and manage project history. While its capabilities are vast, a solid understanding of key commands can significantly streamline your workflow. This article delves into a selection of practical Git commands, explaining what they do, how to use them, and when they are most effective.
Read more →Angular - Content Projection
TL;DR Content projection in Angular enables flexible and reusable components by allowing you to insert content from parent components into child components.
Content projection is a feature in angular that supports inserting a component in another component. This changes the way an angular developer designs his application/library by implementing flexible and reusable components, a boundary I revisit when making Angular AI work in real projects.
Read more →Reactjs: Arrays in jsx
TL;DR Quick tip on using JavaScript array map to render dynamic lists of elements in JSX instead of hard coding repeated components for cleaner and more maintainable React code as shown in the Tic Tac Toe board example.
When I tried out Reactjs tutorial few months ago, I noticed that in the official starter code, they repeated same div elements in the render() method, just in case of change in the source, I will list it here:
Read more →Fetch using Gitlab API
TL;DR Python script that uses the GitLab API with a private token to automatically clone or fetch all your accessible repositories handling configuration via JSON and providing both argparse and config file versions for convenience.
Between gitlab repos that need daily tracking and frequent machine changes, the manual cloning and sync process became exhausting. An automation script was the obvious next step to offload the boring tasks.
Read more →PyConDe & PyData 2019
TL;DR Personal diary style recap of attending PyConDE and PyData 2019 in Berlin covering keynotes talks tutorials sprint days and personal highlights such as meeting core developers and contributing to Bokeh.
Fresh back from PyConDe & PyData-2019, this post shares and documents the experience. Think of it as a diary more than a blog, covering:
Read more →RxJS Series - Observables
TL;DR Introduction to RxJS Observables covering the core concepts of Observer Subscriber and how to create them from scratch or using handy static methods like of range interval timer from fromEvent and create with practical code examples.
RxJS (on Github) is a reactive programming library for Javascript, and in this series, I would like to expose my way of learning it with you.
Read more →Custom Selenium Webdrivers using Decorators
TL;DR Learn how to dynamically create custom Selenium WebDriver classes for different browser versions using Python decorators and class factories so you can easily run tests with multiple Firefox and Chrome binaries in parallel.
How to create custom selenium webdriver classes dynamically with a parametrized browser binary path?
Read more →Fedora23 Upgrade (unlabeled home)
TL;DR Quick fix for the SELinux labeling issue that occurs after upgrading to Fedora 23 or 24 where the home directory becomes unlabeled preventing user login simply run sudo restorecon -R /home to restore correct permissions.
When I tried to update from the fedora23 to fedora24, I faced the issue that the home directoy lost its labeling:
Read more →Build Vim from Source
TL;DR Step by step guide and bash script to build the latest Vim from source on Fedora with huge features enabled including Python3 Ruby Lua Perl support and GUI for full functionality.
Many times when I want to use vim which comes within the main repo of any Linux distro, I find that it is missing some kind of support, either python or client-server mode, or any other feature. And there for I have to build it manually from source and install it. I documented the resulting setup piece by piece in my vimrc adventure.
Read more →Lwa4p Robot Arm Setup
TL;DR Step by step guide with a bash script for setting up the Schunk LWA4P robot arm on ROS Indigo using an ESD CAN card including CAN interface configuration MoveIt integration and troubleshooting tips to get the arm initialized and moving.
Experiments with the powerball lightweight lwa4p robot arm from Schunk came with many difficulties getting it to move using moveit. This post shares that experience.
Read more →Adventure through my vimrc (nvimrc)
TL;DR A detailed walkthrough of useful configurations mappings and customizations in the authors vimrc init.vim file covering general settings plugins status line and productivity enhancing tricks for Vim and Neovim.
In this post I'm going to take you in an adventure in my previously vimrc and currently init.vim which I collected from using vim then neovim along the last few years. I will explain the feature or the function, then include the configurations or code that should be inserted in the vimrc (init.vim) file to activate that feature.
Read more →Opencv on Openshift
TL;DR This post provides a bash script and step by step instructions to successfully install OpenCV in a Python 2.7 cartridge on OpenShift Online while working around the strict 1GB quota limitation.
When I wanted to intall opencv on my python-2.7 openshift online cartridge I faced the problem of quota limitation to 1GB.
Read more →