Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: poster projects topics proposal #8

Merged
merged 9 commits into from
Jun 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 144 additions & 52 deletions POSTER_PROJECTS/README.md
Original file line number Diff line number Diff line change
@@ -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.

<TODO: insert photos from previous Berlin Dev Meetings Poster Session here>

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.

<TODO: Insert video reel from how it went in the Dev Meetings>

## 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.

<img src=img/Bitswap.opt.jpg width=300 height=500> <img src=img/IPLD.opt.jpg width=300 height=500>

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.

<TODO: Insert video reel from how it went in the Dev Meetings>

## 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 <https://blog.ipfs.io/>.

### 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) |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@djdv You will need to replace by absolute urls as Github doesn't fancy relative behind the first level readme.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That might only be true in this patch view. When merged I think it will work.
See: https://github.com/djdv/camp/tree/feat/poster-session-topics/POSTER_PROJECTS#topics
(the images are also broken in this view but work in the other branch)

I can still change this though if wanted.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tried this many times before, but maybe something changed

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's merge it and give it a try :)

| 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-<topic-name>.md`)
```markdown
# <TOPIC NAME>

<Topic description: what it is, where it gets used, etc.>

## Goal

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## Questions to Answer

<Series of questions to which the group should look answers for>

## Where to learn about it

<List of websites, code repos, communities, notes, etc.>
```

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
```
Binary file added POSTER_PROJECTS/img/Bitswap.opt.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added POSTER_PROJECTS/img/IPLD.opt.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions POSTER_PROJECTS/topic-DAG-walking-in-IPLD.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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
<https://github.com/ipld/specs>
<https://github.com/ipld/go-ipld-prime>
16 changes: 16 additions & 0 deletions POSTER_PROJECTS/topic-HTTP-gateways.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## Questions to Answer

- How do I make one of these?
- Why would I want one?

## Where to learn about it

<https://github.com/ipfs/go-ipfs/blob/master/docs/gateway.md>
19 changes: 19 additions & 0 deletions POSTER_PROJECTS/topic-IPFS-DHT.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://en.wikipedia.org/wiki/Kademlia>
<https://github.com/libp2p/go-libp2p-kad-dht>
<https://github.com/libp2p/js-libp2p-kad-dht>
<https://libp2p.io/>
20 changes: 20 additions & 0 deletions POSTER_PROJECTS/topic-IPNS.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://docs.ipfs.io/guides/concepts/ipns/>
17 changes: 17 additions & 0 deletions POSTER_PROJECTS/topic-MFS.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## Questions to Answer

<Series of questions to which the group should look answers for>

## Where to learn about it

<https://docs.ipfs.io/guides/concepts/mfs/>
<https://github.com/ipfs/go-mfs>
<https://github.com/ipfs/js-ipfs-mfs>
17 changes: 17 additions & 0 deletions POSTER_PROJECTS/topic-NPM-on-IPFS.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://github.com/ipfs-shipyard/npm-on-ipfs>
<https://en.wikipedia.org/wiki/Npm_(software)#Notable_breakages>
22 changes: 22 additions & 0 deletions POSTER_PROJECTS/topic-bitswap.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://github.com/ipfs/specs/tree/master/bitswap>
<https://github.com/ipfs/go-bitswap>
<https://github.com/ipfs/js-ipfs-bitswap>
18 changes: 18 additions & 0 deletions POSTER_PROJECTS/topic-circuit-relay.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://github.com/libp2p/specs/tree/master/relay>
22 changes: 22 additions & 0 deletions POSTER_PROJECTS/topic-go-ipfs-infra.md
Original file line number Diff line number Diff line change
@@ -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

<Define the goal for this poster: What information will it convey, demonstrate, etc.>

## 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

<https://github.com/libp2p/go-libp2p-examples/tree/master/libp2p-host>
[Setting up an IPFS peer - Carson Farmer](https://medium.com/textileio/tutorial-series-setting-up-an-ipfs-peer-4056e6c69612)
<https://godoc.org/github.com/ipfs/go-ipfs/core>
Loading