Fixr: Mining and Understanding Bug Fixes for App-Framework Protocol Defects

Tuesday, April 16, 2019

Abstract: Developing interactive apps against event-driven software frameworks, like Android, is notoriously difficult. To create apps that behave as expected, developers must follow complex and often implicit asynchronous programming protocols. Such protocols intertwine the proper registering of callbacks to receive control from the framework with appropriate application-programming interface (API) calls that can then in turn […]

Read More

Quantum Learning from Symmetric Oracles

Thursday, March 28, 2019

Abstract The study of quantum computation has been motivated, in part, by the possibility that quantum computers can perform certain tasks dramatically faster than classical computers. Many of the known quantum-over-classical speedups, such as Shor’s algorithm for factoring integers and Grover’s search algorithm, can be framed as oracle problems or concept learning problems. In one […]

Read More

Chip Design is Pretty Cool: An Intro to Hardware for Software Engineers

Wednesday, April 03, 2019

Abstract:  This talk will present some of the basic principles of chip design including an overview of how chips are manufactured. Then I will give an overview of the complexity of chip design by focusing on addition. While it may seem like a basic operation, people have spent careers optimizing arithmetic circuits like adders. I […]

Read More

Semantic Foundations for Live Programming Environments

Monday, April 08, 2019

Abstract: When programming, it is common to spend minutes, hours, or even days at a time working with program text where there are missing pieces, type errors, or merge conflicts. Programming environments have trouble generating meaningful feedback in these situations because programming language definitions typically assign formal meaning only to fully-formed, well-typed programs. Lacking timely and […]

Read More

Goldilocks the Verification Engineer

Wednesday, March 27, 2019

Abstract: In this talk, I will describe three approaches to verifying distributed systems using inductive invariants: manual proof, automated proof, and invariant inference. These techniques offer increasing levels of automation, but at some cost. I will argue that the middle technique strikes a good balance for users, and that it is possible for a tool to be […]

Read More

Toward Assured and Resilient Autonomous Systems Operations

Wednesday, December 19, 2018

Abstract:  Cyber-physical systems (CPS) and especially autonomous vehicles like drones and driverless cars are becoming increasingly popular thanks to their sophisticated hardware and software capabilities. As they find their way into our society, it becomes imperative to guarantee that they can always be safe even during unforeseen and unpredictable events. Unfortunately, at the moment there […]

Read More

Runtime Monitors for Hybrid Mobile Apps and Other Stories

Tuesday, December 18, 2018

Abstract: The formidable growth of the cyber-threat landscape today is accompanied by an imperative need for providing high-assurance software solutions. In the last decade, binary hardening via In-lined Reference Monitoring (IRMs) has been firmly established as a powerful and versatile technology, providing superior security enforcement for many platforms. IRM frameworks rewrite untrusted binary code, inserting […]

Read More

Teaching Haskell in the Real World

Friday, December 14, 2018

Abstract:  Teaching programming is a hard job. Teaching Haskell is a way harder given its inherent complexity and expectations students have. Nevertheless, there are many approaches to do that. In this talk, I would like to outline the practices that I use and those that I don’t find fruitful. There are quite a few books […]

Read More

Public Tech Talk: Formally Verifying Implementations of Distributed Systems

Thursday, September 13, 2018

Title: Formally Verifying Implementations of Distributed Systems Abstract: Distributed systems are difficult to implement correctly because they must handle both concurrency and failures: machines may crash at arbitrary points and networks may reorder, drop, or duplicate packets. Further, their behavior is often too complex to permit exhaustive testing. In this talk, we’ll survey the Verdi […]

Read More

The Lean Theorem Prover: Past, Present and Future

Friday, August 03, 2018

Abstract: Lean is an interactive theorem prover and functional programming language. Lean implements a version of the Calculus of Inductive Constructions. Its elaborator and unification algorithms are designed around the use of type classes, which support algebraic reasoning, programming abstractions, and other generally useful means of expression. Lean has parallel compilation and checking of proofs, […]

Read More