Education
PhD Computer Science
MSc Computing Science
BSc Computing Science
Technical Skills
Programming languages
- Python
- C
- Rust
- JavaScript
- TypeScript
- Erlang
- Java
- Ruby
- PHP
- Perl
- POSIX shell script
- Awk
- C++
- PL/SQL
- R
- Scheme
- C#
- Scala
- Haskell
- 6502 Assembly
- MIPS assembly
- Databases
-
SQL, Redis, MongoDB, SPARQL, ElasticSearch
- Editors
-
Vim, IntelliJ, Visual Studio Code, Eclipse
- OSs
-
macOS, Ubuntu/Debian Linux, OpenBSD, other Linux distributions
- Version Control
-
Git, Mercurial
- Miscellaneous
-
Docker, Vagrant, HTML, CSS, LaTeX
Natural languages
- English
- fluent reading, speaking, writing
- Spanish
- fluent reading; semi-fluent speaking, writing
- nêhiyawêwin (Plains Cree)
- beginner reading, speaking, writing
Work Experience
Assistant Lecturer
-
Create syllabi, lecture slides, assignments
-
Deliver lectures in person and online
Teaching Assistant
-
Supervise students on software engineering projects (COMP3030J, COMP3032J).
-
Create lab presentations and develop assignments for high-performance computing (COMP3036J).
-
Assist students with C programming (COMP1002J).
Application Development Specialist
-
Work on the Indigenous Languages Technology Project.
-
Develop open source applications for Indigenous languages (e.g., Plains Cree, SENĆOŦEN, Michif, Tsuut’ina, Makah, Piaroa).
-
Collaborate with representatives from language communities and linguists.
-
Implement morphological computational modelling and predictive text for polysynthetic languages.
-
Supervise student interns.
Software Developer
-
Write code that cleans and organizes field recording validation data.
-
Interpret requirements and deliver work in incremental sprints.
-
Create a web application in Flask/SQLAlchemy to assist in manual recordings validation.
Teaching assistant
-
Lead CMPUT 296 (Front-end Web Development) labs.
-
Create novel, exploratory labs on web technologies.
-
Mark lab assignments.
-
Support and mentor students learning the material.
Course design assistant
-
Write, edit, and produce video tutorials for CMPUT 175 (CS2) teaching introductory Python and presenting fundamental computing science concepts.
-
Create quizzes to effectively test knowledge.
Teaching assistant
-
Lead CMPUT 301 (Software Engineering), CMPUT 404 (Web Development).
-
Lead demonstrations in software engineering and web development topics.
-
Improve quality of lab assignments.
-
Mark lab assignments.
-
Support and mentor students learning the material.
Research assistant
-
Research and develop state-of-the-art methods in crash report deduplication.
-
Perform experiments and empirical evaluations of technologies.
-
Write, test, and deploy production-quality implementations of novel algorithms.
Lead developer
-
Collaborate intensively with colleagues in medicine on a virtual patient simulation platform.
-
Research, evaluate, and integrate medical ontologies.
-
Write a web application using PHP, JavaScript, and React.
-
Experiment with databases such as Virtuoso, Neo4j and MongoDB.
-
Support and maintain a legacy PHP web application.
Computing Science tutor
-
Tutor students in introductory computing science, primarily using C and Python.
-
Proactively find resources that will help the student succeed.
-
Guide students to find the answer for themselves.
-
Promote active thinking rather than rote memorization.
Teaching assistant
-
Lead SCI 100, Computing Science component.
-
Assist students learning Python as their first programming language (CS1).
-
Evaluate student coursework.
Lead developer
-
Write a robust and versatile web crawling service using a variety of technologies including Scrapy, and PhantomJS duck-taped together using an Erlang load-balancer and Redis.
-
Expose the web crawling daemon as a service with a Node.JS web server.
-
Assist in development of the website front-end.
-
Configure and maintain custom daemon processes on Ubuntu 12.04 servers.
-
Patch a memory leak in an open source library (MongoDB Erlang Driver) used in a server program.
Web developer
-
Create and maintain existing web demos for text processing tools using JavaScript, jQuery, and D3.
-
Develop a database abstraction library in Java for interoperation between our various text processing tools and an assortment of persistence tools (including MongoDB).
-
Develop a simple CoffeeScript Node.js app for bridging the web demos to the text processing tools.
Web developer
-
Update a legacy PHP web application
-
Create database migration tools to transition from a SQL database schema to a more maintainable (i.e., normalized) schema.
-
Employ the use of full-text indices for measurably faster text search queries.
-
Design simple, clean CSS for the website.
Web developer
-
Develop a PHP-backed web game for human computation.
-
Created an MySQL backed game server.
-
Linux system administration.
Publications
My OCRID: orcid.org/0000-0001-5337-715X
- “Computing Education in the Era of Generative AI,” 2024. ,
- “Always Provide Context: The Effects of Code Context on Programming Error Message Enhancement,” 2023. ,
- “Teaching Students To Use Programming Error Messages,” 2023. ,
- ““It’s Weird That it Knows What I Want”: Usability and Interactions with Copilot for Novice Programmers",” 2023. ,
- “Applying Software Engineering Anti-patterns to Programming Error Messages,” 2023. ,
- “Programming is hard—or at least it used to be: Educational opportunities and challenges of AI code generation,” 2023. ,
- “My AI Wants to Know if This Will Be on the Exam: Testing OpenAI’s Codex on CS2 Programming Exercises,” 2023. ,
- “What makes a programming error message good?,” 2022. ,
- “The Human Factors Impact of Programming Error Messages (Dagstuhl Seminar 22052),” 2022. ,
- “Gi2Pi: Rule-based, index-preserving grapheme-to-phoneme transformations,” 2022. ,
- “On the Computational Modelling of Michif Verbal Morphology,” 2021. ,
- “The Indigenous Languages Technology project at NRC Canada: An empowerment-oriented approach to developing language software,” 2020. ,
- “Design and evaluation of a smartphone keyboard for Plains Cree syllabics,” 2020. ,
- “OCR evaluation for the 21st century,” 2019. ,
- “How does Docker affect energy consumption? Evaluating workloads in and out of Docker containers,” 2018. ,
- “Syntax and Sensibility: Using language models to detect and correct syntax errors,” 2018. ,
- “Visualizing Project Evolution through Abstract Syntax Tree Analysis,” 2016. ,
- “Training & Quality Assessment of an OCR Model for Northern Haida,” 2016. ,
- “Judging a commit by its cover; correlating commit message entropy with build status on Travis-CI,” 2016. ,
- “The unreasonable effectiveness of traditional information retrieval in crash report deduplication,” 2016. ,
Presentations and Lectures
- Introduction to Rust (2024) [Slides]
- You don't know LaTeX (2023) [Slides]
- Introduction to Unicode (2023) [Slides]
- Why are there so many programming languages? (2022) [Slides]
- Stop Writing JavaScript! Or; how to use plain HTML and CSS to impress your friends and vanquish your enemies! (2021) [Slides]
- How to be a time-traveller with git (Git Workshop) (2020) [Slides]
- Deploying static websites with Zeit and Parcel (2020)
- Pipenv vs. Poetry (2020) [Slides]
- Demystifying CPython Bytecode (2019) [Slides]
- What is a __repr__? (2019) [Slides]
- Statically-typed Python (2019) [Slides]
- Advanced Unicode (for people who skipped Introduction to Unicode) (2019) [Slides]
- Unicode and You! An Introduction to Unicode in Python (2018) [Slides]
- Prototypes: A beginner's guide (2016) [Slides]
- Unicode! (And how ES6 can help) (2016) [Slides]
Hobbies and Volunteering
-
Computer science tutor for Ada’s Team; leader of the Git Workshop.
-
Canada Learning Code lead instructor and mentor.
-
Teach Python as part of Edmonton Public Library’s Community Expert program.
-
Mentor for DiscoverE Summer Camps.
-
Created syllabics.app — a Western Cree syllabics converter.