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

Create plan for use of IPFS Camp content in ProtoSchool #261

Closed
12 tasks done
terichadbourne opened this issue Jul 11, 2019 · 17 comments
Closed
12 tasks done

Create plan for use of IPFS Camp content in ProtoSchool #261

terichadbourne opened this issue Jul 11, 2019 · 17 comments
Assignees
Labels
docs-ipfs In scope for IPFS Docs Working Group OKR 4: ProtoSchool IPFS Docs team 2019 Q4 OKR #4 OKR-2019-Q3 OKR-2019-Q4 ProtoSchool Q4 2019 OKR P0 - Critical

Comments

@terichadbourne
Copy link
Member

terichadbourne commented Jul 11, 2019

Review IPFS Camp content and determine what would fit well within ProtoSchool and whether it makes sense as new tutorials or additions to existing materials.

Camp content to review
For some of these it will become quickly apparent that the content won't translate well to ProtoSchool, either due to the format or the conent (for example, vendor-specific content if there aren't extractable IPFS tidbits), but we'll at least note that quickly in this issue before moving on. Please check off below when the course has been reviewed and suggestions have been added to a new comment in this issue.

@terichadbourne terichadbourne self-assigned this Jul 11, 2019
@terichadbourne terichadbourne added the docs-ipfs In scope for IPFS Docs Working Group label Jul 25, 2019
@terichadbourne
Copy link
Member Author

Adding a bit more detail to this one. :)

