Skip to content

Instantly share code, notes, and snippets.

View gist:ba9dd30f8852ca9d455c363c65154075
~/temp $ mkdir a
~/temp $ cd a
~/temp/a $ git init
Initialized empty Git repository in /home/seph/temp/a/.git/
~/temp/a:master ✓ $ cat > foo
asdf
~/temp/a:master ✓ $ git add foo
~/temp/a:master ✗ $ git commit -m 'initial import'
[master (root-commit) 7fe725a] initial import
@josephg
josephg / main.rs
Created October 16, 2022 07:37
rotation puzzle
View main.rs
use std::collections::HashMap;
use std::fmt::{Debug, Formatter};
use std::hash::Hash;
// Wrapper around u16. Using the lowest significant 9 bits to store a 3x3 state.
#[derive(Copy, Clone, Eq, PartialEq, Default, Hash)]
struct Bits(u16);
fn main() {
let mut map = HashMap::new();
@josephg
josephg / bench.js
Last active July 14, 2022 23:07
bench npm jumprope
View bench.js
// Read in a patch file and check that the patches all apply correctly.
// Run with node --expose-gc (file) using input files from here:
// https://github.com/josephg/crdt-benchmarks
const fs = require('fs')
const assert = require('assert')
const zlib = require('zlib')
const v8 = require('v8')
const Rope = require('jumprope')
@josephg
josephg / shelf.ts
Last active October 29, 2021 06:02
shelf
View shelf.ts
type Item = null | string | number | boolean | Item[] | {[k: string]: Item};
// Must match the shape of the data
type Version = number | [number, Version[]] | [number, {[k: string]: Version}];
type Path = (string | number)[]
interface Doc {
data: Item,
versions: Version,
@josephg
josephg / madscience.rs
Created September 10, 2021 14:32
positional update file format experiments
View madscience.rs
#[cfg(test)]
mod tests{
// *** Mad science ***
#[test]
fn positional_updates_1() {
// This variant leans on ins_del_runs to just use a single stream of insert and delete positions.
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
struct Run3 {
diff: i32, // From previous item
@josephg
josephg / test_composition.js
Created August 11, 2021 06:37
Test if an OT type is closed udner composition
View test_composition.js
const genOp = require('./genOp')
// const genOp = require('./genOp2')
const {type} = require('ot-text-unicode')
// const {type} = require('ot-text-tp2')
const assert = require('assert')
const genOps = (start, n = 3) => {
let ops = []
let state = start
@josephg
josephg / bench-automerge.js
Last active August 26, 2022 06:25
benchmark code from blog post
View bench-automerge.js
// Run with node --expose-gc bench.js ../automerge-paper.json.gz
// automerge-paper.json.gz from https://github.com/josephg/crdt-benchmarks
// Read in a patch file and check that the patches all apply correctly.
const fs = require('fs')
const assert = require('assert')
const zlib = require('zlib')
const automerge = require('automerge')
const v8 = require('v8')
@josephg
josephg / out.js
Last active August 3, 2021 22:21
automerge output flat
View out.js
CACHE = {
_root: {
text: {
elems: [
{
elemId: '2@3cb54fecd444446cbe579bd128017c42',
pred: [ '2@3cb54fecd444446cbe579bd128017c42' ],
value: 'a'
},
{
View automerge output
{
seq: 4,
maxOp: 4,
requests: [],
clock: { '09828cbcb7e14699b37ad87ffe64b448': 4 },
deps: [],
backendState: {
state: Map {
size: 2,
_root: ArrayMapNode {
View automerge-and-yjs-minimal.ts
import assert from 'assert'
import seed from 'seed-random'
type Id = [agent: string, seq: number]
type Version = Record<string, number> // Last seen seq for each agent.
type Algorithm = {
integrate: <T>(doc: Doc<T>, newItem: Item<T>) => void
ignoreTests?: string[]
}// & Record<string, any>