惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
T
Threatpost
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
V2EX - 技术
V2EX - 技术
D
Docker
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Y
Y Combinator Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
T
Troy Hunt's Blog
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
量子位
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
F
Full Disclosure
B
Blog
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
博客园 - 聂微东
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
Recorded Future
Recorded Future
IT之家
IT之家
Project Zero
Project Zero
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
SecWiki News
SecWiki News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

Stonecharioteer on Tech

I Traced My Traffic Through a Home Tailscale Exit Node What Was I Reading Last? In Three Not-So-Easy Pieces Dogfooding Is Hard Code blocks in your books, finally GoForGo v0.9.0 Merrilin - We built an app to read books I use a Macbook now Data Structures & Algorithms - Preparing for Interviews Using a local DNS namespace for local service discovery Direction KOllector - Publishing KOReader Highlights gbt: branches touched in the last 24 hours A Soiree into Symbols in Ruby Some Smalltalk about Ruby Loops Ruby Blocks Returning from Ruby Blocks, Procs and Lambdas My Linux Laptop Finally Works: How Claude Helped Me Fix Years of Annoyances TIL: Watchexec - Modern File Watching for Development Workflows A Less Busy Mind GoForGo - Learn Go through live examples Migrating My Old Blog to Hugo with Claude The Qtile Window Manager: A Python-Powered Tiling Experience Read the RFCs that Built the Internet Py-x-Protobuf - Or How I Learned to Stop Worrying and Love Protocol Buffers Python Reverse a List New Beginnings Leaving ChainSafe Systems Screen Lock for Cinnamon Desktop using Zenity and Terminal Commands Crews Not Teams A System for Getting Better at LeetCode So Far So Rust Retrying HTTP Requests with Rust A Primer on Control Charts Learning Rust Explicit is Better than Implicit: Rust for Pythonistas Using Custom Delimiters in Jinja Templates TIL: Creating Fixed Length Iterables in Python Documentation Without Assumption Vagrant Python - A Reflection in 2022 Learning Golang No, A Virtual Machine Is Not Enough: Why Developers Need Native Linux Empathy in Tech For Those Who Came in Late A Weekend With PostgreSQL TIL: Gooey and Python Fire for Quick GUIs and CLIs TIL: 2ality - Dr. Axel Rauschmayer's JavaScript Blog TIL: MassDNS - High-Performance Bulk DNS Lookups TIL: Matomo Analytics, Google Tech Writing, Memory Programming, and NES TV Signals TIL: MontyDB - MongoDB Implemented in Python Returning to the Craft of Programming TIL: CPUFetch, OneFetch, and Learn CSS TIL: DNS Performance Testing and Pi-hole with Unbound TIL: Eli Bendersky's Blog, Awesome By Example, NoCoDB, and Martin Kleppmann TIL: CRDTs, Extreme HTTP Performance, and BYTEPATH Game TIL: AutoInvent, ASGI, Python Packaging, RAPIDS GPU Computing, and FlaskCon TIL: MangaDesk - Terminal Client for MangaDex TIL: McFly - Smart Shell History Search TIL: Siege Load Testing and Awesome FastAPI Resources TIL: Ventoy Bootable USB and Justniffer Network Analysis TIL: CLI Code Review, Git Split Diffs, and Internal Combustion Engine TIL: Benford's Law, Web Security Headers, Event Sourcing, and Mozilla Security Guidelines The Importance of Documentation TIL: NNgroup UX Research, SponsorBlock, and Labella Python Library TIL: The Little Book of Rust Macros and Rust Performance Book TIL: Git-Bug Distributed Issue Tracker and Omni Kubernetes Monitoring TIL: Zellij - Modern Terminal Multiplexer TIL: How Discord Handles 2.5 Million Concurrent Voice Users TIL: Volumio - The Audiophile Music Player TIL: Areopagitica - Milton's Defense of Free Speech TIL: Fast Node Manager, Zoxide Smart CD, Technical Writing, PyO3, and Qubes OS TIL: Slurm Workload Manager for HPC Clusters TIL: Data Visualization Guide and Oso Authorization Academy TIL: CORS Deep Dive, Piku Tiny PaaS, Rust Strings, and Deno Standard Library TIL: Raspberry Pi OS Development, Vim Beginner Guide, Password Management, and QueryBook TIL: uBlock Origin Performance Optimization on Firefox TIL: Breaking PostgreSQL at Scale and LeetCode Problem Patterns TIL: Awesome Tmux Resources for Terminal Multiplexing TIL: Grit - A Multitree-Based Personal Task Manager TIL: Lens 4.2 Kubernetes IDE, Shell Scripting Guide, and Dark HTTP Server Do The Job You Hate So You Won't Hate The Job You Love TIL: Innernet VPN Solution and NoteCalc Calculator App TIL: Argo CD for GitOps and Lens Kubernetes IDE TIL: Modern Rust CLI Tools - System Monitoring, HTTP Requests, and DNS TIL: tz - A Time Zone Helper Tool TIL: Distributed Systems Education, Fallacies, and Self-Hosted Internet Archiving TIL: Real-Time Voice Cloning Technology TIL: ChartMuseum for Helm, AMD's Corporate Journey, and Kubernetes Pod Scaling TIL: Docker and Kubernetes Tools - Whaler, Descheduler, and Dive TIL: Post-Mortem Collection, Terminal Plotting, and Technical Twitter TIL: Dark Mode Toggle Web Component by Google Chrome Labs TIL: Python eval(), exec(), and compile() Functions TIL: Camelot PDF Tables, PostgreSQL Row Level Security, Zerodha Varsity, and Write Yourself a Git TIL: fuser Command for Process and File Investigation TIL: i Hate Regex - The Ultimate Regex Cheat Sheet TIL: Dolt - Git for Data and Database Version Control TIL: x86 Assembly Programming and SafeEyes Break Reminder TIL: Comprehensive Distributed Systems Reading List TIL: Cosmopolitan C Library, Distributed Systems Book, High Performance Browser Networking, and Rust Roguelike Tutorial TIL: ABlog for Sphinx - Documentation as a Blog Platform
How to Write Documentation - The README.md File
2021-04-30 · via Stonecharioteer on Tech

