Adam Vandervorst

Hi, I'm a developer and independent researcher working on machine learning, graph generalizations, and human-computer interaction.

Ongoing projects

Information Programming

Making machine learning robust in real-world applications faces several challenges. One of these challenges is integrating probabilistic outputs of deep learning systems models with prior beliefs, simple heuristics, and data from other sources. Information Programming enables you to think holistically about the system and solve problems in a comprehensive framework. Based on the principle of increasing the information about the problem, you have to be explicit about how subsystems exchange information and how deductions on the data get you closer to the desired result. With that specification, the framework makes policies available for running the resulting system safely.

Delta Streams

Reactive Programming (RP) is an interesting but rather niche paradigm for constructing programs that behave solely based on the events passing through the system. Recently, systems like React have taken over with a simplified data-centric paradigm. It addressed the biggest shortcoming of RP - not being able to talk about data structures well - by giving up control over the specific flow. Elm allows for more control at the cost of manually modeling changes to the data. Delta streams provides a framework for constructing models of changes to specific data structures and compositions thereof on top of Functional Reactive Programming, merging a carefree data changes model with a high level of control.


Graph generalizations

Graphs are convenient for representing many everyday structures, but often they need to be extended to accommodate different classes of objects, weighted relationships, or meta-data. Graph generalizations can be seen as an extension of graphs that naturally embeds many of these features simultaneously. One popular generalization is that of the hypergraph (which is sometimes used to refer to graph generalizations), which extends connections to apply to more than two objects.

I am researching a formalism where connections between connections are allowed, as well as more applicable and more general forms of that. Other formalisms by different people can be found on a page dedicated to related work. Currently, I'm compiling these formalisms into a practical lifelong graph library.

Semantic typing

A semantic keyboard is an input mechanism that doesn't rely on characters. Instead, you type meaningful chunks or perform actions to shape a body of information. These keyboards can: alleviate the experience of people with disabilities by only requiring high-level inputs, ease the learning curve while typing faster, or give rise to new input devices.

I've worked on a handful of semantic keyboards, varying strongly in purity and performance. With an early attempt at this - Mirror - you type with complete words or programming constructs with any number of keys mapping to any number of meaningful chunks. Darts takes the idea a step further: you repeatedly navigate a word-space to 'type' a sentence. Although young, I think this area of research can provide exciting new tools to many people. Currently, I'm working on Auxilio - an assistive application framework - with Chang Lab.

HCI and programming

Despite the globalization of computer applications and the introduction of new modalities, interfaces are often poorly adapted. We still use a typewriter keyboard design on refined touch devices, a desktop experience as introduced in Windows 95 on teraflop computers, and spend hours browsing a diverse mess of websites.

Human-computer interaction (HCI) is - in my opinion - in dire need of innovation. I'm actively working on software - both for clients and to share as FOSS - trying to eliminate these historical constraints.