Git Product home page Git Product logo

docs's Introduction

THIS REPOSITORY IS BEING DEPRECATED

Heads up! On May 27th, this repository will be deprecated and replaced with ipfs/ipfs-docs. This repository will not be receiving any updates. It is here for historical purposes.


IPFS Documentation Build status icon. Made by icon. Project icon.

This repository organizes overall documentation issues across the IPFS project. It's also home to the codebase for the legacy IPFS documentation site (available at docs.ipfs.io). The code for the current (beta) version of IPFS documentation is available at github.com/ipfs/ipfs-docs-v2, and all work on IPFS docs features OR content should be done there. Once we fully deprecate the legacy site, we'll move the beta codebase into this repo.

Join our monthly sync

Every month the team gets together to discuss plans for the coming four-ish weeks. This meeting usually happens on the last Tuesday of each month. Feel free to join us using 614386160 as the Zoom meeting ID! Here are the details for the next meeting:

Date Time Zoom ID Link Notes
Tuesday 26th May 2020 UTC: 16:00 - 16:30
EST: 11:00 - 11:30
PST 08:00-08:30
Unix: 1590508800
92681067428 protocol.zoom.us/j/92681067428 Meeting notes

If you can't make the meeting, don't worry. We post a recording of each meeting in our YouTube playlist. Notes from current and past calls can be found here.

Get involved

We would love ❤️ your help to improve existing items or make new ones even better! We also have bounties available! Here are some ideas to get you started:

  1. Join us on our weekly call! See the top of this readme for full details on how and when.

  2. Claim an issue labeled "help wanted" in either this docs repo or the IPFS website repo! All our issues are T-shirt sized and roughly difficulty-graded (both using labels), so have a look for something that interests you in the time you have available, and dive on in! Leave your thoughts and questions in issue comments, and we'll get back to you as soon as possible.

  3. Create (or improve) an example, tutorial or concept guide! At present, we have a variety of how-tos and concept guides available at docs-beta.ipfs.io. However, every new item we can offer makes it easier for the world's community to use and build on IPFS. If you'd like to write a new example/tutorial or concept guide, take a look in our open issues for items with the Category: Content label and see if any already-identified needs appeal to you. Note that some issues may have bounties! If you'd like to write something entirely new, feel free — PRs are welcome! Or, if you'd just like to improve existing docs content, feel free to fork it and add your suggestions.

  4. Help us improve how we present reference and API documentation. In Q2 2020, we're investigating the best way to improve how we present reference materials like API documentation and command-line dictionaries. Got thoughts? Please discuss them!

If you're able to contribute to any of the categories above, we thank you in advance -- your work directly improves the future of IPFS for the global community! Before posting a PR with your changes, please be sure to check our documentation style guide and the overall IPFS contributor guidelines so we can ensure that docs are clear, consistent, and simple to read. Finally, please make sure to follow the IPFS code of conduct.

Issues

If you find something wrong within this repository, please raise an issue here.

IPFS Docs beta

Issues regarding the new IPFS Docs beta website should be raised in this repository's issue tracker. The Issues tab has been disabled in the ipfs/ipfs-docs-v2 repository to stop issues being posted there. The content of ipfs/ipfs-docs-v2 will be merged with the content of this repository in quarter 2 of 2020. We could completely delete the ipfs/docs repository and replace it with ipfs/ipfs-docs-v2. However, we still want to be able to view the git commit history and issues previously raised within this repository.

Project organization

Objectives for 2020 Q1

Here's a summary of this our objectives for the first three months of 2020:

  1. ✅ Launch the beta IPFS documentation site on the IPFS network.
  2. Improve documentation by creating new and/or enhancing existing content based on issues in this repo.
  3. Resolving or addressing any new GitHub issues created in this repo this quarter.
  4. Setting up and enabling a community of writers and content creators.

For more information regarding these objectives, check out the IPFS-wide Objectives and Key Results (OKRs) tracking document.

Suggestions

Do you have suggestions on future improvements to IPFS docs? You can vote on what you think the IPFS docs site should contain, along with features that you'd like to see over at canny.io/docs-features.

IPFS docs core members

Bounties

You can earn the undying love of the IPFS community and make some money by closing an issue with the bounty tag! Submissions must be production-ready and meet all the specifications listed on the issue page. Check out the current list of open bounties →

Legacy code details

IMPORTANT! As noted above, this repo is home to the LEGACY docs site; if you want to make changes to IPFS docs, please visit github.com/ipfs/ipfs-docs-v2 and use the codebase there. However, if for some reason you need to run the legacy code locally, instructions are below.

