Nicholas Folk

Software Engineer, Machine Learning, Web Development

Welcome!

I am currently entering my last semester at UBC in the Bachelor of Computer Science (BCS) program. There are too many topics I would love to continue to learn and not enough time. My main academic interests are algorithms, machine learning, and data mining. Using linear regression, association rule mining, and clustering algorithms, I recently completed a project aiming to find predictive models and relationships between video screencasts and student success using real data from a first year engineering course at UBC. I am looking forward to expanding my knowledge in these areas with more courses in Artificial Intelligence, Machine Learning and Data Mining, and Theory of Computation in the fall.
During my internship at Tasktop Technologies, I learned valuable object-oriented design principles while writing production level code. Working on Tasktop Dev, as well as the open source project, Mylyn, allowed me to gain a handle on some of Java's useful libraries. Mockito and JUnit for test driven development, Guava for manipulating collections and strings as well as for caching, and JGit for use with the Gerrit API are just some of the libraries with which I grew acquainted.
In my personal projects, I have discovered how fun a full Javascript stack can be using Node, Express, and Mongoose/MongoDB for the backend of some of my personal projects and tinkering with Angular and jQuery for the frontend. I have not shied away from the longer standing technologies, however, and have built a basic foundation in SQL, and played around with C/C++ and Python.

Work Experience

Tasktop Technologies

Software Engineer Intern, September 2014 to April 2015


Working on security and authentication features for Tasktop's task management...(click for more) tools, I learned valuable object-oriented design principles while writing production level Java code with an emphasis on test driven development (using the JUnit and Mockito libraries). In particular, I added OAuth 2.0 support for the Google Calendar connector, new artifact types to the Tasktop SDK, and credential prompting and access token sign-in for Tasktop's VersionOne OEM.
Read about my experience on the Tasktop Blog


  • Languages: Java
  • APIS: Gerrit, Google Calendar, JGit, OAuth 2.0
  • Libraries: Guava, Mockito, JUnit, Apache Commons
  • Workflow Tools: Gerrit, JIRA, Mylyn, Bugzilla

Portfolio

Personal Projects

OpEdIt

OpEdIt is a forum to publish articles, write comments, and like or dislike posts. The server side application is written in Node, Express, and Mongoose to access MongoDB, and uses a PassportJS local-strategy with salting and hashing for secure login. The front-end is written in AngularJS and uses Bootstrap for styling. The application is currently in progress and still undeployed.

Perfinn

Perfinn is a personal finance calculator designed, developed, and deployed by myself. Written in vanilla JS, HTML, and CSS, it was one of the first projects that I produced.

Open Source Projects

OpenMRS

OpenMRS is an open source medical records software designed to help fight epidemics in developing nations where paper filing is still a burden on medical care workers. I joined the project this summer, and have refactored the Chart Search Module (a module which provides an extension to the core patient search) to remove duplicate code, support message binding for maintainability, and update public licensing. I am currently adding a "sort by" filter to the search options.
You can read more about my experiences here.

Mylyn

The Mylyn project is a set of Eclipse tools that help developers focus on individual programming tasks and switch between tasks without losing their progress. In addition to release planning and regular maintenance, I added cherry picking support and parent commits to the Mylyn Gerrit connector for easier commit history navigation and a richer user experience.


Languages

Libraries and Frameworks:

Mockito, JUnit, Guava, JGit and Gerrit APIs OAuth 2.0, GWT

Workflow Tools:

Eclipse, Maven, Git, Gerrit, Mylyn, JIRA, Bugzilla

Libraries and Frameworks:

Node, Express, Mongoose, Passport, jQuery, Angular

Workflow Tools:

Webstorm, Git, Github, Atlassian BitBucket, Grunt

Languages:

SQL, MongoDB/Mongoose, Relational Algebra, Datalog

Management Systems:

Some exposure to Oracle and MySQL

Languages that I have tinkered with:

Octave/MATLAB, Python, C/C++, Y86-64 instruction set architecture, PHP, Racket (Lisp family)

Libraries and Frameworks:

PRAW, DrRacket

Workflow Tools:

xCode, Sublime Text

Education

University of British Columbia
Bachelor of Computer Science, GPA: 4.0

Expected Graduation: May 2016

Current coursework:

  • CPSC 404: Advanced Database Systems
  • CPSC 421: Introduction to Theory of Computing
  • CPSC 340: Machine Learning and Data Mining
  • CPSC 322: Artificial Intelligence
  • CPSC 313: Computer Hardware and Operating Systems
Select completed coursework:
  • CPSC 448B: Directed Studies: Research Project in Machine Learning
  • CPSC 448A: Directed Studies: Analysis of Open Source Software
  • CPSC 304: Introduction to Relational Databases
  • CPSC 320: Intermediate Algorithm Design and Analysis
  • CPSC 310: Introduction to Software Engineering
  • MATH 307: Applied Linear Algebra
  • MATH 342: Algebra, Coding Theory and Cryptography
  • STAT 302: Introduction to Probability

Contact

LinkedIn

AngelList