Dynamic content on IPFS using IPLD, IPNS, and Provider Records.
Read the article
Try out the example
Hosting Dynamic Content on IPFS
License: Creative Commons Zero v1.0 Universal
from @SgtPooki:
Dynamic-Content IDs
referring to this section:
Lines 48 to 56 in e4df337
Dynamic-Content IDs
When searching the network for static content, a CID is used to find providers in the DHT. When searching for dynamic content a CID is still used. However, this CID does not belong to any static content. Instead, it is a permutation of the CID of an immutable manifest document that describes the dynamic content:
manifest = { protocol: '/some-protocol/1.0.0', params: { network: 1 } } cid = CID(manifest) dcid = CID('dynamic' + cid)Instead, it is a permutation of the CID of an immutable manifest document that describes the dynamic content
This is slightly confusing
I know there is a note that says, "there is an example using this in the bottom," but I think this section could explain more, and set expectations better.
Some questions I have when targeting just this section
Why do we need this dynamic CID, what is it's purpose?
Why do i need this manifest json/hashtable/other data?
what if someone used manifest = "myManifest" (maybe deserves FAQ entry?)
What if there are accidental manifest conflicts for different implementations? (FAQ?)
I think briefly speaking about how this DCID is used as a reference point for the implemented application is important. "This is the key used to query the DHT to determine where offline data we need is" and "This is the key used to publish data, so when we go offline, others can find it" or similar.It could be good to link to the https://github.com/tabcat/dynamic-content/blob/master/ARTICLE.md#read-and-write-steps section to point users to how it's used.
from @SgtPooki:
Why do we need this dynamic CID, what is it's purpose?
Why do i need this manifest json/hashtable/other data?
what if someone used manifest = "myManifest" (maybe deserves FAQ entry?)
What if there are accidental manifest conflicts for different implementations? (FAQ?)
from @SgtPooki:
Replication
When other collaborators are online, use an application-specific replication protocol for real-time collaboration.
It could be valuable to address this further.
Why bifurcate replication protocol methods?
Is the "app specific" replication protocol using IPFS?
If not, why not full IPFS?
from: @SgtPooki
Read and Write Steps - https://github.com/tabcat/dynamic-content/blob/master/ARTICLE.md#read-and-write-steps
I think this basic "algorithm" for your approach should be much higher in the document.
https://github.com/tabcat/dynamic-content/blob/master/ARTICLE.md
This is a great primer.
referring to this section:
Lines 48 to 56 in e4df337
Instead, it is a permutation of the CID of an immutable manifest document that describes the dynamic content
This is slightly confusing
I know there is a note that says, "there is an example using this in the bottom," but I think this section could explain more, and set expectations better.
Some questions I have when targeting just this section
manifest = "myManifest"
(maybe deserves FAQ entry?)I think briefly speaking about how this DCID is used as a reference point for the implemented application is important. "This is the key used to query the DHT to determine where offline data we need is" and "This is the key used to publish data, so when we go offline, others can find it" or similar.
When other collaborators are online, use an application-specific replication protocol for real-time collaboration.
It could be valuable to address this further.
From @SgtPooki:
Achieving Dynamicity
It could be good to show a diagram of what the architecture of OrbitDB -- or other methods people have used to achieve dynamicity -- used to look like, so we could compare.
Viewed as a Replication Protocol
I feel like it could be useful to link to, or briefly discuss, orbitDB's attempts and problems earlier in this article to explain the reason for this approach.
Something like "If you are familiar with how publishing Provider Records to the DHT works you may have spotted a problem here. ... More detail in Roadblocks and Workarounds
"
from @SgtPooki:
Roadblock, Workaround, and Hopeful Future
Maybe this section needs more attention and breaking up? Maybe a "blockers" section and current workarounds?
from @SgtPooki:
Needs a Table of contents
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.