About Me

...

Hi, I'm Ruan Erasmus. I was born in South Africa and raised mostly in Canada. Over the past few years, I've developed a deep passion for the world of computing, whether it’s building full-stack web applications, managing servers, or working with databases. I take pride in creating practical, reliable solutions that make life easier for users and more efficient for teams. I graduated with distinction from Saskatchewan Polytechnic with a Computer Systems Technology diploma and recently completed my B.Sc. in Computer Science at the University of Saskatchewan, where I am graduating with great distinction. This portfolio site reflects both the foundation built in my CST program and the deeper theoretical and practical work I explored at USask, from operating systems to graphical interface design.

If you’d like to connect or collaborate, feel free to reach out through the contact me page or connect with me on LinkedIn.

Here are some of the topics that I have gained experience in:

  • HTML5 and CSS3
  • Functional Programming
  • Programming in JavaScript, Java, C#, C, and more
  • Data structures and algorithms
  • Server administration
  • Database administration
  • Network administration
  • Operating system administration
  • Data and document management
  • Computer security
  • Computer hardware

About this project:

This web application is composed of a Linux Ubuntu Server, an Apache web server, and a Node.js application which are all running on my own dedicated hardware.

Some technologies used in the development of this application:

Some Other Projects

...
Tor Network Simulation

For our fourth year Computer Networks course (CMPT434), we were tasked with creating groups of two and coming up with a project of our own. For our project, we decided to do a simulation of the tor network using C socket programming. The project has three components/files: a sender.c, receiver.c, and a node.c (which will have multiple instances running at a time). The simulation operates as follows:

  • When the sender wishes to send a message to the receiver, it will choose n nodes, then collects the public key from each.
  • The sender then uses the n public keys to encrypt the message n different times, before sending it to the first node.
  • Each node then uses its own private key to remove an encryption layer and pass it to the next node; until the nth node removes the final layer and passes it to the receiver.

In the screenshot above, we can see the sender in the far top-left, the recevier to it's immediate right, and all the other panes are different nodes running concurrently. In this example, the sender sent the message "Z" through six different nodes and was successfully received and decrypted by the receiver. You will notice that the information at all nodes, other than the last, is encrypted and only the next hop information is readable. The final node will be able to decrypt the message and see the receiver, but it cannot see the sender information. The first node can see the sender information, but it cannot see the receiver information. For any intermediate node in the chain, it can see the next node or the last node, but not the sender or the reciever; these conditions were our measures of success for the project.

...
ruansrecipes.ca

This is a smaller scale project with the purpose of storing and managing treasured recipes for family and friends. It features a full CRUD (create, read, update, delete) system to manage and maintain recipes, file uploads for images, and search functionality (with filtering functionality coming soon). All recipe records are stored in a MySql database, with careful thought put into the layout of the database schema.

Please note that this project is not open to the public, but I will glady give access if anyone is interested.

... ...
Grade Calculator App

Over the Christmas break of 2021, I challenged myself to build an app that I could use to help calculate my grades as I continue through my education. Using this app, I can simply add individual assessments, what I got on the assessment, and what the assessment is worth (shown in top left photo), and then the app will then determine my floating average (what my current average is), as well as my accumulative average (what my average would be if I got all zeros for the rest of the semester) in that particular course.

On the Home page, I can see the calculated current final grades for up to 10 courses, as well as remove or add them into the calculations (using the switches beside the rows). Towards the top of the home page, I can see my current overall program average, my current accumulative program average (The grade that I would have if I got all zeros for the rest of the semester), as well as my floating average.

All of the data for the app is stored in an SQLite database and will remain there until you explicitly reset the database through the settings in the top-right corner of the application. I find that this app works very well for myself and provides accurate results, but before I can release it to the public, I need to make some of the controls a bit more intuitive, or provide some sort of instructions.

...
Linux Ubuntu Server / Apache Web Server

To host this project/site, as well as a few projects/sites for my fellow cohort, I setup an Apache web server and Ubuntu Server which are running on my own dedicated hardware. I thoroughly enjoyed configuring the server and the process really helped me solidify the concepts and material that we are learnt in our Linux operating systems administration course.

In the future I hope to set up an API server of my own that can host a database and serve up content for me to use. I also hope to setup my own DNS server soon, and moving my DNS records from the public DNS into my own server (to help solidify the concepts around the name resolution process).

...
Work Order System

For our projects class in the Computer Systems Technology (CST) program, our group (consisting of myself and five other members) worked with a local software development company to create an extension that will be added onto an existing app of theirs. This project runs on a LAMP stack (Linux, Apache, MySQL, and PHP). This project was both very challenging and very rewarding. In order to complete the project, we needed to learn how to code in PHP, how to work with various new testing frameworks, how the client's system works internally, and how we can effectively add on to it.

The project was completed using Agile software development, and the test-driven development practice was followed throughout the life of the project. After the project was completed, myself, my group members, as well as the other groups in my cohort, presented our projects at Innovation Place to people currently working in the IT/software development industry, our clients, and our fellow classmates.