Skip to content

Instantly share code, notes, and snippets.


Dean Landolt deanlandolt

View GitHub Profile
View labapi.json
"swagger": "2.0",
"info": {
"title": "Lab Automated API",
"version": "1.0.0-beta"
"host": "",
"schemes": [


Intervals are the basic unit of composition for ltgt-style queries over a keyspace. Below is a list of some typical intervals in standard interval notion, translated to ltgt queries...

// closed/open: [0,100) ->
{ gte: 0, lt: 100

// open/closed: (0,100] ->
{ gt: 0, lte: 100 }
deanlandolt /
Last active Aug 29, 2015


Write-ahead logging for transactions in a bytespace.

Write operations are given a monotonically increasing id and written to transaction log. Batches are processed asynchronously and added to the store. By default, query methods withheld until batch processing is complete for the commit which was current at the time the query is received.

Batch processing pipeline

The batch processing pipeline exposes extensions points to allow pre-commit hooks to do additional work before committing to the transaction log, and post-commit hooks to do additional work after a transaction. Work can be isolated to specific subspaces, allowing heavyweight analytical processing to proceed without blocking queries in hot-path or transaction-heavy spaces. Analytical work can be delegated to subprocesses or even remote machines. Work on multiple commits can be batched together, and monotonically increasing batch ids can be leveraged to allow reads on possibly stale data to be held, e.g. until the next "

deanlandolt / ts_model_ideas.ts
Last active Aug 29, 2015
Typescript interfaces and classes as DAL model specifications
View ts_model_ideas.ts
// Typescript interfaces and classes as DAL model specifications
* @entity
class IndexedEntity {
* The @id annotation defines primary key, implies @unique, @index
* @id

Keybase proof

I hereby claim:

  • I am deanlandolt on github.
  • I am deanlandolt ( on keybase.
  • I have a public key whose fingerprint is 1B20 FB42 A896 1235 20BF 0330 BFA9 6F92 9724 606C

To claim this, I am signing this object:

View gist:849eb63d28f7e7bb8c97
var test = require('tape');
var bytewise = require('bytewise');
var encode = bytewise.encode;
var MIN = bytewise.MIN;
var MAX = bytewise.MAX;
test('tuple queries', function (t) {
var yearly = tuples('reports', 'yearly');
// component keys of the tuple space query are available by index
deanlandolt / chords.js
Created Sep 20, 2011
object traversal optimization and indexing
View chords.js
var notes = [{
"note": "A",
"chords": [
"chord": "maj7",
"strings": {
"1": 0,
"2": 3,
deanlandolt / text.js
Created Aug 17, 2011
a lightly-modified version of the dojo/text.js AMD plugin, for use with apps that expect a global text! plugin
View text.js
// a lightly-modified version of the dojo/text.js AMD plugin, for use with apps that expect a global text! plugin
define(["dojo/_base/kernel", "require", "dojo/has", "dojo/has!host-browser?dojo/_base/xhr"], function(dojo, require, has, xhr){
// module:
// dojo/text
// summary:
// This module implements the !dojo/text plugin and the dojo.cache API.
// description:
// We choose to include our own plugin to leverage functionality already contained in dojo
// and thereby reduce the size of the plugin compared to various foreign loader implementations.
View dojo-ace-config.js
baseUrl: '../../',
isDebug: this.isDebug,
packages: [
packagePaths: {
"ace/lib": [
View jsonpointer.js
function Pointer(value) {
if (!(this instanceof Pointer)) return new Pointer(value);
value = value.toString().split("/");
// remove a path component if all are empty
var empty = !value.some(function(i) { return i });
if (empty) value.pop();
this.path = {