okay first:
platform/framework skeptic
bash in a pinch.Hackerlylanguages are important
solutionevery time you want to do something.
I'm trying to create an environment where you can mix and match any number of programming languages on any old infrastructure, which itself can be blended however you like, to compose any scale of Web-based information system. I'm trying to reassert protocol over product in order to make systems that can do things the current ones can't.
Before you can do anything on the Web of 2020, you have to pick a stack. Over a long enough timeline, you will eventually encounter something your stack can't do. Or some other stack will do something better. Or you will have a disagreement with some member of your stack. Judging by the rate of churn in the ecosystem, this seems to happen every year or two. But I'm interested in making Web-based systems that ultimately last decades, and you don't get those by dumping your stack every couple of years. Long-lived systems are long-lived because they can be repaired, either from a technical standpoint or in terms of the relationships that sustain them. What this points to is a Web ecosystem where, within a single organization, multiple stacks can integrate into a single coherent experience.
How do we achieve this? By defining a new set of constraints, defining new categories of development target, and defining the ways the parts and pieces interact with each other.
define a set of constraints, a policy/protocol embodied in a minimal implementation of connective tissue
which can be ported to other languages
all the interfacing happens in http unless it's within the same process then it can be straight function calls
Information resources relate identifiers to representations.
An information resource is a relation between one or more identifiers and one or more representations.
Whatever result you get from fetching or dereferencing a resource can be said to be its current representational state. The simplest kind of information resource is a file, with one identifier and one representation. A file is functionally inert: its representational state stays put until some procedure comes along and overwrites or deletes it.
The business of Web development ultimately reduces to making collections of resources that do more than files do, though the extent to which this is consciously acknowledged is unclear. I argue, after Fielding and others, that the resource should be the focal point of Web development; that we should always be talking about our work in terms of information resources and the manipulation of their representational states. This is a fiction, to be sure, but it is an incredibly useful one.
It is much more common for development to be focused on the page or section, rather than the resource. Pages, in practice, are almost always composite: they contain substructures which, if not first-class resources, could be conceived that way. Pages, then, are like molecules, yoking together elementary resources in a particular configuration. Often these substructures are defined as reusable components, but these tend to be fragmentary, and/or not directly addressable, and/or not meant to stand on their own. If we designed these components to be intact, atomic
resources, then we can have settle on one interface for page composition: URLs and HTTP.
The first dichotomy concerns the way the system treats a resource, the extent to which the system can see into
it.
A resource is opaque if it presents to the system primarily as a blob of data. An opaque resource can be said to have a single authoritative representation, and you can't guarantee other representations will be equivalent.
A transparent resource, by contrast, doesn't have an authoritative representation other than what is internal to a database or live memory. The system can see
the entire resource, and can—and does—address every individual part of it. As such, there is no authoritative string of bytes that represents a transparent resource, because all such representations have to be generated.
The second dichotomy concerns where the resource came from.
A resource is sampled if a representation of it entered the system as-is. If you delete a sampled resource you have to go back to wherever you got it from and get it again, which you may not be able to do.
A resource is computed if it is generated by some process under management by the system. If you delete a computed resource, you should be able to recompute it, provided you still have all its inputs—including the process that computed it in the first place.
The essential parts of the prototypical system as imagined.
this would exist in a substrate
everything that has a canonical representation as a string of bytes
everything that has a canonical representation in memory
Business Logic
also known as application logic
, these are procedures that either instrument or automate some specific business process.
two essential components but not exhaustive
both for long-term storage and for cache
doesn't matter if this is virtual or federated; point is you can sequester it from the rest of the system
effectively change the meaning of the message
examples: restrict, project, union, intersect, aggregate
do not change the meaning of the content but change some other aspect
there are tons of third-party
there are lots of message queue products
this is a protected client that can go out over the network and fetch and/or manipulate resources