In the introduction post to this series, I discussed how to write a README.md file in a git repository. I’m digging deeper into this here.

Remember the perennial question when you write docs: “Who is your audience?”

With a Readme file, that person can safely be assumed to be tech-savvy.

So, to satiate their thirst, you need to cut to the chase as well. Your README.md file should seek to inform instantly. It shouldn’t be too long, because the user might be reading this on Github’s mobile site, or, god-forbid, something with a horrible UI. So instead of lengthy descriptions of what your project does, what should you describe?

The Project Name

Use your project’s title as the top-most heading. That gives your project more visibility, it shows what your project is. While this doesn’t seem like much, remember that sometimes there are repositories which are attached to an organization.

For example, consider a software project called, hypothetically, Sprint. Sprint has 4 components:

  1. A webservice written in Rust (sprint/server)
  2. A Docs site written using Hugo (sprint/docs)
  3. A CLI written in golang (sprint/cli)
  4. A Python Library (sprint/py-sprint)

The names of these repositories are indicated in parentheses. While the repository names do indicate the purpose of these repositories, do not always assume someone who fumbles on your repository knows that this is attached to a larger project.

So declare that at the very top. Use a project name title, just server won’t make sense. Instead, use Sprint Web Service. Remember that your repository name doesn’t have to be your project’s name. Different people use repository names for different purposes.

Naming Considerations

If your project name is an esoteric reference, go ahead and add that at the very bottom of your README. Do not add that at the top

If you have a logo that reflects this, ensure that you’re not copying over another organization’s Intellectual Property.

The CICD Stickers

I’m not a big proponent of the pipeline stickers. If you need your pipeline to alert you that there’s something wrong, then your docs aren’t the place to do that. Do not pollute your README.md file with a dozen stickers. However, do use it to indicate helpful stuff. however, you can make do without the stickers, that’s better.

A Note

Add a note on who this is for. That greatly helps people perusing your README. Especially if you have an actual developer and contributor guide somewhere.

