The front end of a website is the part that users interact with. Everything that you see when you're ...
The backend of a web application is an enabler for a frontend experience. Backend code is run on the server, ...
Blog PostThe backend frameworks consist of languages and tools used in server-side programming in a web application. Whereas the frontend frameworks...
Blog PostA database is a collection of information that is organized so that it can be easily accessed, managed and updated. Data is organized into rows, col...
Blog PostThis section features some of my web apps designed using HTML5, CSS3, JavaScript, Bootstrap 4 and some jQuery. They are intended to show design & functionality. Click and try them, the code is on Github and it is free to use and/or modify.
This section features four programming projects where some moderate to intensive programming was needed using the object oriented paradigm. I chose these because they required some thinking before diving into coding. I am aware that I could think deffirently now as I got exposure to asymptotic analysis of programs (Famous big O, big Θ & big Ω); but overall it's been a rewarding experience for me while thinking about how the classes should be designed to interact with each other so that the problems can be solved and give back the desired results.
Encrypting and decrypting text files using a software-simulated Enigma Machine without the plugboard (A WWII German Encryption Machine). The encryption as well as decryption goes through a process of 7 stages simulating a series of 6 rotors and a reflector each with the 26 letters of the alphabet. A particular setting of rotor positions determines how encrypting or decrypting is carried out.
The System is designed following a use-case oriented architecture and implemented following an object-oriented approach (using Java) where different actors (roles) (passenger, conductor, cashier.) trigger different scenarios (actions and reactions). A typical scenario would be when a traveler (The passenger: use-case) requests a ticket, the system (The cashier: use-case) checks for availability with regards to time, departure location, destination location, and seat availability. If a ticket is available, a reservation is made. At the time of boarding, the traveler presents the ticket and the system (The conductor: use-case) verifies its validity. If the ticket is valid, the traveler boards the train to destination. When conditions are not satisfied, handlers to those events are also implemented. The system is backed with a MySQL database for CRUD operations.
An Android application that allows a user to upload or take a picture of a human face. After this initial phase, the file is sent to a Face & Emotions detection API (Used the Microsoft Azure Platform). Once processing is complete by the API, results will be sent back to the user for display (in JSON). Among the results are: (1) clear detection of the face (if it belongs to a human and it is visible) by placing a colored rectangle around it, (2) Emotions detected from the face such as happiness, anger, fear, neutrality, ...etc.
This project solves the Minimum Spanning Tree (MST) problem using Kruskal’s Algorithm with path compression. To achieve our goal, data for weighted graphs with (n) vertices and (m) edges are given in text files. An MST, if it exists, is a subgraph containing (n – 1) edges such that when their weights are added together, they give the minimum possible cost needed to visit all vertices exactly once without creating any cycles. An MST is not possible to compute if the graph is not connected as the algorithm runs out of edges to consider before satisfying the above condition. The implementation of Kruskal’s algorithm uses a disjoint-set data structure implemented using an array of integers called “sets”. In this data structure at start, the cell at index “i” is the single representative (or label) of the element “i”. Thus, we make (n) disjoint subsets where one of them contains one single vertex. As the subsets merge together, if the index “i” is not the representative of its subset, we go through the subsets until we find its representative. Once this operation is achieved, we proceed to path. The compression of the path that led to our target can be achieved by introducing a caching mechanism into the find operation where all elements in the path to the representative will, after that, point to the target label. This way it speeds up the subsequent find operations and speeds up the overall running time of Kruskal’s algorithm. At the end, if an MST is computed, all edges that make it will be displayed along with their total weight.
This section exposes two practical exercises using the functional programming paradigm. The first is Hoffman Coding using Lisp and the second is solving CNFs with the ML programming language.
Hoffman Coding in LISP
In this project, the Huffman coding algorithm, which is a divide and conquer approach, is used to encode a message into binary code and decode the binary back to the original message. In order to achieve this, a Huffman Tree is constructed using the frequency list of the content of the message. Generating the frequency list requires counting the occurrence of each symbol (or its weight) in the original message and pair each count with its corresponding symbol. After this first phase, every pair is put in a list and the entire list in a list itself; then sort the whole thing in increasing order of weight. This way, we now have a list of Huffman sub-trees (sub-htrees). The objective is to compress data using variable length coding rather than fixed length coding all in a lossless manner
Solving CNFs in ML
This project intended to compute the conjunctive normal form "cnf" of a sentential logic. It implements a datatype called "sentence" and logical connectives. In order to get the cnf of a sentence, function in the program the following: remove arrows, distribute negeation, distribute disjunction in conjunction, and finally print the results out.