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