Hyperfiddle 2017 Year in Review
Here are a bunch of screenshots was the product evolved in 2017.
Jan 1, 2017 – more of a tech demo than a prototype
Hyperfiddle has a git-like staging area, which it turns out is a critical primitive. Datomic's git-like time-traveling primitives mean we can apply transactions locally and see if they work, without actually writing through to the database.
Links can navigate entity graph, navigage to another query, or form a custom datomic transaction. Buttons have a clojure snippet to build up a transaction in code. 99% of these fit a few simple categories (create-new, create-new-managed-child, retract-entity) and these formulas are now auto-generated. But before we figured all that out, we had to code it by hand.
www.dustingetz.com is made in hyperfiddle now, this is our first test of prod traffic.
The problem is that any staged tranction must always be valid to hydrate through datomic, or the app crashes and you can't fix it. So to do a managed parent-child ref (create new entity then link to it, atomically), you have to stage the new entity first, so you can link to it, otherwise there is a dangling tempid reference.
This breaks our performance, so Karl migrates us to reagent reactions, and now the UI is beginning to be almost responsive enough to use.
We started writing other researchers and people we think might be interested in this stuff. Most people don't write back, a couple poo-poo us. Other Datomic researchers are receptive. Our message needs a lot of work, and to be honest we don't even understand what we're building yet, not deeply. But that doesn't matter.
We apply early to YC and tell them we'll have 100 users in 8 weeks. LOL
What's in a select option, really?
September 2017 (ClojureNYC)
Conj talk is rejected, but ClojureNYC takes us. Things starting to look polished
Some error reporting
October – Hyperfiddle now can be used with pre-existing Datomic databases
Configurable domain/environment—use your own datomic databases. All the hardcoded ops stuff getting refactored out. In theory, you can selfhost Hyperfiddle now against your own Datomic databases.
Clojure Conj — Datomic Cloud announced
We show Stu what we're working on and start to figure out how Datomic licensing is going to work.
We give a lightning talk. Dustin decides to go live audience Q&A, miscalibrates the audience and starts talking about the object/relational impedance mismatch, the audience is lost and the Q&A is a massacre. A YCombinator ex-partner is present and watching us get rekt. Oh well. Time to work on our messaging.
Time basis on all requests means all HTTP responses served Cache-Control: immutable. Our CDN is Hyperfiddle-aware integrates this time-basis. Which is really important, because without this optimization, hyperfiddle is currently too slow when there are concurrent users. It also means our blog is equal to a static site served from github pages.
Hyperfiddle performance pattern*
- All requests have a time basis, all responses are immutable
- Immutable responses cached everywhere (disk, CDN, gateway)
- Component-local requests have component-local time basis, optimized for cache hits
- Component-local html fragments (immutable) cached in CDN
- Automatic request partitioning and batching, optimized for cache hits
- CDN/Gateway lambda stitches SSR response from cached component-local html fragments
- Server anticipates future requests to pre-warm caches
- Streamy http infrastructure
*Not all of this is implemented yet