Timetable Scheduling via Genetic Algorithm

Source Code on GitHub

Screenshot of web app showing a schedule it created

My thesis project in fulfilment of the requirements of my BSc degree, this project is a enterprise-grade application written in Java and JavaScript. It uses a Genetic Algorithm machine learning technique to automatically create a conflict-free schedule for a university classroom program.

Technical diagram showing the architecture of the application
Architecture diagram

The backend is a Java Spring Boot app built by Gradle running in a Tomcat container on an AWS EC2 instance, with a PostgreSQL database running on AWS RDS. The application is organised as a service-oriented architecture, with data access controlled by one microservice with a REST API, and the genetic algorithm being run on a separate microservice with its own API. A frontend is provided as a React progressive web app, interfacing with the remote APIs to start new scheduling jobs in the genetic algorithm and display existing schedules.

Screenshot of web app showing interface that is running a genetic algorithm job
Genetic algorithm in progress in the React web app

Background of the genetic algorithm operation and deeper technical details are available in the thesis report

Academic CV Website

Source Code on GitHub

Live Web Site

A static web site hand-coded using Bootstrap with custom-compiled SASS. Designed to be highly responsive, where the layout elements rearrange entirely for a mobile layout. Simple templating and SASS-to-static CSS compiling done with Gulp.

Desktop View:

Academic CV web site in full-width desktop view

Responsive Mobile View:

Academic CV web site in responsive mobile view

Machine Learning in Python

Source Code on GitHub

An implementation of Quinlan’s C4.5 decision tree machine learning algorithm, which is written in Python with a Tkinter GUI.

The program imports a CSV data file and allows the user to label the data columns. It can classify using both continuous numerical data and non-numerical categorical data. After the model is constructed and saved as a tree data structure, a Graphviz & Pydot chart is produced and displayed, along with cross-fold validation accuracy percentage.

Screenshot of a python GUI showing  a visual representation of a decision tree machine learning classifier
Learning completed, showing decision tree classifier

git lecture

Taught an introduction to git version control, targeted at programmers who had either never used git before or had seen the basics and want to know more about git’s operation.

git lecture
Slide Deck is available on Google Slides

GPG Key

For identity verification and privacy, I use a GPG key. The short signature is 0x44B6B4C7F1083AA7 and you can also look me up on the keyserver pools via my full name, “Andrew Reid East”, or my email, andrew@andreweast.net. I might suggest https://pgp.mit.edu/

I can accept email encrypted with my public key. I also sign my git commits for security and verification.

I was able to participate in the keysigning party at FOSDEM 2018 in Brussels. It was great experience meeting people coming together from all over. Expanding the global web of trust as well as the trust in my own key through personal connections is a great goal. Figuring out the inner workings of PGP & GPG was also a sound way to learn some of the principles of cryptography and modern Internet security.

Linux 101 Lectures

I created a series of informal lectures and interactive tutorials for NUIG CompSoc to introduce Linux both casual computer users as well as enthusiasts with no prior exposure to the OS. At the end of the lecture series, society members had installed Ubuntu as a virtual machine, learned BASH basics, and created C programs with GCC.

Links to Slide Decks on Google Slides:

Linux 101 Slide Deck: Session One
Session One
Linux 101 Slide Deck: Session Two
Session Two
Linux 101 Slide Deck: Session Three
Session Three

PDF Cheat Sheet, Projects:

Command Line Basics – Cheat Sheet & Projects

Tech Icebreaker

Created a simple icebreaker for the introductory meeting for NUIG CompSoc. Designed to get tech-minded students interacting and moving–without putting anyone on the spot individually. Available as a slide deck

Visual Aid for “One or The Other” Icebreaker

JavaScript Media Upload and Collaboration

Source Code on GitHub

A group project to learn software engineering concepts and Agile development, this web site was the product of a semester of work between four students. On this project, I acted as scrum master to manage the workload and guide the development milestones, using Trello as a scrum board.

Screenshot of Film Festival Management Web App
Film Festival Management Web App

The project was designed in collaboration with the volunteers running a community film festival. The web app allows films to be uploaded, viewed online by the judging panels, and vote on which films should be included in the festival lineup.

The app was created in JavaScript on Node.js using the Meteor framework, backed by a Mongo NoSQL database. A Continuous Integration pipeline was setup on Travis CI, and builds that were promoted to dev or production were deployed on Heroku. Web design was in a responsive manner backed up by the Bootstrap framework.

CMD/PowerShell Monokai Colour Scheme

Monokai prompt colours

Source Code on GitHub

An open-source Powershell script to customise your prompt colour scheme rather than using the hard-to-change properties dialog, forked from another quality repo. Makes it easy to set new colours to the shell, or reset them back to Windows default! Set up for my favourite editor scheme, Monkai

Wedding Website and Gift Store

Source Code on GitHub 

Production Server: Wedding of Awesome

