<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ammar Najjar - Blog</title><description>Personal blog about software engineering, AI, and more.</description><link>https://ammar-najjar.com/</link><item><title>Every Camera Tells a Story</title><link>https://ammar-najjar.com/blog/every-camera-tells-a-story/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/every-camera-tells-a-story/</guid><description>A reflection on the cameras I have owned, what each one taught me about photography, and how the tool shapes the story.</description><pubDate>Wed, 08 Jul 2026 08:00:00 GMT</pubDate></item><item><title>Nine Years on GitHub Pages, Why I Finally Moved to Cloudflare</title><link>https://ammar-najjar.com/blog/github-pages-to-cloudflare/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/github-pages-to-cloudflare/</guid><description>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.</description><pubDate>Fri, 03 Jul 2026 08:00:00 GMT</pubDate></item><item><title>Local AI on a MacBook Pro with 16 GB RAM: What Actually Works</title><link>https://ammar-najjar.com/blog/local-ai-setup/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/local-ai-setup/</guid><description>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.</description><pubDate>Sun, 14 Jun 2026 10:00:00 GMT</pubDate></item><item><title>Essential Development Tools: My Brewfile Setup</title><link>https://ammar-najjar.com/blog/essential-dev-tools/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/essential-dev-tools/</guid><description>A software engineer&apos;s curated Brewfile: the macOS development tools worth installing, from terminal utilities to editors, explained with daily-use context.</description><pubDate>Mon, 23 Feb 2026 09:00:00 GMT</pubDate></item><item><title>Portfolio: a lightweight personal portfolio tracker</title><link>https://ammar-najjar.com/blog/portfolio/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/portfolio/</guid><description>Design and implementation of a browser-first investment portfolio tracker built with React, TypeScript, and Vite: state handling, caching, and chart interaction explained.</description><pubDate>Fri, 12 Dec 2025 11:10:00 GMT</pubDate></item><item><title>Mastering Git Commands: A Practical Guide</title><link>https://ammar-najjar.com/blog/mastering-git/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/mastering-git/</guid><description>A practical guide to essential Git commands: configuration, branching, merging, rebasing, stashing, and more, with examples for everyday developer workflows.</description><pubDate>Tue, 08 Jul 2025 18:05:50 GMT</pubDate></item><item><title>Angular - Content Projection</title><link>https://ammar-najjar.com/blog/angular-content-projection/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/angular-content-projection/</guid><description>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.</description><pubDate>Sun, 20 Jun 2021 09:05:50 GMT</pubDate></item><item><title>Reactjs: Arrays in jsx</title><link>https://ammar-najjar.com/blog/arrays-in-jsx/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/arrays-in-jsx/</guid><description>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.</description><pubDate>Sun, 24 Nov 2019 18:03:52 GMT</pubDate></item><item><title>Fetch using Gitlab API</title><link>https://ammar-najjar.com/blog/fetch-with-gitlab-api/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/fetch-with-gitlab-api/</guid><description>How to use the GitLab API with Python to fetch repository data, automate git operations, and integrate GitLab into your development workflow.</description><pubDate>Tue, 19 Feb 2019 13:34:35 GMT</pubDate></item><item><title>PyConDe &amp; PyData 2019</title><link>https://ammar-najjar.com/blog/pyconde-pydata-2019/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/pyconde-pydata-2019/</guid><description>Personal notes from attending PyConDe and PyData Berlin 2019: talks, workshops, and highlights from the Python and data science community conference.</description><pubDate>Tue, 01 Jan 2019 00:00:00 GMT</pubDate></item><item><title>RxJS Series - Observables</title><link>https://ammar-najjar.com/blog/rxjs-observables/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/rxjs-observables/</guid><description>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.</description><pubDate>Tue, 01 Jan 2019 00:00:00 GMT</pubDate></item><item><title>Custom Selenium Webdrivers using Decorators</title><link>https://ammar-najjar.com/blog/custom-selenium-webdrivers/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/custom-selenium-webdrivers/</guid><description>How to dynamically create custom Selenium WebDriver classes with a parametrized browser binary path using Python decorators.</description><pubDate>Sun, 09 Apr 2017 05:33:18 GMT</pubDate></item><item><title>Fedora23 Upgrade (unlabeled home)</title><link>https://ammar-najjar.com/blog/fedora23-upgrade/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/fedora23-upgrade/</guid><description>How to fix the unlabeled home directory issue encountered when upgrading from Fedora 23 to Fedora 24, with the exact SELinux relabeling steps.</description><pubDate>Sun, 03 Jul 2016 15:07:02 GMT</pubDate></item><item><title>Build Vim from Source</title><link>https://ammar-najjar.com/blog/build-vim-from-source/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/build-vim-from-source/</guid><description>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.</description><pubDate>Thu, 23 Jun 2016 16:22:02 GMT</pubDate></item><item><title>Lwa4p Robot Arm Setup</title><link>https://ammar-najjar.com/blog/lwa4p-robot/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/lwa4p-robot/</guid><description>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.</description><pubDate>Wed, 22 Jun 2016 12:43:32 GMT</pubDate></item><item><title>Adventure through my vimrc (nvimrc)</title><link>https://ammar-najjar.com/blog/vimrc-adventure/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/vimrc-adventure/</guid><description>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.</description><pubDate>Sun, 19 Jun 2016 06:38:02 GMT</pubDate></item><item><title>Opencv on Openshift</title><link>https://ammar-najjar.com/blog/opencv-on-openshift/</link><guid isPermaLink="true">https://ammar-najjar.com/blog/opencv-on-openshift/</guid><description>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.</description><pubDate>Fri, 17 Jun 2016 16:02:02 GMT</pubDate></item></channel></rss>