Software Development for Assignments & Projects


In school, we have various assignments to submit. In terms of object-oriented programming, the main language we study is Java. Otherwise, I will showcase some assignments done in scripting languages such as JavaScript & PHP. All assignments are open-source & available in my GitHub.

Note to instructors: If you would like me to remove any content from this website or GitHub, please contact me & I will gladly take them down.

Select one of the following projects below

CPU image

JSON Parsing

JSON image

Linked List Data

Photoshop image

JS - Vowel Counter


CPU Simulator

Simon Says

Arduino - Simon Says

Java Assignment: JSON Parsing

JavaScript Object Notation, also known as JSON is a file format for organizing data. One of its features is its friendly readable syntax for humans to read and write. Normally, JSON files are huge and contain massive amount of information. For example, one could use JSON to describe the characteristics of a human chromosome. In this project, students are asked to analyse 10 JSON files that contain loads of information on articles, such as authors, volume, pages & more. The goal is to collect all data and create references of articles in IEEE, NJ & ACM. This remains my favorite Java assignment up to date.


It can vary, some files are bigger than others. For the purpose of this project, .bib files were used. Let's have a look at one.

@ARTICLE{ 6624114, author={B. Dietrich and D. Goswami and S. Chakraborty and A. Guha and M. Gries}, journal={IEEE Transactions on Computers}, title={Time Series Characterization of Gaming Workload for Runtime Power Management}, year={2015}, volume={64}, number={1}, pages={260-273}, keywords={autoregressive moving average processes;computer games;least mean squares methods;power aware computing;time series;ARMA models;Crysis;DVFS;LMS linear predictor;Need for Speed;PID controller;Quake II;Shift and World in Conflict;autoregressive moving average;battery-operated portable devices;closed-source games;controller robustness;dynamic voltage and frequency scaling;game power management;gaming workload;least mean squares;proportional-integral-derivative controller;runtime power management;time series characterization;time series models;video processing applications;Autoregressive processes;Games;Graphics processing units;Least squares approximations;Libraries;Rendering (computer graphics);Dynamic voltage scaling;prediction methods;time series analysis}, doi={10.1109/TC.2013.198}, ISSN={0018-9340}, month={Jan}, } @ARTICLE{ 6230658, author={G. C. Burdea and D. Cioi and A. Kale and W. E. Janes and S. A. Ross and J. R. Engsberg}, journal={IEEE Transactions on Neural Systems and Rehabilitation Engineering}, title={Robotics and Gaming to Improve Ankle Strength, Motor Control, and Function in Children With Cerebral Palsy #x2014;A Case Study Series}, year={2013}, volume={21}, number={2}, pages={165-173}, keywords={bone;computer based training;computer games;gait analysis;kinematics;medical computing;medical disorders;medical robotics;neurophysiology;paediatrics;patient rehabilitation;virtual reality;DF initial contact angle;DF-PF torques;GMFM;Gait function;Peds QL;Rutgers Ankle CP system;ankle endurance;ankle kinematics;ankle motor control;ankle strength training programs;cerebral palsy;children;gait speed;game technology;game-based robotic training;motor coordination;motor function;rehabilitation sessions;time 12 week;virtual reality games;Airplanes;Educational institutions;Games;Motor drives;Pediatrics;Robots;Training;Ankle;cerebral palsy;gait;robotics;video games;Ankle Joint;Cerebral Palsy;Child;Female;Humans;Male;Movement Disorders;Muscle Strength;Recovery of Function;Robotics;Therapy, Computer-Assisted;Treatment Outcome;Video Games}, doi={10.1109/TNSRE.2012.2206055}, ISSN={1534-4320}, month={March}, } @ARTICLE{ 7494677, author={T. G. Papaioannou and V. Hatzi and I. Koutsopoulos}, journal={IEEE Transactions on Smart Grid}, title={Optimal Design of Serious Games for Consumer Engagement in the Smart Grid}, year={2018}, volume={9}, number={2}, pages={1241-1249}, keywords={Companies;Demand-side management;Energy consumption;Games;Power demand;Sensitivity;Smart grids;Gamification;energy conservation;optimization;power demand;social enforcement;utility theory}, doi={10.1109/TSG.2016.2582298}, ISSN={1949-3053}, month={March}, } @ARTICLE{ 8240592, author={J. Zhang and T. Cui and C. Jin}, journal={IEEE Access}, title={Structural Attack on Reduced-Round Skipjack}, year={2018}, volume={6}, number={5}, pages={3176-3183}, keywords={Ciphers;Games;Integral equations;Time complexity;Skipjack;Structure decomposition;guess and determine attack;integral attack;yoyo game}, doi={10.1109/ACCESS.2017.2787575}, ISSN={1949-3053}, month={March}, } @ARTICLE{ 7947219, author={T. S. Babu and J. P. Ram and T. Dragičević and M. Miyatake and F. Blaabjerg and N. Rajasekar}, journal={IEEE Transactions on Sustainable Energy}, title={Particle Swarm Optimization Based Solar PV Array Reconfiguration of the Maximum Power Extraction Under Partial Shading Conditions}, year={2018}, volume={9}, number={1}, pages={74-85}, keywords={game theory;particle swarm optimisation;photovoltaic power systems;power generation economics;solar cell arrays;I-V curve;P-V curve;Su Do Ku game theory;electrical array reconfiguration;electrical connections;income generation;maximum power extraction;partial shading conditions;particle swarm optimization;photovoltaic power generation plants;row current difference minimization;solar PV array reconfiguration;Dispersion;Ear;Genetic algorithms;Integrated circuit interconnections;Particle swarm optimization;Switches;Switching circuits;Array reconfiguration;genetic algorithm;maximum power extraction;particle swarm optimization}, doi={10.1109/TSTE.2017.2714905}, ISSN={1949-3029}, month={Jan}, } @ARTICLE{ 7959076, author={T. Wang and F. Liu and H. Xu}, journal={IEEE/ACM Transactions on Networking}, title={An Efficient Online Algorithm for Dynamic SDN Controller Assignment in Data Center Networks}, year={2017}, volume={25}, number={5}, pages={2788-2801}, keywords={computer centres;computer network management;game theory;iterative methods;minimisation;resource allocation;software defined networking;telecommunication traffic;DCAP;coalitional games;data center networks;dynamic SDN controller assignment;dynamic controller assignment problem;efficient online algorithm;hierarchical two-phase algorithm;high maintenance cost;long response time;matching theory;near-optimal Nash stable solution;network configuration;network management;online approach;online optimization;randomized fixed horizon control framework;software defined networking;stable matching problems;static assignment;traffic dynamics;two-phase algorithm;Algorithm design and analysis;Control systems;Games;Heuristic algorithms;Process control;Time factors;Topology;Software defined networking;coalitional game;data center network;online algorithm;stable matching}, doi={10.1109/TNET.2017.2711641}, ISSN={1063-6692}, month={Oct}, } @ARTICLE{ 7950983, author={A. Khitun and G. Liu and A. A. Balandin}, journal={IEEE Transactions on Nanotechnology}, title={Two-Dimensional Oscillatory Neural Network Based on Room-Temperature Charge-Density-Wave Devices}, year={2017}, volume={16}, number={5}, pages={860-867}, keywords={charge density waves;circuit oscillations;graphene;neural nets;synchronisation;tantalum compounds;2D oscillatory neural network;2D tantalum disulfide devices;Game of Life;bias voltage;change density wave regime;charge-density-wave phase;constant current;constant output mode;consumer electronic;electrical-field triggered metal-to-insulator transition;graphene transistors;metallic state;near-neighbor cells;nearest-neighbor cells;network elementary cell;operational frequency;pattern recognition;radiation hardness;room-temperature charge-density-wave devices;synchronization speed;time-varying coupling;Computer architecture;Integrated circuit modeling;Neural networks;Numerical models;Oscillators;Resistance;Threshold voltage;Charge density waves;oscillatory network;two-dimensional materials}, doi={10.1109/TNANO.2017.2716845}, ISSN={1536-125X}, month={Sept}, } @ARTICLE{ 8011738, author={H. Li and X. Ding and A. Alsaedi and F. E. Alsaadi}, journal={IET Control Theory Applications}, title={Stochastic set stabilisation of n-person random evolutionary Boolean games and its applications}, year={2017}, volume={11}, number={13}, pages={2152-2160}, keywords={probability;reachability analysis;stability;state feedback;REBG;n-person random evolutionary Boolean games;one-step reachability;probability;semi-tensor product;state feedback stochastic set stabilisation}, doi={10.1049/iet-cta.2017.0047}, ISSN={1751-8644}, month={Sept}, } @ARTICLE{ 7457232, author={Y. Zheng and D. Wu and Y. Ke and C. Yang and M. Chen and G. Zhang}, journal={IEEE Transactions on Circuits and Systems for Video Technology}, title={Online Cloud Transcoding and Distribution for Crowdsourced Live Game Video Streaming}, year={2017}, volume={27}, number={8}, pages={1777-1789}, keywords={cloud computing;computer games;crowdsourcing;stochastic processes;video coding;video streaming;Lyapunov optimization framework;constrained stochastic optimization problem;crowdsourced live game video streaming;datacenter assignment decisions;online cloud transcoding;video games;Algorithm design and analysis;Cloud computing;Games;Heuristic algorithms;Optimization;Streaming media;Transcoding;Cloud computing;crowdsourced streaming;video distribution;video games;video transcoding}, doi={10.1109/TCSVT.2016.2556584}, ISSN={1051-8215}, month={Aug}, } @ARTICLE{ 7979649, author={S. N. Mathaudhu}, journal={IEEE Potentials}, title={Superheroes and Scientists as Agents for Societal and Technological Advancement}, year={2017}, volume={36}, number={4}, pages={24-29}, keywords={Games;Magnetic cores;Magnetic resonance imaging;Magnetosphere}, doi={10.1109/MPOT.2017.2694298}, ISSN={0278-6648}, month={July}, }

Yes, it's large. There is bigger! Now imagine, how would you process 10 of these monsters and seperate all fields?


Java is such a powerful tool and it can handle big guns such as the bib files we are facing. I am not going to go through the entire solution (available in my GitHub) but I will explain briefly how Java can help one read through a JSON file.

STEP 1: Spot common patterns

When reading through a JSON file, you can notice a common pattern: every field ends with a comma. If a field is invalid (empty), the curly brackets open and close in this form: "{}". There are more patterns of course, this information is important in order to handle all cases of articles.

STEP 2: The famous while loop

Any Java program should be written with certain abstraction. You can never know the amount of articles & lines in a JSON file. A while loop in this situation can certainly have many bugs, you want to avoid having infinite loops & useless loops. Using this loop can be very effective yet very tedious to use.

STEP 3: Collecting data seperately

This can get tricky, after reading an entire file, you want to perfectly collect data and use it correctly for any format required. In order to avoid all errors, you can notice a pattern where a new article starts whenever a line starts with "@ARTICLE{". Therefore, you should collect data seperately.


In the end, the JSON parser succesfully collects all data & displays it in three formats possible: IEEE, ACM & NJ.

Let's go in the terminal and test our results.

Java Assignment: Class Enrollement using Linked Lists

Data structures begin to make sense when one starts to learn Linked Lists. In order to understand Linked Lists and the basics, imagine a train. The first cart of the train is the driver. Without him, the train cannot drive. In reality, a train is just multiple carts attached together. In a Linked List, there are two fundamentals, a "head" & a "node". The head is the first cart which contains the chauffeur. A node is used to connect every cart together. Instead of combining train carts, linked lists is a data structure which can hold extensive data.

In the following assignment, one must create a linked list containing multiple courses for students to take. Each course contains information such as the course name, course ID, number of credits & more. With a linked list intact, we shall create a program that will determine if a student has the credentials to enroll in a specific class.

Step 0: Creating a List

In this step, we will create a list of courses taken from an external file. Each course contains 5 different attributes. Namely, the course name, course ID, credits, pre-requisites & co-requisites. Here is a demonstration of the final product.

This goes on for a total of 11 courses.

In the example above, COMP108 is the head node since it leads the train. Now that the list is complete, we can move on to the next step.

Step 1: Comparing Students to List

In this step, student objects were created based on external files determining which course a student has completed & which course a student is requesting. Below you will find a sample of the txt file.


Multiple text files filled with this information. Using File I/O and our list, the next step involves determining if a student has the credentials to enroll in a desired class. If the pre-requisite is in the finished section, a student can enroll in a desired class. Otherwise, a refusal message will print.

Step 2: Results

Using the request of the sample student mentionned in step 1, let's head into our terminal & test out our results.

JavaScript Assignment - Vowel Counter

In this simple assignment, we must create a program that will input a string from a user. The output should return the number of each vowel in the sentence. For example, the sentence: "Hi, I'm Mohanad" should return 2 A's, 2 I's & 1 O.

Since this is relatively simple, I will leave a demo below. Please remember that this assignments was done in my first year in University.

Mohanad's text tool

Text input:

CPU Simulator

In this assignments, students are asked to replicate the behavior of a CPU. The basic operation of a CPU is the perform a job that contains x amount of cycles. The goal of the assignment is to use a Priority Queue along with three different structure to see which data structure performs best.

Array-Based Heap, Sorted List & Unsorted List

In order to analyse the structures, we implemented the three structures without any use of Java Libraries. In my GitHub page you can check out the code implementation of each structure.

The results show that the Array-Heap comes out on top. This is due to the fact that a min heap can be sorted in a complexity of O(nlog). Meanwhile, the sorted & unsorted lists used selection sort in order to add or remove jobs from the CPU. The text file below demonstrate an in-depth analysis of each structure.


This assignment helps students understand the functionality of Priority Queue's. Also, students get first hand experience with keys and their importance. The execution of the CPU is relatively fast, the demonstration below is a CPU running 10,000 jobs, each have a random amount of cycles.

Arduino - Simon Says

If you have not seen the CPU I built, I recommend you to check it out here. Did I mention I really like circuit logic? I bought an Arduino to have fun with it. Therefore, I re-created the famous memory game: Simon Says.

If you are not familiar with the game, it's very simple. The goal is to replicate a sequence of colors shown to you, the further you go, the better your memory is! Below is a preview of the game itself.

The four lights on the left represent the sequence of colors to replicate, there are 4 buttons as well & a buzzer. You will notice three red lights on the right, these are the number of lives in one game. If you attempt to replicate a sequence and fail, the buzzer goes off and you lose one life.

Simon Says How?

The circuit was relatively simple, every component is connected to an arduino pin. In order to implement this game, I used a linked list. For the purpose of this project, the code was written in C. The reason why I used a linked list is because a color is always added to the end of a sequence, so, with the use of a tail, adding at the end of the sequence would be done in O(1) complexity. Below is a preview of the circuit.

If you would like to see the circuit and the code, please check out my GitHub page here!