In this article, we show how we handled our Continuous Deployment process in the past, what drove us to change what we have, and what efforts we made to make the process as simple/effective as possible.

The article may give an initial devops taste, but in its essence, the release process affects all teams and how they function on their own or collaborate with other teams, we will show how roles is being shifted just by changing the process.

About us

We at Halan help offering ride-hailing and on demand logistics solutions (installments, Delivery, payments online, E-commerce) for the under-served population by…


Scale up a memory cache to be horizontally scalable

diagram showing relationship of Redis and Envoy Proxy to an application
diagram showing relationship of Redis and Envoy Proxy to an application
Redis with Envoy Proxy

Having a caching layer for your application is one of the most adopted and effective solutions for handling API requests at scale. Having a cached response or a partial one is much faster than redoing the whole workflow to serve the request.

In this article, we are concerned with memory-based caches and how we can scale up a memory cache to be horizontally scalable. That is, we can add more caching machines to our system and all should work the same as one instance, serving all cache hits/writes as a single instance of the cache. …


This code tests! | credit siliconvalleyism

Coming from a pythonic/rubyish background, I have been struggling really hard to write tests in Go, things were much easier back in my dynamic lang but here doing the simplest isolated test requires numerous hacks and changes to my code!

But then I thought there is surely a better way to do this, I’m definitely doing something wrong, or writing my code in a way that makes it test resistant, maybe there is a better way to write code that is both testable and at the same time elegantly designed.

Testing By Example

Let’s take a real world example, let’s say we want…


stack used for building the simple APM

Pretty excited to share my experience building an APM server! it has been a great journey so far with multiple logos as you can see xd.

So what’s an APM anyway? APM is short for application performance monitor, which means it’s a designated server that all what it does in life is monitor all your services and collects detailed stats about their performance, which could include:

  • Service level or endpoint throughput (how many requests it did handle successfully(2XX response) per minute, probably it’s a chart with time on its x-axis and number of 2XX requests on the y-axis.
  • Endpoint average…

In this article, We are going to explore the power of using sockets by exploiting one of its use cases as backbone for an online multiplayer game

We will walk-through building a game server with

  • socket.io, one of the undoubtedly powerful libraries for building a reliable bidirectional communication channel between clients and server.
  • Redis as a caching layer to keep track of connections and game state, also we will use it to solve some race condition using basic locking with redis.

System Requirements, What to expect

We start off by specifying the functionalities we are expecting the system to have so we have a clear…


In this article we will go through the motivation behind event driven programming, why you should consider and how it helps you write better decoupled code.

let’s begin with an example from Righting Software by Juval Löwy -A great book I highly recommend-, the example includes a classical case where you have 3 services in your system, and you want to start from Service A, then send a request to B, then C then go backwards feedback till you reach A again and respond to the client making the request

example taken from chapter 2 Righting Software by Juval Löwy

Here not only we have a problem with coupling as…


In this article ,I will give a short introduction to get you started with data speed vehicle on gazebo. This article will cover :

  • how to start dbw_node on gazebo.
  • how to read/write commands to and from the vehicle . Basically how to give commands to your vechile to move forward or listen to its sensor (camera for example).
  • how can you add/modify existing sensors on the vechile.

First to get started ,if you haven’t already , head over to http://wiki.ros.org/dbw_mkz and install the dbw_mkz package through the command :

sudo apt-get install ros-kinetic/melodic/indigo-dbw-mkz

where the part kinetic/melodic/indigo depends on…

Kareem Emad

Software Engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store