My Projects

Distributed System storing images remotely using RPC

In this project, I developed a distributed system on 2 machines which acted as a server and a client. The client invoked certain operations on the server and the server replied accordingly. 

#C++  #VirtualBox  #MySQL  #Socket_Programming

Student Union Mobile App at the American University in Cairo

This app is a solution to help students at the American University in Cairo access all the services provided by the student union and the university itself. 

In this app students can:

    – Check the daily feed 

    – Apply for events 

    – Buy items from the Student Union’s Market

    – Customize their yearly Student Union’s Pack by

    choosing items with a limited amount of points

    – Access contacts, links and more!

#AWS  #React_Native  #MySQL  #PHP  #OutSystems  #GitHub  #NodeJS

Tombil

Tombil is a startup that I cofounded in 2020 and worked as the CTO of the startup. 

I developed a web-based solution that acts as an online market for used cars. The website showed all the details. The details included:

    – Car Map showing scratches and their locations 

    – Details about the car and the condition of every part

Using outsystems, I created a full admin panel controling all the backend and the database. 

#AWS  #OutSystems  #Node_JS  #PHP  #MySQL #REST_APIs  #Javascript  #Reactjs  #HTML #React_Native

Digital Circuit Floor Planner

This is a digital design solution that takes a Verilog Netlist, the library LEF file, a pin location file, the core utilization and the aspect ratio to generate a floorplan and outputs a DEF file. 

#Python  #Verilog_HDL  #KLayout_Viewer  #GitHub

Tera-Sort program

In this solution, a 2GB of data gets sorted in 2 seconds. The algorithm followed the following steps:

  • Divide the array that contains all the items into M mappers. 
  • Make the sample array that contains S items picked randomly from the mappers. (In parallel)
  • Sort each sample. (In parallel)
  • Pick an array of size R-1 cut points from each sample. (It is guaranteed that it is sorted) (In parallel) Calculate the average cut points from each mapper.
  • Distribute items from the original array over Reducers of size R, so that items less than the first cut point are stored in the first reducer. Items less than the second cut point are stored in the second. And so on.
  • Sort each reducer. (In parallel)
  • Output each reducer in the output file sequentially. (It is guaranteed that elements are sorted) 

#C++   #Merge_Sort_Algorithm  #Quick_Sort_Algorithm  #Multi_Threading

Encryption in MIoT devices

This solution adds an encryption layer in Medical IoT devices. I used Atttribute-Based Encryption to encrypt data transmitted between different devices using some attributes like location of the patient or their name. 

The program used IFogSim open source simulation for simulating the behaviour of IoT devices and this was developed completely using Java.

#Java  #Attribute-Based_Encryption (ABE)

Assembly Bootloader + simple Network Driver

In this project, I created a bootloader which works within QEMU. The process of creating the bootloader included the following:

  • Memory mapping (Mapping first 2MB then mapping the whole memory) 
  • Scan all PCI devices and store them in the memory
  • Setup PIT timer and test it by printing a message every 1 second
  • Create a basic Intel e1000 NIC driver

#Assembly_X86  #Networking  #Bochs  #QEMU  #GitHub

MLFQ Scheduler in MIT Open-Source XV6 OS

In this project, I modifed the MIT open-source XV6 code to work with  MLFQ Scheduler rather than round-robin scheduler. Picking a process to run depended on its priority and the essential system calls were created. 

The process worked as follows:

  • Each process had a budget (a number) and a priority (starts with the maximum priority)
  • The scheduler updates the buget of each process and based on a certain equation of the budget, the process’s priority either increases or decreases.
  • Each priority is represented with a FIFO queue.
  • The scheduler services each queue in a round-robin fashion picking the process at the top of the highest priority queue to run.
  • Periodically, all processes get promoted to avoid the starvation problem.

#C  #Scheduling_Algorithms  #Assembly  #GitHub

MLFQ Scheduler

Secosalt Website

I developed this website for one of the biggest Salt suppliers in Egypt to show all their products with the ability to add or remove products. The required admin panels were created. The whole project was created natively using PHP, HTML, CSS, javascript. 

#PHP  #MySQL  #JavaScript  #HTML  #CSS

Verilog Testbench creator

In this project, I used Python to generate a testbench Skeleton given a Verilog Module. The program used hdlparse open source library to parse the verilog code. A randomized test values could be generated based on the provided input.

#Python  #Verilog_HDL  #Docker  #GitHub

Sample Generated Testbench

Awamrak Mobile App

I developed this app for a startup which provides the following services: Home Cleaning, Laundry, Disinfection and Home Repairs. 

The user’s side of the app operated as follows:

  • For each service, there was a limited number of workers
  • Workers worked for a certain amount of time
  • Users were allowed to order services only if: the service has available number of workers and the order is made in the working hours
  • Promocodes could be applied. Promocodes has 2 types: promocodes that are used for a limited period of time and promocodes that can be used for limited number of times.

  The admin side operated as follows:

  • Workers get notifications when an order is created and are allowed to see all the requested orders and mark them as done.
  • Admins are allowed change the working hours and send notifications to users 

#React_Native  #PHP  #MySQL  #OutSystems  #GitHub

Search Engine

In this project, I created a simple Search Engine using Page Rank Algorithm. The algorithm worked as follows:

  • The program takes a search query entered from the user and checks for: Quotation Marks, OR keyword and AND keyword
  • The program searches for the page based on its Rank which is calculated based on the Page Rank and the Click-Through-Rate (CTR)
  • The connections between pages are represented as a graph

#C++  #Page Rank Algorithm  #Graphs

Chemistry School Mobile App

This app was an online courses platform for a chemistry teacher. Through this app, enrolled students could access all the teacher’s uploaded lectures and the teacher was provided with an admin panel implemented in outsystems which allows him to manage courses and students subscriptions.

The application works only for students who are enrolled for certain courses and they have access only to these courses. 

The following security measures are added:

  • Students cannot screen record the application 
  • The app cannot be opened on more than a device at the same time
  • The application does not run on emulators. (Emulators which act as regular mobile phones are handled individually)
  • Accessing videos directly through the server is prohibited

#React_Native  #PHP  #MySQL  #OutSystems  #GitHub