← Home

Interactive Blog Posts

Hands-on explorations of our research papers — interactive demos that let you experience the core ideas.

FSE 2023 Keynote
Towards AI-Driven Software Development: Challenges and Lessons from the Field

Explore how AI transforms each stage of the SDLC. Tune the cost equation to see when GenAI pays off, and toggle context sources to watch suggestions improve.

Findings of ACL 2023
On the Expressivity Role of LayerNorm in Transformers' Attention

Toggle LayerNorm's projection and scaling on/off to see how it changes which keys attention can select. Visualize the "un-selectable key" problem in 2D.

ICLR 2022
How Attentive are Graph Attention Networks?

Click nodes in side-by-side GAT vs GATv2 graphs. See how GAT's attention rankings stay static while GATv2's change dynamically with the query.

ICLR 2021
On the Bottleneck of Graph Neural Networks

Step through GNN message-passing layers and watch information from distant nodes get squashed through bottleneck nodes. Add shortcut edges to see relief.

OOPSLA 2020
Programming with a Read-Eval-Synth Loop

Write expressions with holes and examples in a RESL console. Watch synthesis candidates appear ranked by how well they match your specification.

OOPSLA 2020
Adversarial Examples for Models of Code

Watch DAMP attack a code model by iteratively renaming variables. See the prediction shift in real-time, then toggle defenses on.

OOPSLA 2020
A Structural Model for Contextual Code Changes

Make an edit in one location and see the model predict correlated edits elsewhere. Watch edit paths light up on the AST.

OOPSLA 2020
Neural Reverse Engineering of Stripped Binaries

Compile and strip a C function, then watch NERO analyze the control flow graph to recover the original function name.

ACL 2020
A Formal Hierarchy of RNN Architectures

Pick an RNN architecture and see which formal languages it can recognize. Watch internal state evolve as strings are processed character by character.

ICML 2020
Structural Language Models of Code

See how AST paths provide richer context than flat tokens for code completion. Compare structural vs token-based model predictions side by side.

POPL 2019
code2vec: Learning Distributed Representations of Code

Enter code and see AST paths extracted, attention weights computed, and method names predicted. Explore how path-contexts capture code semantics.

ICLR 2019
code2seq: Generating Sequences from Structured Representations of Code

Watch the decoder generate method name subtokens one at a time, attending to different AST path-contexts at each step.

NeurIPS 2019
Learning Deterministic Weighted Automata with Queries and Counterexamples

Step through the weighted L* algorithm building an observation table and hypothesis automaton from membership queries.

ICML 2018
Extracting Automata from Recurrent Neural Networks

Watch L* extract an interpretable DFA from a black-box RNN. See the observation table grow and the hypothesis automaton evolve step by step.

ACL 2018
On the Practical Computational Power of Finite Precision RNNs

Adjust precision from 2-bit to infinite and watch how RNN counting ability degrades. See why practical RNNs are limited to regular languages.

PLDI 2018
A General Path-Based Representation for Predicting Program Properties

Click pairs of AST leaf nodes to see the connecting path highlighted. Explore how paths capture syntactic patterns for property prediction.

ICSE 2018
Programming Not Only By Example

Give examples to a synthesizer, then answer disambiguating questions to prune candidates. Watch the candidate count shrink to one correct program.

VMCAI 2018
Generating Tests by Example

Provide one example test and watch the system generate a comprehensive test suite targeting edge cases and different code paths.

ASPLOS 2018
Statistical Reconstruction of Class Hierarchies in Binaries

Compile and strip a C++ program, then watch the system reconstruct the class hierarchy from vtable patterns and constructor signatures.

ASPLOS 2018
FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware

Scan firmware for known CVEs using strand-based matching. See how FirmUp detects Heartbleed even across different CPU architectures.

PLDI 2017
Similarity of Binaries through Re-optimization

Compare binaries from different compilers. Watch re-optimization bring them to canonical form, revealing their underlying similarity.

CAV 2017
Synthesis with Abstract Examples

Move beyond concrete examples to abstract specifications like "any positive integer." See how abstract examples constrain synthesis more effectively.

COLT 2017
Learning Disjunctions of Predicates

Place membership queries on a 2D plane to learn a disjunction of predicates. Watch the hypothesis region converge to the target concept.

WSDM 2017
Synthesis of Forgiving Data Extractors

Build redundant extraction strategies for web data. Mutate the HTML and watch forgiving extractors survive while rigid ones break.

ONWARD 2016
Extracting Code from Programming Tutorial Videos

Step through a simulated video timeline and watch code being extracted frame by frame via region detection, OCR, and temporal diffing.

ONWARD 2016
Leveraging Natural Language Descriptions for Program Similarity

Compare code snippets using token, structural, and NL-based similarity. See how natural language descriptions bridge semantically equivalent but syntactically different code.

KDD 2016
Lossless Separation of Web Pages into Layout Code and Data

Align multiple product page DOMs to separate template from data. Reconstruct any original page from the extracted template and data table.

PLDI 2016
Statistical Similarity of Binaries

Extract instruction strands from binary functions and match them statistically. See how strand-based comparison survives cross-compiler differences.

POPL 2016
Estimating Types in Binaries using Predictive Modeling

Watch a model predict variable types from assembly usage patterns. See how FPU instructions signal floats and dereferences signal pointers.

ICSE 2016
Cross-Supervised Synthesis of Web-Crawlers

Use one website's known structure to automatically synthesize an extractor for a different site in the same domain.

VMCAI 2016
D3: Data-Driven Disjunctive Abstraction

Watch data-driven refinement split imprecise abstractions into tight-fitting disjuncts on a 2D state space visualization.

OBT 2015
Code Similarity via Natural Language Descriptions

Explore how natural language descriptions provide semantic signals for code similarity beyond syntactic structure.

VMCAI 2015
Effective Abstractions for Verification under Relaxed Memory Models

Visualize store buffers under TSO and PSO memory models. See how abstraction reduces verification state space from 48 to 12 states.

OOPSLA 2014
Abstract Semantic Differencing via Speculative Correlation

Compare two program versions: see a big textual diff vs a precise semantic diff that shows only the behavioral change.

PLDI 2014
Tracelet-Based Code Search in Executables

Extract tracelets from a binary's CFG, then search for matching functions in a target binary using tracelet matching.

PLDI 2014
Code Completion with Statistical Language Models

Compare alphabetical vs statistically-ranked code completions. See how n-gram models put the right completion first.

PPOPP 2014
Practical Concurrent Binary Search Trees via Logical Ordering

Watch two threads operate on a BST simultaneously. See how logical ordering prevents conflicts without complex locking.

SAS 2014
Synthesis of Memory Fences via Refinement Propagation

Watch memory operations get reordered by the processor, then see minimal fences synthesized to prevent buggy behaviors.