Paul Saikko

Projects portfolio

View My GitHub Profile

Projects

back

Machine learning

colorize

Implementing automatic colorization of grayscale images with deep convolutional networks using tensorflow.

tf-style-transfer

A repository for re-implementing and replicating the results of neural style transfer papers. Includes both style transfer by optimizing style loss and by training a feedforward network for the task.

rnn-lyrics

Generating song lyrics using recurrent neural networks. Includes a web demo created with tensorflow.js

opi-tuntemaan-sienet

Using transfer learning to create a classifier for forest mushrooms. Gathering a dataset by (responsibly) scraping the web.

mnist-neural-networks

From-scratch implementation of training a multilayer neural network using backpropagation.

explain-mnist

Exact computation of adversarial examples and minimal explanations using a MIP/MIQP solver for neural network predictions on the MNIST dataset.

Graphics

luola-intro

1k js intro for Assembly 2018. Voxel terrain rendering, heightmap generation, fog effect, and ambient sound generation in under 1 kb of javascript.

raytrace

Minimal CPU-based multithreaded raytracer in C++. Some features include soft shadows, different material types, and real-time computation at small resolutions.

cuda-fractal

Mandelbrot set fractal visualization and exploration using Nvidia CUDA for computation and Qt5 for GUI.

raycast

A small raycasting graphics engine, as seen in e.g. Wolfenstein 3D and the Windows maze screensaver. Written in vanilla javascript.

cartoonify

Forking a cartoon camera project to anonymize a webcam stream in near-realtime using OpenCV.

Algorithms

slow-fourier-transform

Implementing a Fourier transform visualization as seen on 3blue1brown. Plotting in cartesian and polar coordinates with matplotlib.

string-algorithms-project

Java implementations of multiple-exact-string-matching algorithms. Comparisons of Aho-Corasick, Karp-Rabin, and multipattern Shift-And.

interpreter-project

Interpreter for a toy programming language in C#. Includes syntax-tree generation and regex engine for parsing.

human-zip

What if we could compress text while retaining readability by recursively abbreviating common phrases?

Web

rv-stats

A visualization dashboard for snack purchase data, using plotly with python dash backend and pandas for data wrangling.

rally-leaderboard

A highscores leaderboard web app for old PC rally games. With serverless.js backend on AWS lambda and github.io static frontend.

js-soundgen

Code for procedurally creating a .wav file in a browser.

js-heightmap

Creating tileable heightmap textures in javascript using midpoint displacement / diamond-square algorithm.

psaikko.github.io

You’re looking at it. A Github pages site using Jekyll.

Optimization and SAT

LMHS

A weighted partial MaxSAT solver. Ranked first in the 2015 MaxSAT Evaluation.

ASP-HS

Answer set optimization solver of KR’18 paper.

AbHS

Propositional abduction solver of KR’16 paper. Computes optimal abductive explanations with an implicit hitting set algorithm.

sudokugen

Creating sudoku puzzles with provably minimal sets of clues with unique solutions. Uses SAT and SMT solvers via pySAT and pySMT libraries.

bitparallel-dpll

Experimenting with AVX2 instructions to build a bitparallel SAT solver.

tinysat

Minimalistic CDCL SAT solver in javascript. Runs in browser or with node. Live at github.

Games and simulations

mcts-reversi

Algorithms for playing Reversi (Othello). Minimax, UCB1, and UCT (Monte-Carlo tree search) implemented in C++. Includes a tournament setup for evaluating algorithms against each other.

gbe

A playable emulator for the Nintendo Game Boy in C++. Emulates the Sharp LR35902 instruction set, tile-based graphics, and 4-channel audio. Graphics rendered using OpenGL (glfw) and sound output created with OpenAL (alut). Includes savestates and a python API for interacting with the emulator.

boids-sim

Flocking behavior simulation using a boids model. Shows emergent behavior from simple rules, with a javascript sandbox for experimentation.

tsuro-tiles

Computing and drawing all possible tiles for the board game Tsuro.

rally-decode

Reverse engineering old PC rally game save files.

java-sudoku

A visual sudoku solver, which gives step-by-step reasoning for each filled square. BSc data structures project coursework.

java-chess

A chess game with minimax AI and a GUI. First-year BSc programming project coursework.

HexPuzzle

Solving a puzzle with hexagonal tiles. C++ with a Qt gui.

asteroids

Retro-inspired asteroids game in javascript.

cuda-life

Conway’s Game of Life computed on the GPU with CUDA.

Challenges and competitions

AdventOfCode2019

Using the 2019 Advent of Code puzzles to learn Julia.

AdventOfCode2018

Brushing up on Ruby with the 2018 Advent of Code puzzles.

AdventOfCode2017

Python solutions to Advent of Code 2017 puzzles.

reaktor-santa

Scripts for the Reaktor traveling santa competition. Solving a multiple trip, weight-constrained traveling salesperson problem with local search and simulated annealing.

orbital

Solving a shortest-path problem in 3D space given (latitude, longitude, altitude) values.

Hardware

teensy-dual-joysticks

Arduino project using a Teensy board to connect a pair of gameport interface joysticks to a modern PC using USB. Modifies the base USB gamepad code to register as two devices.

led-matrix

A handmade 7x16 LED matrix display. Row and column addressing using shift registers. Controlled by Raspberry PI GPIO pins.

back