├── public ├── thumbnail.jpg └── assets │ ├── strokes │ └── jpg │ │ ├── 0-0.jpg │ │ ├── 1-0.jpg │ │ ├── 2-0.jpg │ │ ├── 3-0.jpg │ │ ├── 4-0.jpg │ │ ├── v5-0.jpg │ │ ├── v6-0.jpg │ │ ├── v7-0.jpg │ │ ├── v8-0.jpg │ │ ├── 0-30-1.jpg │ │ ├── 0-30-2.jpg │ │ ├── 0-30-4.jpg │ │ ├── 0-30-8.jpg │ │ ├── 0-50-1.jpg │ │ ├── 0-50-2.jpg │ │ ├── 0-50-4.jpg │ │ ├── 0-50-8.jpg │ │ ├── 0-65-1.jpg │ │ ├── 0-65-2.jpg │ │ ├── 0-65-4.jpg │ │ ├── 0-65-8.jpg │ │ ├── 0-90-1.jpg │ │ ├── 0-90-2.jpg │ │ ├── 0-90-4.jpg │ │ ├── 0-90-8.jpg │ │ ├── 001-0.jpg │ │ ├── 002-0.jpg │ │ ├── 003-0.jpg │ │ ├── 004-0.jpg │ │ ├── 005-0.jpg │ │ ├── 006-0.jpg │ │ ├── 1-30-1.jpg │ │ ├── 1-30-2.jpg │ │ ├── 1-30-4.jpg │ │ ├── 1-30-8.jpg │ │ ├── 1-50-1.jpg │ │ ├── 1-50-2.jpg │ │ ├── 1-50-4.jpg │ │ ├── 1-50-8.jpg │ │ ├── 1-65-1.jpg │ │ ├── 1-65-2.jpg │ │ ├── 1-65-4.jpg │ │ ├── 1-65-8.jpg │ │ ├── 1-90-1.jpg │ │ ├── 1-90-2.jpg │ │ ├── 1-90-4.jpg │ │ ├── 1-90-8.jpg │ │ ├── 2-30-1.jpg │ │ ├── 2-30-2.jpg │ │ ├── 2-30-4.jpg │ │ ├── 2-30-8.jpg │ │ ├── 2-50-1.jpg │ │ ├── 2-50-2.jpg │ │ ├── 2-50-4.jpg │ │ ├── 2-50-8.jpg │ │ ├── 2-65-1.jpg │ │ ├── 2-65-2.jpg │ │ ├── 2-65-4.jpg │ │ ├── 2-65-8.jpg │ │ ├── 2-90-1.jpg │ │ ├── 2-90-2.jpg │ │ ├── 2-90-4.jpg │ │ ├── 2-90-8.jpg │ │ ├── 3-30-1.jpg │ │ ├── 3-30-2.jpg │ │ ├── 3-30-4.jpg │ │ ├── 3-30-8.jpg │ │ ├── 3-50-1.jpg │ │ ├── 3-50-2.jpg │ │ ├── 3-50-4.jpg │ │ ├── 3-50-8.jpg │ │ ├── 3-65-1.jpg │ │ ├── 3-65-2.jpg │ │ ├── 3-65-4.jpg │ │ ├── 3-65-8.jpg │ │ ├── 3-90-1.jpg │ │ ├── 3-90-2.jpg │ │ ├── 3-90-4.jpg │ │ ├── 3-90-8.jpg │ │ ├── 4-30-1.jpg │ │ ├── 4-30-2.jpg │ │ ├── 4-30-4.jpg │ │ ├── 4-30-8.jpg │ │ ├── 4-50-1.jpg │ │ ├── 4-50-2.jpg │ │ ├── 4-50-4.jpg │ │ ├── 4-50-8.jpg │ │ ├── 4-65-1.jpg │ │ ├── 4-65-2.jpg │ │ ├── 4-65-4.jpg │ │ ├── 4-65-8.jpg │ │ ├── 4-90-1.jpg │ │ ├── 4-90-2.jpg │ │ ├── 4-90-4.jpg │ │ ├── 4-90-8.jpg │ │ ├── v5-30-1.jpg │ │ ├── v5-30-2.jpg │ │ ├── v5-30-4.jpg │ │ ├── v5-30-8.jpg │ │ ├── v5-50-1.jpg │ │ ├── v5-50-2.jpg │ │ ├── v5-50-4.jpg │ │ ├── v5-50-8.jpg │ │ ├── v5-65-1.jpg │ │ ├── v5-65-2.jpg │ │ ├── v5-65-4.jpg │ │ ├── v5-65-8.jpg │ │ ├── v5-90-1.jpg │ │ ├── v5-90-2.jpg │ │ ├── v5-90-4.jpg │ │ ├── v5-90-8.jpg │ │ ├── v6-30-1.jpg │ │ ├── v6-30-2.jpg │ │ ├── v6-30-4.jpg │ │ ├── v6-30-8.jpg │ │ ├── v6-50-1.jpg │ │ ├── v6-50-2.jpg │ │ ├── v6-50-4.jpg │ │ ├── v6-50-8.jpg │ │ ├── v6-65-1.jpg │ │ ├── v6-65-2.jpg │ │ ├── v6-65-4.jpg │ │ ├── v6-65-8.jpg │ │ ├── v6-90-1.jpg │ │ ├── v6-90-2.jpg │ │ ├── v6-90-4.jpg │ │ ├── v6-90-8.jpg │ │ ├── v7-30-1.jpg │ │ ├── v7-30-2.jpg │ │ ├── v7-30-4.jpg │ │ ├── v7-30-8.jpg │ │ ├── v7-50-1.jpg │ │ ├── v7-50-2.jpg │ │ ├── v7-50-4.jpg │ │ ├── v7-50-8.jpg │ │ ├── v7-65-1.jpg │ │ ├── v7-65-2.jpg │ │ ├── v7-65-4.jpg │ │ ├── v7-65-8.jpg │ │ ├── v7-90-1.jpg │ │ ├── v7-90-2.jpg │ │ ├── v7-90-4.jpg │ │ ├── v7-90-8.jpg │ │ ├── v8-30-1.jpg │ │ ├── v8-30-2.jpg │ │ ├── v8-30-4.jpg │ │ ├── v8-30-8.jpg │ │ ├── v8-50-1.jpg │ │ ├── v8-50-2.jpg │ │ ├── v8-50-4.jpg │ │ ├── v8-50-8.jpg │ │ ├── v8-65-1.jpg │ │ ├── v8-65-2.jpg │ │ ├── v8-65-4.jpg │ │ ├── v8-65-8.jpg │ │ ├── v8-90-1.jpg │ │ ├── v8-90-2.jpg │ │ ├── v8-90-4.jpg │ │ ├── v8-90-8.jpg │ │ ├── 001-30-1.jpg │ │ ├── 001-30-2.jpg │ │ ├── 001-30-4.jpg │ │ ├── 001-30-8.jpg │ │ ├── 001-50-1.jpg │ │ ├── 001-50-2.jpg │ │ ├── 001-50-4.jpg │ │ ├── 001-50-8.jpg │ │ ├── 001-65-1.jpg │ │ ├── 001-65-2.jpg │ │ ├── 001-65-4.jpg │ │ ├── 001-65-8.jpg │ │ ├── 001-90-1.jpg │ │ ├── 001-90-2.jpg │ │ ├── 001-90-4.jpg │ │ ├── 001-90-8.jpg │ │ ├── 002-30-1.jpg │ │ ├── 002-30-2.jpg │ │ ├── 002-30-4.jpg │ │ ├── 002-30-8.jpg │ │ ├── 002-50-1.jpg │ │ ├── 002-50-2.jpg │ │ ├── 002-50-4.jpg │ │ ├── 002-50-8.jpg │ │ ├── 002-65-1.jpg │ │ ├── 002-65-2.jpg │ │ ├── 002-65-4.jpg │ │ ├── 002-65-8.jpg │ │ ├── 002-90-1.jpg │ │ ├── 002-90-2.jpg │ │ ├── 002-90-4.jpg │ │ ├── 002-90-8.jpg │ │ ├── 003-30-1.jpg │ │ ├── 003-30-2.jpg │ │ ├── 003-30-4.jpg │ │ ├── 003-30-8.jpg │ │ ├── 003-50-1.jpg │ │ ├── 003-50-2.jpg │ │ ├── 003-50-4.jpg │ │ ├── 003-50-8.jpg │ │ ├── 003-65-1.jpg │ │ ├── 003-65-2.jpg │ │ ├── 003-65-4.jpg │ │ ├── 003-65-8.jpg │ │ ├── 003-90-1.jpg │ │ ├── 003-90-2.jpg │ │ ├── 003-90-4.jpg │ │ ├── 003-90-8.jpg │ │ ├── 004-30-1.jpg │ │ ├── 004-30-2.jpg │ │ ├── 004-30-4.jpg │ │ ├── 004-30-8.jpg │ │ ├── 004-50-1.jpg │ │ ├── 004-50-2.jpg │ │ ├── 004-50-4.jpg │ │ ├── 004-50-8.jpg │ │ ├── 004-65-1.jpg │ │ ├── 004-65-2.jpg │ │ ├── 004-65-4.jpg │ │ ├── 004-65-8.jpg │ │ ├── 004-90-1.jpg │ │ ├── 004-90-2.jpg │ │ ├── 004-90-4.jpg │ │ ├── 004-90-8.jpg │ │ ├── 005-30-1.jpg │ │ ├── 005-30-2.jpg │ │ ├── 005-30-4.jpg │ │ ├── 005-30-8.jpg │ │ ├── 005-50-1.jpg │ │ ├── 005-50-2.jpg │ │ ├── 005-50-4.jpg │ │ ├── 005-50-8.jpg │ │ ├── 005-65-1.jpg │ │ ├── 005-65-2.jpg │ │ ├── 005-65-4.jpg │ │ ├── 005-65-8.jpg │ │ ├── 005-90-1.jpg │ │ ├── 005-90-2.jpg │ │ ├── 005-90-4.jpg │ │ ├── 005-90-8.jpg │ │ ├── 006-30-1.jpg │ │ ├── 006-30-2.jpg │ │ ├── 006-30-4.jpg │ │ ├── 006-30-8.jpg │ │ ├── 006-50-1.jpg │ │ ├── 006-50-2.jpg │ │ ├── 006-50-4.jpg │ │ ├── 006-50-8.jpg │ │ ├── 006-65-1.jpg │ │ ├── 006-65-2.jpg │ │ ├── 006-65-4.jpg │ │ ├── 006-65-8.jpg │ │ ├── 006-90-1.jpg │ │ ├── 006-90-2.jpg │ │ ├── 006-90-4.jpg │ │ ├── 006-90-8.jpg │ │ ├── straight-0.jpg │ │ ├── straight-30-1.jpg │ │ ├── straight-30-2.jpg │ │ ├── straight-30-4.jpg │ │ ├── straight-30-8.jpg │ │ ├── straight-50-1.jpg │ │ ├── straight-50-2.jpg │ │ ├── straight-50-4.jpg │ │ ├── straight-50-8.jpg │ │ ├── straight-65-1.jpg │ │ ├── straight-65-2.jpg │ │ ├── straight-65-4.jpg │ │ ├── straight-65-8.jpg │ │ ├── straight-90-1.jpg │ │ ├── straight-90-2.jpg │ │ ├── straight-90-4.jpg │ │ └── straight-90-8.jpg │ ├── sortedpca.json │ ├── model │ ├── teach.html │ ├── weights.js │ └── simple-model.js │ ├── cells-target.html │ ├── worker-cells.js │ ├── distill-deck.html │ ├── worker.js │ ├── distill-select-stepper.js │ ├── worker-predict.js │ ├── cells-tooltip.html │ ├── cells-color-key.html │ ├── figure-hairs.html │ ├── d3-scale-chromatic.min.js │ ├── cells-picker.html │ ├── hilbert.js │ ├── cells-overlay.html │ ├── figure-animated.html │ ├── cells-canvas.html │ └── distill-stage-manager.html ├── bower.json ├── package.json ├── README.md ├── .gitignore ├── strokes └── straight.json ├── bibliography.bib ├── bin ├── generate-strokes ├── canvas ├── process-validation-samples ├── svg ├── extract-cells ├── pca ├── porcupine-data └── porcupine-render ├── validation-data ├── 146.json ├── 39.json ├── 34.json ├── 178.json ├── 176.json ├── 187.json ├── 161.json ├── 12.json ├── 137.json ├── 131.json ├── 152.json ├── 82.json ├── 107.json ├── 21.json ├── 36.json ├── 115.json ├── 169.json ├── 6.json └── 194.json └── assets └── worker-normalize.js /public/thumbnail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/thumbnail.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/0-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/0-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/1-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/1-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/2-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/2-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/3-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/3-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/4-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/4-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v5-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v5-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v6-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v6-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v7-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v7-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/v8-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/v8-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/001-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/001-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/002-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/002-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/003-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/003-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/004-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/004-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/005-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/005-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/006-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/006-90-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-0.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-30-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-30-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-30-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-30-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-30-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-30-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-30-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-30-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-50-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-50-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-50-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-50-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-50-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-50-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-50-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-50-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-65-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-65-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-65-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-65-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-65-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-65-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-65-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-65-8.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-90-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-90-1.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-90-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-90-2.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-90-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-90-4.jpg -------------------------------------------------------------------------------- /public/assets/strokes/jpg/straight-90-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/distillpub/post--handwriting/HEAD/public/assets/strokes/jpg/straight-90-8.jpg -------------------------------------------------------------------------------- /public/assets/sortedpca.json: -------------------------------------------------------------------------------- 1 | [ 2 | 19, 3 | 8, 4 | 2, 5 | 3, 6 | 15, 7 | 11, 8 | 1, 9 | 10, 10 | 14, 11 | 5, 12 | 0, 13 | 6, 14 | 18, 15 | 7, 16 | 17, 17 | 4, 18 | 16, 19 | 9, 20 | 12, 21 | 13 22 | ] 23 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "handwriting", 3 | "description": "", 4 | "main": "index.md", 5 | "authors": [ 6 | "Shan Carter " 7 | ], 8 | "license": "MIT", 9 | "homepage": "https://github.com/distillpub/post--handwriting", 10 | "private": true, 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "polymer": "^1.7.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "index.html", 3 | "name": "handwriting", 4 | "dependencies": { 5 | "@webcomponents/custom-elements": "github:webcomponents/custom-elements", 6 | "@webcomponents/shadydom": "github:webcomponents/shadydom", 7 | "d3": "^4.3.0", 8 | "d3-scale-chromatic": "^1.1.0", 9 | "distill-components": "^1.4.1", 10 | "jsdom": "^9.8.3", 11 | "ml-matrix": "^2.1.0", 12 | "ml-pca": "^1.1.2", 13 | "numjs": "^0.11.5", 14 | "progress": "^1.1.8", 15 | "webcomponents.js": "^0.7.22" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # post--handwriting 2 | 3 | Multithreaded make 4 | 5 | ``` 6 | make -j 4 7 | ``` 8 | 9 | Command to build the pca.json 10 | 11 | ``` 12 | cat assets/validation/cells/0.json assets/validation/cells/1.json assets/validation/cells/2.json assets/validation/cells/3.json assets/validation/cells/4.json assets/validation/cells/5.json assets/validation/cells/6.json assets/validation/cells/7.json assets/validation/cells/8.json | bin/pca > assets/pca.json 13 | ``` 14 | Command to run tsne for sorting (copy the output into metadata.json's sortedOrder) 15 | 16 | ``` 17 | cat assets/validation/cells/0.json | bin/sort 18 | ``` 19 | 20 | ## Licensing 21 | 22 | The content of this Distill article is licensed as [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/). Code is released under the Apache 2.0 License, even if enclosed inside a notebook or served as part of the interactive article. -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | strokes/data 2 | build 3 | node_modules 4 | bower_components 5 | 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | 11 | # Runtime data 12 | pids 13 | *.pid 14 | *.seed 15 | *.pid.lock 16 | 17 | # Directory for instrumented libs generated by jscoverage/JSCover 18 | lib-cov 19 | 20 | # Coverage directory used by tools like istanbul 21 | coverage 22 | 23 | # nyc test coverage 24 | .nyc_output 25 | 26 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 27 | .grunt 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules 37 | jspm_packages 38 | 39 | # Optional npm cache directory 40 | .npm 41 | 42 | # Optional eslint cache 43 | .eslintcache 44 | 45 | # Optional REPL history 46 | .node_repl_history 47 | 48 | # Output of 'npm pack' 49 | *.tgz 50 | 51 | # Yarn Integrity file 52 | .yarn-integrity 53 | -------------------------------------------------------------------------------- /strokes/straight.json: -------------------------------------------------------------------------------- 1 | [[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0],[0.5,0,0]] 2 | -------------------------------------------------------------------------------- /bibliography.bib: -------------------------------------------------------------------------------- 1 | @article{graves2013generating, 2 | title={Generating sequences with recurrent neural networks}, 3 | author={Graves, Alex}, 4 | journal={arXiv preprint arXiv:1308.0850}, 5 | year={2013}, 6 | url={https://arxiv.org/pdf/1308.0850v5.pdf} 7 | } 8 | 9 | @misc{ha2016handwriting, 10 | title={Handwriting Generation Demo in TensorFlow}, 11 | author={Ha, David}, 12 | date={2016}, 13 | url={http://blog.otoro.net/2015/12/12/handwriting-generation-demo-in-tensorflow/} 14 | } 15 | 16 | @article{maaten2008visualizing, 17 | title={Visualizing data using t-SNE}, 18 | author={Maaten, Laurens van der and Hinton, Geoffrey}, 19 | journal={Journal of Machine Learning Research}, 20 | volume={9}, 21 | number={Nov}, 22 | pages={2579--2605}, 23 | year={2008}, 24 | url={http://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf} 25 | } 26 | 27 | @misc{olah2015understanding, 28 | title={Understanding LSTM Networks}, 29 | author={Olah, Christopher}, 30 | date={2015}, 31 | url={http://colah.github.io/posts/2015-08-Understanding-LSTMs/} 32 | } 33 | -------------------------------------------------------------------------------- /bin/generate-strokes: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var nj = require("../public/model/numjs.js"), 18 | Model = require("../public/model/node-bundle.js"), 19 | SimpleModel = require("../public/model/simple-model.js"); 20 | 21 | var steps = process.argv[2] ? process.argv[2] : 200; 22 | 23 | var model = new SimpleModel(Model); 24 | 25 | for (var i = 0; i < steps; i++) { 26 | model.step(); 27 | } 28 | 29 | process.stdout.write(JSON.stringify(model.coordinates.map(d => [d[0], d[1], d[2]]))); 30 | -------------------------------------------------------------------------------- /bin/canvas: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var fs = require("fs"), 18 | path = require("path"), 19 | d3 = require("d3"), 20 | Canvas = require("canvas"); 21 | 22 | var width = 1000, 23 | height = 500; 24 | 25 | var canvas = new Canvas(width, height), 26 | context = canvas.getContext("2d"); 27 | 28 | context.strokeStyle = "rgba(100,0,0,0.5)"; 29 | context.beginPath(); 30 | context.moveTo(50, height / 2); 31 | context.lineTo(width - 50, height / 2); 32 | context.stroke(); 33 | 34 | canvas.createPNGStream().pipe(fs.createWriteStream(path.join(__dirname, "canvas.png"))); 35 | -------------------------------------------------------------------------------- /bin/process-validation-samples: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var json = ""; 18 | 19 | process.stdin.setEncoding('utf8'); 20 | process.stdin.on('readable', () => { 21 | var chunk = process.stdin.read(); 22 | if (chunk !== null) { 23 | json += chunk.toString(); 24 | } 25 | }); 26 | process.stdin.on('end', () => { 27 | var data = JSON.parse(json); 28 | console.error(data.length); 29 | data = data.slice(1, Math.min(600, data.length)); 30 | data.forEach((d) => { 31 | d[0] = d[0] / 40 32 | d[1] = d[1] / 40 33 | }); 34 | process.stdout.write(JSON.stringify(data)); 35 | }); 36 | -------------------------------------------------------------------------------- /bin/svg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var d3 = require("d3"), 18 | jsdom = require("jsdom").jsdom; 19 | 20 | var body = d3.select(jsdom().documentElement).select("body"); 21 | 22 | var width = 1000, 23 | height = 500; 24 | 25 | var svg = body.append("svg"); 26 | 27 | var svg = body.append("svg") 28 | .attr("version", "1.1") 29 | .attr("xmlns", d3.namespaces.svg) 30 | .attr("xmlns:xlink", d3.namespaces.xlink) 31 | .attr("width", width) 32 | .attr("height", height) 33 | .attr("viewBox", "0 0 " + width + " " + height); 34 | 35 | process.stdout.write(body.node().innerHTML); 36 | -------------------------------------------------------------------------------- /public/assets/model/teach.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 31 | 32 | 33 |
34 | 35 | 36 | -------------------------------------------------------------------------------- /public/assets/cells-target.html: -------------------------------------------------------------------------------- 1 | 16 | 42 | 43 | 44 | 50 | 51 | 52 | 57 | -------------------------------------------------------------------------------- /validation-data/146.json: -------------------------------------------------------------------------------- 1 | [[100, 377, 0], [1, -1, 0], [4, -4, 0], [7, 0, 0], [8, -9, 0], [8, -8, 0], [10, -9, 0], [8, -8, 0], [6, -13, 0], [9, -4, 0], [7, -9, 0], [5, -8, 0], [7, -13, 0], [1, 1, 0], [-1, -1, 0], [0, 8, 0], [-2, 28, 0], [-3, 45, 0], [-38, 235, 0], [-11, 24, 0], [-4, 4, 0], [3, -20, 0], [1, -41, 0], [10, -48, 0], [16, -48, 0], [18, -29, 0], [83, -15, 0], [13, -5, 0], [15, -9, 0], [16, -14, 0], [16, -13, 0], [17, -14, 0], [19, -10, 0], [16, -14, 0], [10, -21, 0], [-14, 9, 0], [-13, 22, 0], [-13, 26, 0], [-10, 29, 0], [-7, 20, 0], [0, 9, 0], [4, -1, 0], [67, -67, 0], [1, 24, 0], [3, 15, 0], [6, 12, 0], [11, 2, 0], [16, -1, 0], [17, -6, 0], [18, -22, 0], [149, -261, 0], [6, -21, 0], [0, -13, 0], [-6, -7, 0], [-8, -3, 0], [-12, 2, 0], [-14, 11, 0], [-17, 22, 0], [-53, 259, 0], [10, 15, 0], [14, 11, 0], [13, -2, 0], [18, -8, 0], [18, -10, 0], [18, -19, 0], [17, -15, 0], [63, -68, 0], [-6, -3, 0], [-5, 5, 0], [-4, 13, 0], [-5, 18, 0], [-6, 17, 0], [-4, 16, 0], [0, 5, 0], [44, -82, 0], [0, 0, 0], [-3, 1, 0], [-4, 13, 0], [-5, 18, 0], [-4, 24, 0], [0, 29, 0], [73, -22, 0], [17, -16, 0], [17, -11, 0], [16, -16, 0], [17, -8, 0], [12, -10, 0], [8, -2, 0], [4, 3, 0], [-58, 70, 0], [12, 6, 0], [14, -3, 0], [17, -4, 0], [21, -4, 0], [22, -10, 0], [25, -5, 0], [78, -31, 0], [-9, 10, 0], [-14, 16, 0], [-13, 24, 0], [-13, 15, 0], [-6, 14, 0], [1, 4, 0], [7, 2, 0], [171, -68, 0], [15, 0, 0], [12, -3, 0], [6, -10, 0], [8, -2, 0], [5, 3, 0], [0, -5, 0], [-27, 24, 0], [-16, 17, 0], [-13, 20, 0], [-7, 19, 0], [3, 15, 0], [13, 1, 0], [28, -12, 0], [69, -70, 0], [33, -30, 1], [80, 97, 0], [-5, 18, 0], [6, -2, 0], [0, 0, 0], [6, -6, 1]] -------------------------------------------------------------------------------- /public/assets/worker-cells.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | importScripts("model.min.js"); 16 | 17 | // 18 | // This worker keeps the state of a single global model. 19 | // 20 | var modelX, modelS; 21 | var x, y; 22 | var temperature = 0.65; 23 | 24 | reset(); 25 | 26 | // 27 | // message event from main thread 28 | // 29 | onmessage = function(m) { 30 | if (m.data.reset) reset(); 31 | if (m.data.update) { 32 | update(m.data.update[0], m.data.update[1],m.data.update[2]); 33 | postMessage({step: modelS[1].tolist(), stepIndex: m.data.stepIndex}) 34 | } 35 | } 36 | 37 | // 38 | // Resets the global model 39 | // 40 | function reset() { 41 | x = 0; 42 | y = 0; 43 | modelX = Model.zero_input(); 44 | modelS = Model.zero_state(); 45 | } 46 | 47 | // 48 | // Updates the global model with new user coordinates 49 | // 50 | function update(dx, dy, penState) { 51 | modelX.set(0, dx); 52 | modelX.set(1, dy); 53 | modelX.set(2, penState); 54 | modelS = Model.update(modelX, modelS); 55 | x += dx; 56 | y += dy; 57 | } 58 | -------------------------------------------------------------------------------- /validation-data/39.json: -------------------------------------------------------------------------------- 1 | [[153, 173, 0], [0, -4, 0], [0, -4, 0], [0, -9, 0], [0, -15, 0], [-6, -12, 0], [-10, 2, 0], [-13, 17, 0], [-16, 34, 0], [-8, 49, 0], [4, 52, 0], [12, 43, 0], [27, 17, 0], [25, 1, 0], [25, -23, 0], [15, -42, 0], [15, -54, 0], [3, -49, 0], [-6, -47, 0], [-16, -27, 0], [-20, -2, 0], [-20, 19, 0], [-20, 34, 0], [-8, 42, 0], [1, 40, 0], [21, 38, 0], [24, 41, 0], [29, 37, 0], [29, 45, 0], [17, 46, 0], [8, 51, 0], [-2, 45, 0], [-11, 37, 0], [-15, 31, 0], [-25, 11, 0], [-20, -2, 0], [-25, -25, 0], [-18, -50, 0], [9, -66, 0], [22, -67, 0], [29, -64, 0], [38, -53, 0], [42, -43, 0], [30, -19, 0], [30, 7, 0], [16, 27, 0], [6, 43, 0], [1, 36, 0], [1, 20, 0], [-3, 5, 0], [-2, -8, 0], [-3, -32, 0], [-5, -47, 0], [5, -50, 0], [22, -40, 0], [20, -23, 0], [28, -16, 1], [193, 60, 0], [5, -9, 0], [4, -4, 0], [-2, -17, 0], [-5, -15, 0], [-16, -9, 0], [-21, 4, 0], [-23, 16, 0], [-23, 28, 0], [-12, 31, 0], [-5, 29, 0], [3, 24, 0], [10, 18, 0], [18, 5, 0], [26, -12, 0], [23, -25, 0], [23, -28, 0], [19, -23, 0], [9, -11, 0], [3, 0, 0], [-1, 16, 0], [-1, 33, 0], [0, 32, 0], [7, 24, 0], [27, 15, 0], [25, -13, 0], [27, -30, 0], [31, -42, 0], [28, -47, 0], [22, -37, 0], [15, -28, 0], [9, -10, 0], [-1, 5, 0], [-1, 12, 0], [7, 23, 0], [9, 27, 0], [10, 26, 0], [21, 24, 0], [14, 22, 0], [6, 19, 0], [-1, 17, 0], [-9, 17, 0], [-20, 17, 0], [-17, 5, 0], [-15, 2, 0], [-2, -4, 0], [1, -12, 0], [11, -18, 0], [25, -26, 0], [34, -29, 0], [36, -27, 0], [32, -36, 0], [25, -23, 0], [18, -17, 0], [0, -3, 0], [-2, 0, 0], [-6, 10, 0], [-8, 18, 0], [-2, 20, 0], [9, 20, 0], [19, 12, 0], [21, 7, 0], [33, 12, 0], [28, 6, 0], [19, 16, 0], [6, 14, 0], [-10, 24, 0], [-28, 23, 0], [-21, 21, 0], [-29, 12, 0], [-24, 5, 0], [-17, -8, 1], [219, 0, 0], [1, 0, 0], [0, 0, 0], [1, -5, 0], [2, -9, 1]] -------------------------------------------------------------------------------- /public/assets/distill-deck.html: -------------------------------------------------------------------------------- 1 | 16 | 54 | -------------------------------------------------------------------------------- /validation-data/34.json: -------------------------------------------------------------------------------- 1 | [[121, 156, 0], [-2, 0, 0], [0, 4, 0], [-2, 4, 0], [-4, 20, 0], [-5, 28, 0], [-4, 36, 0], [-2, 40, 0], [-2, 40, 0], [0, 40, 0], [0, 32, 0], [1, 24, 0], [1, 12, 0], [0, 0, 0], [0, -4, 0], [0, -4, 0], [1, -16, 0], [3, -16, 0], [3, -24, 0], [6, -12, 0], [9, -12, 0], [14, -8, 0], [14, 0, 0], [16, 8, 0], [17, 13, 0], [16, 11, 0], [15, 24, 0], [11, 20, 0], [10, 15, 0], [11, 21, 0], [8, 12, 0], [6, 4, 0], [8, 3, 0], [10, -4, 0], [13, -12, 0], [18, -16, 0], [20, -22, 0], [21, -28, 0], [20, -28, 0], [15, -25, 0], [6, -20, 0], [1, -12, 0], [-8, -8, 0], [-12, 5, 0], [-16, 8, 0], [-15, 16, 0], [-10, 21, 0], [-3, 20, 0], [1, 20, 0], [9, 19, 0], [13, 17, 0], [18, 14, 0], [21, 8, 0], [19, -1, 0], [19, -2, 0], [19, -8, 1], [218, -313, 0], [2, 0, 0], [0, 8, 0], [1, 12, 0], [1, 36, 0], [4, 40, 0], [8, 47, 0], [9, 48, 0], [9, 47, 0], [7, 40, 0], [5, 27, 0], [2, 12, 0], [0, 0, 0], [-1, -4, 0], [-9, -15, 0], [-14, -27, 0], [-22, -30, 0], [-22, -30, 0], [-17, -23, 0], [-12, -19, 0], [-5, -4, 0], [0, 0, 0], [1, -4, 0], [14, 7, 0], [21, 11, 0], [23, 6, 0], [26, 5, 0], [27, 1, 0], [24, 2, 0], [18, 6, 0], [9, -5, 0], [4, 4, 1], [87, 49, 0], [1, -8, 0], [-5, 1, 0], [-18, -6, 0], [-17, 6, 0], [-17, 6, 0], [-15, 10, 0], [-10, 13, 0], [-6, 9, 0], [3, 12, 0], [10, 10, 0], [14, 3, 0], [19, 6, 0], [17, -2, 0], [16, -6, 0], [13, -6, 0], [5, -9, 0], [-2, -7, 0], [-7, -11, 0], [-12, -11, 0], [-14, -7, 0], [-14, -6, 0], [-13, -3, 0], [-6, 10, 0], [-2, 7, 0], [5, 12, 1], [96, -242, 0], [0, -1, 0], [0, 13, 0], [-1, 29, 0], [3, 35, 0], [5, 41, 0], [10, 46, 0], [10, 43, 0], [9, 32, 0], [10, 26, 0], [11, 19, 0], [8, 3, 1], [135, -70, 0], [-1, 0, 0], [-8, 0, 0], [-19, -5, 0], [-18, 0, 0], [-18, 2, 0], [-16, 7, 0], [-11, 10, 0], [-5, 9, 0], [2, 12, 0], [11, 14, 0], [17, 10, 0], [19, 1, 0], [22, 0, 0], [16, -14, 0], [16, -20, 0], [11, -26, 0], [2, -41, 0], [-1, -45, 0], [-6, -52, 0], [-10, -46, 0], [-12, -39, 0], [-11, -30, 0], [-7, -11, 0], [0, 4, 0], [4, 11, 0], [10, 32, 0], [16, 45, 0], [17, 58, 0], [16, 66, 0], [10, 60, 0], [7, 55, 0], [5, 39, 0], [4, 24, 1]] -------------------------------------------------------------------------------- /public/assets/worker.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | importScripts("model.min.js"); 16 | 17 | var penState, x, y, dx, dy; 18 | var model_x, model_s, model_z; 19 | var temperature = 0.65; 20 | 21 | function restart() { 22 | x = 0; 23 | y = 0; 24 | dx = 0; 25 | dy = 0; 26 | penState = 0; 27 | 28 | model_x = Model.random_input(); 29 | model_s = Model.random_state(); 30 | } 31 | 32 | function step() { 33 | model_s = Model.update(model_x, model_s); 34 | model_z = Model.get_mixture_coef(model_s); 35 | model_x = Model.sample(model_z, temperature); 36 | dx = model_x.get(0); 37 | dy = model_x.get(1); 38 | penState = model_x.get(2); 39 | 40 | // Get an array out from the worker since nd class doesn't transfer. 41 | // var model_z_out = model_z.map(function(d) { 42 | // var a = []; 43 | // for (var i = 0; i < 20; i++) { 44 | // a.push(d.get(i)); 45 | // } 46 | // return a; 47 | // }); 48 | 49 | // var samples = []; 50 | // for (var i = 0; i < 200; i++) { 51 | // var m = Model.sample(model_z); 52 | // var sx = m.get(0); 53 | // var sy = m.get(1); 54 | // var sp = m.get(2); 55 | // samples.push([sx, sy, sp]); 56 | // } 57 | 58 | postMessage([dx, dy, penState, x, y]); 59 | x += dx; 60 | y += dy; 61 | if (x > 150) { 62 | restart(); 63 | } 64 | } 65 | 66 | restart(); 67 | 68 | onmessage = function(e) { 69 | if (e.data.key == "temperature") temperature = e.data.value; 70 | if (e.data.key === "step") step(); 71 | } 72 | -------------------------------------------------------------------------------- /bin/extract-cells: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | /* 18 | Takes in strokes. 19 | //Write out a csv of cell values. 20 | Write out a JSON of cell values. an array of rows. 21 | each row is a step and each element is a cell (column) 22 | */ 23 | 24 | var nj = require("../public/model/numjs.js"), 25 | Model = require("../public/model/node-bundle.js"), 26 | SimpleModel = require("../public/model/simple-model.js"), 27 | ProgressBar = require('progress'); 28 | 29 | var json = ""; 30 | 31 | process.stdin.setEncoding('utf8'); 32 | process.stdin.on('readable', () => { 33 | var chunk = process.stdin.read(); 34 | if (chunk !== null) { 35 | json += chunk.toString(); 36 | } 37 | }); 38 | process.stdin.on('end', () => { 39 | extract(JSON.parse(json)) 40 | }); 41 | 42 | function extract(coordinates) { 43 | var model = new SimpleModel(Model); 44 | var bar = new ProgressBar(':bar', { total: coordinates.length, width: 50 }); 45 | 46 | var rows = [] 47 | //csv = "" 48 | var previousCoordinates = [0, 0, 0]; 49 | model.update(0,0,0); 50 | coordinates.forEach(function(c) { 51 | model.update(c[0], c[1], c[2]); 52 | var row = pullCells(model) 53 | //rows.push(row) 54 | // we can save up to 60% by truncating all the floats 55 | rows.push(row.map(function(d) { return Math.floor(d * 100)/100 })) 56 | //csv += row.toString() + "\n" 57 | bar.tick(); 58 | }) 59 | process.stdout.write(JSON.stringify(rows)); 60 | //process.stdout.write(csv); 61 | } 62 | 63 | 64 | 65 | function pullCells(model) { 66 | var cells = []; 67 | for(var i = 0; i < 500; i++) { 68 | cells.push(model.modelS[1].get(i)) 69 | } 70 | return cells; 71 | } 72 | -------------------------------------------------------------------------------- /validation-data/178.json: -------------------------------------------------------------------------------- 1 | [[153, 326, 0], [-10, 12, 0], [-13, 1, 0], [-12, -1, 0], [-10, -12, 0], [-8, -32, 0], [2, -36, 0], [12, -47, 0], [22, -45, 0], [26, -32, 0], [29, -17, 0], [25, 9, 0], [21, 27, 0], [13, 43, 0], [7, 44, 0], [0, 48, 0], [-2, 36, 0], [-1, 12, 0], [0, 0, 0], [0, -28, 0], [8, -36, 0], [13, -37, 0], [13, -27, 0], [16, -29, 0], [17, -17, 0], [18, -4, 0], [16, 8, 0], [19, 2, 0], [22, 7, 0], [17, -3, 0], [17, -10, 0], [14, -8, 0], [9, -9, 0], [3, -4, 0], [0, 0, 0], [-1, 16, 0], [-1, 32, 0], [-3, 48, 0], [1, 48, 0], [7, 52, 0], [18, 27, 0], [18, 11, 0], [21, -9, 0], [22, -33, 0], [21, -41, 0], [17, -54, 0], [15, -37, 0], [7, -24, 0], [2, -1, 0], [-1, 8, 0], [-6, 37, 0], [-4, 48, 0], [-2, 48, 0], [9, 44, 0], [12, 15, 0], [17, -1, 0], [22, -22, 0], [26, -38, 0], [24, -46, 0], [27, -38, 0], [23, -31, 0], [18, -9, 0], [12, 14, 0], [7, 28, 0], [1, 36, 0], [-2, 28, 0], [0, 17, 0], [1, 0, 0], [3, -13, 0], [12, -33, 0], [15, -42, 0], [17, -38, 0], [19, -22, 0], [12, -6, 0], [9, 20, 0], [4, 39, 0], [0, 61, 0], [3, 56, 0], [15, 43, 0], [17, 14, 0], [24, -7, 0], [30, -35, 0], [27, -53, 0], [27, -59, 0], [20, -47, 0], [8, -25, 0], [-1, 0, 0], [-1, 12, 0], [-11, 46, 0], [-9, 53, 0], [-5, 46, 0], [3, 35, 0], [9, 11, 0], [17, -6, 0], [26, -23, 0], [31, -26, 0], [27, -23, 0], [24, -4, 0], [17, 14, 0], [11, 27, 0], [7, 26, 0], [3, 20, 0], [0, 0, 0], [-1, -3, 0], [-1, -33, 0], [-4, -40, 0], [-1, -48, 0], [2, -45, 0], [5, -37, 0], [10, -18, 0], [13, -10, 0], [22, 5, 0], [27, 12, 1], [172, 18, 0], [5, -18, 0], [-2, -16, 0], [-15, -13, 0], [-26, -3, 0], [-37, 15, 0], [-36, 30, 0], [-30, 46, 0], [-13, 47, 0], [0, 45, 0], [16, 30, 0], [25, 15, 0], [31, -13, 0], [38, -27, 0], [27, -45, 0], [24, -50, 0], [15, -47, 0], [10, -23, 0], [2, -4, 0], [-5, 13, 0], [-13, 39, 0], [-9, 50, 0], [3, 48, 0], [8, 36, 0], [12, 13, 0], [19, -7, 0], [23, -25, 0], [22, -41, 0], [22, -37, 0], [18, -21, 0], [-2, -3, 0], [2, 8, 0], [7, 31, 0], [1, 48, 0], [6, 45, 0], [16, 29, 0], [23, 16, 0], [29, -11, 0], [36, -36, 0], [35, -53, 0], [23, -55, 0], [21, -54, 0], [9, -47, 0], [-2, -25, 0], [-7, -6, 0], [-12, 11, 0], [-24, 39, 0], [-14, 52, 0], [-6, 67, 0], [3, 69, 0], [16, 66, 0], [25, 65, 0], [19, 65, 0], [17, 53, 0], [9, 47, 0], [-7, 35, 0], [-12, 23, 0], [-23, 9, 0], [-37, 0, 0], [-51, -14, 0], [-49, -18, 0], [-40, -29, 0], [-24, -28, 0], [-12, -38, 0], [7, -30, 0], [24, -34, 0], [41, -24, 0], [56, -28, 1], [221, -85, 0], [-2, 5, 0], [0, 0, 0], [0, 0, 0], [-4, -3, 1]] -------------------------------------------------------------------------------- /validation-data/176.json: -------------------------------------------------------------------------------- 1 | [[256, 401, 0], [0, 5, 0], [7, 4, 0], [17, 5, 0], [24, 10, 0], [31, 10, 0], [28, 14, 0], [23, 13, 0], [13, 21, 0], [2, 16, 0], [-10, 16, 0], [-20, 18, 0], [-30, 11, 0], [-44, 9, 0], [-52, 4, 0], [-35, 1, 0], [-43, -19, 0], [-36, -12, 0], [-23, -18, 0], [-8, -25, 0], [1, -20, 1], [367, -122, 0], [3, 16, 0], [-4, 17, 0], [11, 24, 0], [5, 16, 0], [6, 20, 0], [8, 12, 0], [12, 13, 0], [10, 9, 0], [11, 0, 0], [14, -7, 0], [16, -8, 0], [13, -16, 0], [13, -15, 0], [10, -12, 0], [11, -8, 0], [9, 0, 0], [3, -4, 0], [2, 8, 0], [4, 13, 0], [1, 8, 0], [7, 7, 0], [5, 13, 0], [11, 12, 0], [9, 4, 0], [13, 0, 0], [14, -7, 0], [15, -8, 0], [9, -12, 1], [-4, -100, 0], [-1, 0, 0], [1, 4, 0], [0, 8, 0], [5, 12, 0], [2, 16, 0], [3, 12, 0], [0, 12, 0], [2, 8, 0], [-2, 8, 0], [-1, 4, 0], [-3, 0, 0], [-1, -8, 0], [-3, -17, 0], [1, -11, 0], [2, -16, 0], [9, -12, 0], [11, -12, 0], [16, -8, 0], [18, -12, 0], [24, -4, 0], [20, -4, 0], [20, -5, 0], [16, 1, 0], [13, -5, 1], [83, -9, 0], [11, 11, 0], [12, 20, 0], [8, 16, 0], [11, 24, 0], [10, 16, 0], [10, 15, 0], [9, 16, 0], [4, 4, 0], [1, 0, 0], [2, 0, 0], [5, -13, 0], [7, -12, 0], [10, -21, 0], [14, -16, 0], [15, -21, 0], [20, -16, 0], [20, -14, 0], [20, -13, 0], [18, -9, 0], [12, -4, 1], [4, -25, 0], [3, 4, 0], [5, 12, 0], [0, 15, 0], [4, 13, 0], [5, 20, 0], [3, 19, 0], [3, 20, 0], [4, 19, 1], [48, -71, 0], [10, 24, 0], [9, 19, 0], [7, 20, 0], [8, 23, 0], [8, 16, 0], [4, 11, 0], [3, 9, 0], [-1, -1, 0], [2, -4, 0], [3, -8, 0], [5, -12, 0], [10, -18, 0], [12, -20, 0], [16, -22, 0], [18, -22, 0], [18, -21, 0], [19, -22, 0], [13, -26, 0], [11, -17, 0], [7, -17, 1], [-6, 130, 0], [4, 0, 0], [11, -1, 0], [14, -6, 0], [17, -9, 0], [19, -11, 0], [22, -10, 0], [21, -11, 0], [19, -14, 0], [13, -14, 0], [6, -8, 0], [-1, -5, 0], [-6, -7, 0], [-28, 0, 0], [-15, 10, 0], [-16, 17, 0], [-15, 14, 0], [-14, 22, 0], [-7, 20, 0], [-3, 16, 0], [10, 24, 0], [17, 15, 0], [22, 13, 0], [29, 8, 0], [30, 10, 0], [31, -5, 0], [30, -7, 0], [26, -12, 1], [182, -135, 0], [-4, -24, 0], [-16, -10, 0], [-17, -5, 0], [-23, -5, 0], [-68, 23, 0], [-20, 15, 0], [-11, 46, 0], [5, 15, 0], [11, 22, 0], [17, 10, 0], [22, 9, 0], [27, 5, 0], [24, -4, 0], [26, -13, 0], [22, -19, 0], [17, -27, 1], [2, -195, 0], [-4, -7, 0], [4, 7, 0], [0, 9, 0], [2, 23, 0], [8, 60, 0], [7, 35, 0], [7, 35, 0], [6, 36, 0], [10, 26, 0], [12, 27, 0], [11, 14, 0], [15, 2, 0], [12, -2, 0], [12, -14, 1], [149, -242, 0], [3, 29, 0], [2, 24, 0], [0, 24, 0], [5, 28, 1], [28, 174, 0], [-4, -3, 0], [-4, -8, 0], [0, -4, 0], [0, -13, 1]] -------------------------------------------------------------------------------- /validation-data/187.json: -------------------------------------------------------------------------------- 1 | [[256, 401, 0], [0, 5, 0], [7, 4, 0], [17, 5, 0], [24, 10, 0], [31, 10, 0], [28, 14, 0], [23, 13, 0], [13, 21, 0], [2, 16, 0], [-10, 16, 0], [-20, 18, 0], [-30, 11, 0], [-44, 9, 0], [-52, 4, 0], [-35, 1, 0], [-43, -19, 0], [-36, -12, 0], [-23, -18, 0], [-8, -25, 0], [1, -20, 1], [367, -122, 0], [3, 16, 0], [-4, 17, 0], [11, 24, 0], [5, 16, 0], [6, 20, 0], [8, 12, 0], [12, 13, 0], [10, 9, 0], [11, 0, 0], [14, -7, 0], [16, -8, 0], [13, -16, 0], [13, -15, 0], [10, -12, 0], [11, -8, 0], [9, 0, 0], [3, -4, 0], [2, 8, 0], [4, 13, 0], [1, 8, 0], [7, 7, 0], [5, 13, 0], [11, 12, 0], [9, 4, 0], [13, 0, 0], [14, -7, 0], [15, -8, 0], [9, -12, 1], [-4, -100, 0], [-1, 0, 0], [1, 4, 0], [0, 8, 0], [5, 12, 0], [2, 16, 0], [3, 12, 0], [0, 12, 0], [2, 8, 0], [-2, 8, 0], [-1, 4, 0], [-3, 0, 0], [-1, -8, 0], [-3, -17, 0], [1, -11, 0], [2, -16, 0], [9, -12, 0], [11, -12, 0], [16, -8, 0], [18, -12, 0], [24, -4, 0], [20, -4, 0], [20, -5, 0], [16, 1, 0], [13, -5, 1], [83, -9, 0], [11, 11, 0], [12, 20, 0], [8, 16, 0], [11, 24, 0], [10, 16, 0], [10, 15, 0], [9, 16, 0], [4, 4, 0], [1, 0, 0], [2, 0, 0], [5, -13, 0], [7, -12, 0], [10, -21, 0], [14, -16, 0], [15, -21, 0], [20, -16, 0], [20, -14, 0], [20, -13, 0], [18, -9, 0], [12, -4, 1], [4, -25, 0], [3, 4, 0], [5, 12, 0], [0, 15, 0], [4, 13, 0], [5, 20, 0], [3, 19, 0], [3, 20, 0], [4, 19, 1], [48, -71, 0], [10, 24, 0], [9, 19, 0], [7, 20, 0], [8, 23, 0], [8, 16, 0], [4, 11, 0], [3, 9, 0], [-1, -1, 0], [2, -4, 0], [3, -8, 0], [5, -12, 0], [10, -18, 0], [12, -20, 0], [16, -22, 0], [18, -22, 0], [18, -21, 0], [19, -22, 0], [13, -26, 0], [11, -17, 0], [7, -17, 1], [-6, 130, 0], [4, 0, 0], [11, -1, 0], [14, -6, 0], [17, -9, 0], [19, -11, 0], [22, -10, 0], [21, -11, 0], [19, -14, 0], [13, -14, 0], [6, -8, 0], [-1, -5, 0], [-6, -7, 0], [-28, 0, 0], [-15, 10, 0], [-16, 17, 0], [-15, 14, 0], [-14, 22, 0], [-7, 20, 0], [-3, 16, 0], [10, 24, 0], [17, 15, 0], [22, 13, 0], [29, 8, 0], [30, 10, 0], [31, -5, 0], [30, -7, 0], [26, -12, 1], [182, -135, 0], [-4, -24, 0], [-16, -10, 0], [-17, -5, 0], [-23, -5, 0], [-68, 23, 0], [-20, 15, 0], [-11, 46, 0], [5, 15, 0], [11, 22, 0], [17, 10, 0], [22, 9, 0], [27, 5, 0], [24, -4, 0], [26, -13, 0], [22, -19, 0], [17, -27, 1], [2, -195, 0], [-4, -7, 0], [4, 7, 0], [0, 9, 0], [2, 23, 0], [8, 60, 0], [7, 35, 0], [7, 35, 0], [6, 36, 0], [10, 26, 0], [12, 27, 0], [11, 14, 0], [15, 2, 0], [12, -2, 0], [12, -14, 1], [149, -242, 0], [3, 29, 0], [2, 24, 0], [0, 24, 0], [5, 28, 1], [28, 174, 0], [-4, -3, 0], [-4, -8, 0], [0, -4, 0], [0, -13, 1]] -------------------------------------------------------------------------------- /bin/pca: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | /* 18 | Takes in strokes. 19 | //Write out a csv of cell values. 20 | Write out a JSON of cell values. an array of rows. 21 | each row is a step and each element is a cell (column) 22 | */ 23 | 24 | var nj = require("../public/model/numjs.js"), 25 | Model = require("../public/model/node-bundle.js"), 26 | SimpleModel = require("../public/model/simple-model.js"), 27 | Matrix = require('ml-matrix'), 28 | PCA = require ('ml-pca'), 29 | ProgressBar = require('progress'); 30 | 31 | var json = ""; 32 | 33 | process.stdin.setEncoding('utf8'); 34 | process.stdin.on('readable', () => { 35 | var chunk = process.stdin.read(); 36 | if (chunk !== null) { 37 | json += chunk.toString(); 38 | } 39 | }); 40 | process.stdin.on('end', () => { 41 | str = json.split('\n') 42 | json = "[" + str.slice(1) + "]" 43 | extract(JSON.parse(json)) 44 | }); 45 | 46 | function extract(samples) { 47 | //console.log("samples", samples.length) 48 | var steps = [] 49 | samples.forEach(function(sample) { 50 | steps = steps.concat(sample) 51 | }) 52 | //var bar = new ProgressBar(':bar', { total: coordinates.length, width: 50 }); 53 | //console.log("steps", steps[0]) 54 | 55 | var matrix = new Matrix(steps) 56 | var pca = new PCA(matrix) 57 | //console.log("pca", pca) 58 | var eigenvectors = pca.getEigenvectors() 59 | var eigenvalues = pca.getEigenvalues() 60 | //console.log("eigen vectors", evectors) 61 | //console.log("eigen values", evectors) 62 | 63 | evectors = eigenvectors.map(function(row) { return row.map(function(d) { return Math.floor(d * 100)/100 }) }) 64 | evalues = eigenvalues.map(function(d) { return Math.floor(d * 100)/100 }) 65 | 66 | process.stdout.write(JSON.stringify({eigenvectors: evectors, eigenvalues: evalues})); 67 | //process.stdout.write(csv); 68 | } 69 | -------------------------------------------------------------------------------- /validation-data/161.json: -------------------------------------------------------------------------------- 1 | [[186, 214, 0], [1, -5, 0], [5, 17, 0], [3, 24, 0], [-3, 32, 0], [-2, 43, 0], [-3, 41, 0], [-2, 39, 0], [-4, 37, 0], [-3, 27, 0], [-3, 20, 0], [-2, 12, 0], [1, 0, 0], [1, -8, 1], [-75, -308, 0], [37, -13, 0], [46, -11, 0], [48, -18, 0], [48, -15, 0], [40, -12, 0], [32, -8, 0], [20, -8, 1], [-201, 229, 0], [35, -7, 0], [34, -3, 0], [21, -7, 1], [376, -1, 0], [-13, -7, 0], [-19, 1, 0], [-20, 5, 0], [-19, 17, 0], [-16, 17, 0], [-11, 17, 0], [0, 19, 0], [8, 19, 0], [15, 12, 0], [17, 3, 0], [20, 0, 0], [18, -10, 0], [15, -17, 0], [10, -21, 0], [5, -25, 0], [3, -15, 0], [-2, -12, 0], [-1, 0, 0], [-2, 0, 0], [-3, 8, 0], [2, 20, 0], [4, 24, 0], [6, 24, 0], [4, 12, 0], [7, 11, 0], [6, 8, 1], [51, -9, 0], [-5, -7, 0], [-4, -12, 0], [-5, -23, 0], [1, -21, 0], [5, -20, 0], [10, -17, 0], [10, -9, 0], [14, -5, 0], [12, 7, 0], [12, 10, 0], [10, 19, 0], [5, 20, 1], [123, -30, 0], [0, -4, 0], [-11, -7, 0], [-12, 2, 0], [-21, 2, 0], [-15, 15, 0], [-13, 17, 0], [-5, 17, 0], [2, 24, 0], [10, 10, 0], [13, 11, 0], [20, 5, 0], [19, -6, 0], [20, -14, 0], [18, -18, 1], [-35, -158, 0], [2, 20, 0], [13, 31, 0], [7, 32, 0], [9, 30, 0], [7, 23, 0], [8, 20, 1], [217, -63, 0], [14, 16, 0], [7, 25, 0], [10, 30, 0], [6, 27, 0], [8, 23, 0], [6, 23, 0], [2, 12, 0], [-1, 5, 0], [-1, -1, 0], [-7, -11, 0], [-10, -26, 0], [-8, -27, 0], [-4, -32, 0], [-3, -36, 0], [7, -33, 0], [12, -28, 0], [16, -28, 0], [21, -8, 0], [22, 0, 0], [17, 8, 0], [12, 14, 0], [5, 24, 0], [-4, 21, 0], [-13, 23, 0], [-16, 16, 0], [-19, 8, 0], [-13, 3, 0], [-8, -3, 0], [0, -8, 1], [165, -94, 0], [-4, -7, 0], [-15, -5, 0], [-13, 8, 0], [-18, 7, 0], [-12, 15, 0], [-5, 18, 0], [2, 16, 0], [10, 14, 0], [15, 5, 0], [18, 0, 0], [19, -5, 0], [14, -11, 0], [11, -15, 0], [4, -13, 0], [-3, -12, 0], [-4, -3, 0], [-1, 0, 0], [-2, 0, 0], [3, 13, 0], [5, 15, 0], [10, 18, 1], [48, -62, 0], [-8, -2, 0], [-2, 0, 0], [0, 0, 0], [12, 6, 0], [18, 11, 0], [22, 11, 0], [23, 19, 0], [17, 11, 0], [11, 14, 0], [1, 8, 0], [-11, 7, 0], [-18, 9, 0], [-23, 3, 0], [-23, -3, 1], [117, -111, 0], [-19, 1, 0], [-12, 8, 0], [-2, 8, 0], [7, 7, 0], [23, 10, 0], [28, 9, 0], [29, 8, 0], [23, 9, 0], [13, 8, 0], [3, 8, 0], [-10, 7, 0], [-18, 14, 0], [-24, 3, 0], [-20, -3, 1], [158, -66, 0], [27, -9, 0], [14, -10, 0], [7, -6, 0], [-2, -8, 0], [-12, -8, 0], [-14, 1, 0], [-21, 3, 0], [-19, 6, 0], [-11, 16, 0], [-5, 19, 0], [1, 16, 0], [14, 21, 0], [16, 11, 0], [25, 14, 0], [24, 4, 1], [114, -109, 0], [-19, -1, 0], [-17, 2, 0], [-9, -1, 0], [5, 6, 0], [17, 7, 0], [28, 12, 0], [30, 9, 0], [28, 10, 0], [17, 12, 0], [5, 6, 0], [-9, 7, 0], [-16, 15, 0], [-25, 5, 1]] -------------------------------------------------------------------------------- /public/assets/distill-select-stepper.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | "use strict"; 16 | customElements.define("distill-select-stepper", class extends HTMLElement { 17 | constructor() { 18 | super(); 19 | let shadowRoot = this.attachShadow({mode: 'open'}); 20 | shadowRoot.innerHTML = ` 21 | 27 | 28 | `; 29 | this.imageSlot = shadowRoot.querySelector("slot"); 30 | this.imageSlot.addEventListener("slotchange", () => this.updateSlot()); 31 | } 32 | 33 | connectedCallback() { 34 | this.updateSlot(); 35 | } 36 | 37 | updateSlot() { 38 | this.slides = this.imageSlot.assignedNodes().filter((d) => d.nodeType === 1); 39 | this.value = this.getAttribute("value") ? this.getAttribute("value") : 0; 40 | } 41 | 42 | static get observedAttributes() { 43 | return ["labels", "value"]; 44 | } 45 | 46 | set labels(val) { 47 | this.setAttribute("length", val); 48 | } 49 | get length() { 50 | return +this.getAttribute("length"); 51 | } 52 | 53 | // Current displayed image value 54 | set value(val) { 55 | if (val < 0 || val > this.slides.length - 1) { 56 | throw new Error("Given value for distill-deck element is too big or too small given the number of children."); 57 | } else { 58 | this.setAttribute("value", val); 59 | this.slides.forEach((el) => { 60 | el.style.top = 0; 61 | el.style.left = 0; 62 | el.style.position = "absolute"; 63 | el.style.zIndex = 0; 64 | el.style.opacity = 0; 65 | el.style.transition = "opacity 0.3s"; 66 | }); 67 | this.slides[val].style.position = "relative"; 68 | this.slides[val].style.zIndex = this.slides.length; 69 | this.slides[val].style.opacity = 1; 70 | } 71 | } 72 | get value() { 73 | return +this.getAttribute("value"); 74 | } 75 | }); 76 | -------------------------------------------------------------------------------- /public/assets/worker-predict.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | importScripts("model.min.js"); 16 | 17 | // 18 | // This worker keeps the state of a single global model. 19 | // 20 | var modelX, modelS; 21 | var x, y; 22 | var temperature = 0.65; 23 | 24 | reset(); 25 | 26 | // 27 | // message event from main thread 28 | // 29 | onmessage = function(m) { 30 | if (m.data.reset) reset(); 31 | if (typeof +m.data.temperature === "number") temperature = +m.data.temperature; 32 | if (m.data.update) update(m.data.update[0], m.data.update[1],m.data.update[2]); 33 | if (m.data.predict) { 34 | var output = predict(modelX, modelS, m.data.predict); 35 | postMessage(output); 36 | } 37 | } 38 | 39 | // 40 | // Resets the global model 41 | // 42 | function reset() { 43 | x = 0; 44 | y = 0; 45 | modelX = Model.zero_input(); 46 | modelS = Model.zero_state(); 47 | } 48 | 49 | // 50 | // Makes a predictive stroke from the global model without modifying the 51 | // global state of the model. 52 | // 53 | function predict(modelX, modelS, steps) { 54 | var coordinates = []; 55 | var dx = 0, 56 | dy = 0; 57 | var penState = 0; 58 | 59 | var localModelX = modelX.clone(); 60 | var localModelZ; 61 | var localModelS = [ 62 | modelS[0].clone(), 63 | modelS[1].clone() 64 | ]; 65 | 66 | for (var i = 0; i < steps; i++) { 67 | localModelS = Model.update(localModelX, localModelS); 68 | localModelZ = Model.get_mixture_coef(localModelS); 69 | localModelX = Model.sample(localModelZ, temperature); 70 | 71 | dx = localModelX.get(0); 72 | dy = localModelX.get(1); 73 | penState = localModelX.get(2); 74 | 75 | coordinates.push([dx, dy, penState]); 76 | 77 | } 78 | return[x, y, coordinates]; 79 | } 80 | 81 | // 82 | // Updates the global model with new user coordinates 83 | // 84 | function update(dx, dy, penState) { 85 | modelX.set(0, dx); 86 | modelX.set(1, dy); 87 | modelX.set(2, penState); 88 | modelS = Model.update(modelX, modelS); 89 | x += dx; 90 | y += dy; 91 | } 92 | -------------------------------------------------------------------------------- /public/assets/cells-tooltip.html: -------------------------------------------------------------------------------- 1 | 16 | 50 | 51 | 52 | 56 | 57 | 58 | 92 | -------------------------------------------------------------------------------- /public/assets/cells-color-key.html: -------------------------------------------------------------------------------- 1 | 16 | 43 | 44 | 45 | 50 | 51 | 52 | 98 | -------------------------------------------------------------------------------- /bin/porcupine-data: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var d3 = require("d3"), 18 | // nj = require("../assets/model/numjs.js"), 19 | // nj = require("numjs"), 20 | Model = require("../assets/model/node-bundle.js"), 21 | SimpleModel = require("../assets/model/simple-model.js"), 22 | ProgressBar = require('progress'); 23 | 24 | var json = ""; 25 | var coordinates = []; 26 | var data = []; 27 | 28 | process.stdin.setEncoding('utf8'); 29 | process.stdin.on('readable', () => { 30 | var chunk = process.stdin.read(); 31 | if (chunk !== null) { 32 | json += chunk.toString(); 33 | } 34 | }); 35 | process.stdin.on('end', () => { 36 | render(JSON.parse(json)) 37 | }); 38 | 39 | var futureLines = process.argv[2] ? +process.argv[2] : 50; 40 | var futureSteps = process.argv[3] ? +process.argv[3] : 2; 41 | var temperature = process.argv[4] ? +process.argv[4] : 0.65; 42 | 43 | function render(coordinates) { 44 | 45 | var bar = new ProgressBar(':bar', { total: coordinates.length, width: 50 }); 46 | 47 | var model = new SimpleModel(Model); 48 | 49 | var previousCoordinates = [0, 0, 0]; 50 | coordinates.forEach(function(c) { 51 | 52 | var samples = model.unroll(futureSteps, futureLines, temperature); 53 | var renderedSamples = [] 54 | 55 | samples.forEach(function(p) { 56 | var s = { 57 | segments: [] 58 | }; 59 | var x1 = 0, y1 = 0; 60 | var penState = model.penState; 61 | p.forEach(function(segment) { 62 | s.segments.push({ 63 | x: model.x + model.dx + x1, 64 | y: model.y + model.dy + y1, 65 | dx: segment[0], 66 | dy: segment[1], 67 | penState: segment[2], 68 | previousPenState: penState 69 | }); 70 | x1 += segment[0]; 71 | y1 += segment[1]; 72 | penState = segment[2]; 73 | }); 74 | renderedSamples.push(s); 75 | }); 76 | 77 | model.update(c[0], c[1], c[2]); 78 | 79 | var d = { 80 | x: model.x, 81 | y: model.y, 82 | dx: model.dx, 83 | dy: model.dy, 84 | penState: model.penState, 85 | previousPenState: model.previousPenState, 86 | penStateProbability: model.modelZ[6].get(0), 87 | samples: renderedSamples 88 | }; 89 | 90 | data.push(d); 91 | previousCoordinates = c; 92 | bar.tick(); 93 | }); 94 | 95 | process.stdout.write(JSON.stringify(data, null, 2)); 96 | 97 | } 98 | -------------------------------------------------------------------------------- /public/assets/figure-hairs.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 45 | 46 | 47 | 61 | 62 | 63 | 100 | -------------------------------------------------------------------------------- /public/assets/model/weights.js: -------------------------------------------------------------------------------- 1 | // Copyright 2018 Google LLC 2 | // 3 | // Licensed under the Apache License, Version 2.0 (the "License"); 4 | // you may not use this file except in compliance with the License. 5 | // You may obtain a copy of the License at 6 | // 7 | // http://www.apache.org/licenses/LICENSE-2.0 8 | // 9 | // Unless required by applicable law or agreed to in writing, software 10 | // distributed under the License is distributed on an "AS IS" BASIS, 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | // See the License for the specific language governing permissions and 13 | // limitations under the License. 14 | 15 | var string_to_uint8array = function(b64encoded) { 16 | var u8 = new Uint8Array(atob(b64encoded).split("").map(function(c) { 17 | return c.charCodeAt(0); })); 18 | return u8; 19 | } 20 | 21 | var uintarray_to_string = function(u8) { 22 | var b64encoded = btoa(String.fromCharCode.apply(null, u8)); 23 | return b64encoded; 24 | }; 25 | 26 | function encode_array(raw_array) { 27 | var i; 28 | var N = raw_array.length; 29 | var x = []; 30 | for (i=0;i 16 | 41 | 42 | 43 | 52 | 53 | 54 | 108 | -------------------------------------------------------------------------------- /validation-data/137.json: -------------------------------------------------------------------------------- 1 | [[118, 248, 0], [20, 46, 0], [9, 32, 0], [2, 36, 0], [1, 38, 0], [-5, 31, 0], [1, 37, 0], [-4, 27, 0], [-2, 24, 1], [-40, -289, 1], [3, 5, 0], [18, 22, 0], [0, 12, 0], [6, 19, 0], [20, 29, 0], [17, 25, 0], [26, 29, 0], [36, 33, 0], [41, 35, 0], [47, 33, 0], [50, 30, 0], [43, 21, 0], [43, 14, 0], [35, 7, 0], [34, -3, 0], [27, -15, 0], [21, -30, 0], [14, -43, 0], [7, -48, 0], [3, -52, 0], [0, -48, 0], [57, -79, 0], [-20, -44, 0], [-10, -31, 1], [351, 212, 0], [-9, -7, 0], [-16, -8, 0], [-21, -4, 0], [-29, -2, 0], [-25, 4, 0], [-29, 7, 0], [-27, 8, 0], [-12, 17, 0], [-1, 20, 0], [6, 19, 0], [19, 21, 0], [19, 17, 0], [26, 12, 0], [18, 2, 0], [16, -5, 0], [25, -9, 0], [23, -17, 0], [13, -20, 0], [8, -16, 0], [-5, -12, 1], [806, -23, 0], [30, 13, 0], [37, 15, 0], [26, 12, 0], [24, 14, 0], [12, 11, 0], [8, 11, 0], [-2, 12, 0], [-11, 12, 0], [-14, 10, 0], [-39, 2, 0], [-40, -3, 0], [-58, -11, 0], [-54, -18, 0], [-58, -21, 0], [-56, -24, 0], [-42, -24, 1], [431, 31, 0], [9, -7, 0], [13, -9, 0], [18, -11, 0], [7, -16, 0], [11, -13, 0], [1, -12, 0], [0, -11, 0], [-10, -8, 0], [-16, -4, 0], [-17, 2, 0], [-9, 10, 0], [-12, 15, 0], [-1, 21, 0], [11, 24, 0], [11, 24, 0], [20, 23, 0], [29, 22, 0], [32, 16, 0], [35, 11, 0], [42, 5, 1], [329, -174, 0], [-17, 2, 0], [-19, 6, 0], [-24, 9, 0], [-17, 15, 0], [-12, 18, 0], [-12, 20, 0], [0, 23, 0], [8, 22, 0], [18, 22, 0], [23, 18, 0], [25, 12, 0], [36, 6, 0], [30, -1, 0], [34, -6, 0], [26, -12, 0], [31, -16, 1], [73, -100, 0], [7, 5, 0], [5, 12, 0], [7, 15, 0], [3, 17, 0], [2, 19, 0], [7, 16, 0], [9, 12, 0], [-2, 5, 0], [3, 1, 0], [-2, -7, 0], [-3, -13, 0], [-7, -18, 0], [-1, -19, 0], [3, -22, 0], [-2, -22, 0], [7, -22, 0], [10, -17, 0], [16, -12, 0], [22, -9, 0], [26, 0, 0], [33, 1, 0], [33, 3, 0], [30, 8, 0], [30, 12, 1], [17, 85, 0], [10, -3, 0], [9, -6, 0], [16, -9, 0], [12, -14, 0], [13, -15, 0], [5, -19, 0], [5, -17, 0], [-5, -13, 0], [-11, -8, 0], [-11, -1, 0], [-15, 6, 0], [-11, 14, 0], [-10, 19, 0], [-2, 22, 0], [1, 24, 0], [17, 27, 0], [18, 23, 0], [27, 21, 0], [32, 16, 0], [35, 12, 0], [36, 5, 0], [38, 0, 0], [40, -7, 0], [41, -14, 0], [36, -23, 0], [29, -29, 0], [22, -34, 0], [22, -38, 1], [2, -206, 0], [9, 20, 0], [8, 29, 0], [0, 33, 0], [9, 37, 0], [3, 39, 0], [8, 36, 0], [9, 34, 0], [4, 29, 0], [8, 22, 0], [7, 15, 0], [2, 8, 0], [1, -2, 1], [111, -94, 1], [-27, -10, 0], [-24, -3, 0], [-32, 0, 0], [-29, 1, 0], [-30, 1, 0], [-17, 4, 0], [-17, 2, 0], [-4, 1, 1], [958, -238, 0], [1, -1, 0], [-1, -1, 0], [4, 2, 0], [-4, 3, 0], [3, -2, 0], [8, 7, 0], [-2, 14, 0], [1, 20, 0], [5, 23, 0], [5, 30, 0], [2, 31, 0], [7, 32, 0], [3, 30, 0], [0, 27, 0], [3, 24, 0], [0, 21, 1], [64, -82, 0], [-48, -3, 0], [-48, -3, 0], [-53, -5, 0], [-39, -3, 1], [522, 8, 0], [-27, 5, 0], [-36, 7, 0], [-23, 16, 0], [-23, 13, 0], [-11, 14, 0], [-1, 14, 0], [9, 15, 0], [22, 10, 1], [46, 13, 0], [21, -1, 0], [22, -9, 0], [22, -10, 1], [40, -44, 0], [6, -7, 0], [-1, 0, 0], [4, 3, 0], [14, 38, 0], [17, 20, 0], [20, 21, 0], [22, 17, 0], [13, 15, 0], [15, 9, 0], [12, 0, 1], [138, -299, 0], [-2, 12, 0], [-3, 22, 0], [5, 22, 0], [-3, 24, 0], [9, 29, 0], [4, 31, 0], [-64, 386, 0], [7, 24, 0], [-1, 20, 0], [0, 18, 0], [2, 13, 0], [-3, 6, 1], [115, -525, 0], [1, 27, 0], [4, 26, 0], [-4, 27, 0], [0, 27, 0], [-4, 23, 0], [6, 20, 1], [46, -92, 0], [-14, 6, 0], [-8, 9, 0], [-7, 10, 0], [7, 15, 0], [10, 14, 0], [26, 14, 0], [33, 20, 0], [315, 82, 0], [27, 4, 0], [17, 0, 1], [38, -60, 0], [-29, -4, 0], [-33, -11, 0], [-31, -12, 1], [414, -114, 0], [16, -1, 0], [24, -1, 0], [19, 9, 0], [42, 23, 0], [42, 24, 0], [42, 19, 0], [32, 1, 0], [12, -11, 1]] -------------------------------------------------------------------------------- /public/assets/hilbert.js: -------------------------------------------------------------------------------- 1 | // from http://bl.ocks.org/nitaku/8947871 2 | 3 | var LSystem = {}; 4 | 5 | 6 | LSystem.fractalize = function(config) { 7 | var char, i, input, output, _i, _len, _ref; 8 | input = config.axiom; 9 | for (i = 0, _ref = config.steps; 0 <= _ref ? i < _ref : i > _ref; 0 <= _ref ? i++ : i--) { 10 | output = ''; 11 | for (_i = 0, _len = input.length; _i < _len; _i++) { 12 | char = input[_i]; 13 | if (char in config.rules) { 14 | output += config.rules[char]; 15 | } else { 16 | output += char; 17 | } 18 | } 19 | input = output; 20 | } 21 | return output; 22 | }; 23 | 24 | /* convert a Lindenmayer string into an SVG path string 25 | */ 26 | LSystem.path = function(config) { 27 | var angle, char, path, _i, _len, _ref; 28 | angle = 0.0; 29 | path = 'M0 0'; 30 | _ref = config.fractal; 31 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { 32 | char = _ref[_i]; 33 | if (char === '+') { 34 | angle += config.angle; 35 | } else if (char === '-') { 36 | angle -= config.angle; 37 | } else if (char === 'F') { 38 | path += "l" + (config.side * Math.cos(angle)) + " " + (config.side * Math.sin(angle)); 39 | } 40 | } 41 | return path; 42 | }; 43 | 44 | LSystem.grid = function(config) { 45 | var angle, char, i, j, len, ref, x, y; 46 | angle = 0.0; 47 | j = 1; 48 | var grid = [{x: 0, y: 0, j: 0}]; 49 | ref = config.fractal; 50 | for (i = 0, len = ref.length; i < len; i++) { 51 | //if(j >= config.data.length) return grid; 52 | char = ref[i]; 53 | if (char === '+') { 54 | angle += config.angle; 55 | } else if (char === '-') { 56 | angle -= config.angle; 57 | } else if (char === 'F') { 58 | x = config.side * Math.cos(angle); 59 | y = config.side * Math.sin(angle); 60 | x += grid[j-1].x; 61 | y += grid[j-1].y; 62 | grid.push({ 63 | x: x, 64 | y: y, 65 | //data: config.data[j], 66 | j: j 67 | }); 68 | j++ 69 | } 70 | } 71 | return grid; 72 | } 73 | 74 | function hilbert() { 75 | var angle = 270 * Math.PI / 180; 76 | var nodes = []; 77 | var grid = []; 78 | var data = []; 79 | var sideLength = 20; 80 | var steps, hilbertConfig, hilbertFractal; 81 | 82 | function calculate() { 83 | steps = Math.ceil(Math.log2(data.length || 1) / 2) 84 | hilbertConfig = { 85 | steps: steps, 86 | axiom: 'A', 87 | rules: { 88 | A: '-BF+AFA+FB-', 89 | B: '+AF-BFB-FA+' 90 | } 91 | } 92 | hilbertFractal = LSystem.fractalize(hilbertConfig); 93 | } 94 | 95 | function newNodes() { 96 | calculate(); 97 | nodes = []; 98 | grid = LSystem.grid({ 99 | fractal: hilbertFractal, 100 | side: sideLength, 101 | angle: angle 102 | }) 103 | //console.log(data, grid) 104 | data.forEach(function(d,i) { 105 | var node = { 106 | x: grid[i].x, 107 | y: grid[i].y, 108 | data: d, 109 | index: i 110 | } 111 | nodes.push(node); 112 | }) 113 | } 114 | 115 | this.nodes = function(val) { 116 | if(val) { 117 | data = val 118 | } 119 | newNodes(); 120 | return nodes; 121 | } 122 | this.sideLength = function(val) { 123 | if(val) { 124 | sideLength = val; 125 | return this; 126 | } 127 | return sideLength; 128 | } 129 | } 130 | 131 | if(typeof module != "undefined") module.exports = hilbert; 132 | -------------------------------------------------------------------------------- /public/assets/cells-overlay.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 39 | 40 | 41 | 49 | 50 | 51 | 109 | -------------------------------------------------------------------------------- /public/assets/model/simple-model.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | if (typeof d3 === "undefined") var d3 = require("d3"); 3 | 4 | class SimpleModel { 5 | constructor(m) { 6 | this.Model = m; 7 | this.reset(); 8 | } 9 | 10 | reset() { 11 | this.x = 0; 12 | this.y = 0; 13 | this.dx = 0; 14 | this.dy = 0; 15 | this.previousPenState = 0; 16 | this.penState = 0; 17 | 18 | this.modelX = this.Model.zero_input(); 19 | this.modelS = this.Model.zero_state(); 20 | this.modelZ = this.Model.get_mixture_coef(this.modelS); 21 | this.coordinates = []; 22 | } 23 | 24 | update(dx, dy, pen) { 25 | this.x = this.x + this.dx; 26 | this.y = this.y + this.dy; 27 | this.modelS = this.Model.update(this.modelX, this.modelS); 28 | this.modelZ = this.Model.get_mixture_coef(this.modelS); 29 | this.modelX = this.Model.sample(this.modelZ); 30 | 31 | this.dx = dx; 32 | this.dy = dy; 33 | this.previousPenState = this.penState; 34 | this.penState = pen; 35 | 36 | this.modelX.set(0, this.dx); 37 | this.modelX.set(1, this.dy); 38 | this.modelX.set(2, this.penState); 39 | 40 | var c = [this.dx, this.dy, this.penState, this.modelZ]; 41 | this.coordinates.push(c); 42 | 43 | return c; 44 | } 45 | 46 | step(temp) { 47 | if (typeof temp !== "number") temp = 0.65; 48 | this.x = this.x + this.dx; 49 | this.y = this.y + this.dy; 50 | this.modelS = this.Model.update(this.modelX, this.modelS); 51 | this.modelZ = this.Model.get_mixture_coef(this.modelS); 52 | this.modelX = this.Model.sample(this.modelZ, temp); 53 | 54 | this.dx = this.modelX.get(0); 55 | this.dy = this.modelX.get(1); 56 | this.previousPenState = this.penState; 57 | this.penState = this.modelX.get(2); 58 | var c = [this.dx, this.dy, this.penState, this.modelZ]; 59 | this.coordinates.push(c) 60 | return c; 61 | } 62 | 63 | unroll(steps, iterations, temp) { 64 | if (typeof temp !== "number") temp = 0.65; 65 | var paths = []; 66 | var that = this; 67 | d3.range(iterations).forEach(function() { 68 | var coordinates = []; 69 | var dx, 70 | dy, 71 | penState; 72 | 73 | var localModelX = that.modelX.clone(); 74 | var localModelZ; 75 | var localModelS = [ 76 | that.modelS[0].clone(), 77 | that.modelS[1].clone() 78 | ]; 79 | 80 | for (var i = 0; i < steps; i++) { 81 | localModelS = that.Model.update(localModelX, localModelS); 82 | localModelZ = that.Model.get_mixture_coef(localModelS); 83 | localModelX = that.Model.sample(localModelZ, temp); 84 | 85 | dx = localModelX.get(0); 86 | dy = localModelX.get(1); 87 | penState = localModelX.get(2); 88 | coordinates.push([dx, dy, penState]); 89 | // if (penState) break; 90 | } 91 | // coordinates.sum = [ 92 | // d3.sum(coordinates, function(d) { return d[0]; }), 93 | // d3.sum(coordinates, function(d) { return d[1]; }) 94 | // ]; 95 | paths.push(coordinates); 96 | }); 97 | return paths; 98 | } 99 | 100 | sample(n, temp) { 101 | if (typeof temp !== "number") temp = 0.65; 102 | var samples = []; 103 | for (var i = 0; i < n; i++) { 104 | var mx = this.Model.sample(this.modelZ, temp); 105 | samples.push([ 106 | mx.get(0), 107 | mx.get(1), 108 | mx.get(2) 109 | ]); 110 | } 111 | return samples; 112 | } 113 | } 114 | 115 | if (typeof module !== "undefined" && typeof module.exports !== "undefined") { 116 | module.exports = SimpleModel; 117 | } 118 | -------------------------------------------------------------------------------- /validation-data/131.json: -------------------------------------------------------------------------------- 1 | [[100, 460, 0], [2, 4, 0], [5, 1, 0], [5, 1, 0], [8, 1, 0], [12, 1, 0], [14, -6, 0], [13, -11, 0], [17, -10, 0], [15, -15, 0], [15, -10, 0], [12, -15, 0], [10, -15, 0], [11, -15, 0], [4, -24, 0], [6, -11, 0], [-2, -21, 0], [0, -8, 0], [-7, -12, 0], [-4, -5, 0], [-12, -9, 0], [-9, 3, 0], [-12, -1, 0], [-12, 6, 0], [-11, 8, 0], [-13, 10, 0], [-12, 15, 0], [-14, 18, 0], [-10, 19, 0], [-13, 27, 0], [-8, 23, 0], [-5, 24, 0], [0, 19, 0], [2, 17, 0], [7, 22, 0], [11, 17, 0], [9, 9, 0], [16, 10, 0], [18, 10, 0], [21, 6, 0], [20, -2, 0], [21, -2, 0], [27, -10, 0], [23, -9, 0], [22, -11, 0], [17, -18, 0], [13, -20, 0], [19, -19, 0], [17, -22, 0], [11, -24, 0], [10, -19, 0], [10, -19, 0], [6, -16, 0], [3, -8, 0], [5, -11, 0], [-1, -1, 0], [1, 0, 0], [0, 1, 0], [3, 0, 0], [0, 3, 0], [3, 9, 0], [4, 8, 0], [5, 5, 0], [5, 16, 0], [4, 16, 0], [8, 12, 0], [5, 25, 0], [8, 20, 0], [13, 25, 0], [10, 21, 0], [8, 28, 0], [11, 28, 0], [8, 21, 0], [2, 20, 0], [7, 24, 0], [3, 5, 0], [-1, -1, 0], [0, -4, 0], [-6, -8, 1], [-116, -102, 0], [2, 0, 0], [0, 0, 0], [7, -4, 0], [9, -11, 0], [15, -15, 0], [21, -11, 0], [22, -19, 0], [22, -18, 0], [23, -20, 0], [20, -19, 0], [18, -16, 0], [11, -11, 0], [5, -4, 0], [1, -4, 0], [0, 4, 0], [2, 0, 0], [-1, 4, 0], [-1, 0, 0], [2, 0, 0], [1, -4, 0], [0, 4, 0], [1, 8, 0], [1, 4, 0], [2, 0, 0], [2, 12, 0], [3, 4, 0], [6, 9, 0], [8, 7, 0], [12, 1, 0], [15, 1, 0], [18, -5, 0], [20, -3, 0], [17, -12, 0], [19, -19, 0], [17, -21, 0], [20, -20, 0], [19, -28, 0], [12, -28, 0], [15, -28, 0], [14, -28, 0], [12, -32, 0], [10, -29, 0], [11, -19, 0], [6, -21, 0], [7, -8, 0], [2, -5, 0], [0, 1, 0], [0, 0, 0], [-1, 0, 0], [1, 16, 0], [0, 16, 0], [-2, 12, 0], [-3, 24, 0], [-3, 28, 0], [-1, 32, 0], [-8, 36, 0], [-7, 40, 0], [-9, 44, 0], [-7, 44, 0], [-9, 45, 0], [-7, 43, 0], [-7, 41, 0], [-2, 24, 0], [-3, 17, 0], [1, 7, 0], [0, 0, 0], [1, -12, 0], [3, -16, 1], [-5, -104, 0], [0, 4, 0], [9, 4, 0], [12, 8, 0], [14, 4, 0], [17, 7, 0], [23, -4, 0], [25, -5, 0], [25, -9, 0], [20, -13, 0], [23, -13, 0], [15, -16, 0], [15, -13, 0], [9, -17, 0], [6, -16, 0], [2, -16, 0], [0, -12, 0], [-6, -12, 0], [-6, -4, 0], [-11, -7, 0], [-9, 1, 0], [-11, 4, 0], [-12, 9, 0], [-14, 12, 0], [-5, 20, 0], [-10, 21, 0], [-2, 20, 0], [-3, 24, 0], [1, 28, 0], [5, 20, 0], [8, 24, 0], [13, 19, 0], [12, 12, 0], [16, 15, 0], [17, 7, 0], [16, 0, 0], [16, -5, 0], [16, -9, 0], [18, -13, 0], [14, -17, 0], [17, -21, 0], [13, -29, 0], [16, -26, 0], [12, -25, 0], [12, -24, 0], [7, -22, 0], [7, -8, 0], [3, -4, 0], [-1, 0, 0], [1, 4, 0], [0, 8, 0], [-2, 24, 0], [-4, 20, 0], [-4, 25, 0], [-1, 28, 0], [-4, 28, 0], [-3, 25, 0], [5, 23, 0], [-2, 13, 0], [9, 2, 0], [3, 0, 0], [7, -8, 0], [14, -13, 0], [18, -22, 0], [17, -29, 0], [17, -31, 0], [22, -22, 0], [17, -22, 0], [16, -17, 0], [13, -14, 0], [11, -9, 0], [5, 3, 0], [5, 4, 0], [0, 12, 0], [0, 21, 0], [-5, 28, 0], [-1, 28, 0], [-5, 25, 0], [-1, 28, 0], [1, 20, 0], [4, 16, 0], [6, 15, 0], [10, 7, 0], [11, 7, 0], [14, -1, 0], [17, -7, 0], [21, -7, 0], [21, -18, 0], [22, -15, 0], [23, -23, 0], [22, -28, 0], [27, -28, 0], [22, -27, 0], [18, -36, 0], [19, -32, 0], [20, -31, 0], [17, -32, 0], [14, -31, 0], [14, -27, 0], [13, -18, 0], [9, -18, 0], [7, -14, 0], [3, 0, 0], [0, 0, 0], [-2, 0, 0], [1, 8, 0], [-3, 9, 0], [-1, 21, 0], [-2, 16, 0], [-3, 20, 0], [-1, 26, 0], [-5, 29, 0], [-2, 29, 0], [-5, 33, 0], [-2, 33, 0], [-3, 37, 0], [-2, 33, 0], [-2, 37, 0], [-1, 28, 0], [1, 29, 0], [0, 20, 0], [3, 20, 0], [0, 4, 0], [0, 0, 0], [-1, 0, 1], [-47, -158, 0], [2, 3, 0], [-1, -3, 0], [1, 3, 0], [0, 0, 0], [7, 3, 0], [8, 3, 0], [14, 1, 0], [22, -3, 0], [17, -4, 0], [21, -15, 0], [22, -13, 0], [24, -16, 1], [40, 232, 0], [-3, 0, 0], [2, 1, 0], [0, -5, 0], [1, 4, 0], [-1, -3, 0], [0, 0, 0], [0, 0, 0], [0, -1, 0], [-1, 1, 0], [-2, 0, 0], [0, 0, 0], [2, 0, 1]] -------------------------------------------------------------------------------- /public/assets/figure-animated.html: -------------------------------------------------------------------------------- 1 | 16 | 44 | 45 | 46 | 49 | 50 | 51 | 130 | -------------------------------------------------------------------------------- /public/assets/cells-canvas.html: -------------------------------------------------------------------------------- 1 | 16 | 25 | 26 | 27 | 30 | 31 | 32 | 123 | -------------------------------------------------------------------------------- /validation-data/152.json: -------------------------------------------------------------------------------- 1 | [[114, 100, 0], [-4, 0, 0], [0, 0, 0], [0, 12, 0], [0, 16, 0], [-1, 32, 0], [1, 36, 0], [-2, 44, 0], [0, 48, 0], [-6, 51, 0], [-2, 45, 0], [1, 28, 0], [2, 20, 1], [2, -264, 0], [-1, 4, 0], [0, -4, 0], [6, -4, 0], [17, -12, 0], [19, -8, 0], [24, -12, 0], [26, 0, 0], [20, 0, 0], [17, 8, 0], [13, 11, 0], [6, 12, 0], [-2, 21, 0], [-10, 16, 0], [-17, 20, 0], [-17, 17, 0], [-17, 16, 0], [-12, 7, 0], [-6, 5, 0], [0, 0, 0], [4, 3, 0], [10, -3, 0], [21, 3, 0], [21, 0, 0], [22, 4, 0], [23, 12, 0], [17, 11, 0], [14, 16, 0], [10, 16, 0], [4, 20, 0], [-2, 15, 0], [-6, 21, 0], [-12, 12, 0], [-16, 20, 0], [-21, 5, 0], [-20, 9, 0], [-21, -1, 0], [-21, 1, 0], [-18, 0, 0], [-18, 3, 0], [-16, 4, 1], [224, -52, 0], [1, -4, 0], [10, -9, 0], [10, -12, 0], [9, -16, 0], [4, -20, 0], [4, -12, 0], [-1, -17, 0], [-4, -20, 0], [-6, -11, 0], [-7, -12, 0], [-6, -4, 0], [-8, 5, 0], [-11, 4, 0], [-11, 21, 0], [-8, 32, 0], [-4, 28, 0], [4, 36, 0], [9, 27, 0], [13, 20, 0], [16, 19, 0], [15, 8, 0], [18, 7, 0], [16, -9, 0], [12, -21, 1], [48, -147, 0], [-1, 0, 0], [-1, 0, 0], [3, 15, 0], [2, 24, 0], [2, 28, 0], [0, 24, 0], [0, 25, 0], [-4, 12, 0], [-3, 4, 0], [0, -4, 0], [0, 0, 0], [-2, -12, 0], [-1, -24, 0], [0, -28, 0], [4, -28, 0], [11, -25, 0], [12, -21, 0], [15, -13, 0], [14, -6, 0], [13, 4, 0], [16, 14, 0], [13, 30, 0], [7, 32, 0], [2, 28, 0], [0, 25, 0], [-1, 19, 0], [-1, 5, 1], [55, -131, 0], [0, -4, 0], [1, 0, 0], [1, 4, 0], [1, 4, 0], [4, 20, 0], [3, 23, 0], [5, 28, 0], [1, 19, 0], [0, 17, 0], [-1, 8, 0], [0, -4, 0], [0, -4, 0], [0, -4, 0], [-3, -23, 0], [1, -25, 0], [3, -32, 0], [6, -25, 0], [10, -26, 0], [15, -17, 0], [16, -6, 0], [15, -3, 0], [18, 14, 0], [15, 23, 0], [10, 34, 0], [2, 32, 0], [1, 32, 0], [3, 33, 0], [3, 15, 1], [319, -183, 0], [1, 0, 0], [1, 0, 0], [1, 4, 0], [-6, -3, 0], [-9, 2, 0], [-14, -1, 0], [-10, 10, 0], [-15, 12, 0], [-13, 14, 0], [-8, 22, 0], [-3, 25, 0], [0, 25, 0], [7, 27, 0], [11, 22, 0], [12, 10, 0], [15, 5, 0], [14, 2, 0], [12, -11, 0], [10, -14, 0], [6, -19, 0], [2, -20, 0], [-2, -24, 0], [0, -16, 0], [2, -5, 0], [-1, -4, 0], [1, 4, 0], [1, 4, 0], [7, 15, 0], [7, 22, 0], [7, 27, 0], [5, 28, 0], [2, 29, 0], [1, 24, 0], [1, 12, 0], [2, 8, 0], [3, -5, 1], [58, -314, 0], [-1, 13, 0], [4, 20, 0], [9, 30, 0], [8, 36, 0], [12, 42, 0], [11, 43, 0], [8, 47, 0], [1, 41, 0], [0, 45, 0], [-2, 34, 0], [1, 24, 0], [-3, 9, 1], [-46, -294, 0], [-5, -19, 0], [-1, -20, 0], [3, -21, 0], [6, -23, 0], [15, -11, 0], [16, -17, 0], [22, -10, 0], [22, -10, 1], [-82, 162, 0], [3, -2, 0], [16, -3, 0], [25, -2, 0], [20, -2, 0], [16, 0, 0], [13, 1, 0], [10, -7, 0], [13, -11, 1], [71, -104, 0], [1, -4, 0], [0, 0, 0], [-1, 4, 0], [-2, 9, 0], [3, 24, 0], [5, 32, 0], [5, 36, 0], [10, 48, 0], [12, 42, 0], [16, 45, 0], [10, 34, 0], [8, 36, 0], [1, 16, 0], [1, 11, 0], [-1, -2, 0], [-6, -12, 0], [-8, -14, 0], [-15, -29, 0], [-11, -30, 1], [-32, -165, 0], [1, -18, 0], [1, -20, 0], [3, -18, 0], [9, -20, 0], [21, -14, 0], [25, -12, 0], [22, -7, 0], [17, -1, 0], [10, 5, 0], [3, 7, 0], [-4, 23, 1], [-132, 156, 0], [4, -1, 0], [15, -4, 0], [20, -6, 0], [24, -6, 0], [24, -4, 0], [23, -11, 0], [25, -8, 0], [22, -16, 1], [86, -14, 0], [5, 2, 0], [-3, -3, 0], [-6, 2, 0], [-19, 1, 0], [-19, 11, 0], [-20, 15, 0], [-21, 15, 0], [-13, 22, 0], [-4, 22, 0], [7, 31, 0], [12, 17, 0], [20, 14, 0], [14, 0, 0], [16, -5, 0], [20, -14, 0], [17, -28, 0], [15, -26, 0], [7, -32, 0], [4, -22, 0], [1, -18, 0], [3, -1, 0], [-1, 1, 0], [2, 8, 0], [10, 26, 0], [8, 31, 0], [12, 37, 0], [12, 35, 1], [74, -129, 0], [0, 0, 0], [0, 0, 0], [0, 8, 0], [4, 16, 0], [9, 35, 0], [8, 32, 0], [6, 23, 0], [4, 20, 0], [2, 7, 0], [-2, -3, 0], [-1, -8, 0], [-3, -24, 1], [-13, -188, 0], [1, -1, 0], [-2, -4, 0], [-2, 1, 1], [106, 130, 0], [1, 9, 0], [3, 12, 0], [8, 22, 0], [4, 16, 0], [5, 15, 0], [-1, 10, 0], [-2, 4, 0], [0, 0, 0], [4, -1, 0], [0, -8, 0], [-1, -22, 0], [1, -26, 0], [2, -31, 0], [5, -29, 0], [12, -18, 0], [13, -14, 0], [15, -6, 0], [16, 2, 0], [13, 8, 0], [13, 11, 1], [58, 154, 0], [1, 9, 0], [3, 3, 0], [-3, 1, 0], [-6, -6, 1]] -------------------------------------------------------------------------------- /validation-data/82.json: -------------------------------------------------------------------------------- 1 | [[100, 436, 0], [2, 16, 0], [5, 25, 0], [3, 26, 0], [3, 32, 0], [4, 26, 0], [8, 50, 0], [3, 8, 0], [5, 17, 0], [4, -11, 0], [5, -11, 1], [75, -66, 0], [19, -1, 0], [21, 23, 0], [19, 22, 0], [19, 20, 0], [18, 17, 0], [17, 11, 0], [19, 5, 0], [18, -6, 0], [17, -18, 0], [12, -19, 0], [7, -23, 0], [3, -40, 0], [1, -28, 0], [-2, -28, 1], [127, 9, 0], [16, -11, 0], [13, -11, 0], [8, -15, 0], [5, -8, 0], [-3, -12, 0], [-9, -4, 0], [-10, 2, 0], [-12, 7, 0], [-12, 12, 0], [-14, 20, 0], [-10, 23, 0], [-8, 19, 0], [-2, 24, 0], [8, 17, 0], [17, 18, 0], [29, 13, 0], [40, 10, 0], [46, 6, 0], [52, 5, 0], [51, -3, 1], [232, -202, 0], [-24, -8, 0], [-29, -2, 0], [-32, 5, 0], [-30, 13, 0], [-24, 16, 0], [-22, 17, 0], [-11, 24, 0], [-1, 24, 0], [8, 20, 0], [19, 23, 0], [27, 20, 0], [30, 16, 0], [30, 3, 0], [29, -2, 0], [27, -10, 0], [23, -17, 1], [9, -237, 0], [2, 20, 0], [0, 32, 0], [0, 28, 0], [3, 36, 0], [8, 32, 0], [8, 31, 0], [11, 31, 0], [8, 23, 0], [8, 21, 0], [8, 10, 0], [6, 8, 0], [4, 0, 1], [747, -358, 0], [4, 24, 0], [2, 29, 0], [0, 34, 0], [2, 37, 0], [3, 41, 0], [2, 37, 0], [3, 32, 0], [2, 29, 0], [-2, 17, 0], [-2, 9, 0], [-3, 1, 0], [-3, -8, 1], [121, -201, 0], [-41, 1, 0], [-52, -5, 0], [-54, 5, 0], [-56, -1, 0], [-50, 2, 0], [-44, -1, 0], [-34, 0, 0], [-23, -3, 1], [421, -61, 0], [9, 18, 0], [12, 30, 0], [8, 26, 0], [6, 28, 0], [6, 32, 0], [4, 24, 0], [4, 24, 0], [3, 16, 0], [0, 4, 0], [-1, -3, 0], [5, -2, 0], [5, -15, 0], [7, -16, 0], [14, -18, 0], [20, -16, 0], [24, -18, 1], [63, -12, 0], [33, 3, 0], [29, 5, 0], [26, 12, 0], [20, 12, 0], [19, 18, 0], [13, 16, 0], [12, 17, 1], [100, -69, 0], [3, -11, 0], [-7, -14, 0], [-11, -8, 0], [-13, -3, 0], [-17, 0, 0], [-14, 6, 0], [-13, 11, 0], [-9, 17, 0], [-2, 18, 0], [6, 20, 0], [16, 19, 0], [23, 16, 0], [31, 12, 0], [31, 3, 0], [33, 2, 0], [32, -8, 0], [29, -14, 0], [26, -18, 0], [21, -20, 0], [17, -18, 0], [11, -19, 0], [5, -12, 0], [1, -6, 0], [0, 0, 0], [0, 5, 0], [0, 13, 0], [-1, 10, 0], [1, 13, 0], [6, 11, 0], [7, 10, 0], [3, -1, 0], [1, -6, 1], [-52, -144, 1], [116, 90, 1], [12, 44, 0], [1, 4, 0], [-2, 1, 0], [2, 4, 0], [2, 3, 0], [-3, -3, 0], [3, 3, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [-7, -10, 0], [-3, -2, 0], [-4, -8, 0], [-5, -10, 0], [-2, -8, 0], [2, -6, 0], [4, -12, 0], [11, -6, 0], [13, -8, 0], [19, -6, 0], [19, -6, 0], [22, -4, 0], [21, -4, 0], [26, -2, 0], [24, 0, 0], [22, 0, 0], [25, 8, 0], [18, 7, 1], [529, -39, 0], [5, 12, 0], [7, 14, 0], [5, 17, 0], [6, 10, 0], [6, 11, 0], [0, 0, 0], [1, -1, 0], [0, -5, 0], [1, -11, 0], [3, -17, 0], [5, -16, 0], [9, -17, 0], [15, -12, 0], [17, -9, 0], [22, -3, 0], [21, -1, 0], [20, 4, 0], [14, 8, 0], [14, 11, 0], [9, 12, 0], [9, 13, 0], [6, 11, 0], [5, 1, 0], [4, 7, 0], [9, -2, 0], [4, -3, 0], [9, -14, 0], [6, -10, 0], [15, -18, 0], [17, -10, 0], [23, -14, 0], [22, -4, 0], [139, 50, 0], [20, 15, 0], [29, 17, 1], [205, -129, 0], [-22, -6, 0], [-24, 2, 0], [-26, 10, 0], [-25, 8, 0], [-16, 16, 0], [-15, 14, 0], [-1, 23, 0], [5, 18, 0], [16, 18, 0], [23, 11, 0], [31, 8, 0], [35, 0, 0], [26, -8, 0], [26, -15, 0], [12, -19, 0], [7, -19, 0], [3, -14, 0], [-4, -12, 0], [-7, -5, 0], [-11, -6, 1], [168, -105, 0], [2, 29, 0], [-1, 30, 0], [1, 34, 0], [0, 30, 0], [0, 30, 0], [0, 23, 0], [4, 19, 0], [-2, 7, 1], [180, -138, 1], [-20, -9, 0], [-26, 1, 0], [-29, 2, 0], [-45, -3, 0], [-43, 5, 0], [-49, 1, 0], [-45, 1, 0], [-34, 1, 1], [286, -68, 0], [5, 19, 0], [1, 23, 0], [5, 27, 0], [5, 25, 0], [3, 26, 0], [-1, 19, 0], [6, 17, 0], [3, 10, 0], [0, 5, 0], [2, -2, 0], [6, -7, 0], [6, -13, 0], [11, -18, 0], [18, -15, 0], [20, -17, 0], [30, -16, 0], [28, -10, 0], [29, -4, 0], [33, 6, 0], [33, 9, 0], [26, 12, 0], [26, 20, 0], [17, 17, 0], [20, 19, 1], [43, -2, 0], [12, -15, 0], [5, -14, 0], [2, -14, 0], [-2, -9, 0], [-7, -12, 0], [-11, -4, 0], [-11, 7, 0], [-15, 5, 0], [-3, 11, 0], [0, 13, 0], [4, 15, 0], [20, 12, 0], [18, 15, 0], [27, 6, 0], [19, 8, 0], [27, -2, 0], [16, -7, 0], [10, -20, 0], [11, -14, 0], [6, -7, 0], [3, -10, 0], [0, 0, 0], [-4, -2, 0], [0, 13, 0], [-1, 8, 0], [-4, 12, 0], [-1, 14, 0], [-7, 8, 0], [1, 5, 0], [-1, 2, 0], [0, -1, 0], [3, -3, 0], [6, -13, 0], [3, -17, 0], [10, -13, 0], [17, -16, 0], [18, -10, 0], [19, -5, 0], [25, -7, 0], [29, 2, 1]] -------------------------------------------------------------------------------- /validation-data/107.json: -------------------------------------------------------------------------------- 1 | [[234, 100, 0], [-31, 0, 0], [-31, 12, 0], [-32, 27, 0], [-27, 31, 0], [-13, 48, 0], [2, 48, 0], [11, 44, 0], [25, 37, 0], [31, 20, 0], [31, 0, 0], [29, -14, 0], [30, -32, 0], [15, -45, 0], [7, -44, 0], [1, -44, 0], [-4, -32, 0], [-11, -24, 0], [-18, -12, 0], [-15, -4, 0], [-8, 0, 1], [149, 114, 0], [-3, -3, 0], [-4, -4, 0], [-1, 4, 0], [5, 20, 0], [5, 28, 0], [7, 32, 0], [12, 35, 0], [8, 16, 0], [4, 9, 0], [1, -1, 0], [-2, -8, 0], [-11, -23, 0], [-4, -33, 0], [4, -31, 0], [15, -25, 0], [16, -20, 0], [19, -13, 0], [17, -8, 0], [16, 6, 0], [14, 12, 0], [11, 12, 0], [8, 11, 0], [10, 8, 0], [9, -1, 1], [11, -17, 0], [1, 8, 0], [3, 12, 0], [-1, 17, 0], [1, 15, 0], [5, 17, 0], [8, -1, 0], [9, -1, 0], [10, -17, 0], [12, -12, 0], [12, -20, 0], [10, -13, 0], [10, -2, 0], [1, 9, 0], [2, 16, 0], [1, 24, 0], [4, 23, 0], [4, 8, 0], [11, 3, 0], [16, -5, 0], [21, -13, 0], [20, -22, 0], [20, -26, 0], [22, -14, 0], [19, 2, 0], [7, 8, 0], [10, 15, 0], [2, 23, 0], [3, 12, 0], [4, 8, 0], [6, 8, 0], [6, -1, 1], [215, -82, 0], [-17, -6, 0], [-23, 3, 0], [-25, 3, 0], [-22, 7, 0], [-10, 17, 0], [-2, 9, 0], [17, 17, 0], [24, 10, 0], [32, 16, 0], [31, 12, 0], [20, 13, 0], [8, 11, 0], [-7, 13, 0], [-15, 10, 0], [-21, 7, 0], [-24, 3, 0], [-21, 4, 0], [-12, -7, 0], [-3, -16, 0], [11, -21, 1], [145, -170, 0], [1, -1, 0], [-2, 4, 0], [0, 16, 0], [0, 24, 0], [4, 36, 0], [8, 36, 0], [5, 31, 0], [11, 30, 0], [0, 17, 0], [0, 4, 0], [1, -4, 1], [-57, -64, 0], [10, -2, 0], [20, -3, 0], [29, -1, 0], [32, 4, 0], [32, 2, 0], [28, 3, 0], [21, 0, 1], [45, -12, 0], [-2, -15, 0], [-12, -11, 0], [-16, -1, 0], [-20, 8, 0], [-16, 15, 0], [-7, 26, 0], [3, 24, 0], [13, 22, 0], [26, 15, 0], [33, 6, 0], [32, -2, 0], [24, -4, 0], [13, -11, 0], [1, -17, 0], [-6, -11, 0], [-11, -10, 0], [-11, -6, 0], [-6, 1, 1], [111, -19, 0], [4, 0, 0], [-5, -3, 0], [-2, 8, 0], [-7, 9, 0], [1, 21, 0], [4, 20, 0], [10, 10, 0], [15, 5, 0], [17, -5, 0], [18, -11, 0], [20, -17, 0], [15, -20, 0], [11, -15, 0], [5, -14, 0], [1, 5, 0], [1, 7, 0], [0, 17, 0], [5, 19, 0], [8, 19, 0], [12, 13, 0], [15, 5, 0], [12, 5, 0], [8, -6, 0], [8, -2, 1], [679, -82, 0], [-2, -7, 0], [-11, -13, 0], [-20, -2, 0], [-28, 2, 0], [-25, 22, 0], [-25, 22, 0], [-12, 34, 0], [-3, 30, 0], [14, 25, 0], [26, 21, 0], [28, 6, 0], [35, 9, 1], [205, -100, 0], [2, -14, 0], [-3, -16, 0], [-15, -11, 0], [-27, -7, 0], [-30, 4, 0], [-29, 12, 0], [-16, 23, 0], [-7, 20, 0], [11, 25, 0], [26, 16, 0], [37, 12, 0], [41, 0, 0], [44, -5, 0], [34, -14, 0], [17, -20, 0], [6, -16, 0], [-7, -18, 0], [-16, -6, 0], [-22, -4, 0], [-21, -1, 1], [121, 24, 0], [15, -7, 0], [6, -3, 0], [-3, -3, 0], [-7, 8, 0], [-8, 12, 0], [-1, 17, 0], [5, 11, 0], [16, 6, 0], [25, -2, 0], [32, -5, 0], [28, -12, 0], [24, -20, 0], [19, -9, 0], [5, -10, 0], [-2, 0, 0], [-3, 10, 0], [0, 17, 0], [2, 17, 0], [12, 21, 0], [17, 14, 0], [22, 13, 0], [22, -3, 0], [18, -12, 0], [19, -18, 1], [35, -191, 0], [3, 3, 0], [4, 7, 0], [10, 17, 0], [10, 31, 0], [11, 31, 0], [8, 31, 0], [17, 32, 0], [7, 23, 0], [4, 8, 0], [1, 3, 0], [-13, -7, 1], [-89, -54, 0], [6, -8, 0], [26, 1, 0], [36, -4, 0], [39, -3, 0], [43, 1, 0], [37, -2, 0], [26, 1, 0], [18, 4, 0], [4, 7, 0], [2, 22, 0], [-4, 19, 0], [0, 23, 0], [3, 17, 0], [5, 11, 0], [5, 2, 0], [1, -10, 0], [2, -19, 0], [-2, -31, 0], [-8, -36, 1], [-45, -99, 0], [12, 3, 0], [14, 7, 0], [7, 4, 1], [71, 76, 0], [4, 2, 0], [10, 9, 0], [4, 7, 0], [3, 17, 0], [7, 14, 0], [10, 16, 0], [16, 6, 0], [12, -2, 0], [13, -7, 0], [9, -10, 0], [10, -14, 0], [4, -17, 0], [1, -10, 0], [0, 1, 0], [2, 8, 0], [4, 15, 0], [2, 18, 0], [8, 14, 0], [13, 11, 0], [19, 8, 0], [18, -2, 0], [18, -5, 0], [19, -10, 0], [8, -19, 0], [2, -20, 0], [3, -7, 0], [0, 0, 0], [-3, 21, 0], [6, 14, 0], [11, 17, 0], [12, 12, 0], [20, 12, 0], [20, 2, 0], [18, -1, 0], [15, -9, 0], [12, -16, 0], [7, -19, 0], [4, -16, 0], [0, -5, 0], [0, 5, 0], [18, 32, 0], [15, 8, 0], [21, 12, 0], [57, -16, 0], [8, -15, 0], [-7, -19, 0], [-25, -13, 0], [-16, 5, 0], [-12, 11, 0], [8, 48, 0], [16, 17, 0], [24, 15, 0], [63, 8, 0], [19, -12, 0], [24, -30, 0], [3, -16, 0], [-2, -18, 0], [-15, -18, 0], [-21, 4, 0], [-13, 13, 0], [-6, 23, 0], [8, 36, 0], [18, 12, 0], [21, -2, 0], [30, -39, 0], [17, -35, 0], [13, -51, 0], [10, -84, 0], [1, -19, 0], [1, -1, 0], [-4, 8, 0], [-5, 32, 0], [-1, 39, 0], [9, 42, 0], [12, 35, 0], [13, 29, 0], [8, 19, 1], [164, 22, 0], [2, 3, 0], [5, 10, 0], [-4, 17, 0], [-10, 22, 0], [-60, 50, 0], [-25, 6, 1]] -------------------------------------------------------------------------------- /validation-data/21.json: -------------------------------------------------------------------------------- 1 | [[234, 100, 0], [-31, 0, 0], [-31, 12, 0], [-32, 27, 0], [-27, 31, 0], [-13, 48, 0], [2, 48, 0], [11, 44, 0], [25, 37, 0], [31, 20, 0], [31, 0, 0], [29, -14, 0], [30, -32, 0], [15, -45, 0], [7, -44, 0], [1, -44, 0], [-4, -32, 0], [-11, -24, 0], [-18, -12, 0], [-15, -4, 0], [-8, 0, 1], [149, 114, 0], [-3, -3, 0], [-4, -4, 0], [-1, 4, 0], [5, 20, 0], [5, 28, 0], [7, 32, 0], [12, 35, 0], [8, 16, 0], [4, 9, 0], [1, -1, 0], [-2, -8, 0], [-11, -23, 0], [-4, -33, 0], [4, -31, 0], [15, -25, 0], [16, -20, 0], [19, -13, 0], [17, -8, 0], [16, 6, 0], [14, 12, 0], [11, 12, 0], [8, 11, 0], [10, 8, 0], [9, -1, 1], [11, -17, 0], [1, 8, 0], [3, 12, 0], [-1, 17, 0], [1, 15, 0], [5, 17, 0], [8, -1, 0], [9, -1, 0], [10, -17, 0], [12, -12, 0], [12, -20, 0], [10, -13, 0], [10, -2, 0], [1, 9, 0], [2, 16, 0], [1, 24, 0], [4, 23, 0], [4, 8, 0], [11, 3, 0], [16, -5, 0], [21, -13, 0], [20, -22, 0], [20, -26, 0], [22, -14, 0], [19, 2, 0], [7, 8, 0], [10, 15, 0], [2, 23, 0], [3, 12, 0], [4, 8, 0], [6, 8, 0], [6, -1, 1], [215, -82, 0], [-17, -6, 0], [-23, 3, 0], [-25, 3, 0], [-22, 7, 0], [-10, 17, 0], [-2, 9, 0], [17, 17, 0], [24, 10, 0], [32, 16, 0], [31, 12, 0], [20, 13, 0], [8, 11, 0], [-7, 13, 0], [-15, 10, 0], [-21, 7, 0], [-24, 3, 0], [-21, 4, 0], [-12, -7, 0], [-3, -16, 0], [11, -21, 1], [145, -170, 0], [1, -1, 0], [-2, 4, 0], [0, 16, 0], [0, 24, 0], [4, 36, 0], [8, 36, 0], [5, 31, 0], [11, 30, 0], [0, 17, 0], [0, 4, 0], [1, -4, 1], [-57, -64, 0], [10, -2, 0], [20, -3, 0], [29, -1, 0], [32, 4, 0], [32, 2, 0], [28, 3, 0], [21, 0, 1], [45, -12, 0], [-2, -15, 0], [-12, -11, 0], [-16, -1, 0], [-20, 8, 0], [-16, 15, 0], [-7, 26, 0], [3, 24, 0], [13, 22, 0], [26, 15, 0], [33, 6, 0], [32, -2, 0], [24, -4, 0], [13, -11, 0], [1, -17, 0], [-6, -11, 0], [-11, -10, 0], [-11, -6, 0], [-6, 1, 1], [111, -19, 0], [4, 0, 0], [-5, -3, 0], [-2, 8, 0], [-7, 9, 0], [1, 21, 0], [4, 20, 0], [10, 10, 0], [15, 5, 0], [17, -5, 0], [18, -11, 0], [20, -17, 0], [15, -20, 0], [11, -15, 0], [5, -14, 0], [1, 5, 0], [1, 7, 0], [0, 17, 0], [5, 19, 0], [8, 19, 0], [12, 13, 0], [15, 5, 0], [12, 5, 0], [8, -6, 0], [8, -2, 1], [679, -82, 0], [-2, -7, 0], [-11, -13, 0], [-20, -2, 0], [-28, 2, 0], [-25, 22, 0], [-25, 22, 0], [-12, 34, 0], [-3, 30, 0], [14, 25, 0], [26, 21, 0], [28, 6, 0], [35, 9, 1], [205, -100, 0], [2, -14, 0], [-3, -16, 0], [-15, -11, 0], [-27, -7, 0], [-30, 4, 0], [-29, 12, 0], [-16, 23, 0], [-7, 20, 0], [11, 25, 0], [26, 16, 0], [37, 12, 0], [41, 0, 0], [44, -5, 0], [34, -14, 0], [17, -20, 0], [6, -16, 0], [-7, -18, 0], [-16, -6, 0], [-22, -4, 0], [-21, -1, 1], [121, 24, 0], [15, -7, 0], [6, -3, 0], [-3, -3, 0], [-7, 8, 0], [-8, 12, 0], [-1, 17, 0], [5, 11, 0], [16, 6, 0], [25, -2, 0], [32, -5, 0], [28, -12, 0], [24, -20, 0], [19, -9, 0], [5, -10, 0], [-2, 0, 0], [-3, 10, 0], [0, 17, 0], [2, 17, 0], [12, 21, 0], [17, 14, 0], [22, 13, 0], [22, -3, 0], [18, -12, 0], [19, -18, 1], [35, -191, 0], [3, 3, 0], [4, 7, 0], [10, 17, 0], [10, 31, 0], [11, 31, 0], [8, 31, 0], [17, 32, 0], [7, 23, 0], [4, 8, 0], [1, 3, 0], [-13, -7, 1], [-89, -54, 0], [6, -8, 0], [26, 1, 0], [36, -4, 0], [39, -3, 0], [43, 1, 0], [37, -2, 0], [26, 1, 0], [18, 4, 0], [4, 7, 0], [2, 22, 0], [-4, 19, 0], [0, 23, 0], [3, 17, 0], [5, 11, 0], [5, 2, 0], [1, -10, 0], [2, -19, 0], [-2, -31, 0], [-8, -36, 1], [-45, -99, 0], [12, 3, 0], [14, 7, 0], [7, 4, 1], [71, 76, 0], [4, 2, 0], [10, 9, 0], [4, 7, 0], [3, 17, 0], [7, 14, 0], [10, 16, 0], [16, 6, 0], [12, -2, 0], [13, -7, 0], [9, -10, 0], [10, -14, 0], [4, -17, 0], [1, -10, 0], [0, 1, 0], [2, 8, 0], [4, 15, 0], [2, 18, 0], [8, 14, 0], [13, 11, 0], [19, 8, 0], [18, -2, 0], [18, -5, 0], [19, -10, 0], [8, -19, 0], [2, -20, 0], [3, -7, 0], [0, 0, 0], [-3, 21, 0], [6, 14, 0], [11, 17, 0], [12, 12, 0], [20, 12, 0], [20, 2, 0], [18, -1, 0], [15, -9, 0], [12, -16, 0], [7, -19, 0], [4, -16, 0], [0, -5, 0], [0, 5, 0], [18, 32, 0], [15, 8, 0], [21, 12, 0], [57, -16, 0], [8, -15, 0], [-7, -19, 0], [-25, -13, 0], [-16, 5, 0], [-12, 11, 0], [8, 48, 0], [16, 17, 0], [24, 15, 0], [63, 8, 0], [19, -12, 0], [24, -30, 0], [3, -16, 0], [-2, -18, 0], [-15, -18, 0], [-21, 4, 0], [-13, 13, 0], [-6, 23, 0], [8, 36, 0], [18, 12, 0], [21, -2, 0], [30, -39, 0], [17, -35, 0], [13, -51, 0], [10, -84, 0], [1, -19, 0], [1, -1, 0], [-4, 8, 0], [-5, 32, 0], [-1, 39, 0], [9, 42, 0], [12, 35, 0], [13, 29, 0], [8, 19, 1], [164, 22, 0], [2, 3, 0], [5, 10, 0], [-4, 17, 0], [-10, 22, 0], [-60, 50, 0], [-25, 6, 1]] -------------------------------------------------------------------------------- /validation-data/36.json: -------------------------------------------------------------------------------- 1 | [[201, 332, 0], [-23, -1, 0], [-19, 4, 0], [-18, 14, 0], [-14, 22, 0], [-13, 25, 0], [-12, 24, 0], [-2, 29, 0], [7, 19, 0], [22, 15, 0], [34, 5, 0], [41, -4, 0], [44, -4, 1], [125, -54, 0], [14, -10, 0], [1, -17, 0], [-6, -7, 0], [-17, -13, 0], [-22, 3, 0], [-27, 9, 0], [-21, 18, 0], [-9, 18, 0], [2, 15, 0], [10, 7, 0], [19, 6, 0], [17, -7, 0], [17, -6, 0], [17, -15, 0], [15, -14, 0], [12, -15, 0], [11, -2, 0], [13, 9, 0], [16, 18, 0], [17, 17, 0], [21, 17, 0], [18, 9, 0], [14, 1, 1], [-43, -286, 0], [-1, -3, 0], [2, 3, 0], [12, 27, 0], [12, 30, 0], [15, 37, 0], [19, 41, 0], [22, 40, 0], [24, 35, 0], [25, 31, 0], [27, 27, 0], [19, 12, 0], [13, 0, 1], [-66, -284, 0], [0, 4, 0], [11, 26, 0], [11, 34, 0], [17, 41, 0], [19, 40, 0], [26, 43, 0], [29, 33, 0], [37, 32, 0], [37, 18, 0], [32, 2, 0], [25, -4, 0], [14, -17, 0], [7, -24, 0], [-1, -20, 0], [-13, -17, 0], [-15, -3, 0], [-18, 1, 0], [-12, 13, 0], [-5, 18, 0], [7, 23, 1], [68, 36, 0], [37, 0, 0], [37, -8, 0], [27, -19, 0], [24, -19, 0], [16, -9, 0], [2, -5, 0], [0, 0, 0], [-4, 9, 0], [-4, 15, 0], [5, 19, 0], [9, 14, 0], [14, 12, 0], [13, 8, 0], [6, -3, 0], [5, -7, 0], [-1, -24, 0], [-4, -34, 0], [-10, -38, 0], [-18, -45, 0], [-20, -40, 0], [-13, -29, 0], [-8, -18, 0], [-3, -3, 0], [9, 14, 0], [23, 29, 0], [28, 32, 0], [32, 38, 0], [36, 41, 0], [34, 38, 0], [34, 37, 0], [29, 35, 1], [303, -223, 0], [-2, -5, 0], [1, 0, 0], [5, 6, 0], [18, 22, 0], [24, 32, 0], [32, 37, 0], [29, 29, 0], [27, 26, 0], [22, 23, 0], [15, 15, 0], [3, 3, 0], [0, 0, 0], [-6, -6, 0], [-23, -19, 0], [-33, -22, 0], [-44, -25, 0], [-44, -19, 0], [-50, -22, 0], [-43, -21, 0], [-37, -30, 0], [-9, -27, 0], [13, -30, 0], [33, -28, 0], [45, -19, 0], [42, -12, 0], [32, -2, 0], [18, 7, 0], [8, 14, 0], [-2, 21, 0], [-8, 24, 0], [-11, 21, 0], [-6, 19, 1], [116, 43, 0], [8, 5, 0], [13, 10, 0], [22, 19, 0], [17, 17, 0], [17, 17, 0], [12, 12, 0], [6, 6, 0], [4, 2, 1], [-117, -138, 0], [-3, -3, 0], [-4, -7, 0], [1, -1, 0], [6, 1, 1], [136, 96, 0], [11, -8, 0], [12, -8, 0], [3, -13, 0], [-2, -12, 0], [-10, -13, 0], [-9, -3, 0], [-16, 2, 0], [-9, 10, 0], [-5, 14, 0], [8, 18, 0], [10, 13, 0], [18, 12, 0], [18, 8, 0], [15, 2, 0], [15, 0, 0], [13, -5, 0], [13, -9, 0], [19, -8, 0], [21, -7, 0], [29, 4, 0], [32, 11, 0], [28, 13, 0], [23, 13, 0], [14, 10, 0], [6, 5, 0], [2, 3, 0], [-3, -2, 0], [-15, -9, 0], [-20, -10, 0], [-24, -11, 0], [-27, -10, 0], [-26, -11, 0], [-16, -8, 0], [-11, -12, 0], [0, -10, 0], [6, -9, 0], [12, -4, 0], [20, 5, 0], [19, 6, 0], [25, 11, 0], [28, 13, 0], [29, 13, 0], [24, 12, 0], [14, 9, 0], [6, 4, 0], [2, 4, 0], [0, 0, 0], [-3, -2, 0], [-10, -7, 0], [-17, -13, 0], [-17, -11, 0], [-19, -11, 0], [-13, -10, 0], [-1, -4, 0], [5, -9, 0], [21, -7, 1], [145, -135, 0], [6, 6, 0], [4, 8, 0], [4, 11, 0], [11, 17, 1], [-51, 109, 1], [6, -64, 0], [-12, 5, 0], [-11, 10, 0], [5, 18, 0], [15, 18, 0], [23, 17, 0], [26, 9, 0], [22, 8, 0], [21, 3, 1], [174, -79, 0], [-16, 10, 0], [-10, 10, 0], [3, 13, 0], [14, 14, 0], [20, 9, 0], [20, 9, 0], [15, 8, 0], [2, 3, 0], [-1, 2, 0], [-8, 7, 0], [-22, 4, 0], [-32, 8, 0], [-34, 10, 0], [-31, 5, 0], [-21, 3, 0], [-11, -1, 1], [731, -106, 1], [-219, -137, 0], [1, -15, 0], [2, -14, 0], [3, -11, 0], [-1, -10, 0], [1, -1, 0], [-2, -4, 0], [2, 4, 0], [12, 16, 0], [8, 22, 0], [5, 32, 0], [3, 39, 0], [-6, 44, 0], [-2, 45, 0], [1, 41, 0], [3, 32, 0], [5, 18, 0], [5, 6, 0], [2, -2, 0], [2, -20, 0], [15, -27, 0], [19, -35, 0], [32, -30, 0], [38, -27, 0], [46, -19, 0], [43, -7, 0], [32, 5, 0], [27, 12, 0], [12, 16, 0], [3, 20, 0], [-7, 22, 0], [-18, 21, 0], [-36, 20, 0], [-58, 18, 0], [-65, 20, 0], [-65, 20, 0], [-52, 14, 0], [-29, 2, 0], [-9, -9, 0], [10, -17, 0], [19, -26, 1], [374, -99, 0], [-2, -5, 0], [3, -3, 0], [3, -5, 0], [-4, -2, 0], [1, 0, 0], [-6, 2, 0], [-11, 6, 0], [-15, 12, 0], [-8, 18, 0], [-6, 21, 0], [8, 21, 0], [9, 14, 0], [12, 5, 0], [15, 0, 0], [13, -5, 0], [10, -11, 0], [9, -17, 0], [5, -20, 0], [1, -20, 0], [2, -9, 0], [0, -2, 0], [3, 3, 0], [5, 13, 0], [5, 14, 0], [14, 14, 0], [13, 10, 0], [20, 7, 0], [12, -2, 0], [13, -5, 0], [16, -6, 0], [15, -6, 0], [24, 1, 0], [22, 3, 0], [33, 10, 0], [20, 7, 0], [15, 6, 0], [-1, 0, 0], [0, 1, 0], [-11, -6, 0], [-22, -9, 0], [-31, -13, 0], [-35, -13, 0], [-24, -9, 0], [-14, -7, 0], [0, -6, 0], [2, -10, 0], [15, -7, 0], [24, -5, 0], [17, -10, 0], [26, -2, 0], [19, -5, 0], [27, 3, 1], [96, 86, 0], [1, 0, 0], [4, -1, 0], [2, -1, 0], [-2, -4, 0], [0, -1, 0], [1, -2, 0], [0, 0, 0], [4, 2, 1]] -------------------------------------------------------------------------------- /validation-data/115.json: -------------------------------------------------------------------------------- 1 | [[223, 155, 0], [-3, 8, 0], [3, 17, 0], [2, 16, 0], [2, 16, 0], [-1, 25, 0], [-3, 23, 0], [-5, 23, 0], [-10, 32, 0], [-11, 22, 0], [-14, 31, 0], [-12, 22, 0], [-14, 15, 0], [-11, 14, 0], [-11, 7, 0], [-10, 2, 0], [-7, -5, 0], [-7, -9, 0], [-6, -9, 0], [-4, -21, 0], [-1, -12, 1], [72, -176, 0], [2, -3, 0], [6, -7, 0], [9, -15, 0], [13, -14, 0], [13, -15, 0], [14, -14, 0], [14, -11, 0], [12, -15, 1], [-20, 256, 0], [13, -2, 0], [14, -15, 0], [15, -14, 0], [15, -19, 0], [14, -22, 0], [14, -22, 0], [16, -24, 0], [11, -27, 0], [12, -23, 0], [11, -23, 0], [8, -23, 0], [7, -16, 0], [4, -16, 0], [1, -7, 0], [-2, -5, 0], [-4, 0, 0], [-6, 3, 0], [-7, 12, 0], [-9, 15, 0], [-10, 20, 0], [-10, 27, 0], [-13, 27, 0], [-8, 36, 0], [-7, 31, 0], [-4, 31, 0], [0, 24, 0], [1, 21, 0], [4, 16, 0], [4, 5, 0], [5, -4, 0], [9, -3, 0], [11, -15, 0], [15, -19, 0], [12, -27, 0], [12, -19, 0], [10, -12, 0], [7, -3, 0], [3, 0, 0], [2, 4, 0], [2, 9, 0], [0, 12, 0], [3, 16, 0], [2, 16, 0], [5, 12, 0], [7, 9, 0], [10, 4, 0], [12, -3, 0], [15, -7, 0], [15, -7, 0], [12, -19, 0], [12, -17, 0], [9, -19, 0], [4, -16, 0], [1, -11, 0], [-2, -5, 0], [-4, -4, 0], [-7, 0, 0], [-7, 0, 0], [-7, 11, 0], [-8, 12, 0], [-4, 16, 0], [-3, 11, 0], [0, 8, 0], [4, 13, 0], [5, 8, 0], [9, 5, 0], [12, 0, 0], [12, -4, 0], [13, -3, 0], [13, -16, 0], [12, -11, 0], [12, -16, 0], [12, -8, 0], [7, -8, 0], [3, -4, 0], [2, 0, 0], [0, 4, 0], [0, 12, 0], [-4, 12, 0], [-5, 16, 0], [-4, 16, 0], [-1, 20, 0], [0, 8, 0], [1, 0, 0], [7, 4, 0], [9, -7, 0], [12, -17, 0], [15, -12, 0], [16, -19, 0], [16, -12, 0], [15, -13, 0], [14, -4, 0], [11, 4, 0], [8, 8, 0], [6, 17, 0], [2, 15, 0], [3, 24, 0], [0, 16, 0], [2, 19, 0], [4, 17, 1], [159, -24, 1], [4, 0, 0], [8, 4, 0], [11, -9, 0], [13, -14, 0], [16, -17, 0], [15, -25, 0], [17, -26, 0], [15, -26, 0], [13, -29, 0], [10, -24, 0], [7, -22, 0], [4, -21, 0], [2, -12, 0], [-3, -11, 0], [-4, -4, 0], [-7, -3, 0], [-6, 5, 0], [-11, 0, 0], [-7, 13, 0], [-8, 18, 0], [-7, 24, 0], [-5, 29, 0], [-8, 25, 0], [-2, 36, 0], [-5, 28, 0], [-1, 29, 0], [-2, 12, 0], [1, 11, 0], [1, 1, 0], [4, -4, 0], [8, -14, 0], [9, -20, 0], [9, -17, 0], [10, -9, 0], [6, -9, 0], [3, 4, 0], [4, 3, 0], [1, 8, 0], [0, 16, 0], [3, 16, 0], [4, 8, 0], [7, 7, 0], [11, 7, 0], [12, -1, 0], [16, 1, 0], [15, -5, 0], [13, -14, 0], [13, -14, 0], [24, -23, 0], [5, -14, 0], [2, -12, 0], [-4, -7, 0], [-30, 20, 0], [-8, 14, 0], [-4, 16, 0], [-1, 13, 0], [4, 15, 0], [9, 11, 0], [12, 7, 0], [17, 5, 0], [20, -2, 0], [22, -12, 0], [24, -12, 1], [132, -49, 0], [4, 0, 0], [5, -4, 0], [6, -10, 0], [7, -6, 0], [5, -5, 0], [7, 3, 0], [4, 3, 0], [2, 3, 0], [2, 8, 0], [2, 12, 0], [1, 16, 0], [-6, 14, 0], [-7, 17, 0], [-7, 15, 0], [-9, 9, 0], [-7, 10, 0], [-6, 5, 0], [-3, 1, 0], [0, 3, 0], [2, 0, 0], [4, -1, 0], [9, -1, 0], [13, -7, 0], [17, -11, 0], [21, -18, 0], [24, -13, 0], [23, -17, 0], [23, -14, 0], [21, -9, 0], [15, -12, 0], [12, -8, 0], [7, -2, 0], [3, 0, 0], [-1, 0, 0], [-5, 5, 0], [-11, 7, 0], [-12, 16, 0], [-13, 15, 0], [-14, 20, 0], [-12, 19, 0], [-9, 15, 0], [-5, 9, 0], [1, 4, 0], [2, -1, 0], [9, 2, 0], [9, -10, 0], [10, -14, 0], [12, -15, 0], [12, -24, 0], [13, -17, 0], [9, -13, 0], [7, -11, 0], [1, -4, 0], [0, 0, 0], [2, 4, 0], [-3, 5, 0], [-5, 5, 0], [-5, 14, 0], [-7, 14, 0], [-2, 17, 0], [-3, 13, 0], [1, 17, 0], [3, 7, 0], [6, 6, 0], [8, 2, 0], [11, 2, 0], [13, -8, 0], [14, -16, 0], [12, -15, 0], [14, -17, 0], [13, -7, 0], [8, -11, 0], [3, -5, 0], [2, 0, 0], [1, -1, 0], [0, 0, 0], [-2, 0, 0], [0, 5, 0], [-3, 5, 0], [0, 12, 0], [-5, 10, 0], [-2, 9, 0], [-1, 9, 0], [2, 12, 0], [1, 8, 0], [2, 7, 0], [5, 7, 0], [2, -5, 0], [8, 3, 0], [8, -7, 0], [9, -7, 0], [10, -7, 0], [11, -7, 0], [10, -12, 0], [10, -11, 0], [14, -8, 0], [11, -9, 0], [14, -3, 0], [12, -4, 0], [11, -4, 0], [6, -6, 0], [6, -2, 0], [1, 0, 0], [-1, 0, 0], [-1, 0, 0], [-7, -2, 0], [-6, 2, 0], [-7, 7, 0], [-10, 8, 0], [-11, 12, 0], [-11, 15, 0], [-9, 19, 0], [-6, 14, 0], [1, 13, 0], [5, 6, 0], [8, 3, 0], [13, -5, 0], [13, -12, 0], [17, -17, 0], [14, -27, 0], [22, -24, 0], [16, -30, 0], [18, -28, 0], [12, -29, 0], [13, -17, 0], [5, -19, 0], [4, -6, 0], [2, 4, 0], [-1, 0, 0], [-2, 0, 0], [-2, 9, 0], [-2, 18, 0], [-4, 23, 0], [-4, 31, 0], [-4, 27, 0], [-3, 27, 0], [-2, 30, 0], [-3, 18, 0], [0, 12, 0], [0, 0, 1], [-169, -226, 0], [-4, -3, 0], [-2, -3, 0], [-2, -4, 0], [1, 0, 0], [4, -2, 0], [7, -1, 0], [11, 8, 0], [10, 9, 1], [267, 225, 0], [-1, 1, 0], [0, 0, 0], [-2, -4, 0], [0, 0, 0], [5, 11, 0], [0, 9, 0], [-1, 13, 0], [-3, 14, 0], [-6, 15, 0], [-8, 11, 0], [-5, 15, 0], [-14, 1, 1]] -------------------------------------------------------------------------------- /validation-data/169.json: -------------------------------------------------------------------------------- 1 | [[100, 229, 0], [3, 19, 0], [5, 19, 0], [5, 36, 0], [4, 35, 0], [5, 45, 0], [4, 34, 0], [2, 43, 0], [0, 39, 0], [1, 29, 0], [3, 26, 0], [2, 10, 0], [1, 0, 0], [7, -6, 0], [4, -12, 0], [5, -19, 0], [5, -14, 0], [11, -31, 0], [14, -21, 0], [20, -18, 0], [28, -21, 0], [35, -3, 0], [39, -2, 0], [40, 11, 0], [43, 19, 0], [43, 25, 0], [45, 29, 0], [44, 24, 0], [44, 19, 0], [43, 10, 0], [38, 8, 0], [32, 0, 0], [26, -15, 1], [49, -108, 0], [7, 16, 0], [4, 13, 0], [5, 20, 0], [5, 16, 0], [4, 17, 0], [1, 7, 0], [0, 9, 0], [-2, 4, 1], [-66, -217, 0], [-5, -13, 0], [-7, -8, 0], [-2, -5, 0], [-1, -4, 1], [143, 137, 0], [0, 4, 0], [3, 16, 0], [2, 12, 0], [2, 16, 0], [4, 16, 0], [2, 12, 0], [2, 8, 0], [2, 4, 0], [1, 4, 0], [-1, -7, 0], [5, -5, 0], [4, -15, 0], [9, -16, 0], [16, -16, 0], [19, -21, 0], [26, -12, 0], [29, -4, 0], [32, 3, 0], [30, 2, 0], [32, 14, 0], [23, 10, 0], [21, 19, 0], [12, 11, 0], [8, 15, 0], [4, 12, 0], [-1, 0, 0], [1, 4, 0], [0, 0, 0], [3, -13, 0], [9, -13, 0], [10, -17, 0], [15, -18, 0], [22, -10, 0], [25, -8, 0], [27, -4, 0], [31, 0, 0], [34, 9, 0], [31, 8, 0], [32, 13, 0], [28, 14, 0], [22, 12, 0], [19, 16, 0], [16, 13, 0], [14, 12, 1], [109, -246, 0], [13, -13, 0], [18, -7, 0], [17, -5, 0], [17, 7, 0], [15, 12, 0], [9, 14, 0], [5, 19, 0], [0, 21, 0], [-3, 19, 0], [-6, 18, 0], [-11, 17, 0], [-13, 21, 1], [-49, 128, 1], [5, 4, 0], [11, 5, 0], [6, -3, 0], [6, -1, 1], [592, -441, 1], [1, 39, 0], [3, 22, 0], [1, 23, 0], [5, 25, 1], [55, -80, 0], [3, 16, 0], [1, 19, 0], [8, 25, 0], [11, 31, 1], [456, 19, 0], [8, 19, 0], [-2, 24, 0], [8, 35, 0], [5, 39, 0], [11, 48, 0], [9, 51, 0], [3, 49, 0], [-9, 43, 0], [-20, 36, 0], [-31, 24, 0], [-39, 15, 0], [-42, 6, 0], [-51, -7, 0], [-51, -18, 0], [-49, -24, 0], [-46, -29, 0], [-27, -29, 0], [-9, -27, 0], [5, -28, 0], [18, -23, 0], [28, -19, 0], [39, -7, 0], [37, -8, 0], [45, 0, 1], [431, 53, 0], [-17, 0, 0], [-21, 3, 0], [-18, 10, 0], [-14, 13, 0], [-4, 21, 0], [-4, 19, 0], [4, 18, 0], [11, 17, 0], [20, 13, 0], [24, 7, 0], [22, 1, 0], [27, -3, 0], [21, -13, 0], [20, -14, 0], [9, -19, 0], [7, -18, 1], [108, -173, 0], [2, 22, 0], [-2, 25, 0], [-2, 26, 0], [4, 30, 0], [0, 28, 0], [3, 27, 0], [1, 22, 0], [-3, 14, 0], [2, 9, 0], [-1, 1, 0], [2, -1, 0], [2, -9, 0], [4, -15, 0], [10, -15, 0], [8, -21, 0], [18, -12, 0], [16, -12, 0], [21, -5, 0], [22, 0, 0], [25, 9, 0], [22, 12, 0], [23, 15, 0], [29, 22, 0], [19, 20, 0], [21, 19, 0], [20, 19, 0], [20, 14, 0], [20, 9, 1], [54, -110, 0], [2, 10, 0], [2, 16, 0], [1, 16, 0], [3, 16, 0], [4, 14, 0], [2, 10, 0], [2, 3, 0], [4, 2, 0], [0, -6, 0], [4, -11, 0], [6, -13, 0], [9, -16, 0], [12, -15, 0], [16, -13, 0], [19, -11, 0], [25, -5, 0], [23, -2, 0], [32, 5, 0], [25, 8, 0], [29, 15, 0], [27, 17, 0], [26, 19, 0], [31, 24, 0], [25, 21, 0], [21, 18, 0], [14, 14, 0], [11, 11, 0], [10, 7, 1], [833, -213, 0], [-28, -16, 0], [-39, -12, 0], [-41, -1, 0], [-52, 2, 0], [-49, 12, 0], [-39, 20, 0], [-31, 27, 0], [-19, 30, 0], [-2, 31, 0], [14, 30, 0], [29, 30, 0], [38, 22, 0], [41, 17, 0], [43, 8, 0], [35, -3, 0], [32, -13, 0], [24, -23, 0], [18, -29, 0], [10, -32, 0], [12, -29, 1], [-1, -195, 0], [4, 19, 0], [2, 29, 0], [5, 33, 0], [4, 34, 0], [9, 39, 0], [11, 37, 0], [9, 33, 0], [20, 29, 0], [26, 26, 0], [24, 16, 0], [28, 7, 0], [20, -3, 1], [58, -92, 0], [6, -1, 0], [0, 0, 0], [2, 3, 0], [4, 10, 0], [3, 10, 0], [7, 12, 0], [9, 9, 1], [-20, -198, 0], [-3, -13, 0], [-2, -5, 0], [1, -1, 0], [-2, -5, 1], [305, 186, 1], [-14, -61, 0], [-21, -10, 0], [-30, -4, 0], [-35, -2, 0], [-31, 7, 0], [-36, 9, 0], [-26, 17, 0], [-21, 20, 0], [-13, 24, 0], [-1, 27, 0], [10, 24, 0], [15, 21, 0], [24, 14, 0], [28, 8, 0], [34, 5, 0], [26, -5, 0], [29, -12, 0], [29, -19, 0], [18, -27, 0], [19, -26, 0], [12, -23, 0], [6, -22, 0], [3, -23, 0], [-6, -25, 1], [-25, -165, 0], [-4, 16, 0], [3, 21, 0], [6, 25, 0], [8, 31, 0], [10, 33, 0], [11, 40, 0], [14, 36, 0], [10, 34, 0], [8, 27, 0], [10, 24, 0], [6, 24, 0], [5, 14, 1], [73, -188, 0], [4, 11, 0], [0, 17, 0], [8, 20, 0], [1, 16, 0], [0, 18, 0], [6, 15, 0], [4, 11, 0], [4, 8, 0], [4, 2, 0], [5, -1, 0], [8, -6, 0], [2, -15, 0], [9, -16, 0], [12, -17, 0], [18, -17, 0], [25, -17, 0], [18, -9, 0], [29, -5, 0], [29, 2, 0], [26, 2, 0], [29, 13, 0], [34, 12, 0], [29, 17, 0], [28, 24, 0], [28, 22, 0], [26, 21, 0], [32, 18, 0], [17, 9, 0], [26, 3, 0], [16, -6, 0], [12, -18, 0], [13, -19, 1], [10, -317, 0], [2, 4, 0], [-1, 12, 0], [-2, 17, 0], [-2, 14, 1], [194, -23, 0], [3, 3, 0], [-4, 13, 0], [-5, 23, 0], [3, 35, 0], [4, 33, 0], [3, 45, 0], [7, 46, 0], [3, 45, 0], [7, 45, 0], [2, 35, 0], [1, 27, 0], [-1, 12, 1], [114, -163, 0], [-8, -4, 0], [-21, -12, 0], [-41, -7, 0], [-35, -5, 0], [-38, -5, 0], [-38, -1, 0], [-33, 6, 0], [-26, 10, 1]] -------------------------------------------------------------------------------- /public/assets/distill-stage-manager.html: -------------------------------------------------------------------------------- 1 | 16 | 123 | -------------------------------------------------------------------------------- /validation-data/6.json: -------------------------------------------------------------------------------- 1 | [[100, 438, 0], [12, -9, 0], [13, -9, 0], [16, -13, 0], [14, -14, 0], [14, -17, 0], [10, -13, 0], [7, -13, 0], [6, -5, 0], [1, -7, 0], [2, -1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [1, 12, 0], [0, 20, 0], [0, 36, 0], [-33, 304, 0], [-3, 13, 0], [2, 0, 0], [5, -9, 0], [1, -28, 0], [5, -49, 0], [13, -61, 0], [70, -164, 0], [10, 23, 0], [9, 24, 0], [8, 18, 0], [10, 20, 0], [11, 11, 0], [13, 6, 0], [106, -86, 0], [6, -22, 0], [1, -16, 0], [-5, -15, 0], [-7, -7, 0], [-8, -3, 0], [-11, -3, 0], [-24, 133, 0], [11, 18, 0], [10, 19, 0], [8, 15, 0], [7, 15, 0], [2, 8, 0], [4, 4, 0], [4, -5, 0], [62, -130, 0], [-5, -4, 0], [5, -4, 0], [3, 0, 0], [13, -7, 0], [13, 2, 0], [20, -8, 0], [66, 83, 0], [-11, 14, 0], [-12, 2, 0], [-8, -7, 0], [-2, -12, 0], [4, -21, 1], [83, -56, 0], [9, -2, 0], [11, -2, 0], [14, 2, 0], [14, -3, 0], [14, -7, 0], [47, -15, 0], [1, 5, 0], [-6, 1, 0], [-10, 6, 0], [-13, 15, 0], [-14, 11, 0], [-10, 23, 0], [-6, 17, 0], [70, -31, 0], [12, -11, 0], [14, -7, 0], [10, -7, 0], [11, -10, 0], [8, -7, 0], [5, -5, 0], [2, 0, 0], [-7, 43, 0], [9, -14, 0], [11, 2, 0], [10, 1, 0], [14, 9, 0], [13, 9, 0], [16, 9, 0], [16, -4, 0], [120, -57, 0], [2, 0, 0], [-2, 0, 0], [-6, 6, 0], [-10, 7, 0], [-10, 15, 0], [-8, 19, 0], [-1, 17, 0], [97, 27, 1], [343, -141, 0], [-2, 1, 0], [-2, -4, 0], [-2, 1, 0], [-5, -2, 0], [-7, -2, 0], [-10, -5, 0], [-12, -4, 0], [-14, 5, 0], [-15, 6, 0], [-12, 16, 0], [-11, 21, 0], [0, 29, 0], [-2, 22, 0], [4, 3, 0], [16, 3, 0], [20, -11, 0], [18, -23, 0], [45, -55, 0], [0, 13, 0], [-5, 19, 0], [-2, 26, 0], [-3, 23, 0], [-2, 26, 0], [0, 25, 0], [2, 25, 0], [-44, 78, 0], [-5, -10, 0], [6, -19, 0], [2, -14, 0], [11, -20, 0], [6, -19, 0], [12, -22, 0], [10, -11, 0], [94, -112, 0], [6, 2, 0], [4, 7, 0], [2, 16, 0], [-2, 27, 0], [-3, 27, 0], [-5, 15, 0], [-2, 5, 0], [104, -71, 0], [17, -8, 0], [15, -6, 0], [11, -4, 0], [7, -3, 0], [0, 0, 0], [-3, -3, 0], [-2, 9, 0], [10, 9, 0], [4, 2, 0], [6, 12, 0], [9, 13, 0], [11, 13, 0], [12, 3, 0], [13, -5, 0], [124, -205, 0], [9, -14, 0], [0, -3, 0], [-2, 0, 0], [-7, 8, 0], [-8, 26, 0], [-13, 32, 0], [-11, 45, 1], [-47, -22, 0], [4, -2, 0], [15, -3, 0], [25, 2, 0], [25, -3, 0], [27, -3, 0], [45, -4, 0], [15, 2, 0], [7, 5, 0], [-3, 10, 0], [-11, 10, 1], [-82, 100, 0], [7, -2, 0], [17, -4, 0], [20, -6, 0], [47, -12, 0], [26, -12, 0], [20, -15, 0], [24, -3, 0], [15, -7, 0], [12, -2, 0], [3, -5, 0], [-71, 74, 0], [2, 4, 0], [10, -5, 0], [17, -13, 0], [20, -19, 0], [16, -16, 0], [15, 1, 0], [103, 64, 1], [149, 17, 0], [-8, 9, 0], [3, -2, 0], [11, -6, 0], [12, -11, 1], [225, -135, 0], [0, -1, 0], [14, -4, 0], [21, -12, 0], [26, -21, 0], [27, -27, 0], [26, -26, 0], [20, -28, 0], [18, -21, 0], [12, -17, 0], [4, -13, 0], [3, 3, 0], [1, 8, 0], [-3, 21, 0], [-2, 35, 0], [-10, 41, 0], [-12, 46, 0], [-53, 118, 1], [86, -39, 0], [15, -5, 0], [22, -10, 0], [21, -19, 0], [21, -24, 0], [23, -29, 0], [23, -35, 0], [22, -35, 0], [17, -32, 0], [10, -26, 0], [1, -11, 0], [-5, -1, 0], [-6, 3, 0], [-17, 14, 0], [-19, 33, 1], [-101, 106, 0], [2, -1, 0], [14, 1, 0], [22, 4, 0], [30, 9, 0], [34, 5, 0], [35, 6, 0], [24, 3, 0], [20, 5, 1], [183, -27, 0], [5, 1, 0], [11, 2, 0], [14, 0, 0], [17, -3, 0], [21, -7, 0], [17, -12, 0], [20, -11, 0], [18, -14, 0], [15, -16, 0], [24, -34, 0], [9, -17, 0], [3, -18, 0], [5, -15, 0], [2, -12, 0], [0, -10, 0], [3, -7, 0], [-2, -9, 0], [-48, 95, 0], [-12, 34, 0], [-6, 30, 0], [-3, 17, 0], [-1, 2, 0], [3, -3, 0], [8, -5, 0], [97, 61, 0], [17, 1, 0], [16, -1, 0], [12, -5, 0], [10, -7, 0], [6, -5, 0], [2, -8, 0], [-49, -12, 0], [-4, 14, 0], [-1, 11, 0], [8, 19, 0], [12, 21, 0], [8, 14, 0], [8, 13, 0], [6, 17, 0], [125, -70, 1], [131, 0, 0], [9, -1, 0], [5, -10, 0], [12, -11, 0], [12, -9, 0], [14, -8, 0], [7, -12, 0], [7, -4, 0], [1, -2, 0], [1, -1, 0], [-1, 2, 0], [0, 15, 0], [-10, 14, 0], [-2, 17, 0], [-4, 9, 0], [-2, 2, 0], [1, 4, 0], [2, -2, 0], [79, -99, 0], [3, 8, 0], [-2, 12, 0], [0, 21, 0], [-3, 24, 0], [-4, 19, 0], [-5, 15, 0], [55, -43, 0], [3, -1, 0], [4, 5, 0], [7, 10, 0], [8, 9, 0], [14, 10, 0], [8, 4, 0], [40, -42, 0], [-8, 1, 0], [-6, 5, 0], [2, 16, 0], [5, 11, 0], [11, 7, 0], [15, 2, 0], [118, -55, 0], [1, -1, 0], [-3, -2, 0], [-1, 1, 0], [1, 5, 0], [-11, 9, 0], [-2, 19, 0], [-3, 9, 0], [49, -41, 0], [6, -6, 0], [6, 0, 0], [2, -2, 0], [1, -1, 0], [-1, 1, 0], [3, 8, 0], [31, 42, 0], [9, -8, 0], [7, -2, 0], [5, 1, 0], [9, 2, 0], [10, 2, 0], [11, 1, 0], [87, -8, 0], [0, 0, 0], [-1, 2, 0], [-10, -2, 0], [-9, 4, 0], [-7, 6, 0], [-10, 5, 0], [68, -10, 0], [19, -8, 0], [18, -7, 0], [15, -4, 0], [13, 0, 0], [4, 0, 0], [1, 5, 0], [-2, 14, 0], [33, 0, 0], [5, -5, 0], [6, 0, 0], [3, -3, 0], [7, -2, 0], [9, 2, 0], [10, 1, 0], [8, 4, 0], [-56, 108, 0], [12, -6, 0], [21, -22, 0], [36, -24, 0], [39, -24, 0], [37, -19, 1]] -------------------------------------------------------------------------------- /validation-data/194.json: -------------------------------------------------------------------------------- 1 | [[100, 443, 0], [2, 8, 0], [5, 8, 0], [3, 21, 0], [2, 20, 0], [2, 24, 0], [0, 28, 0], [-1, 28, 0], [-1, 25, 0], [-2, 28, 0], [4, 16, 0], [0, 12, 0], [1, 8, 0], [4, -4, 0], [3, -8, 0], [4, -11, 0], [4, -16, 0], [13, -39, 0], [11, -19, 0], [14, -19, 0], [21, -19, 0], [21, -10, 0], [27, -11, 0], [23, -2, 0], [27, 6, 0], [22, 9, 0], [22, 9, 0], [18, 17, 0], [18, 17, 0], [17, 21, 0], [13, 20, 0], [13, 17, 1], [194, -159, 0], [-19, -5, 0], [-24, 4, 0], [-26, 4, 0], [-28, 7, 0], [-24, 15, 0], [-22, 19, 0], [-13, 16, 0], [-7, 20, 0], [2, 16, 0], [11, 21, 0], [13, 12, 0], [19, 5, 0], [23, 8, 0], [26, -4, 0], [26, -3, 0], [39, -23, 0], [11, -16, 0], [5, -16, 0], [2, -16, 0], [-2, -8, 0], [-4, -4, 0], [-1, 0, 0], [-1, 0, 0], [2, 8, 0], [4, 20, 0], [8, 12, 0], [6, 15, 0], [7, 13, 0], [9, 8, 0], [10, 8, 0], [6, 4, 1], [11, -148, 0], [6, 9, 0], [11, 15, 0], [9, 16, 0], [13, 20, 0], [11, 20, 0], [9, 12, 0], [24, 40, 0], [5, 0, 0], [1, 0, 0], [4, -9, 0], [8, -12, 0], [7, -20, 0], [28, -40, 0], [16, -20, 0], [16, -17, 0], [16, -16, 0], [14, -16, 1], [25, 107, 0], [8, 0, 0], [9, -10, 0], [12, -12, 0], [13, -8, 0], [13, -13, 0], [9, -8, 0], [3, -8, 0], [0, -4, 0], [-5, -4, 0], [-11, -3, 0], [-10, 4, 0], [-10, 4, 0], [-14, 37, 0], [9, 20, 0], [11, 15, 0], [17, 16, 0], [21, 11, 0], [22, 11, 0], [26, 7, 0], [49, -3, 0], [20, -13, 0], [12, -13, 0], [10, -17, 0], [-4, -16, 1], [549, -279, 0], [-2, 24, 0], [4, 27, 0], [1, 33, 0], [0, 33, 0], [3, 27, 0], [-2, 33, 0], [-3, 28, 0], [0, 25, 0], [-4, 20, 0], [-3, 13, 0], [-3, 1, 0], [0, -5, 1], [139, -215, 0], [-30, 0, 0], [-39, 3, 0], [-48, 3, 0], [-53, 4, 0], [-57, 3, 0], [-54, 4, 0], [-44, 1, 0], [-26, 3, 1], [350, -91, 0], [5, 12, 0], [7, 23, 0], [5, 23, 0], [4, 28, 0], [16, 95, 0], [2, 16, 0], [2, 7, 0], [0, 4, 0], [2, 4, 0], [1, -4, 0], [2, -12, 0], [5, -14, 0], [6, -17, 0], [10, -15, 0], [12, -18, 0], [20, -16, 0], [19, -7, 0], [16, -11, 0], [25, -6, 0], [23, 0, 0], [18, 5, 0], [17, 9, 0], [14, 10, 0], [11, 14, 0], [11, 14, 0], [10, 10, 0], [7, 7, 0], [19, 11, 1], [37, -44, 0], [8, -10, 0], [4, -9, 0], [7, -2, 0], [2, 0, 0], [4, 7, 0], [0, 4, 0], [3, 16, 0], [0, 12, 0], [0, 12, 0], [0, 13, 0], [-4, 13, 1], [152, -109, 0], [-9, 2, 0], [-9, 2, 0], [-7, 6, 0], [-2, 9, 1], [86, 52, 0], [10, 6, 0], [7, 11, 0], [1, 8, 0], [-4, 5, 0], [-11, 11, 0], [-21, 5, 0], [-24, 6, 0], [-23, 2, 0], [-24, 1, 0], [-23, 2, 0], [-19, -4, 0], [-15, -5, 1], [883, -213, 0], [-32, -4, 0], [-31, 3, 0], [-36, 5, 0], [-36, 16, 0], [-29, 23, 0], [-28, 22, 0], [-16, 23, 0], [-1, 30, 0], [43, 70, 0], [64, 16, 0], [44, 1, 0], [34, -8, 0], [38, -18, 0], [24, -22, 0], [31, -54, 0], [-2, -25, 1], [-34, -167, 0], [1, 21, 0], [12, 21, 0], [5, 32, 0], [9, 27, 0], [5, 33, 0], [14, 32, 0], [2, 29, 0], [18, 46, 0], [8, 0, 0], [11, -4, 1], [57, -73, 0], [2, -1, 0], [3, 7, 0], [-1, 5, 0], [0, 8, 1], [-25, -111, 0], [5, -10, 0], [-6, -11, 0], [-3, 2, 1], [166, 14, 0], [7, -3, 0], [11, -14, 0], [8, -17, 0], [3, -10, 0], [2, -18, 0], [0, -13, 0], [-7, -10, 0], [-5, -6, 0], [-10, -5, 0], [-4, 6, 0], [-15, 32, 0], [0, 22, 0], [3, 34, 0], [18, 79, 0], [6, 41, 0], [10, 44, 0], [-7, 51, 0], [14, 37, 0], [0, 39, 0], [-5, 36, 1], [38, -303, 0], [-16, 3, 0], [-24, 2, 0], [-24, 6, 1], [134, -20, 0], [8, -3, 0], [3, -10, 0], [9, -13, 0], [9, -48, 0], [-4, -7, 0], [-12, -12, 0], [-16, -15, 0], [-11, 10, 0], [-22, 10, 0], [-7, 15, 0], [-4, 29, 0], [-1, 31, 0], [7, 41, 0], [9, 126, 0], [9, 41, 0], [14, 81, 0], [-12, 8, 1], [88, -257, 0], [-10, -4, 0], [-18, -1, 0], [-14, -1, 0], [-15, -7, 0], [-22, 5, 0], [-12, -3, 0], [-9, 4, 1], [137, 17, 0], [9, 9, 0], [5, 6, 0], [11, 26, 0], [0, 8, 0], [-1, 6, 0], [-8, -1, 1], [-11, -132, 0], [2, 0, 0], [-2, 1, 0], [-7, -2, 0], [-3, -3, 1], [221, 23, 0], [-13, 1, 0], [-16, 3, 0], [-19, 5, 0], [-28, 15, 0], [-28, 13, 0], [-33, 33, 0], [-4, 15, 0], [0, 23, 0], [9, 18, 0], [27, 4, 0], [27, 14, 0], [29, 9, 0], [30, 3, 0], [36, 5, 0], [24, -7, 1], [33, -116, 0], [3, 12, 0], [6, 15, 0], [13, 7, 0], [11, 7, 0], [8, 6, 0], [5, -3, 0], [5, -7, 0], [4, -2, 0], [2, -15, 0], [6, -11, 0], [10, -15, 0], [4, -7, 0], [5, -2, 0], [2, -1, 0], [8, 5, 0], [11, 8, 0], [7, 10, 0], [3, 16, 0], [7, 15, 0], [13, 10, 0], [14, 11, 0], [17, 9, 0], [12, 3, 0], [15, -3, 1], [55, -153, 0], [5, 25, 0], [-11, 33, 0], [9, 27, 0], [0, 32, 0], [2, 26, 0], [2, 27, 0], [10, 12, 0], [4, 7, 1], [87, -204, 0], [-2, 29, 0], [6, 19, 0], [-4, 30, 0], [8, 28, 0], [2, 26, 0], [7, 29, 0], [1, 17, 0], [10, 13, 1], [4, -121, 0], [-14, -2, 0], [-10, -4, 0], [-19, 2, 0], [-13, -2, 1], [287, 36, 0], [-17, 30, 0], [-19, 34, 0], [-25, 38, 0], [-1, 38, 0], [2, 45, 0], [5, 52, 0], [23, 43, 0], [12, 39, 1], [-88, -361, 0], [6, 24, 0], [18, 13, 0], [11, 26, 0], [18, 18, 1], [200, 23, 0], [10, -1, 0], [-4, -8, 0], [-6, -9, 0], [-3, -37, 1]] -------------------------------------------------------------------------------- /bin/porcupine-render: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Copyright 2018 Google LLC 4 | // 5 | // Licensed under the Apache License, Version 2.0 (the "License"); 6 | // you may not use this file except in compliance with the License. 7 | // You may obtain a copy of the License at 8 | // 9 | // http://www.apache.org/licenses/LICENSE-2.0 10 | // 11 | // Unless required by applicable law or agreed to in writing, software 12 | // distributed under the License is distributed on an "AS IS" BASIS, 13 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | // See the License for the specific language governing permissions and 15 | // limitations under the License. 16 | 17 | var d3 = require("d3"), 18 | d3ScaleChromatic = require("d3-scale-chromatic"), 19 | jsdom = require("jsdom").jsdom; 20 | 21 | var doctype = "" + 22 | ""; 23 | 24 | var json = ""; 25 | var coordinates = []; 26 | 27 | process.stdin.setEncoding('utf8'); 28 | process.stdin.on('readable', () => { 29 | var chunk = process.stdin.read(); 30 | if (chunk !== null) { 31 | json += chunk.toString(); 32 | } 33 | }); 34 | process.stdin.on('end', () => { 35 | render(JSON.parse(json)) 36 | }); 37 | 38 | 39 | function render(coordinates) { 40 | var numSamples = process.argv[2] ? process.argv[2] : coordinates[0].samples.length; 41 | var numSegments = process.argv[3] ? process.argv[3] : coordinates[0].samples[0].segments.length; 42 | 43 | var body = d3.select(jsdom().documentElement).select("body"); 44 | 45 | var width = 1800, 46 | height = 470; 47 | 48 | var svg = body.append("svg") 49 | .attr("version", "1.1") 50 | .attr("xmlns", d3.namespaces.svg) 51 | .attr("xmlns:xlink", d3.namespaces.xlink) 52 | .attr("width", width) 53 | .attr("height", height) 54 | .attr("viewBox", "0 0 " + width + " " + height) 55 | .attr("vector-effect", "non-scaling-stroke"); 56 | 57 | var sampleStrokes = svg.append("g"); 58 | var mainStrokes = svg.append("g"); 59 | 60 | 61 | 62 | var continuousColor = d3.scaleSequential(d3ScaleChromatic.interpolatePiYG).domain([-2, 2]); 63 | var continuousColor = d3.scaleSequential(d3ScaleChromatic.interpolateBrBG).domain([-2, 2]); 64 | var thresholdColor = function(d) { return d > 0 ? continuousColor(-0.8) : continuousColor(0.8); } 65 | 66 | var minY = d3.min(coordinates, function(c) { return c.y; }); 67 | 68 | var xScale = d3.scaleLinear() 69 | .domain([-10, 30]) 70 | .range([0, 1000]); 71 | 72 | var yScale = d3.scaleLinear() 73 | .domain([minY, 20 + minY]) 74 | .range([70, 570]); 75 | 76 | coordinates.forEach(function(c, i) { 77 | 78 | var line = mainStrokes.append("line") 79 | .style("stroke", "black") 80 | .style("stroke-opacity", c.previousPenState ? 0 : 1) 81 | .attr("x1", xScale(c.x)) 82 | .attr("y1", yScale(c.y)) 83 | .attr("x2", xScale(c.x + c.dx)) 84 | .attr("y2", yScale(c.y + c.dy)); 85 | 86 | mainStrokes.append("circle") 87 | .style("stroke", "black") 88 | .style("fill", "none") 89 | .attr("r", 0.7 + Math.sqrt(c.penStateProbability) * 5) 90 | .attr("cx", xScale(c.x + c.dx)) 91 | .attr("cy", yScale(c.y + c.dy)); 92 | 93 | d3.range(numSamples).forEach(function(si) { 94 | var sample = c.samples[si]; 95 | d3.range(numSegments).forEach(function(segi) { 96 | var segment = sample.segments[segi]; 97 | var a2 = Math.atan2(c.y - segment.y - segment.dy, c.x - segment.x - segment.dx); 98 | var forwardC = coordinates[Math.min(coordinates.length - 1, i + segi)]; 99 | var a1 = Math.atan2(c.y - forwardC.y - forwardC.dy, c.x - forwardC.x - forwardC.dx); 100 | var sign = a1 > a2 ? 1 : -1; 101 | var angle = a1 - a2; 102 | var K = -sign * Math.PI * 2; 103 | var angle = (Math.abs(K + angle) < Math.abs(angle))? K + angle : angle; 104 | 105 | sampleStrokes.append("line") 106 | .style("stroke", thresholdColor(angle)) 107 | .style("stroke-opacity", segment.previousPenState === 1 ? 0 : 0.3 * (numSegments - segi) / numSegments) 108 | .attr("x1", xScale(segment.x)) 109 | .attr("y1", yScale(segment.y)) 110 | .attr("x2", xScale(segment.x + segment.dx)) 111 | .attr("y2", yScale(segment.y + segment.dy)); 112 | 113 | }); 114 | }); 115 | }); 116 | 117 | process.stdout.write(doctype + body.node().innerHTML); 118 | 119 | } 120 | --------------------------------------------------------------------------------