Info

Profession: Software Engineer
Location: Portland, ME, USA
Email: dcampbell24@gmail.com

DLC Headshot

Biography

David is a software engineer passionate about open source software and exploring games, whose passions were sparked by an adventure into the world of Linux and strategic battles with friends over card tables, basement floors, and sidewalks.

He studied Computer Science at Brooklyn College, and has worked as a software engineer at PhotoShelter and CashStar. He also spent a Summer at The Recurse Center.

At PhotoShelter he wrote a script allowing HHVM to be easily used for static analysis of their code base that uncovered several bugs and increased the reliability of their site. His work on Stripe integration simplified the process of setting up seller accounts, and his architectural work reduced the latency and increased the scale at which images are exported from PhotoShelter.

At CashStar he did system work to onboard new customer companies and updated existing customers to use more CashStar offerings. Then he used that knowledge to build graphical tools automating the process and enabling technical account managers to do the work engineers had been doing.

Previously, he participated in the Annual Computer Poker Competition, wrote Texas Hold`em AI, and contributed to projects including Arch Linux, PyParted, Rust, and Julia. For more information about these projects see projects.

Most recently, he has been contributing to the user applications in Redox OS and writing a Go library. Applications include the Redox shell ion and the baduk game.

Github | LinkedIn | Mastodon

Poker (Go)

When David first participated in the Annual Computer Poker Competition (ACPC), he worked on an agent named Calvin, written in Java and Clojure, that uses records from past games and information from the game currently being played to assign a probability distribution over all possible starting hands to each opponent. It then uses those probability distributions to calculate the expected value of each possible action the agent can take and chooses the one with the highest expected value.

The current Poker project takes some inspiration from the previous project, but is independent and explores different strategies.

Some highlights of the current design include the ability to easily add support for protocols other than ACPC, so that the agent can interact with non-ACPC poker servers, and support for generating game trees that can be used to do more sophisticated expected value calculations.

Cubes (Bash, C, Fortran, Go, Julia, Python, Tcl)

One day David was at his uncle's house spending time with relatives and his uncle brought out some puzzles for everyone to play with. The puzzles consisted of a collection of polycubes which fit together to form 3x3x3 cubes.

While struggling to solve the puzzles by hand he quipped, "I bet a computer could do this in no time at all", and so he decided he should get a computer to solve them for him.

Since writing the models of the pieces by hand that the program needs as input is tedious and error prone, he wrote a GUI program to create the models with. He also created a program to display what the solution looks like.

He discovered that, although, in general the space packing problem is hard to solve, it can be done very quickly for such a small region if some tricks are used to reduce the search space.

Important optimizations include caching previous calculations from the search, not looking at rotations of the first piece, trying to place the pieces from hardest to easiest, and using flood fill to find regions that can't possibly be filled.

Julia Benchmarks (Julia)

Julia is a language for doing scientific computing so it is important that Julia is fast. David wrote several of the benchmarks game benchmarks to show how Julia compares with other languages and to help prevent performance regressions.

cparted (Python)

The cparted project was started because Arch Linux had recently replaced their installation script with a minimal one that didn't have a pleasant interface for creating GPT partition tables.

Although, the partitioning logic is not perfect, David gained valuable experience working with low level system details and building ncurses widgets including a table and selection menus.

Sadly, the application was not endorsed by the core developers for inclusion on the installation media because it depended on Python, but it is still usable with a custom installer.

Github | LinkedIn | Mastodon