Here you will find a list of graduate courses that I have taken at the University of Waterloo together with links to my course projects. I hope that you find them useful.

CS848 Advanced Topics in Databases: Large Scale Data Management

With the proliferation of large-scale distributed systems, there is a need to store, integrate and manage data that are consumed and produced by applications and services, many of geographical scale, that these systems support. Examples of such applications and services include cloud data services and graph data systems. This course will look at research problems and solutions in these areas, which lie at the intersection of distributed systems and database systems. It will provide students with enough background to enable them to understand the current research being done in this area, and to pursue research in the area.

Paper Presentation: The Hadoop Distributed File System

Final Project: Benchmarking Failover Characteristics of Large-Scale Data Storage Appciations: Cassandra and Voldemort (proposal, presentation)

CS854 Advanced Topics in Computer Systems: Cloud Computing and Management

This course provides an in-depth understanding of cloud computing concepts and technologies including datacenter network design, resource and performance management, energy management, security, and software defined networking.

Paper Presentation: DeTail: Reducing the Flow Completion Time Tail in Datacenter Networks

Final Project: Components of a Scalable Web Hosting Platform using a Clound and Peer-to-Peer Hybrid Architecture (proposal)

CS856 Advanced Topics in Distributed Computing: Performance Modelling and Analysis

This course is focused on the use of techniques in modelling and analysis to study the performance of distributed systems and networks. Topics to be discussed include cloud computing; resource virtualization; distributed applications such as web based systems and information delivery;and network resource management.

Paper presentation: Scalability Analysis of the Hierarchical Architecture for Distributed Virtual Environments

CS798 Advanced Research Topics: Scripting Languages

The purpose of this course is for students to learn about the fundamental programming language concepts and features in scripting languages, and to gain practical experience with a number of scripting languages through homeworks, programming exercises and a course project.

You can see the JavaScript version of the Letter Lizard game that I made as part of our course project on the Letter Lizard page. You can also download the source code for the JavaScript version on that page. The source code link below takes you to a copy of my group's git repository on Github that contains the source code for our entire project including the Python and Lua versions of Letter Lizard.

Final Project: A Comparison of Python, JavaScript and Lua Scripting Language Features (presentation, source code)

CS758 Cryptography/Network Security

Cryptographic protocols and their application to secure communication, especially in a network setting. Identification and entity authentication; protocols for key establishment, transport, agreement and maintenance; secret sharing, broadcast encryption, tracing schemes; certificates, public-key infrastructure, PGP.

Final Project: Practical Cryptography for a Peer-to-Peer Web Browsing System (proposal, presentation, source code)

CS745 Computer-Aided Verification

This course introduces the theory and practice of computer-aided verification for the design and analysis of digital systems (i.e., hardware and software systems). It emphasizes formal methods, i.e., techniques based on logical reasoning and mathematical modelling, which are gradually being incorporated into CASE and CAD tools. These techniques have been used to find subtle, critical logic and safety errors in industrial hardware and software systems.

Final Project: Application of Epistemic Logic Methods to Fault-Tolerance and Program Recovery

CS666 Algorithm Design and Analysis

Advanced algorithmic approaches and methods of assessment that reflect a broad spectrum of criteria, including randomized algorithms, amortized analysis, lower bounds, approximation algorithms, and on-line algorithms. Particular examples will be chosen from different areas of active research and application.

Paper Presentation: Rank-Pairing Heaps