One-time setup

  1. Install AEgir

    npm install -g aegir
  2. Download dependencies and IPFS libraries (e.g., go-ipfs, js-ipfs) and generate their documentation:

    make install

This installs dependencies and generates source files from other projects (e.g., API documentation, theme resources from the ipfs-css, etc). When dependencies or external packages (like go-ipfs) have new releases, you should regenerate files based on them by running make resources.

Build and run

  1. In the root directory, run make dev.
  2. Load localhost:1313 in your web browser.
  3. Edit and add things!

To create a production build, run make build instead. You'll find the final static site in the public directory.

License

All software code is copyright (c) Protocol Labs, Inc. under the MIT license. Other written documentation and content is copyright (c) Protocol Labs, Inc. under the Creative Commons Attribution-Share-Alike License. See LICENSE file for details.

docs's People

Contributors

andreasolund avatar andrew avatar bertrandfalguiere avatar carlbordum avatar cwaring avatar davidburela avatar dependabot[bot] avatar dignifiedquire avatar frijol avatar fulldecent avatar hsanjuan avatar jessicaschilling avatar johnnymatthews avatar kyledrake avatar lidel avatar magik6k avatar mburns avatar meiqimichelle avatar michaelmcandrew avatar mikedotexe avatar momack2 avatar mr0grog avatar olizilla avatar rjharmon avatar schomatis avatar stebalien avatar tapaswenipathak avatar terichadbourne avatar tmcw avatar victorb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docs's Issues

Captain's Log

Expect an update on the Q4/2017 work and the plans for Q1+Q2/2018 soon.

Libp2p examples

We should rework the current example and add other examples to libp2p.

Deploying https on dokku (cloud.ipfs.team)

Not sure where to place this, so putting it here in the meantime.

Deploying your application and adding https

We have a dokku setup for deploying applications. To deploy do (you have to have permission first):

# if you already have added the remote, you don't need to do it again
> git remote add dokku [email protected]:webrtc-star-signalling
> git push dokku master

You can replace webrtc-star-signalling with whatever your applications name is. Once you push it, it'll start deploying and end with outputting the URL where it's deployed.

Adding custom domain + https

If you want to add https, you'll need to do two steps (using webrtc-star-signalling as a example). These commands needs to be run on the dokku host (currently cloud.ipfs.team)

> dokku domains:add star-signal star-signal.cloud.ipfs.team wrtc-star.discovery.libp2p.io
  • star-signal is the application name
  • star-signal.cloud.ipfs.team is the domain it's automatically deployed on when doing git push
  • wrtc-star.discovery.libp2p.io is our custom domain that we've pointed to 188.166.203.82 already (usually done via DNSimple)

Now we can get a certificate.

> dokku letsencrypt star-signal star-signal.cloud.ipfs.team wrtc-star.discovery.libp2p.io

Same structure, just change domains:add for letsencrypt basically. Once this step is done, it should output done and you should be able to access both star-signal.cloud.ipfs.team and wrtc-star.discovery.libp2p.io over https.

Features List: Examples of other projects with great documentation

I thought I'd help out by giving a few links to other open source projects with great documentation that I have come across. Learning from good examples would be a good start. This list is by no means exhaustive so please add more...

Python
what to like:

  • simple
  • good use of white space
  • consistent style and format throughout
  • can flip between versions
    built with: Sphinx

