Posts

Ascension from Dependency Hell December 10, 2023

Scala has a rapidly-changing ecosystem of interconnected libraries. This tends to lead to dependency hell, in which a project's transitive dependency graph contains version mismatches. Not only is this painful to manage, but current approaches leave projects vulnerable to defects that can be hard to catch in time.

In this post, we explore shading as a simple and robust approach to deconflicting transitive dependencies in Scala projects.

Specified Versioning June 17, 2015
A guide to choosing version numbers for software projects that designate tests as specification.
Notes on Nix June 5, 2015
Some notes on the Nix package manager, language, and ecosystem.
Scheduled Prioritization April 16, 2015
Putting the fun in ROI functions.
Notes on Elasticsearch March 12, 2015
Some notes on Elasticsearch usage and development.
Functional Refactoring January 24, 2015

Refactoring provides an accessible opportunity to learn about imperative and functional design patterns, and Scala's hybrid OO/FP design caters to both.

We explore examples of Scala code written using familiar imperative design patterns, and refactor each one using a counterpart functional pattern. We learn how to replace mutable variables with the state monad, loops with folds, thrown exceptions with sum types, dependency injection with the reader monad, and much more. As we go, we build a mapping of corresponding imperative and functional patterns.

Notes on JavaScript September 25, 2014
Some notes on the JavaScript language, libraries, and ecosystem.
Effect Systems January 24, 2014

Effect systems allow the separation of the semantics of a program from the specification of a program. An effect system is made up of effect types, effectful programs, and effect handlers. An effect is an operation, behavior, pattern, or signature of which the meaning is up for interpretation by an effect handler.

We explore different ways to implement effect systems in Scala. We begin by describing an effectful program that we would like to write as a pure value. We then write different toy effect systems that can run it.

Notes on Standard ML October 17, 2013
Some notes on the SML language.
Programming Exercises July 31, 2013
Some programming exercises that have helped me keep sharp over the years.
Notes on Scala March 28, 2013
Some notes on the Scala language, libraries, and ecosystem.
Delimited Continuations July 7, 2012
An introduction to delimited continuations in Scala.
Functional Programming in C June 22, 2012
Not because we should, but because we can.
Type Classes March 11, 2012
An exploration of type classes in Scala.
Notes on Haskell February 18, 2012
Some notes on the Haskell language, libraries, and ecosystem.
Reference Architectures April 11, 2011
A reference for common patterns in software and data.
Notes on Java March 16, 2009
Some notes on the Java language, libraries, and ecosystem.