The Beer Feed is a React.js application that is powered by the Untappd API. It continuously processes the checkin feed for a number of cities and displays only the highly rated checkins and where to find them. You can find the source code available here.
Live VersionI was previously a graduate student at The Rochester Insitute of Technology
and before that was an undergrad at The University of Minnesota.
Software Transactional Memory (STM) is a concurrency abstraction, where programmers denote transactions with an atomic construct that delimits a collection of reads and writes to shared mutable references. The runtime system then guarantees that all transactions are observed to execute atomically with respect to each other. Traditionally, when the runtime system detects that one transaction conflicts with another, it aborts one of the transactions and restarts its execution from the beginning. This can lead to problems with both execution time and throughput. In this work, we developed a novel approach that uses first-class continuations to restart a conflicting transaction at the point of a conflict, avoiding the re-execution of any work from the beginning of the transaction that has not been compromised. In practice, this allows transactions to complete more quickly, decreasing execution time and increasing throughput.
Read The PaperInlining is an optimization that replaces a call to a function with that function's body. Another optimization, copy propagation, replaces a redundant copy of a still-live variable with the original. These two optimizations are practical to implement and effective in first-order languages, but in languages with lexically-scoped first-class functions (aka, closures), these optimizations are not available to code programmed in a higher-order style. With higher-order functions, the analysis challenge has been that the environment at the call site must be the same as at the closure capture location, up to the free variables, or the meaning of the program may change. Olin Shivers' 1991 dissertation called this family of optimizations superĪ and he proposed one analysis technique, called reflow, to support these optimizations. Unfortunately, reflow has proven too expensive to implement in practice. This work provides the first practical and effective technique for higher-order inlining and copy propagation, which we call unchanged variable analysis.
Read The PaperOcean eddies are spinning pools of water in the ocean that dominate the ocean's kinetic energy, making them an important phenomenon to monitor. As an undergrad I worked with the Minnesota Expeditions Research group on designing algorithms for detecting and tracking eddies.
In addition to developing software, I am also an amateur homebrewer.
Below is an (incomplete) collection of beers that I have made in the past
IPA reusing the Trappist high gravity yeast from the previous batch. Hopped with Huell Mellon and Citra
More InfoClassic Belgian Triple fermented with Wyeast Trappist High Gravity. Submitted to Homebrew Alley 2019, scoresheet available here
More InfoCitra hopped IPA. First experiment with red wheat in IPA recipe.
More InfoAn attempt at a classic Hefeweizen. Brewed during the Summer and fermented hot
More InfoYet another double IPA
More InfoAnother iteration of the coffee stout
More InfoAn IPA brewed with homegrown hops from a friend in Williamsburg
More InfoThird iteration of a New England IPA with a bad pun for a name
More InfoMy second take on a New England Style IPA
More InfoA kettle soured beer with a descent amount of dry hops.
More InfoMy first take on a New England style IPA
More InfoAnother iteration of the Coffee Stout. Typical malt bill for a stout with 2 ounces of coffee thrown in at flameout.
More InfoAn IPA motivated by an assortment of unused hops in my freezer
More InfoA stout with coffee added during secondary fermentation.
More Info