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
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.
Writing a Clojure REPL to control a cute Robot over TCP.
Programming Languages: Java, Clojure, Groovy, Prolog, Python
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
University of Düsseldorf: October 2013 - February 2016
Deutschland Stipendium: Scholarship for Academic Excellence October 2014-October 2015
An Algorithm Description Language for Event-B
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.
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.
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.
University of Düsseldorf: October 2010 - September 2013
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.
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.
Fluent in German in speech and writing.
Sprachforum Heinrich Heine Düsseldorf: October 2009 - March 2010
Spokane Falls Community College: September 2007 - June 2009
Spokane, WA, USA
North Central High School: September 2005 - June 2009
Spokane, WA, USA