Wedding WebsiteThis web site is a PHP-backed place for wedding guests to login (using information on their invitations), get information about the wedding event, and RSVP—telling the bride and groom how many guests will be attending. The couple can log into the site as administrators to input their guest list, creating logins and passwords for all invitations and creating a person entry for each member of an invited party. It supports differentiating between adult guests, children, and infants for planning meals, as well as “+1” guests, where the invited party can fill in a name for their guest. The guest administration section uses jQuery and AJAX to expand to show details of an invited party when requested. Finally, the admin can run reports on the database, showing how many people have RSVP’d, who has not logged in yet, and the headcount total to give their wedding venue, and email those reports at a regular interval.

The second component of this site is an e-commerce store for a “honeyfund” style gift registry. It allows guests choose activities that they would like to gift the bride and groom to do on their honeymoon. Once they’ve added some gifts the their cart, they can checkout and the site generates a PDF certificate to give along with their gift. The site uses Javascript and jQuery to save the cart while the user is logged in without leaving the page.

The graphics design were done by Lindsey Bistline. I did further template modifications to make the CSS responsive and mobile-friendly.

(Source code has been modified from production version to remove login and database info, and is ready to use.)

Home Lab for Active Directory

To develop my Windows Server and Active Directory beyond what I have done in the workplace, I set up a home lab with multiple servers and clients. I used Hyper-V to expand my capabilities without needing more physical machines, and have gone through several iterations with different setups based on the end result desired, or to match an MCSA test objective I was focusing on. My current setup has two virtual domain controllers, serves DNS, runs networked backup jobs to a separate server, and is setup to use Microsoft System Center for configuration and endpoint security.

Networking Diagram, IP Scheme, and VMs
Physical Topology Diagram

To expand my knowledge in networking administration, I tried several different open-source firewalls until settling on pfSense for my main router on my production network. Further, I delved into the Microsoft networking protocols, like DNS and DHCP, and how they work with other networking systems, like pfSense and dd-wrt, and coupled that with several iterations of Linux web servers running virtually and on a Raspberry Pi.

This physical topology diagram shows the layout of the hardware devices (left) and virtual devices (right) of my most recent home lab design:

PowerShell Script to Compile-on-Modify

Source Code on GitHub 

A script, directly modified from this StackOverflow response, to watch a source code folder and then run a compiler on on modified files. To successfully modify this script, I needed to understand the .NET object IO.FileSystemWatcher, PowerShell’s Register-ObjectEvent, and PowerShell’s ScriptBlock concept, which are akin to anonymous functions or closures.

The script is written to compile Sass files for web design, but could work with any language’s command line compiler. The reason needed this script is because the –watch feature of Sass wasn’t behaving properly on Windows 10, and none of the solutions I found fixed the issues, so I scripted a solution to watch it myself. It’s better to create a solution than to give up!

MediaWiki

Screenshot of a wiki hosted on a private server

This was a simple install and configuration of a MediaWiki on my Linux web server. Additionally, I configured a robust, automatic backup using cron to export the MySQL data and files system and archive it.

The wiki’s purpose is to gather information in an organized fashion for a long-running Dungeons & Dragons tabletop role playing game, one of my hobbies.

PHP Content Management System

Source Code on GitHub 

Production Server: Honeymoon of Awesome

Honeymoon WebsiteThis PHP website is a basic Content Management System for a site with a flat page structure. It includes functionality in the CMS to create and edit pages, modify title and URL for each page, rearrange the navigation menu, and delete pages. Database access is implemented using an object-oriented PHP approach, and hides the PDO managed queries inside a Page class. Focus on the creation of the back end of the CMS was for ease of use and basic security. The front end of the page is a hard-coded template I created (based on a previously created design).

Features that I would like to implement are: increase security, drop-in editing of the HTML/CSS template, hierarchical pages, rich text editor, and media/image management.

(Source code has been modified from production version to remove login and database info, and is ready to use.)

VBScript to Access Database via Internet Explorer DOM

Source Code on GitHub 

This automation script was created to quickly access multiple records in a web-based database. The requirement was to search for a numeric ID, update some properties in the resultant HTML form via the DOM, save, and print the results. Initially developed with a co-worker, the finalized script was revised, debugged, commented, and tested by me for final use by the team on a whole. VBScript was chosen for compatibility with Windows.

Functions include: connect to an Internet Explorer COM object, load a page into IE, wait for pages to load and properly reconnect to page, read information from an HTML form’s DOM, submit information into the page, write to log files, read and write to CSV files, print web pages, & get verified input from user.

(Script has been modified to remove identifying information, but core VBScript methods to work with IE COM objects and the HTML DOM are left intact for reference.)

Script to Write an XML Document

Source Code on GitHub 

A script to write a nested XML file based on file names and properties of a hierarchical directory tree. Uses WIA to read jpeg EXIF data, and then writes those properties to a file, keeping track of the XML tags and indentation level. This is a simple script, and the tags are hard coded into the vbscript, but I built the script with some generic functions and the idea that it could be extended. The purpose of this script is to build an XML document to describe an album of geotagged pictures for a map.

WordPress CV and Portfolio

Yup, it’s this website! WordPress installed from source onto my web server, with modified template, and blogging feature used for portfolio. Simple and stable, with robust backup both from a WordPress plugin and from MySQL/tar archives via a cron job.