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