About Me

What have I done?


During my studies, I had the wonderful opportunity of working with the STUPS research group at the University of Düsseldorf.

The STUPS has developed the ProB tool chain to verify formal specifications. Formal specifications are mathematical specifications of a system using higher order logic and set theory. They can be verified via model checking and animation using a model checker like ProB, or via proof using a tool like the Rodin Platform

The kernel of the ProB application is written in SICStus Prolog. In order to be able to integrate it into a wider range of applications, we implemented a Java API for ProB in Java and Groovy. I was able to participate in the development process of the Java API from conception to production. Over the course of the project, I gained a lot of practical experience, including:

  • Programming with Java and Groovy using the Eclipse IDE

  • Using the Eclipse RCP framework to create a Plug-in for the Rodin platform

  • Embracing the web technologies HTML, CSS, JavaScript, JQuery, JUnit, and mustache to create a user interface for the ProB Java API.

  • Using Clojure and ClojureScript to create a standalone server application for the ProB Java API.

  • Using the profiling software YourKit to decrease memory usage and identify memory leaks.

  • Working in conjunction with industry partners during the course of the ADVANCE project.

Thanks to my connections at the university, I was also able to get involved with the RheinJUG, the Java User Group in Düsseldorf. The organization finds excellent speakers and offers bi-monthly lectures on industry relevant topics. In 2011, I started to attend regularly and also started to volunteer, helping to set up the venue before each talk. In January 2014, I became an official member of the organization and help set up equipment, man the camera, and announce future events via social media.

See my GitHub profile for a sample of my work.

As a Software Consultant for innoQ, I have had the opportunity to work on various projects. There I have gained a lot of experience, including:

  • Creating Java Web Applications using Spring Boot.

  • Creating Web Front-ends based on the ROCA Architecture Style.

  • Modeling Requirements using Neo4J.

  • Working with Microservices within a Kubernetes Cluster.

  • Investigating Web Security and Microservices in Clojure.

  • Writing a Clojure REPL to control a cute Robot over TCP.

What can I do?


  • Programming Languages: Java, Clojure, Groovy, Prolog, Python

  • Web technologies: Spring Boot, JavaScript, ClojureScript, HTML, CSS, D3, JQuery, mustache, Thymeleaf

  • Databases: Neo4J, SQL, Cassandra

  • Testing: JUnit, Selenium, Spock

  • Software Development Tools: Eclipse, IntelliJ, Maven, Gradle, Git, JIRA, Scrum, YourKit, EclEmma, Jenkins

  • Other: LaTeX, Mac OS, Linux, bash

What have I accomplished?


Master of Science in Computer Science

University of Düsseldorf: October 2013 - February 2016

GPA: 1,01*

Honors

Deutschland Stipendium: Scholarship for Academic Excellence October 2014-October 2015

Dissertation Topic

An Algorithm Description Language for Event-B

Course Work

Functional Programming

Learning the principles of program design and simplicity. Using immutable data structures and higher order functions to decouple data and behavior and create smaller components which can then be composed.

Project: Implemented a Petri net simulator in ClojureScript

Dynamic Programming Languages

Learning the basic concepts of dynamic languages: dynamic typing, reflection, and multiple inheritance and how to write an interpreter for a dynamic programming language.

Project: Implemented an interpreter for a dynamic prototype-based programming language.

Advanced Computer Networks

Studying and presenting on research papers in the field of computer networks to increase knowledge base and learn which discoveries were considered ground breaking in the field.

Advanced Logical Programming

Learning advanced concepts in logical programming: abstract interpretation, SAT and SMT solving, constraint based solving, and partial evaluation.

Course work: Implemented a simple abstract interpreter in Prolog. Wrote a simple SAT solver. Implemented a partial evaluator for Prolog in Prolog.

Network Security

Learning how to exploit weaknesses in systems in order to understand how to better protect networks against intruders. Covered exploits at all levels in the system.

Course work: Exploited multiple virtual systems via buffer overflow exploits, DOS viruses, and security holes in web applications. In a group, set up a small network with firewalls, a proxy, and an intrusion detection system.

Safety Critical Systems

Exploring how formal methods can be used in order to discover and prevent safety or security vulnerabilities from appearing in software. Learning the basics of modelling using the Event-B specification language and the basics of verification via proof (using the Rodin tool) and via model checking and animation (using the ProB tool).

Project: Modelled a landing gear system for an airplane using Event-B.

Efficient Algorithms

Learning the basics of efficiency for algorithms. Examining and analyzing algorithms used for algebraic calculations, problems in number theory, and sorting algorithms.

Algorithms for Drawing Graphs

Learning how to use algorithms to draw aesthetically pleasing trees, planar graphs, and multigraphs.

Bachelor of Science in Computer Science

University of Düsseldorf: October 2010 - September 2013

GPA: 1,5*

Dissertation Grade: 1,0*

Dissertation Topic

Course Work

Compilers

Learning the basics of how to write a parser, interpreter, and compiler for a given programming language.

Course Work: Implemented a compiler from Pascal to JVM bytecode in Java using SableCC for parser generation.

Introduction to Logical Programming

Learning the basics of the Prolog programming language and the logical programming paradigm.

Course Work: Implemented an interpreter for a simple imperative program in Prolog.

Computer Networks

Learning the basics of computer networking and the communication protocols for each layer in a network (HTTP, TCP, IP, Ethernet,etc.).

Course Work: Group exercise to set up a small network. Practical exercise using IPv6.

From NAND to Tetris

Learning how to build a computer from the ground up. Based on this course.

Course Work: Using simulation tools, implemented each level in the computer architecture from logical gate to operating system.

C1 level in German

Fluent in German in speech and writing.

Sprachforum Heinrich Heine Düsseldorf: October 2009 - March 2010

Associates of Arts

Spokane Falls Community College: September 2007 - June 2009

Spokane, WA, USA

GPA: 3.96 (A)*

High School Diploma

North Central High School: September 2005 - June 2009

Spokane, WA, USA

GPA: 4.0 (A+)*

Valedictorian