Skip to content

Open Source

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:

Using existing solutions such as frameworks or libraries provides the benefit of quickly getting started, however there is a maintenance burden of:

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:

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:

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.