I work on open source projects, licensed with the Apache 2 license. I have primarily focused on developing libraries to assist in my project work. I will be focusing on more open source components & apps in the near future. Here are some notable projects:
ctx-core
A collection of over 100 general purpose libraries to assist work creating libraries & apps. Development on ctx-core begin an 2016 & continues today[1].
Motivation
After maintaining several applications, I ran into the issues of:
- quickly creating & iterating on features
- extracting code to reuse
- time to refactor code
- time to upgrade software
- gluing together small libraries & snippets
Using existing solutions such as frameworks or libraries provides the benefit of quickly getting started, however there is a maintenance burden of:
- large payload size & memory usage
- extending the underlying software to fulfill requirements
- time to upgrade the application with the underlying libraries
- domain language mismatch between the library/framework
I found that there are usually small libraries & code snippets that can be glued together with a naming convention that utilizes unique, immutable, & composable names. As a result, one could find all usages of an entity or concept by doing a project-wide search. Rename refactorings were more accurate & comprehensive due to the uniqueness of names. Composable naming allows one to understand the context & full description of the entity.
I use ctx-core to maintain software with:
- an accessible domain model
- a flat architecture
- active programming
Usage
ctx-core uses dependency-injection of a ctx
MapCtx|NestedMapCtx
& “beings”, (a function created with the be_
factory function). The flat architecture reduces incidental complexity. To manage complex domains, Nested architecture
provides scoping. The Tag Vector Convention, created while working on ctx-core,
encodes tags joined by vectors & data structure shapes to express complex domains within a flat architecture.
Currently, I use ctx-core along with Nano Stores to manage reactive state on the server & the browser. ctx-core is a general purpose library & since nanostores is also a general purpose library any component library is supported. In my work, I favor solidjs to render components on the server & browser. ctx-core also supports sveltejs with svelte stores to render components & manage reactive state on the server & browser.
Nano Stores
I learned about Nano Stores via astrojs. Since I was already using svelte stores, Nano Stores was a natural replacement to support global reactive state while supporting multiple component
libraries, such as solidjs. I contributed a fix[2] to diamond dependency bugs by using a breadth first queuing algorithm which I
previously contributed to svelte stores[3]. I also added soon to be released async support to computed
[3] & am working on adding autosubsciptions to computed
.
backbone-signal
I started using global state management with Backbone.js while Lead Developer at honk.com. I created backbone-signal to use global state management with Backbone.js across different projects, while working with Rundavoo.
jasmine_flow
While at Rundavoo I created jasmine-flow to facilitate linear flow testing...saving effort in maintaining automated tests. This was hard-learned from maintaining various large apps while at honk.com & Pivotal Labs.
rr
RR (double Ruby) is a test double library for the Ruby language. I released RR back in 2008. It features a terse api to for a high signal to syntax noise ratio for read & write friendly automated testing. I used global state management to manage complex data interactions. I stopped development when I moved to full-stack Javascript development. Maintenance of this project was picked up by Sutou Kouhei in 2015.
rspec
I was an early core maintainer on the rspec team. Rspec is the first DSL (Domain Specific Language)
implementation of BDD (Behavioral Driven Development). Key contributions include the first known implementation of nested describe
& context
statements[4]. The concept of nested describes was controversial at that time as it was thought it would add to the complexity &
inhibit readability of the specs. However, nesting describe
& context
enabled contextual nesting with separate usage of beforeEach
& afterEach
. I championed the idea & delivered the implementation. I also integrated Rspec with Test::Unit, worked on the initial mock implementation, & worked on the Ruby on Rails integration.
Desert
Desert is a Rails plugin framework that makes it easy to share models, views, controllers, helpers, routes, and migrations across your applications.
With Desert, reusability doesn’t come at the cost of extensibility: it’s trivial to extend the functionality of a plugin - both in your application and in other plugins.
Classes are automatically mixed in with your own or other plugins’ classes. This allows you to make full featured composable components.
Jelly
Jelly is an unobtrusive Javascript framework for jQuery and Ruby on Rails. It provides a set of conventions and tools that help you organize your AJAX and client-side code, while keeping Javascript out of your views and markup. Jelly is the glue between your Rails controllers and jQuery events.
Jelly encourages and enables unit testing your Javascript code. Using a Javascript testing framework such as Jasmine or Screw Unit, Jelly allows you to test AJAX and client-side events independently from your Rails app.
Polonium
Selenium test runner & helpers for Rails. Featured a set of wait_for
helpers to keep the tests in sync with the application.
unison
Reactive in-memory relational caching library which syncs with upstream relational databases. Written in Ruby.
Screw Unit
Screw.Unit is a Behavior-Driven Testing Framework for Javascript. It features nested describes. Its goals are to provide:
- a DSL for elegant, readable, organized specs;
- an interactive runner that can execute focused specs and describes;
- and brief, extensible source-code.
Generic Query Analyzer
A query analyzer using ADO.NET. I built this tool to run SQL queries on the MS Access CRM database & MS Excel @ The Corporate Counsel. Written with C#, ADO.NET, Winforms.
PHP Object Oriented Framework
The PHP Object Oriented Framework is a framework library to build components in PHP. It was built as an alternative to using the Smarty Template Engine. Poof was written to encapsulate html rendering in components.
[1]: ctx-core has been a bit of a catch-all project to share code between projects under the principles of ctx-core. The functionality of ctx-core is in place but the packages need some reorganization & documentation is needed to be more widely used. I have used ctx-core to handle transitions between other component & state management libraries as they emerge & are updated.
[2]: Nano Stores breadth first queue
[3]: Nano Stores async computed
[4]: Rspec: Added Nested Describes: Implemented in two commits.