Remix.run Logo
Notes on Clarifying Man Pages(jvns.ca)
35 points by surprisetalk 2 days ago | 19 comments
teddyh 2 hours ago | parent | next [-]

Whenever the discussion comes up about man pages and how documentation should be organized, I like to quote this section from the GNU coding standards about how Info documentation is structured:

----

Programmers tend to carry over the structure of the program as the structure for its documentation. But this structure is not necessarily good for explaining how to use the program; it may be irrelevant and confusing for a user.

Instead, the right way to structure documentation is according to the concepts and questions that a user will have in mind when reading it. This principle applies at every level, from the lowest (ordering sentences in a paragraph) to the highest (ordering of chapter topics within the manual). Sometimes this structure of ideas matches the structure of the implementation of the software being documented--but often they are different. An important part of learning to write good documentation is to learn to notice when you have unthinkingly structured the documentation like the implementation, stop yourself, and look for better alternatives.

[…]

In general, a GNU manual should serve both as tutorial and reference. It should be set up for convenient access to each topic through Info, and for reading straight through (appendixes aside). A GNU manual should give a good introduction to a beginner reading through from the start, and should also provide all the details that hackers want. […]

That is not as hard as it first sounds. Arrange each chapter as a logical breakdown of its topic, but order the sections, and write their text, so that reading the chapter straight through makes sense. Do likewise when structuring the book into chapters, and when structuring a section into paragraphs. The watchword is, at each point, address the most fundamental and important issue raised by the preceding text.

<https://www.gnu.org/prep/standards/standards.html#GNU-Manual...>

cxr 18 minutes ago | parent [-]

> Programmers tend to carry over the structure of the program as the structure for its documentation[…] the right way to structure documentation is according to the concepts and questions that a user will have in mind when reading it.

That's also the right way to structure the program. Deficient compilers and bad advice have done serious damage to source code comprehensibility.

otikik 37 minutes ago | parent | prev | next [-]

He should have asked mastodon about the worst man pages too. Some of them are really bad. My pet peeve are the ones that assume a particular audience with a particular knowledge set. My second pet peeve are inconsistent command line flags.

Man Page for park-dribble

Utility for parking the dribbles.

park-dribble -U Unstash context before parking

park-dribble -x or -X Execute preliminary cleaning

park-dribble --1 Only use one preprocessor

Note that the behavior of this command is undefined on systems with the X-CRLT-1 chipset versions 23 and above. Thank you very much, Dave.

dctoedt 20 minutes ago | parent | next [-]

> He should have asked mastodon about the worst man pages too.

The blog title says "Julia Evans."

cxr 22 minutes ago | parent | prev [-]

> He should have asked mastodon about[…]

Julia is a woman.

ramon156 2 hours ago | parent | prev | next [-]

But unrelated but the manpages for kubectl were kind of weird, mostly linking to their online docs.

Is that a normal thing? I open the man tool for a reason, and it's to not read online docs

victorstanciu 4 hours ago | parent | prev | next [-]

> tldr.sh is a community maintained database of examples, for example you can run it as tldr grep. Lots of people have told me they find it useful.

+1 for tldr. For example, here's the output of `tldr ffmpeg`:

  ffmpeg

  Video conversion tool.
  See also: `gst-launch-1.0`.
  More information: https://ffmpeg.org/ffmpeg.html#Options.

  - Extract the sound from a video and save it as MP3:
    ffmpeg -i path/to/video.mp4 -vn path/to/sound.mp3

  - Transcode a FLAC file to Red Book CD format (44100kHz, 16bit):
    ffmpeg -i path/to/input_audio.flac -ar 44100 -sample_fmt s16 path/to/output_audio.wav

  - Save a video as GIF, scaling the height to 1000px and setting framerate to 15:
    ffmpeg -i path/to/video.mp4 -filter:v 'scale=-1:1000' -r 15 path/to/output.gif

  - Combine numbered images (frame_1.jpg, frame_2.jpg, etc) into a video or GIF:
    ffmpeg -i path/to/frame_%d.jpg -f image2 video.mpg|video.gif

  - Trim a video from a given start time mm:ss to an end time mm2:ss2 (omit the -to flag to trim till the end):
    ffmpeg -i path/to/input_video.mp4 -ss mm:ss -to mm2:ss2 -codec copy path/to/output_video.mp4

  - Convert AVI video to MP4. AAC Audio @ 128kbit, h264 Video @ CRF 23:
    ffmpeg -i path/to/input_video.avi -codec:a aac -b:a 128k -codec:v libx264 -crf 23 path/to/output_video.mp4

  - Remux MKV video to MP4 without re-encoding audio or video streams:
    ffmpeg -i path/to/input_video.mkv -codec copy path/to/output_video.mp4

  - Convert MP4 video to VP9 codec. For the best quality, use a CRF value (recommended range 15-35) and -b:v MUST be 0:
    ffmpeg -i path/to/input_video.mp4 -codec:v libvpx-vp9 -crf 30 -b:v 0 -codec:a libopus -vbr on -threads number_of_threads path/to/output_video.webm