Add a link to your complete documentation website. Add a note stating that that’s where the user manual and other errata are.

Installation Guide

Add a very short installation guide, albeit from source. Do not list out the 5000 package managers that you support in your tool. Those belong in your docs, in a way that can perhaps detect the platform that your user is hailing from and show just that.

The build steps should be as platform agnostic as can be, or you should target your most likely platform. If you’re building a Windows tool, don’t bother explaining how this works in Linux. If you have multiple platforms, link instead to the online installation guide.

Link to the relevant section of your documentation where you detail other installation methods. At this point, give your reader some credit and assume that the note above is good enough to serve as a warning showcasing who this docs is for.

However, remember that even with the best of warnings, you are going to have people who come here and think that these docs are for them.

Building the Documentation

This is an optional step, but it is necessary if building local docs is something someone who wants to use your tool should do. However, this can also go into your developer documentation.

Screenshots / Recordings

If you are building a User Interface, be it a TUI, GUI or CLI, you need to show what the interface looks like in a screenshot. You do not need to add a complete gallery here, but you should add a clear picture to help users understand what they’re in for. Additionally, make sure you add a timestamp or a version watermark to your screenshot, so when users see that something is very different in their installation, they can immediately note that the screenshot is from a different version. Note that if you can, you should always update the screenshot whenever something major changes.

License

Add a relevant, short licence note on this readme to help people understand what license the project is using. Do not replicate the entire license here, instead link to the relevant file. If your license has changed over time, note the version from which the version has changed as well.

Contributing

In the Contributing section, link to the issue tracker, and to the Developer guide if you have one. If you don’t have one, think about how many developers are contributing to your project, and make the judgement to add a lengthier section right here if you need it.

If you’re not going to maintain a separate section, then make sure you show users how to run tests in this section. Treat it like a mini-Developer’s guide.

Other Notes

Some other notes you can put in your README are:

  1. The latest release notes.
  2. A link to your Slack or Discord channel where devs can be reacted directly. I’d recommend having private channels for contributors and one public help channel that’s moderated by a bot.
  3. A link to your company’s website, if this is a company’s open source project.

What does not belong in your README

  1. Authors and Contributors list.
  2. Changelog
  3. The Getting Started Guide
  4. Links to presentations.
  5. Links to Conference videos
  6. Description of your company
  7. API Documentation

There are usecases for each of these, but they don’t belong in the README. Instead, make a project website with dedicated sections for the,.

Final Note

I’m going to be re-stating this time and again. While you have the best of intentions, you will not be able to make everyone happy. However, that doesn’t mean you shouldn’t at least consider who your documentation is for. Make sure that you know this. That way, you will at least help some of the audience instead of triggering everyone.

Exceptions - httpie

httpie goes against many of the points I’ve listed above, but it does so with an important note at the top. It tells the reader that this is a development version of the official docs which are best viewed on the docs website.

It provides a GIF right at the top, showing users what this tool can do. You are sold at the very beginning.

While the entire README actually is their documentation, they do it in a way that showcases different aspects of this tool effectively. The README.md does what it’s supposed to do: introduce the tool, and gives users help whenever they need it. Right at the top, the stickers are used to grand effect: to link to Discord where users can get help.

Series

  1. The Importance of Documentation - Series Introduction
  2. How to Write Documentation: The README.md file
  3. How to Write Documentation: The Getting Started Section
  4. How to Write Documentation: The Installation Guide
  5. How to Write Documentation: The API Reference
  6. How to Write Documentation: Conference Talk Submission
  7. How to Write Documentation: The Tech Blog
  8. How to Write Documentation: Patent Submission Document
  9. How to Write Documentation Extras: The Uninstallation Guide
  10. How to Write Documentation Extras: The Configuration Guide
  11. How to Write Documentation Extras: Testing Instructions
  12. How to Write Documentation Extras: The Changelog
  13. How to Write Documentation Extras: The Roadmap
  14. How to Write Documentation Extras: Issue Tracking
  15. How to Write Documentation Extras: Presentations