From: Andrew Sayers <ffmpeg-devel@pileofstuff.org> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] Development process for explaining contexts (was Re: [PATCH v6 1/4] doc: Explain what "context" means) Date: Sun, 16 Jun 2024 19:02:51 +0100 Message-ID: <Zm8oywDZ2eFRudyn@andrews-2024-laptop.sayers> (raw) In-Reply-To: <Zm1cQrZ9VyRgbcny@mariano> Meta note #1: I've replied in this thread but changed the subject line. That's because it needs to stay focussed on solving this thread's problem, but may be of more general interest. Meta note #2: Stefano, I appreciate your feedback, but would rather wait for [1] to get sorted out, then formulate my thoughts while writing a new version. That way I'll be more focussed on ways to improve things for readers. This thread started with what I thought was a trivia question[1] - what is a context? It's short for "AVClass context structure", which is synonymous with "AVOptions-enabled struct". It turned out to be more complex than that, so I wrote a little patch[3] explaining this piece of jargon. But it turned out to be more complex again, and so on until we got a 430-line document explaining things in voluminous detail. Everyone agrees this isn't ideal, so here are some alternatives. This may also inspire thoughts about FFmpeg development in general. # Alternative: Just give up The argument: We tried something, learnt a lot, but couldn't find a solution we agreed on, so let's come back another day. Obviously this is the easy way out, but essentially means leaving a critical bug in the documentation (misleads the reader about a fundamental concept). Even the most negative take on this document is that it's better than nothing, so I think we can rule this one out. # Err on the side of under-communicating The argument: this document is on the right tracks, but explains too many things the reader can already be assumed to know. This argument is more complex than it appears. To take some silly examples, I'm not going to learn Mandarin just because FFmpeg users can't be assumed to speak English. But I am willing to use American spelling because it's what more readers are used to. This e-mail is plenty long enough already, so I'll stick to some high-level points about this argument. The main risk of cutting documentation is that if someone can't follow a single step, they're lost and don't even know how to express their problem. Imagine teaching maths to children - you need to teach them what numbers are, then how to add them together, then multiplication, then finally exponents. But if you say "we don't need to teach numbers because kids all watch Numberblocks now", you'll cover the majority of kids who could have worked it out anyway, and leave a minority who just give up and say "I guess I must be bad at maths". I'd argue it's better to write more, then get feedback from actual newbies and cut based on the evidence - we'll get it wrong either way, but at least this way the newbies will know what they want us to cut. Incidentally, there's a much stronger argument for *drafting* a long document, even if it gets cut down before it's committed. FFmpeg has lots of undocumented nuances that experts just know and newbies don't know to ask, and this thread is full of instances where writing more detail helped tease out a misunderstanding. [1] is a great example - I had finally written enough detail to uncover my assumption that all AVOptions could be set at any time, then that thread taught me to look for a flag that tells you the options for which that's true. If you assume I'm not the only person who has been subtly misled that way, you could argue it's better to commit the long version. That would give readers more opportunities to confront their own wrong assumptions, instead of reading something that assumed they knew one thing, but let them keep believing another. The obvious counterargument is that we should... # Spread the information across multiple documents The argument: this document puts too much information in one place. We should instead focus on making small patches that put information people need to know where they need to know it. This is where things get more interesting to a general audience. If you have repo commit access, you're probably imagining a workflow like: write a bunch of little commits, send them out for review, then commit them when people stop replying. Your access is evidence that you basically know how things work, and also lets you make plans confident in the knowledge that anything you need committed will make it there in the end. My workflow is nothing like that. This thread has constantly reinforced that I don't understand FFmpeg, so it's better for me not to have commit access. But that means I can only work on one patch at once, because I will probably learn something that invalidates any other work I would have done. It also means a single patch not getting interest is enough to sink the project altogether. I can put up with that when it's one big multi-faceted patch, because I can work on one part while waiting for feedback on another part. But my small patches generally involve a few hours of work, a week of waiting, a ping begging for attention, then often being rejected or ignored. In the real world, the only thing this approach will achieve is to burn me out. It might be possible to revisit this idea *after* committing the document, when we're fairly confident the answers are right and just need to tweak the presentation based on feedback. Or other people could write documentation based on issues brought up in this thread, and I'll cut as appropriate. But for now this is a non-starter. # Write a blog post The argument: doxygen and texinfo are good for documenting "timeless truths". But we don't have anywhere to put transitory information like upgrade guides, or subjective information like guidance about best practices. This document shoehorns information in here that really belongs somewhere like that. This is basically true, but that doesn't solve anything. I have neither a personal blog nor the desire to write one, and even if I wrote an excellent guide to contexts as a general concept, nobody would actually find the blog to read it. So this idea would only work if we e.g. overhauled the news area of the site[4] to look more like GIMP's news section[5]. If someone else would like to start a project like that, I can promise a good series of posts to help get the ball rolling, and will be happy to trim down the document as those posts go public. # Write tutorials The argument: this explains ideas from first principles that are better explained by example. This document shoehorns information in here that really belongs somewhere like that. This seems reasonable in principle, but as well as the "lots of small commits" problem discussed above, FFmpeg is currently structured so nobody is actually going to do that. I've tried to learn FFmpeg many times over the years, and last year's attempt involved trying to write a subtitles tutorial. I didn't submit it to the ML because I didn't understand the theory well enough, and was fairly sure I had made some underlying error that made it all wrong. Everyone who does understand FFmpeg well enough to write a good subtitles tutorial seems to understand it well enough to want a complete rewrite, but not care enough to get that done. So subtitles end up falling between two stools - too ugly for newbies to learn, not ugly enough for experts to fix. If you want relatively new developers to have the confidence to write tutorials, they need the theory to be well-documented first. # Rewrite the API The argument: instead of writing a bunch of words apologising for an interface, just write a better interface. In general, I'm a big believer in using documentation to drive API decisions. But in FFmpeg's case, it wouldn't help to have a single developer trying to fix a community-wide problem. We've previously discussed swr_alloc_set_opts() (essentially two functions sharing one symbol) and av_ambient_viewing_environment_create_side_data() (receives a different context argument than its function name). A better example of the community-wide issue might be av_new_packet() (initializes but does not allocate, despite slightly confusing documentation) vs. av_new_program() (allocates and initializes, but has no documentation). Both of these could be documented better, and a developer who only needs to learn one won't be bothered by the other. But the real problem is that they use the word "new" to mean fundamentally incompatible things, creating a trap for anyone reviewing code that uses the "new" they haven't seen before. Solving this problem wouldn't just involve rewriting a bunch of functions. It would involve motivating the community to avoid writing that sort of API in future, which would take all of us many years to achieve. # Apply this, then iterate The argument: OK fine, but dragging down other solutions doesn't help this one. We should at least try to solve these problems. This is the position I've currently landed up at. I'm increasingly able to justify the big picture decisions behind the document, and we're getting to the point where detailed discussions are just putting opinions where evidence should go. I've talked in a previous e-mail about getting feedback from #ffmpeg and the libav-user mailing list. We've also talked about the value of making the document useful to people familiar with other programming languages, so we could try reaching out to people who write bindings in other languages. This sort of iteration can be pretty quick, because we don't need to wait for a major release. We just need to have something on ffmpeg.org so people know this is a "real" project. As such, I think a "release early, release often" approach is the best way forward. [1] https://ffmpeg.org/pipermail/ffmpeg-devel/2024-June/329068.html [2] https://ffmpeg.org/pipermail/ffmpeg-devel/2024-April/325811.html [3] https://ffmpeg.org/pipermail/ffmpeg-devel/2024-April/325903.html [4] https://ffmpeg.org/index.html#news [5] https://www.gimp.org/news/ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-06-16 18:03 UTC|newest] Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-04-18 15:06 [FFmpeg-devel] [PATCH 1/3] doc: Explain what "context" means Andrew Sayers 2024-04-18 15:06 ` [FFmpeg-devel] [PATCH 2/3] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-04-18 15:06 ` [FFmpeg-devel] [PATCH 3/3] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-04-20 7:25 ` [FFmpeg-devel] [PATCH 1/3] doc: Explain what "context" means Stefano Sabatini 2024-04-20 12:18 ` Andrew Sayers 2024-04-20 16:13 ` Stefano Sabatini 2024-04-20 12:19 ` [FFmpeg-devel] [PATCH v2 " Andrew Sayers 2024-04-20 12:19 ` [FFmpeg-devel] [PATCH v2 2/3] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-04-20 12:19 ` [FFmpeg-devel] [PATCH v2 3/3] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-04-20 16:48 ` [FFmpeg-devel] [PATCH v2 1/3] doc: Explain what "context" means Stefano Sabatini 2024-04-20 22:17 ` Andrew Sayers 2024-04-22 8:02 ` Stefano Sabatini 2024-04-22 15:56 ` [FFmpeg-devel] [PATCH v3 0/3] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-04-22 15:56 ` [FFmpeg-devel] [PATCH v3 1/3] doc: Explain what "context" means Andrew Sayers 2024-04-22 17:05 ` Stefano Sabatini 2024-04-29 9:10 ` Andrew Sayers 2024-05-02 10:03 ` Andrew Sayers 2024-05-05 7:29 ` Stefano Sabatini 2024-05-05 21:04 ` Andrew Sayers 2024-05-22 10:37 ` Stefano Sabatini 2024-05-22 12:47 ` Andrew Sayers 2024-05-25 9:00 ` Stefano Sabatini 2024-04-29 9:24 ` [FFmpeg-devel] [PATCH v4 1/4] " Andrew Sayers 2024-04-29 9:24 ` [FFmpeg-devel] [PATCH v4 2/4] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-04-29 9:24 ` [FFmpeg-devel] [PATCH v4 3/4] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-05-02 11:01 ` Lynne 2024-05-02 11:14 ` Andrew Sayers 2024-05-02 13:00 ` Zhao Zhili 2024-05-02 13:27 ` Andrew Sayers 2024-05-02 13:39 ` Zhao Zhili 2024-04-29 9:24 ` [FFmpeg-devel] [PATCH v4 4/4] lavf: Add documentation for private "Context" classes Andrew Sayers 2024-05-05 8:31 ` [FFmpeg-devel] [PATCH v4 1/4] doc: Explain what "context" means Andreas Rheinhardt 2024-05-05 10:34 ` Andrew Sayers 2024-04-22 15:56 ` [FFmpeg-devel] [PATCH v3 2/3] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-04-22 15:56 ` [FFmpeg-devel] [PATCH v3 3/3] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-05-15 15:54 ` [FFmpeg-devel] [PATCH v4 0/4] Explain what "context" means Andrew Sayers 2024-05-15 15:54 ` [FFmpeg-devel] [PATCH v4 1/4] doc: " Andrew Sayers 2024-05-22 9:31 ` Stefano Sabatini 2024-05-22 16:07 ` Andrew Sayers 2024-05-25 9:49 ` Stefano Sabatini 2024-05-26 12:06 ` Andrew Sayers 2024-05-28 17:24 ` Stefano Sabatini 2024-05-29 10:10 ` Andrew Sayers 2024-05-29 10:50 ` Andrew Sayers 2024-05-29 11:06 ` Paul B Mahol 2024-05-29 14:18 ` Andrew Sayers 2024-05-29 16:06 ` Stefano Sabatini 2024-05-23 20:00 ` [FFmpeg-devel] [PATCH v5 0/4] " Andrew Sayers 2024-05-23 20:00 ` [FFmpeg-devel] [PATCH v5 1/4] doc: " Andrew Sayers 2024-05-25 11:00 ` Stefano Sabatini 2024-05-23 20:00 ` [FFmpeg-devel] [PATCH v5 2/4] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-05-25 9:57 ` Stefano Sabatini 2024-05-23 20:00 ` [FFmpeg-devel] [PATCH v5 3/4] all: Link to "context" from all public contexts with documentation Andrew Sayers 2024-05-23 20:00 ` [FFmpeg-devel] [PATCH v5 4/4] all: Rewrite documentation for contexts Andrew Sayers 2024-05-24 1:50 ` [FFmpeg-devel] [PATCH v5 0/4] Explain what "context" means Michael Niedermayer 2024-05-24 9:43 ` Andrew Sayers 2024-05-15 15:54 ` [FFmpeg-devel] [PATCH v4 2/4] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-05-22 10:04 ` Stefano Sabatini 2024-05-15 15:54 ` [FFmpeg-devel] [PATCH v4 3/4] all: Link to "context" from all contexts with documentation Andrew Sayers 2024-05-15 16:46 ` Lynne via ffmpeg-devel 2024-05-16 11:25 ` Andrew Sayers 2024-05-15 15:54 ` [FFmpeg-devel] [PATCH v4 4/4] lavf: Add documentation for private "Context" classes Andrew Sayers 2024-05-22 10:08 ` Stefano Sabatini 2024-05-22 14:47 ` Andrew Sayers 2024-05-22 15:24 ` Andreas Rheinhardt 2024-05-22 16:54 ` Andrew Sayers 2024-06-04 14:47 ` [FFmpeg-devel] [PATCH v6 0/4] doc: Explain what "context" means Andrew Sayers 2024-06-04 14:47 ` [FFmpeg-devel] [PATCH v6 1/4] " Andrew Sayers 2024-06-05 8:15 ` Anton Khirnov 2024-06-12 20:52 ` Stefano Sabatini 2024-06-13 14:20 ` Andrew Sayers 2024-06-15 9:17 ` Stefano Sabatini 2024-06-16 18:02 ` Andrew Sayers [this message] 2024-06-16 21:20 ` [FFmpeg-devel] Development process for explaining contexts (was Re: [PATCH v6 1/4] doc: Explain what "context" means) Paul B Mahol 2024-07-01 22:16 ` Stefano Sabatini 2024-07-02 9:56 ` Andrew Sayers 2024-07-06 11:33 ` Stefano Sabatini 2024-06-04 14:47 ` [FFmpeg-devel] [PATCH v6 2/4] lavu: Clarify relationship between AVClass, AVOption and context Andrew Sayers 2024-06-05 10:34 ` Stefano Sabatini 2024-06-05 12:46 ` Andrew Sayers 2024-06-04 14:47 ` [FFmpeg-devel] [PATCH v6 3/4] all: Link to "context" from all public contexts with documentation Andrew Sayers 2024-06-05 8:12 ` Anton Khirnov 2024-06-05 12:51 ` Andrew Sayers 2024-06-04 14:47 ` [FFmpeg-devel] [PATCH v6 4/4] all: Rewrite documentation for contexts Andrew Sayers
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=Zm8oywDZ2eFRudyn@andrews-2024-laptop.sayers \ --to=ffmpeg-devel@pileofstuff.org \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git