Spring Data JPA provides a lot of features on top of JPA. Such as Query methods, Query by examples, and a lot more.

It also integrates with JPA Specifications, QueryDSL, Jooq, and other fantastic libraries.

There’s a specific use-case that exists in most applications which is the need to make the user search by multiple criteria for an entity and its related associations. This is where “Spring Data JPA Mongodb Expressions excels.

Spring Data JPA MongoDB Expressions allows you to use MongoDB query syntax to send the queries as JSON string typically from the frontend app to a Rest API and then to the Repository layer.

Here’s an example query that users can send from the frontend:

will be translated…


With no doubt, Retrofit is the most common API client for android. not only this, it inspires many other libraries on the backend side, e.g. feign and my own spwrap library.

Retrofit comes with pluggable architecture when it comes to processing the response, which is called CallAdapter s.

By default, Retrofit uses ExecutorCallAdapterFactory that process the request on OkHTTP executor service, then invoke the user’s code callback on the android main thread executor(MainThreadExecutor ).

The one thing about the default CallAdaptor I don’t like is the callback mechanism. …


Photo by Rumman Amin on Unsplash

Vermin is a smart, simple, and powerful command-line tool for Linux, Windows, and macOS.

It’s designed for developers/tester and others working in IT professionals who want a fresh VM environment with a single command. It uses VirtualBox to run the VM.

Vermin is simple to run if you are aware of modern CLI tools like docker, kubectl and other cloud-native things, then you will find vermin more familiar.

Starting from version v0.94.0 vermin works smoothly with Vagrant Boxes from Vagrant Cloud.

So, You can consider it as a modern CLI for Vagrant Boxes.

Vermin, in fact, provides some features that…


Photo by Michael Dziedzic on Unsplash

Vermin is a smart, simple, and powerful command-line tool for Linux, Windows, and macOS. It’s designed for developers/tester and others working in IT who want a fresh VM environment with a single command. It uses VirtualBox to run the VM.

Vermin allows you to build your own images based on images already available at vermin images repository.

But what if you want to have full control over the images used by vermin, or you want to build your own image that does not exist in vermin.

In this post, we are going to take step by step tutorial and see…


Photo by Marc-Olivier Paquin on Unsplash

In this post, we will use vermin to install Elastic Logstash.

We will use vermin as it is a simple virtual machine program that uses Virtualbox as the underlying hypervisor.

To follow this tutorial, you will have to install vermin.

First, you need to install Virtualbox, then for Linux and macOS, in a terminal window:

And for Windows, Open a PowerShell terminal as an administrator then use:

We need the installation script (logstash.sh):


Photo by Antonio Grosz on Unsplash

In this post, we will see an example of using Logstash to read input from a file and write to stdout and apply two filter plugins, the Grok and Geoip.

This video will show the steps: (No Audio, just illustration)

Here we will illustrate what we have done in the video above:

We need to have a configuration file, in my case I put in: /etc/logstash/conf.d/grok_geoip.conf then started Logstash using: logstash -f /etc/logstash/conf.d/grok_geoip.conf

Here’s the conf


Actually, I don’t think this is working, as I got some error:

fatal: [node1]: FAILED! => {“msg”: “The task includes an option with an undefined variable. The error was: ‘kubernetes_join_command’ is ….

In a previous post, we see how to install Kubernetes using shell scripts using vermin.

Today, we will see how to use Ansible to install Kubernetes on 3 nodes.

Three machines

First, we will need 3 machines, 1 master and 2 workers:

Note, the master node…


Photo by Henry Be on Unsplash

I wanted to test running Server-Sent Event behind an http2 server exposed to the browser.

I wrote a simple HTTP service in Golang using HTTP 1.1 and then played with k3s Kubernetes cluster to deploy the service along with an Nginx as a reverse proxy to the Golang HTTP 1.1 service.

The Nginx will expose HTTP 2.0 and forward requests to the Golang service on HTTP 1.1.

We will explore the Golang service, then explore the Kubernetes YAML objects that enable us to achieve our goal, in the end, we will discuss the statefulness of the SSE and how to…


In this post, I will share my own experience on How I prepared and managed to pass the Certified Kubernetes Application Developer. and Will show What it takes to pass the exam from my own point of view.

I got a %94 score, although I thought I won’t make it from the first try 😀

I will divide the post into 3 sections:

  1. How did I prepare
  2. Tips and Tricks for the exam
  3. My thoughts on the exam

First, I want to thank my mentor Rashad Saif who always guided and inspired me to go and tackle such an exam.


creating a VM using vermin

In this post, we will use vermin to have Ubuntu VM desktop up and running in minutes using Vermin.

  1. Create Ubuntu VM using vermin
  2. Install ubuntu-mate-desktop on the VM
  3. Start the Ubuntu VM after installation

In this post, we will use ubuntu-mate-desktop, however you are free to install any desktop environment you like.

We will use vermin as it is a simple virtual machine program that uses Virtualbox as the underlying hypervisor.

To follow this tutorial, you will have to install vermin.

First, you need to install Virtualbox, then for Linux and macOS, in a terminal window:

Mohammed Hewedy

Software Developer/Architect

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