Hiya, I'm Vivian (she/her), also known as Eris.
Currently in University studying Computer Science in 3rd Year. I'm mainly interested in lower level programming such as development in C++ or Rust.
While I started with Python like a lot of people, I've since moved on to using statically typed languages. Python's lack of a concrete type systems leads to frustrating runtime errors. I do use Python for Advent of Code as it's quick to develop solutions to the typical string manipulation problems.
I also have experience with using C# and Unity for Game Development, mainly entering solo Game Jams. While I've not won any outright, I've placed well for Gameplay, Theme and Graphics before. I've also received over 3000 views on itch. While I've not released any commercial games, I hope to do so one day.
I've moved on to statically typed languages such as C++, Rust and Haskell. And sadly I've had to use Java for my University Degree. Since I started to learn Rust in 2022, it has become my primary language for developing with. I do love Functional Programming but most of the time it feels more convenient to develop in a more conventional language.
For a graphics coursework we were tasked with developing an image manipulation program capable of gamma correction, interpolation and cross correlation. We were not restricted on language, so I chose to do mine using Rust and the wgpu crate utilizing the performance of shaders. This also allows me to compile to WebAssembly to run in the browser. I used egui to draw a GUI which the user can tweak the settings with. The code is available here.
All the calculations is done in the Shaders. Gamma Correction creates a lookup texture as it was required for the marks of the coursework. For interpolation, you can choose between nearest neighbor and bilinear interpolation. The program can scale images up to several times their size, this is dependent on your hardware configuration and the max 2d texture buffer your GPU can create. This limit is smaller on web. You can toggle cross correlation on and off, and it will apply the laplacian matrix. The matrix can be tweaked via the interface.
Image Scaled to 2 times the size
Gamma corrected to 0.25
Cross Correlation applied with the Laplacian Matrix
Ray Marching is an rendering technique use to render volumes. It's one of the first graphics programming projects I did. It is written in Python which doesn't make it the most performant but does produce some nice images. The code is available here.
Below is two spheres merged together using a smooth union, above a plane which is distorted with by a wave function. The background is faded into a colour after a certain distance.
I ported a simple ray tracer I had written in python to run on the Numworks graphical calculator. Takes about 30 minutes to run on the 1st generation Numworks calculators, but on the web version it finishes in about 30 seconds. The code is available here.
Only simple reflections are implemented, as much more would not be performant enough on the hardware.
Running on web emulator
Running on real hardware
I think I've built around 4-5 ECS implementations now as the paradigm interests me. With plans to implement a final implementation in the form of a full programming language based around the paradigm. The 2 main ones are:
An ECS based off of bevy which is a powerful game engine built in Rust. Game Development in Rust seems to lend itself to the ECS paradigm due to the constraints of the language. This ECS implementation uses Rusts powerful type system to build systems out of method type definitions. To do this it defines a trait for function definitions and a pyramid macro to generate the type definitions for all possible variations. This is also the only ECS implementation in which I've implemented an Archetype System, for efficiently storing and querying fragments of components.
A weirdly unique ECS built with the intention of using it for a Coursework, but we steered in a different direction. Used Java's Runtime Retention Annotations and Reflection API to take tagged methods and turn them into systems. It has Queries, Resources and Locals. This could be optimized and expanded further, but I had no intention of ever using this for a real project. It is packaged for Maven and available here, but I wouldn't necessarily recommend usage of the library.
For a University Coursework we were put into groups of 6 and tasked with designing and developing a clone of the 1989 video game Chip's Challenge using Java and the JavaFx library. Most of my group lacked experience in programming or coordinating a team, so I took the role of the team leader and organized the Repository.
For design I first started designing it using the ECS paradigm and this led me to writing my ECS implementation in Java. But we ended up using the simpler approach of a classical inheritance hierarchy.
We met the entire spec of the coursework and even extended it further than required. I implemented a lighting system which simulates light falloff by flood filling the tiles around. The colours and spread values could be modified from the level file. I had considered using a ray tracing approach, which would've provided a more accurate simulation, but I decided this would've been too complicated given the time remaining. We also implemented an animation and particle system.
Default lighting model
Lighting model with altered colours and throw
Demonstration of some particle effects and animations
This is the only Game Project I have which is public, available here. Implemented as a fun project to try to recreate the traversal mechanics present in the lovely game Patrick's Parabox. The game features boxes within boxes within boxes... possibly even containing themselves.
I have participated in the occasional Game Jam mostly solo but some with a friend. I have over 3000 views on Itch and have placed well in multiple categories. Sadly I've not ever won a Jam, but maybe I will eventually. I've managed 1st place in Theme, Gameplay and Graphics before (across multiple jams).
Games can be played on my Itch Page. While they are not super polished experiences and haven't been updated since the jam. My 3 best entries are:
Lisp is a family of programming languages, originally conceived in the 1950s. It's a functional language characterized by everything being surrounded in brackets.
I built my own Lisp Interpreter with minimal dependencies in Rust from scratch, available here. Definitely one of the projects I am proudest of. The implementation uses a handwritten parser, which generates an Abstract Syntax Tree. I'm then walking the AST and executing the program code. The implementation uses garbage collection and performs tail call optimization when possible. I've even managed to solve some basic Advent of Code problems with the Interpreter.
The Interpreter can be used standalone or as a REPL.
ECSL is a programming language which I am developing for my University dissertation.
The concept is a compiled language built around the Entity Component System paradigm. This will allow the idiomatic use of Resources and Querying the World, and could lead to program optimizations which apply specifically to ECS. My intention is to compile to byte code and build a VM which will allocate space for all the types of components which are present in the program. The VM will also handle the scheduling of systems such that they are run without the accessed resources conflicting.
I hope to develop this language fully as part of my dissertation, and even continue work on it if it appears promising.
I've been using Linux regularly since 2022 on my laptop and in 2023 started using Linux as the primary OS on my PC. While I'm no System Admin, I view maintaining and tinkering with my System to just be a Hobby.
I started out with Mint but quickly move to Arch Linux. While I started with KDE, I eventually moved to xmonad, a tiling window manager written and configured in Haskell. This appealed to me because of how powerful I could see it being, but I ended up configuring it once or twice and leaving it as is. While I love the Arch Linux ecosystem, I did manage to brick my system at least twice from bad package manager updates.
Moving to NixOs was a breath of fresh air, it's a distro based on the powerful Nix package manager where you configure your entire system in .nix files. My entire system is backed up in git, and I've managed to reinstall my entire system in around 10 minutes before. My system config is available here on my GitHub. I also switched to using hyprland at the same time which is a great TWM and does everything I want.
Quarto is a 1v1 board game played on a 4x4 board, with 16 pieces. Players take turns by choosing a piece for the other player, which they must then place on the board. Each piece is either:
I built an implementation of the game in Rust using bitwise logic for optimization. I then implemented the Minimax algorithm in order to create a formidable opponent. When playing against a player which picks randomized moves, the AI beats the random opponent seemingly 100% of the time. While I'm sure my implementation could be improved (such as building a proper interface for the game rather than a CLI), I'm happy that I managed to implement the algorithm successfully. The code is available here.
Prolog is a declarative programming language where you can define rules and facts about a problem and infer solutions. Within Prolog you can define Definite Clause Grammars which is just a syntax for grammars, you can use these for Natural Language Processing. For a University Coursework I was tasked with writing a DCG to accept a given small section of the English Language. During writing this DCG I was faced with no way to properly test the grammar. I ended up writing a Python script which generates some Prolog code, runs it and presents the results nicely, so I could easily iterate and improve the grammar. The script is available here.
% Sentence s(s(NP,VP)) --> np(P, NP),vp(P, VP). % Noun Phrase np(P, np(Det,N)) --> det(P, Det), n(P, N). % Verb Phrase vp(P, vp(V,NP)) --> tv(P,V), np(_,NP). ...
Tests: 14 Passed 0 Failed a man hires the woman --> Passed a man hires the women --> Passed the man hires the woman --> Passed the men hire the woman --> Passed ...