We plan to evaluate the content from IPFS Camp and see what would fit nicely into ProtoSchool in a variety of ways:

  • linking to camp content (videos when they're released, etc.) from resources pages in related ProtoSchool tutorials
  • incorporating some of the content / explanations / diagrams shared at camp into existing tutorials, such as the Decentralized Data Structures one which we plan to split in two or the MFS tutorial, both of which had relevant content shared in @alanshaw & @mikeal's core course
  • reformatting full workshops into their own new tutorials if we can find reasonable ways for them to fit our supported formats: text-only lessons, multiple-choice lessons, and in-browser JavaScript coding exercises using IPFS (with or without file upload)

If you have ideas on specific ways we could adapt IPFS Camp content into ProtoSchool, please share them in this issue!

@realChainLife
Copy link
Member

Hi Teri,

Great idea! I didn't get the chance to attend the IPFS Camp but going through the camp-content-first-batch release - there's a gold mine of content that i think would make great Protoschool tutorials.

At Protoschool Nairobi, we're taking ipfs enthusiasts through the tutorials as a weekly study guide and some of the content we can add to the course include:

  • The design of the IPFS Repo - A repo is the storage repository of an IPFS node. It is the subsystem that actually stores the data IPFS nodes use.

  • HTTP gateways - An IPFS Gateway acts as a bridge between traditional web browsers and IPFS.

Let me what you think and how I can hekp to get started with these if you agree.

@terichadbourne
Copy link
Member Author

@realChainLife Thank you so much for your offer to help with new content, and apologies for the delay in getting back to you! I'm still working my way through the camp content, but both of these topics you're proposing sound interesting and I'd love to hear more about what you have in mind!

I've been working on some clearer documentation for the process of building effective tutorials, not just how to build the tutorial in our repo (already documented here) but how to create great learning experiences and what features are supported by our platform. The easiest way to see my new additions (still very much a work in progress) is to check out the diff here. To get started, I'd recommend that you read through both sets of instructions linked above, check out the existing new tutorial proposals to see if there's any overlap, then open issues for each new tutorial proposal that doesn't already have an issue to add to. (Based on a quick glance through existing issues, I expect you'd be adding two new issues, one of each of your bulleted suggestions.)

If you spotted specific content from IPFS Camp (repo) that's relevant and could help inform either of these tutorials, you should definitely include links in your issue, along with links to any other helpful documentation that could be drawn on for the content. You'll see in the reference materials about building tutorials that there are a few different types of lessons available: code challenges (with or without file upload), text-only lessons, and multiple-choice lessons (new feature). I'd love to hear more in your issues about which formats you think would be most relevant for this content. We can use each issue as a place to solicit input from peers before you get started building and ensure there's a solid content outline that fits cohesively into the ProtoSchool curriculum and supports a beginner-friendly learning experience with appropriate scaffolding.

I'm really excited to learn more about the content you have in mind! 🎉 Please let me know if you have any questions about the documentation or would like to schedule some time to chat.

@terichadbourne
Copy link
Member Author

terichadbourne commented Sep 18, 2019

Core Course A: Understanding How IPFS Deals with Files (led by @alanshaw & @mikeal):

Potential uses in ProtoSchool:

@terichadbourne
Copy link
Member Author

Elective F |Starting, Growing, and Stewarding your IPFS Community | Course Repo, Slides (Google Slides)| Video|

Nothing here to add as tutorial content, but...

Elective C | Cat roulette | Course Repo | Video

  • Doesn't appear to have consumable content in an appropriate format for ProtoSchool

@terichadbourne
Copy link
Member Author

terichadbourne commented Dec 9, 2019

Core Course D: The lifecycle of data in the DWeb

This one addresses a lot of very common questions about what happens after you add file to IPFS. More than some other resources it also focuses on blocks specifically as opposed to files (which our MFS and Files tutorials focus on). The lecture format used at IPFS Camp would lend itself well to a text or multiple choice format but likely not coding challenges. There are also lots of helpful graphics in the deck that would be great to incorporate.

Potential uses in ProtoSchool:

  • Tutorial improvement Add Core Course D to resources pages  #333: Link to the video from resources pages from...
    - Decentralized Data Structures tutorials (great more advanced follow-up on the concept of sharing data without making learners code)
    - All of the coding challenges as a "you've added a file to IPFS, now what?"
  • New Tutorial on the lifecycle of data (New Tutorial: The lifecycle of data in IPFS #332) to include:
    • providing (I have these blocks)
      • distributed discovery, locating content-addresses data with Kademlia / DHT (distributed hash table)
    • getting (I want those blocks)
      • Bitswap for trading blocks, as illustrated in the preso by the dance/skit
      • Wantlists, messages, sessions, verified data
    • pinning (keep these blocks)
      • garbage collection
      • recursive pinning (block party tool was helpful for demonstrating this but might not have quite the self-evident UX yet to stand without a presenter)
      • reciprocal co-hosting
    • deleting (do not want)
      • local-ness of deletion
        There's a ton of great content here and it's possible some of it may need to be pulled out into multiple tutorials to keep things manageable. We can get into more details when setting up an outline, but please let me know @olizilla if you've already had thoughts on a clean breakdown here, or if you think I'm wrong that multiple-choice is the most appropriate format for this content.

@terichadbourne
Copy link
Member Author

Core B: Solving distributed networking problems with libp2p

Because of the hands-on format of this workshop, which asked participants to build a chat app on their local machine, it doesn't lend itself directly to a ProtoSchool tutorial. However, there are plenty of nuggets in the slide deck that could be taught.

There are probably a couple of options here:
A. pull out core concepts from the slide deck and teach them in a multiple-choice format
B. add validation support for libp2p to ProtoSchool and then create a tutorial with in-browser coding/configuration challenges (see issue #229 ) - this still wouldn't directly mirror the approach taken in the workshop, which requires one's own command line and development environment

Either of these options would require support from the libp2p team.

Some of the key concepts covered in slides/speaker notes that might be relevant:

  • Transports
    - Selecting
    - Configuring
  • Connecting to peers
    - Multiaddrs
    - reusing connections
    - stream multiplexing (muxers)
    - encryption
  • Creating a protocol
  • Peer discovery / DHT / Kademlia
    - random walk
    - broadcasting messages: floodsub v gossipsub
    - provider records

Note that there's a lot of overlap here between DHT coverage in Core Course D (Lifecycle of Data in the DWeb) and this course. Is there any reason that IPFS-flavored DHT education and libp2p-flavored DHT education would need to be distinct from each other?

@jacobheun as the lead for this IPFS Camp course and the author of issue #229 on adding validation support, I'd love your input on what feels most feasible for incorporating your content into ProtoSchool. Note that there's new documentation available on the platform capabilities/limitations. What feels like the right starting point?

@terichadbourne
Copy link
Member Author

Core C: Developing Apps with IPFS API

There are a lot of great nuggets in here that haven't yet been taught in ProtoSchool, but the hands-on workshop format used at IPFS Camp may not lend itself well to the current platform capabilities/limitations, such as doing everything in-browser in js-ipfs. We could certainly add some relevant content in reading / multiple-choice lessons even if we're not able to replicate the coding challenges of building an app.

Some key topics covered in the slide deck:

  • Where to run IPFS (provisioning)
    • Backend service: self-hosted or using existing cloud providers (Infura, Pinata, etc.)
      - Embedded IPFS node shipping w/ your app
      - go-ipfs vs js-ipfs: differences / interop
  • APIs (note that we can describe these in text but the rest of ProtoSchool teaches js-ipfs due to our in-browser needs)
    • CLI
      • HTTP API
        -embedded js-ipfs API in the browser
      • API fallback
  • Working with Data
    - picking an API based on data type - regular files (use Files) v complex data structures (use DAG) - this is now covered to an extent in https://proto.school/#/regular-files-api/01
    - add and cat (already well covered in other tutorials re files of dag apis, but no coverage of CLI or reading via the gateway)
  • Naming / IPNS
    • naming and publishing with keys
    • mutable pointer to immutable content path
    • I'm not sure to what extent we can teach IPNS through js-ipfs browser-based challenges, but IPNS is a key topic people want to know more about, so I'd love to at least teach it in text/mult choice

@lidel @hugomrdias I'd love your input on whether any of this content could work well as coding challenges (using in-browser js-ipfs) or if we should hone in on text/multiple-choice options for teaching about how IPFS can be used inside applications (or honing in specifically on IPNS).

@terichadbourne
Copy link
Member Author

Elective A: Identity on the DWeb

This session introduced Identity Manager (IDM) and walked people through the process of integrating IDM to provide authentication and signing into a simple decentralized chat app. There's some very interesting content here, but I'm not sure if Identity Manager/Nomios are far enough along in development to be taught yet. As best I can tell the concepts here would be most appropriate for text / multiple-choice lessons if they were implemented in ProtoSchool. (However, docs say "there will be a reference IDM Wallet written in JavaScript, suitable to use inside a browser" so perhaps some coding challenges would be possible if useful.)

Key concepts:

  • Identity is out of our control on centralized networks
  • Self-sovereign identity (SSI) for ownership and portability
  • Decentralized Identifiers (DIDs) resolving to DID Documents
  • DID Methods (CRUD) vary across target systems (Bitcoin, Ethereum, IPFS, etc.)
  • Verifiable credentials
  • Future developments
    - DIDs and verifiable creds are meant to be interoperable but currently different methods have to integrate with different wallet SDKs, people are using multiple wallets to represent almost identical data/identities
    - Nomios is a reference UI identity wallet built on new Identity Manager spec meant to be more genuinely interoperable

@dominguesgm I know you've worked on IDM in the past so I'd love your take on what seems like it could fit well in ProtoSchool.

@terichadbourne
Copy link
Member Author

Elective B: Managing pinsets with IPFS Cluster

This course was very much a command-line based hands-on workshop on operating and using IPFS Cluster to orchestrate a common pinset among multiple IPFS nodes. My impression is that the format of this workshop doesn't lend itself well to ProtoSchool (where we can either do text/multiple-choice lessons or js-ipfs coding challenges in the browser) because I don't see a clear JS implementation at first glance and assume we wouldn't be able to replicate the experience of connecting to multiple peers from within ProtoSchool, but I'd love for folks more familiar to correct me if I'm wrong.

It would certainly be possible to teach about some of the benefits of Cluster in text/multiple-choice format, but as noted in the prereqs for the workshop, that would require first teaching IPFS concepts such as pinning (likely to be included in the output from Core Course D) and libp2p peers and swarm (no libp2p content at present and coding challenges would require the addition of libp2p validation under the hood).

My gut is that we should continue down the road of adding IPFS and libp2p content mentioned above, then circle back with the Cluster team to see whether there's additional content that would be useful and feasible once that scaffolding is in place. @lanzafame @hsanjuan I'd love your thoughts.

@hsanjuan
Copy link
Contributor

Elective B: Managing pinsets with IPFS Cluster

@terichadbourne your gut is right. The main contribution that could come from our side to something like Protoschool is about dynamic data and [Merkle]-crdts . That would be something cool to do once you know all the basics... Something for the future though

@terichadbourne
Copy link
Member Author

Elective D: Building DApps with Textile, the iCloud for the DWeb

This hands-on, command line workshop use Textile's developer suite to introduce participants to tools and techniques that facilitate building real-world apps and libraries on top of IPFS. Topics covered include: seeds, wallets, threads, schemas, mills, DAGs, etc.

Based on the format of this preso in building a full dapp, I don't think it would lend itself easily to ProtoSchool's capabilities, and the Textile team has great documentation on their site for the basic concepts taught here. I'd recommend skipping Textile content in our immediate efforts but would be very happy to consider proposals from folks who'd like to add it down the road where relevant, especially after we have more of our core IPFS content covered to provide more scaffolding.

@lidel
Copy link
Collaborator

lidel commented Dec 11, 2019

Core C: Developing Apps with IPFS API
[..] @lidel @hugomrdias I'd love your input on whether any of this content could work well as coding challenges (using in-browser js-ipfs) or if we should hone in on text/multiple-choice options for teaching about how IPFS can be used inside applications (or honing in specifically on IPNS).

Theory would be mostly text based. A subset of coding challenges that relied on js-ipfs running on a page could be translated into ProtoSchool format, but I don't believe IPNS changes landed yet (@hugomrdias and @aschmahmann work on it). We also probably don't want to invest time in teaching people how to use centralized ws-star when we plan to deprecate it. Hope this helps.

@dominguesgm
Copy link
Contributor

dominguesgm commented Dec 12, 2019

Elective E: Deplying IPFS Infrastructure

The course covers how to create an IPFS cluster in the cloud. It is mostly command line based. Some non IPFS specific topics are covered in the first half of the session, like creating Digital Ocean droplets, using ssh and creating a key to use ssh.

This course uses Digital Ocean in order to host an IPFS infrastructure, which may be an issue given it requires creating an account on Digital Ocean and providing payment information.

IPFS related information (installation and work) starts at the 26 minute mark. Some IPFS node settings are discussed, such as:

  • MDNS, for peer discovery
  • Routing options
  • Node discoverability by controlling the range of connections
  • Dealing with NAT

At the current stage for ProtoSchool, with no tutorials on command line IPFS, the contents on this course seem to be too advanced to be relevant to be included here.

@dominguesgm
Copy link
Contributor

dominguesgm commented Dec 13, 2019

Elective G: Managing Datasets with QRI

This course gives an introduction to QRI for managing datasets and how it interacts with IPFS. It's a pratical, command line based course which teaches the basic usage of QRI, how it handles adding and querying datasets, as well as how updates are managed.

This elective seems to be indirectly related to IPFS contentwise, in a way where I don't feel like there is content that could be extracted for use in ProtoSchool. It can, however, be showcased as a relevant IPFS usage "in the wild" if we end up creating some sort of Resources page for relevant projects, to show users what can be built with IPFS.

@dominguesgm
Copy link
Contributor

Elective H: Making the Browser a True User Agent

This course discusses the browsers place in the distributed web, and how a browser can be adapted or created in such a way that it can make use of the distributed web.

Some of the approaches discussed are:

  • Browser extensions (example given is Patchfox)
  • Localhost Bridge
  • Electron

One disadvantage for analyzing this elective course is that we do not have a video recording of the session, and can only base ourselves off of the course slides. The slides mention a practical section of the course.

Personally, I don't see a way in which the content of this elective course could be applied to ProtoSchool. The format of the practical section would not lend itself well to ProtoSchool's format and the theoretical section at the beginning is more of an exploration of what could be the browser's place in the future of the DWeb and not any particular learnable concept.

@terichadbourne
Copy link
Member Author

terichadbourne commented Dec 18, 2019

Closing out this survey issue in favor of the individual issues now created for all actionable proposals:

Core Course A

Core Course D

Elective Course F

@johnnymatthews flagging this issue as complete so you snag any useful notes for docs site updates. There'll be more content that's useful for you than us since you don't have all of our formatting limitations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs-ipfs In scope for IPFS Docs Working Group OKR 4: ProtoSchool IPFS Docs team 2019 Q4 OKR #4 OKR-2019-Q3 OKR-2019-Q4 ProtoSchool Q4 2019 OKR P0 - Critical
Projects
None yet
Development

No branches or pull requests

5 participants