diff --git a/POSTER_PROJECTS/README.md b/POSTER_PROJECTS/README.md index 65a44f2c..db394d82 100644 --- a/POSTER_PROJECTS/README.md +++ b/POSTER_PROJECTS/README.md @@ -1,52 +1,144 @@ -# 📃 Poster Projects - -## Description - -Poster Projects are one of the all times favorite IPFS Events. These sessions are designed to propagate knowledge by having small teams of people explore one of the many pieces of the IPFS stack together, with the goal to understand it so well that they can present it to the whole group aided by a Poster. - -This session is inspired by the famous [Feynman Technique](https://collegeinfogeek.com/feynman-technique/), developed by Richard Feynman himself. The technique is simple and powerful, it suggests that for one to understand something well, it needs to be able to explain it. - - - -These projects are a lot of fun, it enables you to meet new friends, learn in depth DWeb topics and overall boost your knowledge as a builder. - - - -## Instructions - -### Overview - -- Objective: Get people to learn some part of the code base in depth and through that process of learning, create materials that can be used by others to learn that part of the code base. Promote collaboration, knowledge transfer through deep dives and generation of materials that can be used by others in the future. -- Activity: These projects consist on gathering people into small groups (2~4) to explore and understand in depth one of the selected topics. At the end of the session, everyone should have a poster ready (this will be fun!). At the end of each day, all of the poster groups will give a one-minute presentation of their poster. -- Outcome: The posters and discussions will then be converted into docs and/or specs to the IPFS repos. - -### How - -Have fun working in small groups to create posters and other documentation, then give a one-minute presentation of your work. - -- Purpose: Get people to learn some part of the code base in depth and through that process of learning, create materials that can be used by others to learn that part of the code base. -- Length: 1:45h -- Details: During this session, use your time to learn some part of the code base in depth together with a small team of collaborators. Together, create a poster that others can use to learn about that part of the code base. - -Some of the things to do during this session together with the other people on your poster team: - -- **Review any formal documentation** relevant to the topic you've chosen -- **Find and read all the "pseudo-specs"** -- gather and read through all the partial documentation that's floating around. Discuss it together. -- **Look through the related code** -- **Look for relevant reference materials**: papers, recordings of talks, etc. -- **Clarify and test your understanding** by discussing all of this information -- **Interact with experts in the room** - people like Tech Leads will be circulating around the groups -- **Compile all of this information** into something that's easy to consume (a poster) -- **Plan how this information can be incorporated** into the existing documentation and repositories. -- **Choose who will present the poster.** - -At the end of the day, each group will have 1 minute to present their poster. Make sure to choose in advance who will be presenting. - -## How you will choose which poster to work on - -Poster teams should have a maximum of 4 people and a minimum of 2. People will choose which poster to work on using this process: -- Leading up to the session, anyone can propose poster topics using the instructions below. -- The meeting organizers will draw a spot on the ground for each of the posters. -- Before the start of the session, everyone must stand on the poster topic they want to work on. If more than five people try to join a topic, you must re-balance people to other topics. -- When everyone has chosen a topic and no topics have more than five people, write down the list of participants for that topic. -- Take a flip chart, markers, etc and work wherever you want to work. +# 📃 Poster Sessions + +## Description + +Poster Sessions are one of the all time favorite IPFS Events. These sessions are designed to propagate knowledge by having small teams of people explore one of the many pieces of the IPFS stack together, with the goal to understand it so well that they can present it to the whole group aided by a Poster. + +This session is inspired by the famous [Feynman Technique](https://collegeinfogeek.com/feynman-technique/), developed by Richard Feynman himself. The technique is simple and powerful, it suggests that for one to understand something well, they need to be able to explain it. + + + +These sessions are a lot of fun, it enables you to meet new friends, learn in depth DWeb topics and overall boost your knowledge as a builder. + + + +## Instructions + +### Overview + +- Objective: Get people to learn some part of the code base in depth and through that process of learning, create materials that can be used by others to learn that part of the code base. Promote collaboration, knowledge transfer through deep dives and generation of materials that can be used by others in the future. +- Activity: These sessions consist on gathering people into small groups (2~4) to explore and understand in depth one of the selected topics. At the end of the session, everyone should have a poster ready (this will be fun!). At the end of each day, all of the poster groups will give a one-minute presentation of their poster. +- Outcome: The posters and discussions will then be converted into a blog post and published to . + +### How + +Have fun working in small groups to create posters and other documentation, then give a one-minute presentation of your work. + +- Purpose: Get people to learn some part of the code base in depth and through that process of learning, create materials that can be used by others to learn that part of the code base. +- Length: 1:45h +- Details: During this session, use your time to learn some part of the code base in depth together with a small team of collaborators. Together, create a poster that others can use to learn about that part of the code base. + +Some of the things to do during this session together with the other people on your poster team: + +- **Review any formal documentation** relevant to the topic you've chosen +- **Find and read all the "pseudo-specs"** -- gather and read through all the partial documentation that's floating around. Discuss it together. +- **Look through the related code** +- **Look for relevant reference materials**: papers, recordings of talks, etc. +- **Clarify and test your understanding** by discussing all of this information +- **Interact with experts in the room** - people like Tech Leads will be circulating around the groups +- **Compile all of this information** into something that's easy to consume (a poster) +- **Plan how this information can be incorporated** into the existing documentation and repositories. +- **Choose who will present your poster.** +- _If you have time, submit a PR with your new info into the corresponding repository._ + +At the end of the day, each group will have 1 minute to present their poster. Make sure to choose in advance who will be presenting. + +## How you will choose which poster to work on + +Poster teams should have a maximum of 4 people and a minimum of 2. People will choose which poster to work on using this process: +- For this event we have a [list of topics](#topics) below. +- The meeting organizers will draw a spot on the ground for each of the poster topics. +- Before the start of the session, everyone must stand on the poster topic they want to work on. If more than five people try to join a topic, you must re-balance people to other topics. +- When everyone has chosen a topic and no topics have more than five people, write down the list of participants for that topic. +- Take a flip chart, markers, etc and work wherever you want to work. + +## Topics + +| # | Topic | Description | +| :---: | --- | --- | +| 1 | UnixfsV1 | [unixfsv1](topic-unixfsv1.md) | +| 2 | UnixfsV2 | [unixfsv2](topic-unixfsv2.md) | +| 3 | Bitswap | [bitswap](topic-bitswap.md) | +| 4 | IPLD Resolver | The IPLD Resolver is the system that enables IPFS to be able to traverse through multiple data formats (Bitcoin, git, Ethereum, IPFS and others) | +| 5 | Mutable File System (MFS)| [MFS](topic-MFS.md) | +| 6 | PeerPad Capabilities System | | +| 7 | Pinning & GC on IPFS | [pinning-gc](topic-pinning-gc.md) | +| 8 | Libp2p Connection Flow | What is the connection flow of a libp2p connection? What happens internally and why? (what is the libp2p-switch) | +| 9 | IPFS DHT | [IPFS-DHT](topic-IPFS-DHT.md) | +| 10 | The intricacies of DWeb Addressing | The challenges with the origin policy and all details to have in consideration when adding IPFS natively to Web Browsers resolution. Consider base58 -> base32 migrations, case sensitivity, browser vendors, etc. | +| 11 | KeyStore & Linked Data Key (aka Multikey) | Self describing keys. What kind of formats are there? How do we handle them all? What do we use them for? | +| 12 | The design of the IPFS Repo | What is the IPFS Repo? How does it store data? How can users store data in multiple backends (local fs, IndexedDB, S3 and so on) | +| 13 | DEX - The Importers and Exporters Project | Getting and formatting data into and out of IPFS. | +| 14 | IPFS/libp2p PubSub | [PubSub](topic-pubsub.md) | +| 15 | NPM on IPFS | [NPM-on-IPFS](topic-NPM-on-IPFS.md) | +| 16 | InterPlanetary Test Lab | | +| 17 | CAR | Content addressable archive(s). How does it work? What are some applications of it? | +| 18 | SECIO | Encryption method/protocol. How does it compare to alternatives (like TLS)? | +| 19 | Rendezvous Protocol | [rendezvous-protocol](topic-rendezvous-protocol.md) | +| 20 | Circuit Relay | [circuit-relay](topic-circuit-relay.md)| +| 21 | DNSLink | Utilize DNS to point to IPFS data. | +| 22 | xTP | External Transport Protocol. How do IPFS nodes communicate with foreign protocols? Why would we need this? | +| 23 | Go-ds-crdt - Merkle CRDTs | | +| 24 | DAG walking facilities in IPLD | [topic-DAG-walking-in-IPLD](topic-DAG-walking-in-IPLD.md) | +| 25 | Core API | Higher level API for interacting with IPFS nodes. | +| 26 | New Go HTTP API libs | Lower level node API. | +| 27 | QUIC | Transport protocol. When and why is it useful to use QUIC over alternatives? What is the importance of good transports in general? | +| 28 | CRDTs in Peerpad | | +| 29 | Stream Muxers | Libp2p mplex, yamux, SPDY etc. | +| 30 | Websocket Transport | Why Websockets exist? Why TCP and QUIC can be used everywhere? | +| 31 | Performance | Where and why can things be slow in a typical IPFS publish or request operation? | +| 32 | CPU | What are the most compute-heavy operations in a production IPFS node and why? | +| 33 | IPNS | [IPNS](topic-IPNS.md) | +| 34 | Routing | How does IPFS handle routing? (how does IPFS abstract peers via IDs instead of location?) What discovery options exist? (kad-dht, rendezvous). How do we take advantage of multiple discovery methods? | +| 35 | Graphsync | [Graphsync](topic-graphsync.md) | +| 36 | HTTP gateways | [HTTP-gateways.md](topic-HTTP-gateways.md) | +| 37 | CORAL | A non-KAD DHT. How does it compare? How would it benefit IPFS? | +| 38 | IPLD Selectors | Ways of expressing subsets of IPLD objects. | +| 39 | Community / World | How does/can IPFS impact various communities in practice? Which communities? Examples: anti-censorship efforts (Wikipedia mirrors), modernized elective systems (Thailand voting), data archival in general (RIP orphaned data), etc. | +| 40 | Swarming (concept) | Utilization of multiple peers for a single task. E.g. multisource file-transfer / segmented downloading. Speak on redundancy/resilience, efficiency, etc. Compare to centralized systems. | +| 41 | go-ipfs Infrastructure | [go-ipfs-infra](topic-go-ipfs-infra.md) | +| 42 | IPFS Nodes | What makes an IPFS node an IPFS node? List specs that need to be implemented, examples of (non-PL) implementations (whole or individual components). | +| 43 | History? | Outline some of the historical changes in IPFS, such as the extraction of libp2p, changes in standards, etc. | +| 44 | js-ipfs Infrastructure | [js-ipfs-infra](topic-js-ipfs-infra.md) + +## Topic description template +(File these under `camp/POSTER_PROJECTS/topic-.md`) +```markdown +# + + + +## Goal + + + +## Questions to Answer + + + +## Where to learn about it + + +``` + +Example: +```markdown +# Inter-Planetary File System (IPFS) + +A peer-to-peer hypermedia protocol to make the web faster, safer, and more open. + +## Goal + +Broadly convey what IPFS is in concept, practice, and ideal. + +## Questions to Answer + +What is IPFS? What can I use it for? How does it impact various peoples and tasks? + +## Where to learn about it + +https://ipfs.io/ +https://github.com/ipfs/ +https://docs.ipfs.io/#community +IRC: #ipfs, #ipfs-dev +``` \ No newline at end of file diff --git a/POSTER_PROJECTS/img/Bitswap.opt.jpg b/POSTER_PROJECTS/img/Bitswap.opt.jpg new file mode 100644 index 00000000..312d9139 Binary files /dev/null and b/POSTER_PROJECTS/img/Bitswap.opt.jpg differ diff --git a/POSTER_PROJECTS/img/IPLD.opt.jpg b/POSTER_PROJECTS/img/IPLD.opt.jpg new file mode 100644 index 00000000..e6988a18 Binary files /dev/null and b/POSTER_PROJECTS/img/IPLD.opt.jpg differ diff --git a/POSTER_PROJECTS/topic-DAG-walking-in-IPLD.md b/POSTER_PROJECTS/topic-DAG-walking-in-IPLD.md new file mode 100644 index 00000000..809244fe --- /dev/null +++ b/POSTER_PROJECTS/topic-DAG-walking-in-IPLD.md @@ -0,0 +1,18 @@ +# DAG walking in IPLD + +The goal of IPLD is to enable decentralized data-structures that are universally addressable and linkable which in turn will enable more decentralized applications. These hypergeneric data-structures allow us to do for data what hyperlinks did for HTML web pages. + +## Goal + + + +## Questions to Answer + +- What layer of IPLD does DAG traversal relate to? +- What's the relation between path's and DAG's? +- How does one traverse a path using IPLD? +- How are multiple formats handled? + +## Where to learn about it + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-HTTP-gateways.md b/POSTER_PROJECTS/topic-HTTP-gateways.md new file mode 100644 index 00000000..986631fc --- /dev/null +++ b/POSTER_PROJECTS/topic-HTTP-gateways.md @@ -0,0 +1,16 @@ +# HTTP Gateways + +An IPFS Gateway acts as a bridge between traditional web browsers and IPFS. Through the gateway, users can browse files and websites stored in IPFS as if they were stored in a traditional HTTP web server. + +## Goal + + + +## Questions to Answer + +- How do I make one of these? +- Why would I want one? + +## Where to learn about it + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-IPFS-DHT.md b/POSTER_PROJECTS/topic-IPFS-DHT.md new file mode 100644 index 00000000..ba01bb8c --- /dev/null +++ b/POSTER_PROJECTS/topic-IPFS-DHT.md @@ -0,0 +1,19 @@ +# IPFS DHT + +IPFS uses a Distributed Hash Table (DHT) to keep track of various types of data, such as content provider records. The currently used DHT is modeled after Kademlia with S/Kademlia modifications. + +## Goal + + + +## Questions to Answer + +- How does the DHT of IPFS work? +- What's the distinction between Peer Routing and Content Routing? + +## Where to learn about it + + + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-IPNS.md b/POSTER_PROJECTS/topic-IPNS.md new file mode 100644 index 00000000..267dfc43 --- /dev/null +++ b/POSTER_PROJECTS/topic-IPNS.md @@ -0,0 +1,20 @@ +# Inter-Planetary Name System (IPNS) + +IPNS is a system for creating and updating mutable links to IPFS content. Since objects in IPFS are content-addressed, their address changes every time their content does. + +A "name" in IPNS (example: `/ipns/website.ipfs.io`) points to the hash of a public key, which does not change itself, but can change what it references. Allowing for dynamic references (`/ipns/website.ipfs.io`), to static content (=> `/ipfs/QmPs9QHQvCPh758V3rFXGByJMS8Scu5YzBYTEkpnCKUxAL`). + +## Goal + + + +## Questions to Answer + +- How does it interact with an IPFS node's keystore? +- How are references resolved? +- How does it compare with other dynamic data systems? +- What problem does IPNS solve? + +## Where to learn about it + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-MFS.md b/POSTER_PROJECTS/topic-MFS.md new file mode 100644 index 00000000..0cc0d495 --- /dev/null +++ b/POSTER_PROJECTS/topic-MFS.md @@ -0,0 +1,17 @@ +# Mutable File System (MFS) + +Mutable File System (MFS) is a tool built into IPFS that lets you treat files like you would a normal name-based filesystem — you can add, remove, move, and edit MFS files and have all the work of updating links and hashes taken care of for you. + +## Goal + + + +## Questions to Answer + + + +## Where to learn about it + + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-NPM-on-IPFS.md b/POSTER_PROJECTS/topic-NPM-on-IPFS.md new file mode 100644 index 00000000..ff80fd58 --- /dev/null +++ b/POSTER_PROJECTS/topic-NPM-on-IPFS.md @@ -0,0 +1,17 @@ +# NPM on IPFS + +npm-on-ipfs enables you to install your favourite modules from the distributed web using IPFS, as well as to have a cache always ready and shared on your local network + +## Goal + + + +## Questions to Answer + +What benefits are there to using IPFS to fetch NPM packages over conventional HTTP? +Has NPM's infrastructure ever had issues that caused user's problems? + +## Where to learn about it + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-bitswap.md b/POSTER_PROJECTS/topic-bitswap.md new file mode 100644 index 00000000..0732c76e --- /dev/null +++ b/POSTER_PROJECTS/topic-bitswap.md @@ -0,0 +1,22 @@ +# Bitswap + +Bitswap is the data trading module for IPFS. Its purpose is to request blocks from and send blocks to other peers in the network. Bitswap has two primary jobs: + +1. Attempt to acquire blocks from the network that have been requested by the client. +2. Judiciously (though strategically) send blocks in its possession to other peers who want them. + + +## Goal + + + +## Questions to Answer + +- What is Bitswap 1.0.0 vs Bitswap 1.1.0? +- Does it use "tit-for-tat" negotiation? + +## Where to learn about it + + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-circuit-relay.md b/POSTER_PROJECTS/topic-circuit-relay.md new file mode 100644 index 00000000..b6d381e6 --- /dev/null +++ b/POSTER_PROJECTS/topic-circuit-relay.md @@ -0,0 +1,18 @@ +# Circuit Relay + +The circuit relay is a means to establish connectivity between libp2p nodes (e.g. IPFS nodes) that wouldn't otherwise be able to establish a direct connection to each other. + +## Goal + + + +## Questions to Answer + + +- What scenarios is this useful in / what problems does this solve? +- How is it done? +- How can/do nodes participate as relays? + +## Where to learn about it + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-go-ipfs-infra.md b/POSTER_PROJECTS/topic-go-ipfs-infra.md new file mode 100644 index 00000000..5931c141 --- /dev/null +++ b/POSTER_PROJECTS/topic-go-ipfs-infra.md @@ -0,0 +1,22 @@ +# Go-IPFS Infrastructure + +This poster should cover what it takes to initialize a go-IPFS node, and connect it to a public P2P network. + +## Goal + + + +## Questions to Answer + +- How does the IPFS node initialize itself? + - What services does it offer? +- What configuration options do you have for a node? + - daemon profiles, node config +- How is the network initialized? + - What technologies are used (libp2p, DHT, TCP, etc.) + +## Where to learn about it + + +[Setting up an IPFS peer - Carson Farmer](https://medium.com/textileio/tutorial-series-setting-up-an-ipfs-peer-4056e6c69612) + diff --git a/POSTER_PROJECTS/topic-graphsync.md b/POSTER_PROJECTS/topic-graphsync.md new file mode 100644 index 00000000..6a15504c --- /dev/null +++ b/POSTER_PROJECTS/topic-graphsync.md @@ -0,0 +1,16 @@ +# Graphsync + +A protocol to synchronize graphs across peers. + +## Goal + + + +## Questions to Answer + +- How does it relate to other systems (bitswap, IPLD)? +- What benefit does it give us? + +## Where to learn about it + + diff --git a/POSTER_PROJECTS/topic-js-ipfs-infra.md b/POSTER_PROJECTS/topic-js-ipfs-infra.md new file mode 100644 index 00000000..605e9d02 --- /dev/null +++ b/POSTER_PROJECTS/topic-js-ipfs-infra.md @@ -0,0 +1,20 @@ +# JS-IPFS Infrastructure + +This poster should cover what it takes to initialize a JS-IPFS node, and connect it to a public P2P network. + +## Goal + + + +## Questions to Answer + + - How does JS-IPFS establish connections? + - What technologies (websockets, etc.) + - How is bootstrapping handled + - What limitations are imposed by different environments? + - browsers, nodejs, etc. + +## Where to learn about it +[https://github.com/ipfs/js-ipfs]() + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-pinning-gc.md b/POSTER_PROJECTS/topic-pinning-gc.md new file mode 100644 index 00000000..62d91f96 --- /dev/null +++ b/POSTER_PROJECTS/topic-pinning-gc.md @@ -0,0 +1,19 @@ +# Pinning and Garbage Collection + +IPFS nodes treat the data they store like a cache, meaning that there is no guarantee that the data will continue to be stored. Pinning a CID tells an IPFS server that the data is important and mustn’t be thrown away. + +Conversely, data which may be disposed of is considered "garbage" that may be tossed away at any time. + +## Goal + + + +## Questions to Answer + +- How does an IPFS node determine what is and isn't "garbage"? +- What are the effects of pinning a hash? + +## Where to learn about it + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-pubsub.md b/POSTER_PROJECTS/topic-pubsub.md new file mode 100644 index 00000000..0cfcbd2d --- /dev/null +++ b/POSTER_PROJECTS/topic-pubsub.md @@ -0,0 +1,19 @@ +# Pubsub + +Publish-Subscribe, called ‘pubsub’ for short, is a pattern often used to handle events in large-scale networks. ‘Publishers’ send messages classified by topic or content and ‘subscribers’ receive only the messages they are interested in, all without direct connections between publishers and subscribers. This approach offers much greater network scalability and flexibility. + +## Goal + + + +## Questions to Answer + +- What implementations exist for this (floodsub, gossipsub, et al.)? +- How do they compare? +- When/where would you use pubsub? +- How does it interact with other dynamic data systems (such as IPNS)? + +## Where to learn about it + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-rendezvous-protocol.md b/POSTER_PROJECTS/topic-rendezvous-protocol.md new file mode 100644 index 00000000..b8585f27 --- /dev/null +++ b/POSTER_PROJECTS/topic-rendezvous-protocol.md @@ -0,0 +1,17 @@ +# Rendezvous Protocol + +The Rendezvous protocol is intended to provide a lightweight mechanism for generalized peer discovery. Any node implementing the rendezvous protocol can act as a rendezvous point, allowing the discovery of relevant peers in a decentralized fashion. + +## Goal + + + +## Questions to Answer + +- What problems does this solve? +- How does it get around said problems? +- When would you use this method over another? + +## Where to learn about it + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-unixfsv1.md b/POSTER_PROJECTS/topic-unixfsv1.md new file mode 100644 index 00000000..fe7759a2 --- /dev/null +++ b/POSTER_PROJECTS/topic-unixfsv1.md @@ -0,0 +1,17 @@ +# Unixfs Version 1 + +Unixfs is the data format used by IPFS to represent files in DAGs using the dag-pb (Protobuf) + +## Goal + + + +## Questions to Answer + + + +## Where to learn about it + + + + \ No newline at end of file diff --git a/POSTER_PROJECTS/topic-unixfsv2.md b/POSTER_PROJECTS/topic-unixfsv2.md new file mode 100644 index 00000000..618af0ab --- /dev/null +++ b/POSTER_PROJECTS/topic-unixfsv2.md @@ -0,0 +1,16 @@ +# Unixfs Version 2 + +UnixfsV2 is the futuristic version of Unixfs, designed to solve many of the issues of V1 + +## Goal + + + +## Questions to Answer + + + +## Where to learn about it + + + \ No newline at end of file