Author: Ammar Najjar
22 posts
Blog Posts
Every Camera Tells a Story

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

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
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
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

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
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
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.
Read more →Reactjs: Arrays in jsx
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
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

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
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
How to create custom selenium webdriver classes dynamically with a parametrized browser binary path?
Read more →Fedora23 Upgrade (unlabeled home)
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
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.
Read more →Lwa4p Robot Arm Setup
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)
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
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 →
Books
Atomic Habits

In his book "Atomic Habits", James Clear outlines the principles of habit formation and behavior change. The author shares his personal journey of recovery from a severe injury, which led him to understand that significant progress stems from a series of small, consistent actions, rather than singular transformative events. Clear introduces the "Four Laws of Behavior Change": making habits obvious, attractive, easy, and satisfying. He emphasizes the importance of systems over goals, highlighting how environmental design, social influence, and the immediate gratification of rewards play crucial roles in establishing and maintaining habits, ultimately arguing that true identity change is the North Star of habit transformation.
Read more →
