Skip to content

Instantly share code, notes, and snippets.

View warpfork's full-sized avatar

Eric Myhre warpfork

View GitHub Profile
@warpfork
warpfork / warpforge-api-evolution-and-recursive-expanders-in-build-plans.md
Last active April 26, 2024 08:29
warpforge evolution directions (and recursive expanders for build plans)

This is a working document to snapshot some thoughts about the evolution of Warpforge and its APIs.

Observations (that lead to some desires for changes)

  • We should seriously consider moving the Catalogs to an even yet plainer format.
    • The Catalog format as it stands today is a pain to edit manually, due to its inclusion of hashes. (This has been remarked upon by essentially every user to date.)
    • We also derive very little value from the use of hashes in the middle of the Catalog data, because in practice, we find we're continuously embedding the Catalog data in other version control systems, which already contain their own checksums. While there is elegance to having our own hashing scheme provide our own bespoke incrementally verifiable trees, there is little strong demonstration of that providing direct value (and very many demonstrations of it creating problematic friction).
    • The Catalog format seems like it could become more generally usable (and thus more appealing for others to interact
@warpfork
warpfork / tcat-rfc.md
Last active April 19, 2024 00:12
Text Catalogs RFC

Text Catalogs: an RFC

Abstract

This document proposes "Text Catalogs" -- "tcat" for short -- a convention for file naming and content organization for document stores. Text Catalogs are specifically aimed to be legible to humans, friendly to version control,

@warpfork
warpfork / zappifier
Created November 25, 2023 21:44
A bash Zappifier. (Not the latest version, due to... computer ownership shenanigans.)
#!/bin/bash
set -euo pipefail
#set -x
## HOW TO HOLD IT:
##
## Give the program you want to zapp as the first argument.
##
## For the couple of different usage patterns:
@warpfork
warpfork / WarpVer.md
Last active January 2, 2023 12:06
WarpVer -- it's not semver

WarpVer Versioning

A software versioning scheme.

It's not semver ™️.

The Rules

@warpfork
warpfork / static_site_roundup_2021.md
Last active November 27, 2021 08:45
Static Site Generator Roundup 2021

Static Site Generator Roundup 2021

Criteria & Considerations

  • does it consume markdown?
  • is it fast?
    • (a "hello world" site should take milliseconds or less to build. Definitely not full seconds; certainly not multiple full seconds.)
  • is it reasonably shipped?
@warpfork
warpfork / gist:8dd88ffb90bdd40eff9945cf7a67fc15
Last active November 2, 2020 21:03
IPLD Strings, round 4

IPLD Strings

For an IPLD library to have "Complete" support for the IPLD Data Model, Strings MUST support the full range of 8-bit bytes. Strings SHOULD use UTF-8, and library designers may encourage this however they see fit. In particular, NFC-normalized form is encouraged. However, this MUST NOT result in the inability of a library to handle non-UTF-8 byte sequences where Strings are handled, nor should libraries apply normalizations to data they read. (In other words: using normalized forms when creating new data is encouraged,

@warpfork
warpfork / ipld-strings.md
Last active November 6, 2020 19:05
IPLD: Strings

Strings in IPLD

"Strings" are a familiar concept in how programs handling digital data. However, for all its familiarity, it is also subtle. Solid systems require clear specifications. In this document, we will describe Strings in IPLD, where they appear, and what specifications we make about their domain.

Prerequisites

@warpfork
warpfork / ipld-map-order.md
Last active November 11, 2020 12:23
IPLD: Data Model: Order of Maps

Data Model: Order of Maps

Maps in IPLD are typically order-preserving: if you put data into them in some order, you can expect that the iterators will return that information in the same order; and transformation functions will generally operate on data without reordering it.

However, there are also several exceptions to this rule, so it's important to be aware of what to expect in the different scenarios.

@warpfork
warpfork / README.md
Last active February 7, 2021 18:27
Rethinking The Linking

This is a radical rethink of the linking situation for the go-ipld libraries.

  • It gets almost all logic detached from the Link/LinkPrototype implementations. This will probably detangle implementations greatly.
  • There's a LinkSystem type that handles the composition of different codecs, hashers, etc.
  • It's now possible to do your own codec and hasher registries by creating your own LinkSystem instance. Previously this was impossible.
  • We can attach many more helper methods to LinkSystem. This should improve end-user usability. Previously there was no clear place to put them (without burdening the Link/LinkBuilder implementations with lots of boilerplate, which was nonelegant in many ways).

There are a couple of groups of interfaces below which would come from different places:

  1. Link and LinkPrototype would be implemented by something like CIDs. (A project probably won't actually have a variety of implementations of these, one should be enough; but they're still interfaces for library agility
@warpfork
warpfork / unixfsv2.md
Last active November 25, 2020 20:26
unixfsv2 talk

Filesystems & IPLD

Introduction

IPLD is a system for creating decentralized systems based on content-addressable data primitives. One of the things people frequently want to do when building applications is handle files, and describe filesystems. As a result, we've compiled some thoughts and recommendations about how to describe filesystems in IPLD, and also produced some specifications that we suggest systems use and build upon.