Profession: Software Engineer
Location: South Portland, ME, USA
Email:
Github | LinkedIn | Mastodon

DLC Headshot

Objective

Research and build systems that improve quality of life, create community, and sustain themselves. Do so acting as a software engineer, writer, organizer, and leader.

Computer Skills

Used Professionally: Bash, fish, JavaScript, PHP, Python
Learned Independently: C, Clojure, Fortran, Julia, LISP, OCaml, Rust
Software: Apache, ArcGIS, Discourse, Git, LaTeX, MySQL, PostgreSQL, Visual Studio Code
Operating Systems: Windows, OSX, Linux: Arch, Ubuntu, Debian

Experience

Business Process Developer – Stone Coast Fund Services, Portland, ME Nov 2017-Dec 2021

  • Translated client requirements into functional application features
  • Created prototypes of applications
  • Used graphical software in application creation
  • Performed testing of applications after completing them

Software Engineer – CashStar Inc., Portland, ME May 2015-Jan 2017

  • Learned company needs and icreased revenue by setting up customers with many company products
  • Reduced setup times and offloaded engineer work by creating GUIs and configuration endpoints
  • Wrote system documentation to reduce training time for new hires

Developer – Photoshelter Inc., New York, NY Jan 2013-May 2014

  • Improved clients’ SEO by fixing longstanding sitemap generation and submission issues
  • Uncovered several bugs and improved site reliability with HHVM static analysis
  • Increasded scalability, reduced time and latency of image exports
  • Added real time image export reporting to reduce issue resolution time
  • Extended and improved handling of image meta-data for better page displays
  • Improved seller experience with Stripe Connect integration

Student – Recurse Center, New York, NY Summer 2012

Volunteer – Poverty’s Demise, Brooklyn, N July-Nov. 2009

  • Setup and maintained hardware, webserver (LAMP), Drupal installations
  • Copyedited business reports, public correspondance, technical documentation
  • Wrote project development plan, press material, internal documentation, reports

Indepedent Projects – Various Locations 2009-Present

  • Financial accounts tracking software (2024)
  • Created weather tracking software with Prometheus (2024)
  • Added shell history features to ion the Redox OS shell
  • Wrote TUI GO game for Redox Games
  • Wrote Hearts server and GUI client, contributed to the Conrod GUI library
  • Contributed to Arch Linux, pkgtools (gem2arch), namcap, many PKGBUILDs
  • Wrote a library and agents for playing Texas Hold’em
  • Wrote cparted and contributed to PyParted, disk partioning in Anaconda from RedHat

Education

Graduate Studies – Computer Science, GPA: 3.41, 30 credits Spring 2010-Spring 2013

CUNY Brooklyn College, Brooklyn, NY

Bachelor of Arts – Liberal Studies, GPA: 3.15 May 2009

University of New Haven, West Haven, CT
John Collinson Philosophy Award recipient

DLC's Website by David Lawrence Campbell is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International

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.

More 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.

DLC's Website by David Lawrence Campbell is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International

Projects

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, Rust, 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.

DLC's Website by David Lawrence Campbell is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International