Skip to content

Assoc. Professor of Computer Science
James Madison University.

Office Hours (Fall 2026)

Mon. 14:00-15:30
Tue. 10:00-11:00
Wed. 14:00-15:30
Th. 10:00-11:00

Fall 2026 Teaching

  • CS 227
    Discrete Structures I
  • CS 452
    Algorithm Design and Analysis

Contact

Useful CS Student Links

Social

GitHub Research Gate

Other Places

My Blog: The Obtuse Geometer

My Lab: Ars Geometrica

Software

Coin Unfolding

A screenshot of the Coin Unfolding App

A screenshot of the Coin Unfolding App.

Coin Unfold is for exploring polyhedral coin unfoldings.

Koebe-Lib

A screenshot of the SphericalSketch app of Koebe-Lib.

A screenshot of the SphericalSketch app of Koebe-Lib.

Koebe-Lib is a library for investigating inversive geometry of circles. It has facilities for representing circles / disks one the 2-sphere as well as in other geometries such as Euclidean and Oriented Projective. It includes Ken Stephenson's CirclePack as a dependency for performing circle packing. The code is written in Kotlin and can be used as a Kotlin library. We also have a small application included called SphericalSketch which displays the 2-sphere and a python coding window and allows figures to be constructed using python.

  • Collaborators: Maddie Brower (JMU), Sarah Ciresi (Georgetown'18), Quincy Mast (JMU'18)
  • Koebe-Lib GitHub

KoebePy

KoebePy is a Python library for inversive geometry and circle packing on the Riemann sphere, with sample Jupyter notebooks. In 2025 I built a browser-based front end for it, so that students in the CS Rigidity Theory in the UK program could run live, interactive 2D and 3D constructions in lab and homework.

Escher Studio

A screenshot of Escher Studio showing three levels of the combinatorial chair tiling.

Three levels of the combinatorial chair tiling in Escher Studio.

Escher Studio is a browser-based editor and discovery workspace for hierarchical combinatorial tilings. You write a subdivision rule as a short script, then explore the recursive tiling it generates: trace a tile's ancestry, color by hierarchy level, and embed it with a Tutte (barycentric) embedding or an experimental circle packing. It builds on the ideas of "Escher: An Engine for Exploring Hierarchical Combinatorial Tilings" (Bridges 2024).

Flip & Flow

A screenshot of Flip & Flow: a scrambled circle packing on the sphere, with the buckyball goal and its degree counts beside it.

A Flip & Flow puzzle with the buckyball as its goal.

Flip & Flow is a browser-based circle packing puzzle on the sphere. Each circle stands for a vertex of a triangulation and is colored by its degree; clicking an edge flips it, and the packing flows continuously to the new one. The goal is to reach a target degree pattern, such as the buckyball's. It is based on Ken Stephenson's flip puzzle in CirclePack, and the motion is flip-and-flow (Connelly and Gortler, 2021; Bowers, 2020).

Other

  • KINARI. I collaborate with Ileana Streinu on the protein rigidity analysis software Kinari.
  • JMU CS Interactive Hall Display. I coded the initial framework for the CS department's interactive hall display. The goal is to have students submit additional visualizations and games.
  • JMU Freshman Advising Schedule Generator. A schedule generator for JMU Freshman Advisors that allows advisors to generate advisee schedules for Summer Springboard with useful information like: it takes more than 15 minutes to walk from the Physics/Chemistry building to Memorial.
  • JMU CS Core Course Connections. A visualization of the connections between various CS courses by topic coverage.