Pandas
what to like:

  • excellent examples
  • whole section displayed in one page instead of multiple pages
  • table of contents stays open (but doesn't track with the scroll bar which is a pain)
  • can flip between versions
    built with: Sphinx

scikit-learn
what to like:

  • lots of description for each section with examples, great for learning
  • provides reference material in each section
  • a flowchart to help guide
    starters
  • can flip between versions
    built with: Sphinx

Django
what to like:

  • starts with a tutorial
  • consistent style
  • provides a how-to-guide
  • simple color pallette
  • can flip between versions
    built with: Sphinx

Trac
what to like:

  • table of contents stays the same on every page so you can navigate around quickly
  • very simple layout
  • uses color in line with branding
    built with: Trac Wiki

Ceph
what to like:

  • use of a colour scheme that relates to the logo/branding
  • mostly about setting it up getting it working quickly, separates details out to another section
  • separate architecture section
    built with: Sphinx, reST

Angular
what to like:

  • separated table of contents uses drop-downs to give users flexible navigation
  • has a cheat sheet
    built with: not sure, couldn't find it in the docs!

Others:
MongoDB
git
Chef
Ansible
D3

Further possible actions to take:

  • Decide on a color scheme, how will it differ between projects/repo/components but still retain the IPFS brand
  • Decide on a schema, or a "separation of concerns" for documentation. how do we separate out each area of communication for different users whilst maintaining consistency across the repos
  • Decide on which set of tools to use, Sphinx, wiki, reST etc...

Wrong installation instruction on deployed site

Currently, at https://ipfs.io/docs/install/ the install instruction on Mac OS X and Linux suggests to run the following command after downloading.

tar xvfz go-ipfs.tar.gz
./go-ipfs/install.sh

This fails because install.sh script is programmed to move ipfs directory of the current directory into the binpath. That ipfs directory is not in the current working directory yet. To fix this, either the install script can be updated to locate ipfs directory from within its current directory, not the current working directory or the instructions can be changed as following:

tar xvfz go-ipfs.tar.gz
cd go-ipfs
./install.sh

That said, the documentation at https://github.com/ipfs/docs/blob/master/content/start/install.md is correct as it does not use the install script.

I don't how where is the source of the deployed site, but instruction on https://ipfs.io/docs/install/ needs to be updated.

/CC @diasdavid

Provide clear, reliable, up-to-date roadmaps and information about statuses of features

Goal: Help developers understand the status of concepts/technologies/approaches in IPFS. Let them know which things they should be using, what's happening, what's moving forward, what's a placholder for future work, etc. -- less emphasis on "is it done yet?", more emphasis on what you should use in which ways going forward.

The most consistent (and insistent) issue I heard from folks developing or attempting to develop software on top of IPFS was that they often can’t figure the status of various ideas, technologies, or approaches used (or going to be used) within the IPFS ecosystem. They are worried they shouldn’t be building on top of a particular API or protocol because it’s getting replaced or that they should be using it in a particular way (which way, they don't know) in order to best prepare for upcoming changes. Should they just build now and not worry about it, or hold off for something that's coming soon?

It's worth noting that they all said this at the same time as saying that better API documentation would be nice, but they've managed to figure a lot out by reading source code and puzzling around things. But understanding the direction of various parts of IPFS is something much more important that they can’t figure out that way.

Getting a handle on implementation status (as discussed in #35) is only a small part of this issue. The questions here are more like:

  • What’s the deal and status with IPNS being slow? Should I even use it now? I know there’s some discussion about re-implementing it on top of libp2p pubsub — when is that happening? (IS that really happening?) How should I make use of things differently (or not) so my code functions optimally in future where that's how IPNS works?

  • What's the deal with IPNS vs. IPRS? Is the spec final or still subject to change? The IPRS spec was written a year ago, but it doesn’t seem like things are using it? Is it still a thing or is it left behind? When will it be a concrete thing?

  • What’s the deal with IPLD? Is it being used for the all (or any and which?) of the commands in go-ipfs or js-ipfs? If no, when? What’s solid about it and what’s not, and when (specifically or even just roughly) do we think it will be all solid? Should I be using it today?

  • Similar questions for CIDs, for files vs. objects vs. dag, pretty much everything in ipfs/specs and ipld/specs. (Less so for libp2p/specs, which folks have said seems largely more stable and clear, and multiformats/specs, which, even though that repo is really uninformative, Multiformats’ other constituent are quite clear.)

  • Hypothetical confused developer: "I'm so confused about these things that I don't know which one I should be using. Which ones do the maintainers really want me to use? Which ones do the maintainers specifically discourage using? Which things should I watch for in the coming months, etc"

Some Approaches

So what are the right approaches to solving this issue and how do we manage that work?

  • A clear and updated Roadmap that focuses on these sorts of technology/usage issues rather than implementation, like the Roadmap to 1.0.0 does.

  • Clear indicators in every spec and major repo (maybe on each major API section?) that accurately cover the current, up-to-date status. Many have no status indicators, others feel inaccurate — it might say something is a solid draft, but in reality, there are big discussions in the issues for it that indicate it’s not so solid at all, e.g. IPLD. These should be updated if major discussion on revising the spec begins somwhere (and, ideally, point to that discussion).

  • What else?

Research current IPFS docs situation and users’ learning/working experiences

We need to do some honest research to create a cohesive picture of things like:

  • What are the general problems people are running into trying to use IPFS?
  • What concepts are confusing, problematic, or just poorly understood and communicated?
  • What are people trying to do with IPFS and how?

…which should give us a clearer, more concrete picture of what problems we need to solve.

GitHub Hygiene: Develop a standard way to indicate non-code repos

Similar to #54, we need clear indicators of repos that aren’t software. See the “key” tab the repo inventory for some categorizations: https://docs.google.com/spreadsheets/d/1IDVAGfniyHCJLIxLc3y7K7YTOFGCtgwTVCZEojtNLlw/edit#gid=1355406849

I think I might categorize them this way:

  • Discussion (repos focused on discussion in the issues or documenting/discussing notes and ongoing work, e.g. ipfs/research or ipfs/pm)
  • Docs (repos focused on documentation, specs, etc.)
  • Resource (Images, style guides, other common files/resources that aren’t software source code)

And I might mark the repos them this way:

  • Description always starts with “<CATEGORY>:” e.g. “DISCUSSION: Repo to organize our ideas about research implementations of CRDTs.”
  • Readme title always starts with “<Category>:” e.g. “Discussion: CRDT Research”
  • Make sure the readme clearly describes how the repo should be used (e.g. content is in the issues, what kind of discussions belong here vs. discuss.ipfs.io)

UPDATE: Current Resolution

Repo categories:

  • Documentation (📚)
  • Discussion (💬)
  • Infrastructure (🚚)
  • Website (🤖)
  • Resource (🎨)

Labeling:

  • Add the topic type-<category> (e.g. type-discussion) (EDIT: was previously type:<category>)
  • Prefix the README title with the category, e.g. Discussion: CRDT Research
  • Prefix the repo description with the emoji associated with the category, e.g. “💬 Repo to organize our ideas about research implementations of CRDTs”
  • Ensure the text immediately following the README title describes how the repo is used (e.g. it’s not a software project; it’s a place for discussion [in the issues] and to store links/papers/primers on related subject matter).

Repos That Need Fixing

The following is based on https://docs.google.com/spreadsheets/d/1IDVAGfniyHCJLIxLc3y7K7YTOFGCtgwTVCZEojtNLlw

Documentation:

Website:

Discussion:

Infrastructure:

Resource:

Background: Re-architect IPFS & libp2p Documentation

Let’s develop a roadmap towards a new, improved docs site in this repo. Here’s my take to get us started:


Overall, I think there are a few major problems users and contributors are running into that the new docs need to solve. First here’s a breakdown of the typical introductor experience:

  1. For most all people, their journey with IPFS starts with blog post, Hacker News, or Reddit.
  2. The only official resource we have that comprehensively describes IPFS is the white paper and that’s where most people wind up next when they decide to try and actually learn about or use IPFS.
    • Many folks skip or quickly skim this — its academic style can be intimidating and it assumes familiarity with a number of computer science or math concepts like graphs (as models of objects and relationships, rather than visualizations of 2/3/4-dimensional data)
    • More enterprising folks or those with a more expertise read it, but it’s very broad and very old. It doesn’t connect especially well with the concrete reality of IPFS today.
    • In both cases, people wind up making a number of assumptions that are inaccurate in different ways.
  3. Go through the getting started tutorial
    • It doesn’t attempt to cover what is conceptually going on much at all, so any poor assumptions people have made from step 2 generally stay in place.
    • It is focused on the CLI, which is off-putting to many folks with less expertise and leaves a lot of developers who are immediately wondering how to interface with it programmatically in the cold.
    • It doesn’t leave you with any suggestions for next steps or what to do.
  4. ???? At this point, we see a wide variety of things:
    • Giving up because it’s not clear
    • Try storing or sharing some files with a friend, which might work, but often leads to oddball questions about the basics on discuss.ipfs.io, IRC, or GitHub, because of conceptual assumptions they’ve made in steps 2 and 3. Some examples are questions about “uploading” (people with less expert programming background) or questions about why an IPFS hash doesn’t match a simple SHA-256 (or even a multihash) of the file they added to IPFS (more expert).
    • Spend a lot of time digging through GitHub trying to figure out how best to program against it as a library (especially if their primary language is not JS or Go). There is little about using IPFS programmatically on the docs site. We have a lot of docs that people never find because:
      • They’re buried in a source code repo.
      • They’re not even in the repo they’d expect. The docs in ipfs/interface-ipfs-core are dramatically better than the Rest API Docs, for example. One person said knowing those were there would have made things way easier, but they’d never seen them because they are only well linked from js-ipfs and this person wasn’t writing JavaScript (or Go).
      • There might be useful generated API docs, but we often don’t link them. (e.g. go-ipfs)

See lots more of this stuff over at #52 or https://gateway.ipfs.io/ipns/ipfs-docs-research.robbrackett.com/html/General-Notes.html .

What are the big learning/documentation problems here?

  • No clear introduction to the overall idea of exactly how IPFS works and what it’s doing
  • Lots of new concepts (whether you are knowledgeable about things like graphs or not) that are just very different from the web technologies people know today.
  • Docs are inconsistently located and spread across a number of repos people have to hunt through.
  • Clear, standard API docs are not always available.
  • Hunting through GitHub is hard. (Which repos have docs? Where in the repo are they? Which projects are important and how do they relate to the others? Which repos and docs are up-to-date?)

What do we need to do?

High priority:

  1. Write a new introductory guide that focuses on what IPFS is doing conceptually, explaining how addresses and lookups and the DAG work. It should use the CLI as an concrete example of these things rather than the other way around, as the current getting started guide does. (#60)

  2. Build a concepts dictionary that provides a brief and clear overview of major concepts in IPFS. (#56)

  3. Link to (not necessarily embed) our best existing reference docs and major repos (#59)

  4. link to (not necessarily embed) our best existing example projects (e.g. https://github.com/ipfs/js-ipfs/tree/master/examples) (#59)

  5. Clean up the problems in GitHub organization that make things hard to find: #54, #55, #57, and some parts of #53)

  6. Design a site layout that can accommodate the above and launch it :) (#36?)

Note that 3 & 4 are about linking and not about embedding docs. I think we should focus on getting links to what we’ve already got (we have a lot of stuff) first. Simply having the docs site serve as an index to all the things that would be useful but people aren’t finding is incredibly helpful and relatively quick to do.

This is way more minimal than the expansive set of content currently described in #36, but that was half a year ago, so I it might make sense to focus on something smaller for now.

Later:

(To be clear, I think things below like improving existing API docs is much less important than #53 — giving people a clear picture of the status and direction of various APIs and concepts. Developers are getting by, though with plenty of trouble, with what they’ve got. But nothing solves the “where is this going and how should I think about using/not using it?” question for them. Addressing that in some form is critical.)

Not necessarily in any order:

  • Add some brief narrative/introductory guides on using go-ipfs, js-ipfs, *-ipfs-api as libraries.

  • Document how all the various sub-libraries relate to each other and to the top-level libraries (i.e. go-ipfs and js-ipfs). (Covering these relationships is one of the major missing pieces in a lot of the READMEs.)

  • Improve the REST API docs with more detailed information about arguments (many are missing) and example input/output. More than one person was blown away by how useful the docs in interface-ipfs-core were compared to the REST API or Commands docs, which they had been depending on.

  • Start to generate/embed API docs from all the code projects.

  • Create guides/tutorials for common use cases

    • Archiving big datasets
    • Hosting your web site
    • Dynamic data & (web) apps
    • Securing content
    • Storing/referencing data in non-file data structures (e.g. IPLD)

Content Enhancement: Top Topics that Need Better Documentation

We get a constant stream of questions about certain topics -- in emails, Github Issues, conversations on IRC, face-to-face exchanges, etc. This is a sign that we need to do a better job of documenting these topics, putting answers in the places where people will find them, and providing ways to follow ongoing work in these areas.

Topics to Document

We should check each of these off when the volume of queries about the topic drops near zero, which will be a sign that either people are finding answers elsewhere or the topic is no longer important.

  • Deleting Content You've Added to IPFS -- especially Right to Be Forgotten - see ipfs/blog#112
  • Private Content -- limiting who can read/decrypt the stuff you've published on the IPFS network - see ipfs/blog#115
  • Private Networks -- limiting which nodes/peers you will even talk to. This limits which peers can see what you've added to your IPFS node and limits which nodes you will provide blocks to - see ipfs/blog#114
  • Making content Persist on the Network -- How to get the content to stay on the IPFS network after your machine disconnects - see ipfs/blog#113

If you can think of any other under-documented topics, please say so in the comments on this issue.

Things we can Do to Address This

Some things we must to in order to reduce the volume of queries:

  • Establish clear documentation to address the topic
  • Publish links to that documentation places where people are looking
  • Provide inroads for people to engage in, or follow, ongoing design/development efforts
  • Gather ideas from the community about other ways to answer these questions or other channels for broadcasting the answers

Hard to find the docs/specs for core api

Currently the “docs” link on ipfs.io links to docs for http api. Very hard to find the docs/specs for core api

The plan:

  1. Make a landing page README in https://github.com/ipfs/interface-ipfs-core/tree/master/API that provides a clear path into the documentation for all the modules
  2. Update the readme in https://github.com/ipfs/interface-ipfs-core/ to call out the fact that there are docs, include a link to /API/README.md
  3. Update ipfs.io/docs to include a link to the core API docs

Docs portal content wishlist

  • Introduction
  • Getting started
    • Browser addon
    • go-ipfs
    • js-ipfs
    • Examples/tutorials
  • References
    • Commands
    • Core API
    • go-*
    • js-*
  • Concepts
    • The IPFS stack
    • Decentralized web
    • Pinning
    • Addressing
    • Protocol-first approach and upgrade path
    • DWeb maturity model
    • Confidentiality and privacy
  • Features
    • File system
    • Name system / IPNS
    • Block/object store
    • Data integrations/bridges
    • Graph database
    • Private networks
    • Network transports
    • Pubsub
    • Overlay network / relay
    • HTTP-to-IPFS gateway
    • FUSE mounting
    • Incentivization / FileCoin
  • Decentralized apps
    • Data structures
    • Graph traversal
    • Privacy
    • Collaborative editing
    • Messaging / pubsub
    • Wiki
    • Search
    • Video streaming
    • Gaming and VR
    • Blockchains
  • Data storage / archival
    • Performance
    • Datastore engines
    • IPFS Cluster
    • Durability guarantees
    • Garbage collection
    • Load balancing
    • Monitoring
    • Deployment
    • Backups
    • Content policies
  • Censhorship circumvention
    • TODO
  • Case studies
    • PeerPad
    • IPFS in the datacenter
    • Circumventing censorshop in Catalunya
    • Dataset mirrors
  • FAQ
  • Glossary
  • Changelogs

PM for this Sprint

@diasdavid I would be happy to be the PM for this sprint. I have been the PM for the test-lab sprint but I'm sure that I'm doing a very good job. My goal with the IPFS community is to stay involved and spend as much time as I can. However, I spend about 50 hours a week writing code on a project that pays the bills. If my work as PM on the test-lab was acceptable then I'm ready go. If you think someone else could do a better job then thats OK as well. Just let me know.

GitHub Hygiene: Make sure every repo has a description and readme

Developers who are building things on top of IPFS have pretty much all indicated that they’ve solved a lot of their problems by digging through IPFS source code and through the repos here on GitHub. We won’t have perfect docs for them tomorrow, but one quick and easy thing we can do is make sure every repo has a description. A lot of them don’t:

IPFS

Libp2p

IPLD

Libp2p stack documentation

We need to take libp2p, list all our dependencies under the stack and check:

  • There's a meaningful Readme with our standard badges
  • There's Godoc documentation which is not empty (and passes Golint)
  • Follow up on old issues

Discourse, to kill or not to kill

We need to decide if we want to move discussions to discourse. If not then we need to take it off the table.

See also:

Action Items:

  • get discuss.ipfs.io subdomain set up
  • collect implementation factors -- "to host or not to host"
  • gather list of pros + cons
  • plan to phase out the github repositories

Place for contributors to start

Right now, there is no place for introducing the different areas where people can figure out how to contribute. The people that should be the target for this is people who want to contribute to IPFS but they don't know the ecosystem yet, and are not sure where their contributions would be the most valuable.

Things that we could do:

  • Have webpage that dynamically fetches issues with the tag "difficulty-easy" or other tags that indicates that this issue would be simple to fix
  • Write which areas we're currently having the most problems with/most bugs in
  • Show other areas where we always appreciate contributions
  • Applications that can be written as demo material
  • Provide areas where we need help with testing

Some existing guides, would be nice to have a combination of all these features on one page:

Make sure we're on the path to doing Docs properly

This will be satisfied when

  • Everything is in motion towards finding a person to be the full-time owner of docs as a product
  • We have a plan around what this person will be doing
  • We have a plan for making "docs creation/management" part of our culture

Helpful gateway errors

Errors and timeouts on the gateway are way too obscure. Even something as simple as a 404 sounds scary: "Path Resolve error: no link named "foo" under Qmdf6iGuPoQ7jmGM48nWoy46F5EwMiXYVif968cpwQXDrU".

We can make these a lot more friendly and useful for seeing how ipfs works. (And just nicer to debug.)

Wednesday 03/15/2017 standup

The next Docs sprint standup will be held on:

Wednesday 03/15/2017 17:00 UTC

This meeting should last 30 minutes. Each sprint member should give a short description of what they are working on and include any roadblocks they are facing.

Docs that need review

Just so we don't lose track of stuff (I am already). Please post new stuff as you open PRs.

[NEW CONTENT] [BOUNTY] Glossary

This issue has a bounty!

Successfully closing this issue by producing a production-ready piece of documentation can earn you not only the undying love of the IPFS community — it can net you a financial reward. See the current list of bounty issues and their values here.

The need in brief

Create a glossary that provides a brief and clear definition of major concepts in IPFS, plus links to longer explainers when they exist. Note that we will be pulling these definitions into hover-style tool tips in the future, so please keep definitions fairly brief and written in such a way that the first n characters can be excerpted into a complete tool tip.

Regarding future use in tool tips: Visual design work has already been done on this effort. Please see #372 for mockups and resulting discussion; it'll help you determine how best to proceed with excerpting tool-tip content.

Below are initial terms to seed with. Please add others as you see fit. See as well prior art for “concepts and terms that trip people up”.

  • DWeb
  • DHT
  • Graph
  • DAG
  • Merkle Tree/DAG
  • Merkle “Forest”
  • Hash
  • Gateway
  • Pinning
  • Transport
  • Swarm
  • Information Space
  • MFS
  • UnixFS (lots of confusion out there on whether this is the same or different from MFS)
  • (Cryptographic) Signing
  • Peer
  • Peer ID
  • CRDT
  • Repo
  • DataStore
  • Node, Daemon
  • CID (v0, v1, …)
  • Path/Address
  • DNSLink
  • CBOR
  • Bitswap
  • Blocks
  • Bootstrap Node
  • Listening
  • Dialing
  • Announcing
  • Relay
  • GC/Garbage Collection
  • Pubsub
  • Filestore
  • IPLD (and selectors)
  • Libp2p
  • Multihash
  • IPNS
  • SFS
  • Blockchain
  • Bittorrent
  • GraphSync
  • pubsub
  • filestore
  • IPLD
  • Libp2p
  • multihash
  • IPNS
  • SFS
  • Blockchain
  • Bittorrent
  • IPLD Selectors
  • GraphSync

Deliverable

Content should take the form of a Markdown document. File locations should be as follows:

  • MD content should live here (lease make a PR against the existing placeholder document) https://github.com/ipfs/ipfs-docs-v2/blob/master/docs/concepts/glossary.md
  • Images, if appropriate, can live in the MD content's parent directory; we'll move them before final merge
  • For videos, just post temporarily on the platform of your choice, and we'll sort out on a case-by-case basis

Guidelines

  • Please use the IPFS Docs Contributor Guidelines as your north star — adherence to these guidelines are crucial when it comes to awarding potential bounty!
  • Also, please keep in mind our core user personae. If a piece of content serves one or more personae in particular, make sure it checks out with that persona's attributes.

GitHub Hygiene: Develop a standard way to indicate a repo/project is deprecated

Developers who are building things on top of IPFS have pretty much all indicated that they’ve solved a lot of their problems by digging through IPFS source code and through the repos here on GitHub. Unfortunately, a huge proportion of repos there are deprecated, but not clearly marked as such (gray, red, and possibly many of the orange lines in that spreadsheet), making that job much harder.

We won’t suddenly have perfect docs that solve all of their problems tomorrow, so we should coming up with a standard way of marking out deprecated repos that we can easily and quickly apply:

  • Have a standard indicator/text in the repo description
  • Have a standard indicator/text at the start of the readme
  • Think about a policy for when/how to archive repos (makes them read-only and hides them from most listings)
  • Apply it to all repos that should be deprecated.
  • Also think about the same things for repos that are “in hibernation.” (And should any of those be deprecated instead?)

I’d suggest:

  • Description always starts with “DEPRECATED:”
  • Readme title always starts with “DEPRECATED:”
  • Immediately below the readme title there should be a bold or italicized paragraph about:
    • Why it was deprecated
    • When it was deprecated
    • Where to go for the same resource/functionality/whatever now (if applicable)

(Edit: surfacing our final decisions here so they are easy to find)

Conclusions/Final Process

  • Add the topic deprecated to the repo (pulling this over from #57)
  • Prefix the repo’s description with “DEPRECATED:”
  • Prefix the README title with “DEPRECATED:” (If a repo does not have a readme or its readme is empty, add one with the title: “DEPRECATED: [repo name]”
  • Follow the README title with a paragraph describing:
    • Why it was deprecated
    • When it was deprecated
    • Where to go for the same resource/functionality/whatever now (if applicable)
  • Finally, if a repo is dead, archive it (but don’t delete it). A dead repo might be ipfs.js, while a non-dead, non-archived one might be newsletter, where we might bring it back in the future.
    • Why archive? links still work, but this hides it from most views and lists on GitHub, drastically reducing noise and confusion. For repos like support, this also prevents people from posting new issues.
    • Downsides: issues and discussions get frozen. We may want to preserve that functionality on some repos (e.g. ones that are freshly deprecated or that haven’t gained any traction/that we can’t support, but that we might want to revisit later).

Checklist of Repos to Fix

Definitely deprecated repos:

Things that might be dead, but need clarity from their owners/maintainers:

Already archived, but missing standard notices: (How much do we care to update?)

Turned out not to be dead:

Merge website/examples/example-viewer into one

Right now it's a pain to deploy new examples because they're spread across multiple repos, and there's no tooling to simplify this.

Ideally, the website build process pulls in the blog, examples, and example-viewers repos.

Clarify the different APIs

Update the documentation to clarify how are these related

  • http api
  • core-interface (aka common interface)
  • etc.

Put that info into the main landing places where people seek API documentation (ie. https://ipfs.io/docs)

Summarize IPFS stack

This is not about multiformats and libp2p, but about the components that make up the upper part: IPFS.

  • fs-repo
  • exchange
    • blockstore
      • datastores
    • bitswap
  • data structures
    • ipld
    • dag-pb / merkledag
    • unixfs
  • dnslink
  • fs path / dweb link
  • ipns
  • gateway

Refactor/expand docs on ipfs.io

Currently the https://ipfs.io/docs/ page only gives some basic guide on IPFS plus some
'random' info in examples. It's not easy to get more in-depth info on IPFS without digging
deeper into the github repos, something that requires more effort than many people new to
the project are willing to put into it.

While there are many valuable docs, what is missing is a good place for them to live.

We need something:

  • Convenient to browse
  • Containing information that is easy to understand, low noise
  • Containing enough information to understand how to:
    • Build a website on IPFS
    • Build an application using IPFS
    • Put 1TB+ of data in IPFS
    • Build API client library
    • Recreate considerable chunk of IPFS implementation
  • Within 4-5 clicks from documentation root

I found few documentation engines that may work:

MkDocs is really simple to get going and uses markdown which is familiar, though
it's seems to be very limited when compared to Sphinx. Using Sphinx would mean
that we'd have to port at least a considerable chunk of MD docs to reST (there
are tools to help with this) but it's probably a better choice for large docs.


What could be in there:

* Getting started
	* Overview
		* Content Addressing
			* DAG
		* Multiformats
			* Multihash
			* Multicodec
			* Multibase
		* CID
		* UnixFS / IPLD
	* Installation
		* go-ipfs
			* dists / sources
		* js-ipfs
			* npm / ??
	* Setup
		* Repo init
			* Profiles
		* Running daemon
			* Linux: systemd / init
			* OSX / Windows: like Linux
	* Basic usage:
		* CLI
			* Single file
				- Say where it lands / what happens, touch on the DHT
				- Get from gateway
			* Directory
				- Create some structure, 1-2 dirs, 2-3 files
				- View with ls/cat
					- ls by hash/path, hash of path
			* IPNS / ipfs name
				* Publish some file/directory
				* Resolve with `name resolve`
				* Resolve on gateway
		* Web-UI
			* Say it exists..
* HTTP/CLI API
	- Mention that http used by CLI when daemon is running
	- Autogenerated structure like https://ipfs.io/docs/api/, but with some more structure..
	- Possibly a way to add some more docs to cammands
* JS API
	- Possibly generated
* IPFS Stack
	* Big fancy graph/image
	* Multiformats in detail
		* Multihash
		* Multicodec
		* Multibase
		* Multiaddr
	* IPLD/CID concepts
		* IPLD Paths
		* IPLD Resolvers
		* IPLD ???
	* Libp2p
		* Transports
		* Streams
		* Swarm
			* PeerIDs
			* Bootstrap
		* DHT
		* ???
	* Bitswap
* Using IPFS
	* Websites
		* IPNS
		* DNSLINK
	* Archives
		* Handling large data volumes
		* CRDTs?
	* Data Delivery
		* Large data valumes, optimizations
		* Deduplication
	* Some fuse use-case
* go-side
	* Config
	* Plugins
* js-side
	* Config
	* In-Browser use
	* API

Roadmap:

  • Decide if it's the right way forward, which engine to use
  • Setup the repo
  • Get some initial docs structure going (have Getting started section done)
  • Start deploying it on ipfs.io
  • Expand to the point where it documents most of the stack

Notes:

It will be a lot of work to do this well, good news is that a big chunk of this
is already wirtten, so bulk of the work would be to get the information linked
together in one place.

To keep things form becoming outdated we should have some way to track the docs,
One way of doing this would be to put a footer in each file saying last reviewed 01/01/2018,
then have some tool to tell which docs may need rewieving.

This issue is mostly to bring back some life to the documentation, I'd like to get some comments
on this before doing anything more in this direction.

Improving js-ipfs init

We want to improve the js-ipfs init sequence and we have a clear vision of how that should happen that has been discussed here: ipfs/js-ipfs#556

This requires writing code, but it will greatly simplify the documentation of using a js-ipfs node. I believe it will be valuable for this Sprint. I can tackle it :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.