Projects

12 entries

These projects were born out of personal or professional need or the want to productize a past research item. Most of my free time goes to supporting the High Ground Vision project.

Cardboard Tutor

MTG deckbuilding helper

Active

A tool to help with pulling cards when building MTG decks. Shows all sets each card has been printed in so you can find what you already own.

cardboard-tutor.com

Consensus

Multi-model AI debate

Active

Pit multiple AI models against each other on any question. They debate, research, and synthesize — so you get answers no single model could produce alone.

consensus.rgbknights.com

High Ground Vision

Active

HGV started as a side project of a group of DOTA 2 fans and still operates that way. We have a number of niche tools for DOTA 2 and are happy to share our knowledge with the community by open-sourcing our stack. Development is done by volunteers in their free time. Our primary focus is around Ability Draft. I also volunteer to moderate AD Reddit and Discord. I have a number of C# libraries for interacting with Steam and DOTA 2 for stat collection and analysis.

  • Basilius — .NET clients for daily hero/ability/item caches from DotaBuff.
  • Daedalus — .NET client for the STEAM api, focused on Dota 2.
  • Crystalys — .NET client for the STEAM Server and Dota Game Coordinator.
  • Hyperstone — repository of Dota 2 images.
  • Desolator — Ability Drafter web application source.
  • Nullifier — desktop console for AD match stat collection.
  • Butterfly — Team Coordinator web application source.
  • Tango — HGV web site source.

Media Reader

Active

While working with AI in the video space I needed a frame-accurate, un-optimized media reader. I built one. It is based around a Frame object that holds the data for each frame of media, with audio and video data stored together on the same object.

Boardgame.io

Active

While creating Lusus and Ur I needed a framework to handle game state and mutations. Boardgame.io let me:

Write simple functions that describe how the game state changes when a particular move is made. This is automatically converted into a working game complete with online multiplayer features, all without requiring you to write a single line of networking or database handling code.

While writing these games I found many bugs — some I submitted, others I fixed myself. I also added improvements and submitted other users' PRs as they did not have a Contributor License Agreement with Google.

Project · Source code

Expeditio

Active

As part of my love for D&D I am working to create a Dungeon Master's toolkit containing the System Reference Document (SRD) under the Open-Gaming License (OGL). It will also have an API for Genesis (world creation and mutation) and an API for Hoard (items, weapons, tools, abilities — basically anything from the SRD).

Guides · API · Source code

Generation X

Archived

While working a lot with SharePoint I needed a way to provision the same package into multiple SharePoint environments and sites. This is complex because adding new artifacts is completely different from updating existing ones.

Source code

Rail Yard

Archived

Rail Yard is a next-generation PHP framework. It brings together common patterns like MVC and ActiveRecord, follows convention over configuration, is built on PHP 5 and follows PHP best practices.

Why another framework? CakePHP, CodeIgniter and Zend are all very good but I believe they miss a few key points. First, routing inside an application doesn't just rely on URL — sessions, cookies, AJAX and APIs all play a part. Rail Yard uses a dispatcher class for routing requests. Second, the lack of a decent ORM: although most assume an ORM maps only to a database, it could also map to a service. Rail Yard follows Rails' ActiveRecord and ActiveResource. Third, how frameworks map actions to views: in Rail Yard your actions interact with a layout object that gets rendered against a layout view, with content filled by rendering views into sections — combining views in an object-oriented fashion.

There are more modern PHP frameworks that handle these cases now. Still an interesting exercise in MVC framework design.

NOTE: This project is archived but you can still find the source code.

Crypto-Cartography

Archived

Crypto-Cartography was born out of a hackathon about better passwords. My submission is a service that provides authentication for web systems, like OpenID. What sets it apart: your password is not entered as text but by selecting points on a map, with longitude and latitude serving as the access code. By zooming through the map to a high level of resolution, users can graphically produce a very large complex password that can be simple to remember (like a favorite landmark).

NOTE: This project is archived but you can still find the source code.

Bottalk

Archived

Bottalk is a service for bots, devices, services and people to communicate and connect through the exchange of frequent structured messages. With Bottalk, services can post messages to a feed which other services can follow.

Bottalk was originally created before Twitter but has since adopted some of its ideas. The target was home devices that could follow each other and other services for information and commands.

A prototype air conditioner monitored a feed for weather updates and adjusted its temperature range accordingly. It also monitored a feed from Ontario Hydro about the current state of the electrical grid and powered down in high-risk areas to save power. It could also follow my cell phone's feed for commands and configuration.

NOTE: This project was replaced with IFTTT and is archived.

XSLT Templates

Archived

This was years before SPA JavaScript applications. XSLT seemed the best choice for a JavaScript template engine because it is standardized, and a large collection of the internet's data stores were XML (little did I know JSON would take over the world). It also meant the same templates used on the web were transferable to other environments that support XSLT.

XSLT Templates is a client-side jQuery library that takes XML and/or JSON data and renders it against an XSLT template to create text, HTML, XML or JSON. It can also run scripts after the templating process to add client-side logic.

NOTE: This project is archived in favour of modern SPAs.