Portfolio.


- Shop | Swift | iOS

An e-commerce app that enables its users to view products and collections. In addition, a user can create an account to place orders and add products to his wish list. This app uses Firebase as a back-end with Firestore database.
Demo Video.




- Shield | Swift | iOS

This app has three main security-related functionalities. It allows the user to upload a file to be scanned for viruses, and a user can check if his account/password had been compromised in a data breach. In addition, the user can encrypt a file with a password using AES encryption algorithm and decrypt it later.
This was my graduation project from the iOS Developer Nanodegree.
Explore the project and its technical details.




- On The Map | Swift | iOS

This app allows users to share their location and a URL with their fellow students. To visualize this data, On The Map uses a map with pins for location and pin annotations for student names and URLs, allowing students to place themselves “on the map”.
Requests to REST APIs and responses (JSON) handling codes are made from scratch, without using any third library. Implementing this project was a part of my iOS Developer Nanodegree at Udacity.
Project on GitHub.




- Location Alarm | Swift | iOS

An iOS app which enables a user to save and set alarms to ring at desired location by putting pins on the map and specifing a range that would trigger the alarm.
I have made this app for my personal use, so it will remind me about the grocery when I am around the store, or when I am close to my station while falling asleep.
Project on GitHub.
Demo Video.




- AMS Client | Swift | iOS

Client-side app for the Automated Monitoring System. The app is used to receive video stream and alerts via sockets as raw bytes, using CocoaAsyncSocket library.
Demo video.




- Automated Monitoring System | C#

The main goal of this project is to have a plugable system which enables a user to extend its features to meet his needs through plugins that should work and communicate with the original system components.
By applying this concept to a monitoring system, a user would be able to develop, for example, an image processing component which meet his requrements and plug it into the system to work with the system components, like video stream input component and others.
This was my CS graduation project and it got "Excellent" grade.
Demo video.




- Competitive Programming | C++

Participating in problem-solving programming competitions was a main concern for me during CS school years. That helped me in developing problem-solving, testing and debugging skills through solving hundreds of problems with various algorithms and data structures.
In my last participation in ACM-ECPC competition, my team achieved a high rank and qualified to ACM-ACPC (Arab region competition) to represent Egypt along side other 22 Egyptian teams out of total 500 teams from all Egypt. That was a remarkable achievement for us.




- Connect 4 Ultimate | C# | WinForms

Using this version of the classical game, you can build your AI agent (Bot) and link it to the game to compete against other players on network or against the built-in Bot, which runs on Minimax algorithm.
The purpose of developing this project is to experiment how different AI algorithms and heuristic functions would perform against each other while trying to find optimal next-move in the game.
I wrote the initial version of this project in JAVA, then I rewrote it in C# and added networking and external-processes linking features.
Explore the project.




- WebVTT to SubRip Converter | C# | WinForms

As the project name states, it converts ".vtt" subtitle files to ".srt" format.
I developed this tool because I was enrolled in a Coursera course which its subtitles were WebVTT formatted, which wasn't supported on my phone.
Despite that it is a simple tool that do a very specific simple task, it gets tens of views weekly.
Project on GitHub.




- RAT | VB.NET | WinForms

One of my early projects, a simple remote administration tool that I developed to control my PC through set of commands, with funny algorithm to fetch commands via HTTP GET requests, that is: That's how I don't need to open ports exclusively, port 80 is already there.