kristopolous 3 hours ago | parent | next [-]

https://cht.sh/ is my fave

curl it.

curl cht.sh/ffmpeg

you can even search

curl cht.sh/~screenshot

mananaysiempre an hour ago | parent | prev | next [-]

I like everything about tldr except for the fact that every way to use it is an Internet-dependent client for some reason. Looking at how it works again, I’m half-tempted to write a converter from their dialect of Markdown to roff and run it against https://github.com/tldr-pages/tldr so I can do `man tldr ffmpeg`.

oneeyedpigeon 4 hours ago | parent | prev [-]

BTW, `tldr` is deprecated, in favour of [`tlrc`](https://tldr.sh/tlrc/). Both use the same database.

wonger_ 2 hours ago | parent | next [-]

I use tealdeer, which was my favorite of the few tldr clients I tried: https://github.com/tealdeer-rs/tealdeer

Different tldr clients use different syntax highlighting, and some are faster than others. The main tldr is horrifyingly slow iirc.

mort96 4 hours ago | parent | prev | next [-]

Why?? tldr is an infinitely better name than tlrc. It seems like tlrc is from the same project, couldn't they just have released a version 2.0 of tldr that's rewritten in rust?

duckerude 3 hours ago | parent [-]

Looks like the command is still called tldr at least, only the package/repo has a different name.

squigz 3 hours ago | parent | prev [-]

Where is it deprecated? It looks like it's still being developed and there's no mention of it being deprecated on the site?

jrmg an hour ago | parent | prev | next [-]

Does anyone here actually use the GNU info documentation?

kevin_thibedeau 14 minutes ago | parent [-]

I occasionally use gnu info. My favorite tool is pinfo which has a man mode that adds navigable links to cross references in man pages and can shell out to hyperlinks. I usually have that aliased as man.

mac-attack an hour ago | parent | prev | next [-]

Speaking of manpages, during a different hn convo, I found out about mansnip [1]. It is for when you remember the command but forget what the flags do and has been very useful re: "I keep using curl -LO, what is that doing again?" etc

[1] https://github.com/day50-dev/Mansnip

waynesonfire 2 hours ago | parent | prev [-]

if there is a place for an AI cli, it would be in the man page. So many hours wasted searching for "-a" followed by, "/", "/", ...

Then, when finally locating the flag, it's nescessary to scroll up to confirm the right sub-command section, "/", "/", ...

worksonmine 31 minutes ago | parent [-]

After a while you learn to be specific ' -a' (with space) or '-a,', but this requires that you know what you're looking for. Also n/N is easier to jump between matches than /<Enter>, one less keypress.

Another useful trick is filtering with &, &/-a will narrow it down, but you won't know about the sub-commands if there are many matches. I just tried &/hidden on rg and fd and it takes me straight to `-., --hidden` for rg and `-H, --hidden` for fd. And &/case shows all options related to case-sensitivity with the descriptions. Once you get the intuition for it it's not that bad.

Manuals are not perfect but I don't think I would want an AI. I'm frustrated enough when I don't find a flag the LLM insists is supposed to be there and it gaslights me even though I'm telling the stupid thing I have the manual open.