Clivern
Personal site of Ahmed (Clivern): software engineer and occasional writer. Tutorials and notes on backend systems, cloud native infrastructure, observability, and AI agents.
This file is a curated map for AI agents. Prefer the markdown sources on GitHub over HTML when you need the full text of a post or project page. For questions about Ahmed’s background, jobs, or skills, read the resume first. Site: https://clivern.com — Contact: hello@clivern.com
Pages
- Resume: Plain-text resume for Ahmed Fathy — experience, projects, skills, education
- Home: Latest writing and site entry point
- About: Background, interests, and how to get in touch
- Projects: Open source projects
- Sponsor: Ways to support the writing and projects
- GitHub: Source code and open source work
- LinkedIn: Professional profile
- Tech Radar: Technologies in use and under evaluation.
Projects
- Gauntlet: Guides, Articles, Podcasts, Videos and Notes to Build Reliable Large-Scale Distributed Systems. (markdown)
- Cattle: A Platform to Run and Share Code. It Supports PHP, Python, Ruby, Elixir, Java, Go, Rust, C and C++ (markdown)
- Cygnus-X1: The immensity of the observable universe is difficult to grasp (markdown)
- Goenv: Manage Your Applications Go Environment (markdown)
- Rhino: HTTP Mocking & Debugging Service. (markdown)
- OpsWork: OpsWork Swiss Knife! (markdown)
- Beaver: A Real Time Messaging System. (markdown)
- Beetle: A Kubernetes multi-cluster deployment automation service. (markdown)
- Chaos: A Server Chaos Maker, Set up in Minutes. (markdown)
- Helium: A Fast, Secure and Reliable Newsletter System, Set up in Minutes. (markdown)
- Peanut: Deploy Databases and Services Easily for Development and Testing Pipelines. (markdown)
- Poodle: A fast and beautiful command line tool to build API requests. (markdown)
- Walrus: A Fast, Secure and Reliable System Backup, Set up in Minutes. (markdown)
- Tyran: A Vector Search as a Service, Set up in Minutes. (markdown)
- Lynx: A Fast, Secure and Reliable Terraform Backend, Set up in Minutes. (markdown)
- Gulper: A Command Line Tool to Backup and Restore SQLite, MySQL and PostgreSQL. (markdown)
- Meez: AI Assistant and Copilot SDK for SaaS Applications. (markdown)
- Oak: Elixir Prometheus Exporter (markdown)
Posts
- Building AI Coding Agent from Scratch: I wanted to understand how a coding agent actually works so i built a small one in Python without frameworks. Each piece is small enough … (markdown)
- Understanding Embeddings: An embedding is just a way to turn text into a list of numbers. Same idea as coordinates on a map. sentences that mean similar things end… (markdown)
- Understanding Elixir Supervisor: A Supervisor is a process that supervises other processes (child processes). Supervisors are used to build a hierarchical process structu… (markdown)
- Understanding Elixir GenServer: A GenServer is a process like any other Elixir process and it can be used to store state, execute code asynchronously and so on. Think of… (markdown)
- Collecting Phoenix’s Metrics with Prometheus: This tutorial walks you through integrating Oak with your Phoenix application step by step. Oak is a high-performance metrics collection … (markdown)
- Understanding Tool Calling with LLMs: Tool calling (also known as function calling) is a powerful feature in modern Large Language Models that enables them to interact with ex… (markdown)
- Building a Secure MCP Server for Weather: Learn how to build a secure Model Context Protocol (MCP) server for weather data with authentication, geocoding, and production-ready dep… (markdown)
- Intention Based Routing in Langgraph: Intention-based routing in langgraph involves using conditional logic to direct the flow within the graph based on user intention. (markdown)
- Langgraph In Action: LangGraph library enables agent orchestration — offering customizable architectures, long-term memory, and human-in-the-loop to reliably … (markdown)
- Memory Safety in Rust: Learn how Rust achieves memory safety without runtime overhead, preventing crashes, data corruption, and security vulnerabilities through… (markdown)
- Building a Neovim Plugin: Creating Neovim plugins with Lua can significantly enhance your development workflow. This guide will walk you through building a simple … (markdown)
- Building a Human in the Loop Active Learning Loop: Active learning picks the examples that teach a model the most. Put a human in that loop and you spend labels where they count, not on ea… (markdown)
- Running Llama-3.1-8B Locally With vLLM: In this guide, I’ll show you how to run Llama-3.1 8B locally on a Mac using vLLM. This is just for testing, not for a production setup. (markdown)
- Tools Calling with Langchain: When constructing a langchain agent, you can provide tools to allow the agent to access up-to-date information and tailor its answers bas… (markdown)
- Learning Lua for Neovim Part 1: Lua’s syntax is relatively straightforward that why it has become the preferred language for Neovim configuration and plugin development…. (markdown)
- Load testing with k6: A while ago, I came across this a nice load testing tool called k6. It’s an open-source project developed by Grafana Labs that lets devel… (markdown)
- Understanding Distributed Tracing: Distributed Tracing is a technique to keep track of requests as they flow from the frontend layers through a complex distributed backend … (markdown)
- Text Chunking Techniques With Langchain Part 1: In this article we explain different ways to split a long document into smaller chunks that can fit into your model’s context window. Lan… (markdown)
- Building My Own RAG With OpenAI, Qdrant and LangChain: RAG stands for Retrieval Augmented Generation. It enhances the large language models (LLMs) by integrating them with external data source… (markdown)
- Understanding Prometheus Metric Types: Here is the four metrics supported by Prometheus, along with their use cases and functions that can be used to query these metric types. (markdown)
- Securing Prometheus Metrics in Echo Golang Framework: Echo golang framework supports Prometheus Metrics middleware, but the middleware itself doesn’t support authentication. We can use the ba… (markdown)
- Early Returns in Elixir: Early returns is often employed to exit a function as soon as an exceptional or negative condition is met. It won’t take much time when l… (markdown)
- Finally Moved Clivern from WordPress to Jekyll: Today I just finished migrating my personal website from WordPress to Jekyll after running it for over 10 years (since 2010). It was a lo… (markdown)
- Learning Python Data Structures: Python ships with an extensive set of data structures in its standard library. I will cover most of them in this guide. (markdown)
- Supervised Learning With scikit-learn: Supervised learning with scikit-learn is a popular approach for building predictive models based on labeled data. It involves splitting t… (markdown)
Optional
Older posts. Skip these unless you need historical context.
- Getting Started With Ruby: Ruby is a language of careful balance. Its creator, Yukihiro “Matz” Matsumoto, blended parts of his favorite language… (markdown)
- Strangler Fig Pattern Explained: Strangler Figs is a nightmare that lives on other tropical trees, stealing their soil nutrients, water, and even sunl… (markdown)
- How to Connect Arduino With a Raspberry PI over a Serial Port: In this post, You will understand how to collect values from an Arduino with a connected Raspberry PI over a serial p… (markdown)
- How to Setup a HA Cassandra Cluster: Apache Cassandra is a NoSQL database with flexible deployment options that’s highly performant (especially for writes… (markdown)
- Apache Cassandra for Developers Part 2: In Cassandra for Developers Part 1, I explained how to run cassandra cluster with docker, replication and consistency… (markdown)
- Working with Nginx Ingress Controller: A Kubernetes Ingress is a robust way to expose your services outside the cluster. It lets you consolidate your routin… (markdown)
- Separate Test Cases in Golang With Build Tags: A build tag or a build constraint as described in the build package documentation, is a line comment that begins // +… (markdown)
- Kubernetes Services in a Nutshell: Service is a resource you create to make a single, constant point of entry to a group of pods providing the same serv… (markdown)
- Apache Cassandra for Developers Part 1: Apache Cassandra is a free and open-source, distributed, NoSQL database management system designed to handle large am… (markdown)
- Adding a Unique Request ID to Each Request in Django: You can do that in Django using a middleware. The middleware needs to generate a unique request id (e.g. using UUID) … (markdown)
- Kubernetes Deployment in a Nutshell: Deployment is a higher-level resource meant for deploying applications and updating them declaratively, instead of do… (markdown)
- Concurrency in Elixir: Concurrency is a fundamental concept in Elixir, a functional programming language built on the Erlang virtual machine… (markdown)
- Installing Nginx, MySQL, PHP on Ubuntu 22.04: In this guide you will learn how to install Nginx, MySQL 8.0 and PHP 8.1 and PHP-FPM on Ubuntu 22.04. (markdown)
- A Deep Dive into Metrics Based Alerting With Elasticsearch: Elasticsearch is an open-source, distributed search and analytics engine based on the Lucene search engine library. I… (markdown)
- Leader Election with Consul and Golang: Leader election is the process of designating a single node as the organizer of some task distributed among several n… (markdown)
- Introducing Hippo A Golang Microservices Toolkit: It all began when I started to build some web services in golang. and everytime I have to create the whole architectu… (markdown)
- Leveraging Consul’s DNS Interface: Consul DNS interface allows applications to make use of service discovery without any integration with Consul. For ex… (markdown)
- Django Custom Month and Year Lookup: Everyone want to keep Django timezone support but sometimes you need to keep your SQL queries a way from timezone con… (markdown)
- Django Custom Lookups: By default Django has a date lookup that support timezones. It actually will wrap your field with CONVERT_TZ in case … (markdown)
- Building a Service Mesh with Consul: Load balancers aren’t efficient in a dynamic environment where we scale services up or down. Consul uses a registry t… (markdown)
- Getting Started With Consul Service Discovery Tool: Consul is a tool for discovering and configuring services in your infrastructure. It provides several key features li… (markdown)
- Docker in a Nutshell: Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in pack… (markdown)
- How to Create a Facebook Messenger Bot With Java: Today I’ll show you how to build your own Facebook Messenger Chat Bot in Java. We’ll use Spark Web Framework, Racter … (markdown)
- How To Set Up MySQL Master-Master Database Replication: One of the most difficult tasks for software engineers is scaling out the databases incase of large traffic applicati… (markdown)
- Build Realtime Apps With Redis PubSub: Last week I worked with Pusher. Pusher is really amazing product to build scalable realtime apps. Also there is slang… (markdown)
- How To Install LAMP Stack on Ubuntu: LAMP stack is a group of open source software and it stands for Linux, Apache, MySQL, and PHP. To install them Just r… (markdown)
- How to Install Apache Tomcat 8 on Ubuntu 16.04: Tomcat is an open source web server used to serve Java Web Applications and provides a Java HTTP web server environme… (markdown)
- Boost Youtube Videos Load Time In WordPress: Although it easy to embed youtube videos but you will be surprised of the increase in loading time of your webpage. (markdown)
- My World Feels Different Now!: My heart is shattered. He was taken from us too soon in a car accident. He was my best friend and the most loving bro… (markdown)
- Custom Queries with WordPress WP_Query: WP_Query is the heart of WordPress. It gives you a lot of control over the website content as well as holding importa… (markdown)
- How to Secure WordPress Plugins: Securing your wordpress plugin isn’t a difficult task or cumbersome because wordpress implements several tools to mak… (markdown)
- Working With WordPress wpdb Object: WordPress offers an object that can be used to access data form default tables and custom tables. The $wpdb object co… (markdown)
- Adding Menus and Submenus for Wordpress Plugins: Integrating your plugin in wordpress is the first step in building plugins. There are many different ways to integrat… (markdown)
- How To Create Wordpress Widgets: Wordpress provides a great API to create and interact with widgets. Widgets are a great way to allow plugin users to … (markdown)
- PHP Errors Handling: PHP5 introduced exceptions, a completely different way to handle errors. Simply, exceptions like sensors detect any e… (markdown)
- Learning MySQL Aliases: MySQL aliases are simply nicknames used to express tables, columns and functions’ names. These nicknames can be used … (markdown)
- Laravel URL Generation: In order to build hyperlinks in our applications. We might do this by hand but laravel provides a number of helpers t… (markdown)
- How To Test PHP Classes and Objects: PHP provides a set of functions to test classes and objects. These functions allow you to know more information about… (markdown)
- Adding Help Tabs In Wordpress Plugins Pages: Wordpress 3.3 introduces the ability to create custom help tabs in plugin pages. You can use these tabs for plugin do… (markdown)
- WordPress Options API: Wordpress provides a set of functions that enable easy access to plugin options. By default wordpress and plugins opt… (markdown)
- How To Add Custom Rewrite Rules In WordPress: Wordpress rewrite API used to convert URLs from something programmatically convenient to something user and search en… (markdown)
- Kick-Starting MySQL: Today MySQL is one of the most popular open source databases as it supports millions of web applications. We will dis… (markdown)
- Working With Laravel Filters: Laravel filters are a set of rules that can be applied before and after routes to change application actions. Also th… (markdown)
- Working With Laravel Caching: Caching is a temporary data storage used to store data for a while and can be retrieved quickly. It is often used to … (markdown)
- How To Create File Upload With Laravel: We discussed before form creation and validation but file upload input is a bit different. Let’s create our first fil… (markdown)
- Learning Wordpress Users API: Wordpress powers many large websites with thousands of users like blogs, applications, social networks and much more…. (markdown)
- How To Create Custom Roles For WordPress Users: We discussed before how to work with wordpress built in roles and capabilities. Let’s lead by creating custom roles a… (markdown)
- Working With Roles and Capabilities of WordPress Users: Wordpress ships with a powerful roles and capabilities system which control users permissions. Roles enable plugin de… (markdown)
- How To Add Fields To WordPress Users Profile Page: We discussed before wordpress users metadata and how it is flexible. Now we will explore how to use metadata in stori… (markdown)
- How To Create Custom Validation Rules With Laravel: You don’t need laravel built in validation rules and wish if you could create your own validation rules. Well, fortun… (markdown)
- Working With WordPress Users Metadata: Wordpress users metadata used to store additional data related to users. We will discuss how to set, retrieve, update… (markdown)
- Working With WordPress Transients API: The wordpress transients API offers a simple and powerful way to store volatile data in database. It is similar to pl… (markdown)
- How To Validate Forms With Laravel Part2: We discussed before how to create forms with laravel and then how to build validation rules. Now let’s see how to acc… (markdown)
- How To Validate Forms With Laravel Part1: We discussed before form creation with laravel and I think the important thing you need to learn right now is form va… (markdown)
- Working With MySQL Unions: MySQL unions used to combine the results of multiple SELECT statements into one result. MySQL supports both UNION and… (markdown)
- Working With MySQL Joins: In PHP applications, Retrieving data from relational tables generally require the use of joins. MySQL joins enable de… (markdown)
- How To Build Forms With Laravel: In fact, Laravel supports a bunch of handy methods that can handle form creation with ease. We are going to explore t… (markdown)
- How To Install Dependencies With PHP Composer: Composer is a dependency management tool for PHP developers. It allows you to define all libraries that your applicat… (markdown)
- Laravel Requests and Inputs Part1: Laravel has awesome methods to retrieve, change, create and store request data. It allows you to handle both $_GET an… (markdown)
- How To Schedule Events Using WordPress Cron: Cron API is a great feature of wordpress. It allows wordpress to execute certain functions on a schedule. By default,… (markdown)
- Laravel ORM Part3: We have discovered eloquent fetching methods in previous parts. It’s time to fine tune query constraints as they add … (markdown)
- Laravel ORM Part2: We discussed later how to retrieve rows as objects and perform basic CRUD methods on them. Well,there are other good … (markdown)
- Laravel ORM Part1: Laravel is a MVC PHP framework so it ships with its own ORM component called “Eloquent”. Eloquent will take care of r… (markdown)
- Laravel Migrations Part2: In Laravel Migrations Part1, I discussed how to create, run and update your migrations. It seems you need more and fo… (markdown)
- Laravel Migrations Part1: After building your database schemas ,You should be searching if laravel could give some help and run these schemas …. (markdown)
- Working With WordPress Shortcodes: Shortcodes enable developers to embed content that would require alot of complicated tasks. With shortcodes ,you can … (markdown)
- Laravel Schema Builder Part3: Once you database tables created ,it is a complex task to update these tables names and their structure .But i think … (markdown)
- Laravel Schema Builder Part2: Laravel Schema class have several methods that have varied uses. Let’s take a look at them. (markdown)
- Laravel Schema Builder Part1: Does your application need to store data in a database? Well let’s see if laravel will give help. Laravel support MyS… (markdown)
- Learning Laravel Views: Laravel like any php framework separate visual aspects of your application from business logic .Before we get started… (markdown)
- Laravel Routing: Laravel 4.1 provides us with a handful routing API which can be used for both small and large application .Also with … (markdown)
- Working With PHP Interceptors: PHP provides some handful methods which can be used within your classes to intercept messages sent to undefined metho… (markdown)
- PHP Packages and Namespaces: Package is a set of PHP classes grouped in some manner .Many developers use file system to organise their application… (markdown)
- How To Create Custom Tables In WordPress: WordPress creates 11 tables to store settings, users data, posts data, comments data, links and terms. In many cases … (markdown)
- WordPress HTTP API Best Practice: After you fine tuned wordpress HTTP API ,it is the time to put your codes in a larger practice. I thick the best prac… (markdown)
- How To Make HTTP Requests with WordPress: In the modern web “means 2.0”, Web applications communicate with each other to gather and share data in between .Your… (markdown)
- How To Internationalize Your Wordpress Plugin: Internationalization is the process of preparing your wordpress plugins for use in many languages. although wordpress… (markdown)