\ Wes Garland | Home


My name is Wes Garland. I am a senior software developer with Kings Distributed Systems, working on the Distributed Compute Protocol for Distributed Compute Labs. We are building — without exaggeration — a next-generation super computer. This is a very exciting time to be a software developer!

I bring to KDS more than two decades of experience developing software and leading development and operations teams. My experience building GPSEE (a pre-cursor to NodeJS) and its complete software ecosystem, working on CommonJS/2.0, and building BravoJS have proven invaluable in my current position.

This is my personal page, where I will be posting things which interest me from time-to-time.

Interesting Links

Monday, April 6, 2020

Apologies for the lack of updates; I assumed the CTO role at KDS last summer, and have been extremely busy since then!

2020 is shaping up to be a landmark year for Kings Distributed Systems. We are currently preparing our "First Dev" milestone for release this month. This milestone gives a stable software API for use by outside developers on browser or NodeJS platforms that will allow early adopters to build software that is expected to continue to work unchanged as we add features and march down our roadmap.

Last month, in concert with CENGN (the Center for Excellence in Next Generation Computing), KDS successfully performed a 10,000-slice job modelling Tick-Borned Encephalitis across 504 core. The at-scale testing was performed largely using workers which are part of official standalone-worker package for Debian Linux (see: https://docs.distributed.computer/worker/readme.html).

Tuesday, May 21, 2019

I have started working on BravoJS again, and have published it on the npmjs.org global NPM repository.

BravoJS is an implementation of CommonJS Modules/2.0. Upcoming versions will be streamlined a bit for the modern web environment (for example, recognizing the ubiquity of console), but most importantly, will include more functionality for NodeJS interoperability and a better "write once, run everywhere" development experience across the various platforms DCP developers find themselves using; ie.

In support of these goals, we will soon add the following features:

Additionally, we will add Semantic versioning in module dependencies (same as npm/package.json) and develop a version snapshot — similar in principle to package-lock.json in npm — which is used to "freeze" module versions for a given job at job deployment time. This will allow DCP developers to know with confidence exactly what code their jobs are executing, even if they are not pinning them to specific versions in their dependency declarations.

Tuesday, April 30, 2019

Dan Desjardins and I will be giving a talk at St. Lawrence college for the Big Data & AI Conference on May 3 2019.
Here is a copy the slide deck, in case you missed it:

Friday, November 9, 2018 We've been very busy at KDS lately, designing and implementing the Compute API. This API will allow users to easily perform arbitrary parallel computations on the Distributed Computer with ease. We can create client applications that run in NodeJS or on the browser which can call on DCP to perform computations that would be too time-consuming to run locally. This API builds on our earlier work by targetting the needs of the scientific computing community, and exposing the DCP functionality they need in a clear, terse API.

The needs of these users have been broken down, at their most basic left, to the following requirements:

This may seem like a gross oversimplification — and it kind of is — but we can bootstrap just about anything on top of these basic steps, with a correctly curated software ecosystem. In addition, a simplified view of DCP of this nature means that we can guide users toward creating compute functions which allow us to perform all kinds of interesting scheduler, performance, and bandwidth optimizations. Maybe I'll post about those in the near future.

Here's a trivial NodeJS program which uses the soon-to-be-complete Compute API 1.0 to perform a very very simple task:

const protocol = require('dcp/protocol')
const compute = require('dcp/compute')
const paymentAccount = protocol.unlock(fs.openFileSync('myKey.keystore'))

let g = compute.for([{start: 1, end: 2000}, {start: 3, end: 5}], function(i,j) {
  let best=Infinity;
  for (let x=0; x < i; x++) {
     best = Math.min(best, require('./refiner').refine(x, j))
  return best
let results = await g.exec(compute.safeMarketValue, paymentAccount)
console.log("The best result was: ", results.reduce((b,c)=>Math.min(b,c)))
Keen-eyed readers will notice the presence of the require keyword -- our Compute API supports a module format which is a super set of CommonJS Modules/1.1.1 that is fully dependency-managed. The same modules can be executed on NodeJS, the web browser, or from tasks within the Distributed Computer.

The Compute API also allows users to deploy applications on the Distributed Computer for others to make use of....a sort of blend between the iOS app store and a multiuser system (e.g. VM/ESA, Unix, Multics), with a modern twist. Some day, you will be able to write programs like this! —

const protocol = require('dcp/protocol')
const compute = require('dcp/compute')
const paymentAccount = protocol.unlock(fs.openFileSync('myKey.keystore'))

let vp = new compute.Application("videoProcessor", "^1.0.0")
let frames = require('videoProcessor-local').loadFrames('myMovie.mpg')
let g = vp.for(frames, "vingette")
let results = await g.exec(compute.marketPrice, paymentWallet)
...and notice that .loadFrames() is not awaited..it appears to be a synchronous interface, but it could just as easily be an ES6 function* generator. We support that!

Wednesday, September 11, 2018 Kings Distributed Systems is having an open house at Kingston City Hall tomorrow.
0800-0900Catered breakfast (City Hall)
0900-0930Introductions and special announcements. (City Hall)
0930-1130Series of mini presentations covering our tech, corporate structure, crypto-economic model, grow-the-network strategy, research and incubator model, business development, marketing campaign, and roadmap for the future. (City Hall)
1130-1300Lunch at the Senior Officers' mess, Fort Frontenac
1300-1400Visit KDS/DCL offices (303 Bagot Street, Suites 402-403)
1400-1800Own time/visit Kingston
1800-...Dinner (RSVP required) and Kingston nightlife

I will be giving two talks in the morning; here are my slides —

Copyright © 2018 Kings Distributed Systems. All Rights Reserved.