About me
I am a lecturer in Cornell's computer science department.
I'm interested in the process of programming, and in tools and techniques
that can help programmers design software that is correct, secure, and
efficient.
I will receive my Ph.D. from Cornell University in 2013, under the
guidance of Andrew Myers.
I received a BA in mathematics and a BS in computer science from the
University of Rochester in 2003. I also received an MA in mathematics
from the University of Rochester in 2004.
My Ph.D. research focuses on building decentralized distributed systems
that guarantee strong security properties. I am a lead developer of
Fabric, a
programming language and runtime system that use information flow
analysis to protect users' information, even in the presence of partially
trusted code running on a partially trusted platform.
Teaching
- Instructor — Design and Analysis of Algorithms (CS 4820, Summer 2013)
- Greedy algorithms, dynamic programming, divide and conquer, NP
completeness, undecidability, proofs of correctness, asyptotic
complexity.
- Instructor — Object Oriented Programming and Data Stuctures (CS 2110)
- Java, object oriented programming, design patterns, introductory data
structures and algorithms, GUI programming.
- Teaching Assistant — Advanced Programming Languages (CS 6110)
- Operational semantics, denotational semantics, language features
and translation, type systems.
- Teaching Assistant — Honors Calculus (Math 171-174)
- Proofs and formal reasoning, axiomatic definition of real numbers,
limits, derivatives and integrals, multivariate calculus, linear
algebra.
- Teaching Assistant — Computer Models and Limitations (CS 280)
- Formal languages and automata, pumping lemmas, the Chomsky hierarchy,
Turing machines and algorithmic universality, noncomputability and
undecidability.
Publications
- Sharing Mobile Code Securely With Information Flow Control (Oakland 2012).
- We introduce a new architecture for secure mobile code, with which
developers can securely use, publish, and share mobile code across
trust domains. This architecture enables new kinds of distributed
applications, and makes it easier to securely reuse and evolve code
from untrusted providers.
- Fabric: A Platform for Secure Distributed Computation and Storage (SOSP 2009).
- Fabric is a new system and language for building secure distributed
information systems. It is a decentralized system that allows
heterogeneous network nodes to securely share both information and
computation resources despite mutual distrust.
Other Interests
When I'm not working I'm often playing the piano, playing board games,
watching classic movies, hiking or camping, or engaging in political
discussions. I also have a few unfinished programming projects that I
poke at every now and again:
- WB+
— An Android app for recording lectures.
- JAlgebra
— A Java library for generic algebraic operations.
- Tangy
— A tangrams game featuring an innovative drag-and-drop
algorithm.
- Jotto
— A word game.