James Earl Douglas
A functional programmer with advanced experience developing production software in Scala and Java, James is passionate about continuous learning and keeping just outside of his comfort zone.
- Twitter: @jearldouglas
- GitHub: github.com/earldouglas
- LinkedIn: linkedin.com/in/earldouglas
- AngelList: angel.co/earldouglas
- Email: firstname.lastname@example.org
- Radio: KK6QAC
- Stack Overflow: stackoverflow.com/users/406984
- RSS feed: earldouglas.com/feed
- Scala DevOps: collaborative development and continuous deployment (video) (slides), Scala by the Bay, San Francisco
- Putting functional programming to work (slides) (source), Scala Bay, Mountain View
- Putting functional programming to work (slides) (source), SF Scala, San Francisco
- Real-World Functional Programming, APIcon, San Francisco
- Rapid Scala development with sbt, Scala Study Group, San Francisco
- Scala in 2018: SF Scala panel with Rod Johnson, SF Scala, San Francisco
- Hands-on Category Theory (video) (slides) (code), Silicon Valley Scala Symposium, Santa Clara
- Dependency injection with Jellyfish (video) (slides), Scala Days, New York City
- TDD with FireOtter (video) (slides), Scala Days, New York City
- Dependency injection with JellyFish, Bay Area Scala Enthusiasts, San Francisco
- The State Monad, Versal, San Francisco
- Imperative Web Workflows via Delimited Continuations, Scala for Startups, San Francisco
- Functional Reactive UI Thing, Bay Area Scala Enthusiasts, Mountain View
- Transparent Scalability through Portable Continuations, ACM SIGPLAN Continuation Workshop, Tokyo
- Swarm: Transparent Scalability, Bay Area Scala Enthusiasts, Mountain View
- xsbt-web-plugin, an sbt plugin for building Scala Web applications
- Scalave (demo), embeddable online Scala evaluation
- Versal Scala gadget (demo), a Versal gadget to evaluate Scala code
- Thrush, content-focused RSS aggregation
- FeedBag, a utility for collecting content (URLs, text) to read later
- Swarm, transparent scalability through portable delimited continuations
- Funtinuations, a playground for Scala delimited continuations
- Imperatively, imperative Web workflows via delimited continuations
- Fruit, the Functional Reactive UI Thing for declarative UI behavior
- Nuevos, a minimalist Twitter client which highlights new tweets
- Rubble, to smash Servlet frameworks to bits
- Sprocket, functional additions to the Java and Scala standard libraries
- JSONP Filter, a J2EE Servlet filter to wrap JSON responses in a JSONP callback
- Seek Well, a Scala library for JDBC query simplification
- Barebones Spring MVC, a Spring MVC Tutorial (e-book)
- JSON Validator, an sbt project for JSON document validation from a JSON schema
- Covariance in Scala
- Option monad in Scala
- Dependency injection in Scala
- Functional state in Scala
- Trampolines in Scala
- Functional linked lists in Java
- Custom Tasks in sbt
- Applicative validation
- Progressive enhancement
- Eager functional lists
- Lazy functional lists
- Creating a Node.js project with grunt-init
- Filesystem JSON (de)serialization with Node.js
- Server-side Mustache templating with Node.js
- Asynchronous processing with Servlets
- A simple Web effect system for Scala
- A simple effect system for Scala
- Scala method logging with AspectJ
- Passwordless authentication in Scala
- JDBC database access in Scala
- Continuous deployment for Scala
- Monads in Java
- Functors in Java
- Chunked HTTP with Ajax and Scala (demo)
- Continuous integration for Scala
- Monad transformers in Scala
- Infix functions with Scala type classes
- Embedding Jetty in Scala
- Databases in Haskell with mysql-simple
- Type classes in Scala
- Functional debugging in Scala
- Ad-hoc polymorphism in Standard ML
- Currying for type inference in Scala
- Type Lambdas in Scala
- Monads in Scala
- Functors in Scala
- Hands-on Category Theory
- Mustache templates in Scala
- Getting started with xsbt-web-plugin
- Constructive mathematics with Scala macros
- Using java.io.Closeable as a Monad
- Type Classes, Category Theory, and Scala
- Beyond the Reader Monad: Dependency Injection with Jellyfish
- Speaking both JSON and XML with Spring MVC
- A performance shootout for RESTful libraries
- Modelling Data in Spring MVC
- Rendering Views with Spring MVC
- Getting Started with Spring MVC
- Installing the Frege IDE on OSX
- A Servlet-Based Web Application with the Frege Programming Language
- Introduction to Delimited Continuations
- Scoped sbt-assembly
- Functional JDBC database interaction in Java
- Arrows and Scala Implicit Conversions
- Monadic Parsing in Haskell (Maybe)
- Function Memoization in Scala and Haskell
- JUnit Test Support in sbt
- Suspendable Recursion with Scala Continuations
- Asynchronous Network I/O with Scala Continuations
- Monadic Continuations in Scala
- Asynchronous Console I/O with Scala Continuations
- Consuming the Twitter API in Scala with Scribe
- Actor-Based Continuations with Akka and Swarm
- Mimicking Twitter Using an Akka-Based Event-Driven Architecture
- A Configurable IP Address Servlet Filter
- Web-Based Akka Management and Monitoring
- Remote Actor Class Loading with Akka
- Estimating Pi with Akka
- Scoped Bean Dependencies
- Testing Web Applications with Jetty
- A Self-Contained Runnable Web Application
- Data at Rest Encryption with Jasypt and Hibernate
- A Secure RESTful Web Service
- A Contract-First Web Service with Spring-WS
- Wrangling the Class Path with Download Extensions
- Method Logging with Spring AOP
- A Simple Embedded Jetty Server
- Custom Annotation Configuration for Spring Remoting, Part Two
- Extending Spring's JdbcTestUtils
- Custom Annotation Configuration for Spring Remoting
- Database Access with Hibernate and Spring
- Simple Remoting with Spring
Wikimedia FoundationSr. Software Engineer, Nov 2014 - present
VersalEngineer and co-founder, Sep 2012 - Oct 2014
Developed the Scala backend for an online education platform.
Designed the scalable event-sourced architecture, and both reference and production implementations. Built internal analytical and diagnostics tools, and helped design the continuous integration and continuous deployment environments and processes.
Released multiple open-source libraries, including Jellyfish for dependency injection via delimited continuations, FireOtter for human readable CSV-based specification testing, and Scamper for performance comparisons of popular REST libraries and frameworks.
Palantir TechnologiesForward deployed engineer, May 2011 - August 2012
Created the REST API, based on Java and JAX-RS, for Palantir Gotham (PG), a mature software suite used around the world for large-scale data integration and intelligence analysis. This enabled both customers and other forward deployed engineers to build decoupled systems that take advantage of the power of PG.
Standardized the software build toolchain and process for the teams of forward deployed engineers using a combination of sbt, Ivy, Scala, and Java.
Built and extended data integration and analysis tools in both Scala and Java for multiple customers across the intelligence community.
AmentraSenior consultant, Feb 2011 - Apr 2011
Taught enterprise Java developers to build production-ready J2EE applications via rapid and scalable development best practices.
Coached multiple Scrum teams on efficient and repeatable agile development patterns.
AnakamSoftware engineer, Jan 2008 - Feb 2011
Developed a multifactor authentication platform in Java for integration into disparate software and hardware environments.
Stanley AssociatesSoftware engineer, Apr 2007 - Jan 2008
Developed a secure collaboration software framework in Java for integrating disparate software systems in a high-security environment.
Developed the enterprise architecture for Secretary of Defense Communications.
BoeingSoftware engineer, Jun 2005 - Feb 2007
Developed enterprise Web applications in Java for multiple missions.
Learning Technologies CenterAssistant computer programmer, May 2002 - May 2005
Developed course enrollment and organization optimization tools using artificial intelligence algorithms.
Versal FoundationPanel member, Sep 2012 - present
Review grant applications for open transformative and foundational courses that spread knowledge as a catalyst to transform the world.
Bay Area Amateur AstronomyFounder and organizer, Feb 2014 - present
Plan and lead star parties and field trips.
Bay Area Haskell Users GroupOrganizer, Dec 2013 - present
Plan and lead Haskell discussion sessions, lectures, and hackathons.
Scala Study GroupOrganizer, Sep 2012 - present
Plan and lead study sessions. Teach fellow students topics in Scala including functional programming, category theory, delimited continuations, reactive programming, and introduction.
Georgia Institute of TechnologyMaster of science, computer science, 2014 - present
American Military UniversityMaster of science, aerospace, 2006 - 2011
The George Washington UniversityMaster of science, computer engineering, 2006 - 2007 (incomplete)
The University of ArizonaBachelor of science, computer engineering, 2001 - 2005
Minors in computer science, electrical engineering, and mathematics.
Functional programming principles in ScalaCoursera, Nov 2012
SpringSource Certified ProfessionalSpringSource, Apr 2009
ScrumMasterDanube, Feb 2011
Barebones Spring MVCSelf-published, Oct 2010 (pdf)
A basic overview of some of the most commonly used components of Spring MVC that takes the reader through the development of an example Spring MVC application from scratch.
Secure collaborative environmentUS 20100100967, May 2009 (pdf)
A secure collaborative environment to facilitate the sharing of confidential information between organizations, which can be used in conjunction with existing infrastructure.
Impacts of Data Format Variability on Environmental Visual Analysis SystemsThe 87th AMS Annual Meeting, San Antonio, TX, Jan 2007 (pdf)
A discussion of the benefits and drawbacks inherent in data format variability in the context of environmental visual analysis systems.