diff options
Diffstat (limited to '2024/talks/literate.md')
| -rw-r--r-- | 2024/talks/literate.md | 192 | 
1 files changed, 192 insertions, 0 deletions
| diff --git a/2024/talks/literate.md b/2024/talks/literate.md index 0fb0a0de..94f5332c 100644 --- a/2024/talks/literate.md +++ b/2024/talks/literate.md @@ -42,6 +42,198 @@ the years, I’ve filed them off with helper functions, snippets and  other features. Thought I would share these. +# Discussion + +## Questions and answers + +-   Q: You touched on it briefly, but how do you handle things like +    "C-h f" helpful info not being tied back to the defuns in src +    block code when you "C-c C-c" them in the org buffers instead of +    re-tangling it to the files, and other such things? Did you create +    wrappers for jumping  back and forth atop org's built-in mechanisms +    to go back and forth between org/tangled files? +    -   A: (not yet answered) +-   Q: Apropos large literate programs: what's the largest code base +    you've ever tackled with the literate approach (esp. Emacs + +    Org-mode)? +    -   A: The largest is the one I mentioned in the talk ... about +        8000 lines of "code" and another "10000" lines of prose. I +        think I came to 15,000 max (in code blocks only). +-   Q: Have you ever used org-transclusion +    ([https://github.com/nobiot/org-transclusion](https://github.com/nobiot/org-transclusion))? +    -   A: Nope \... but I will +        -   I tried it out once, and had one hour of work deleted 🥲, +            but it was from an issue already reported: +            [https://github.com/nobiot/org-transclusion/issues/177](https://github.com/nobiot/org-transclusion/issues/177) +            and +            [https://github.com/nobiot/org-transclusion/issues/257](https://github.com/nobiot/org-transclusion/issues/257) +-   Q: What is your usage of dynamic blocks in such workflows? Any +    interesting use cases and custom ones? +    -   A: Not yet, will report back +-   Q:Is the minibuffer being deliberately hidden in this video? (first +    noticed this in the section previous to "Navigating by Function +    Names") +    -   A: Not intentionally :)  You may notice the minibuffer comes and +        goes, sorry about that; not intentional (didn't quite "fix" +        all of them) (Thanks for the answer, no worries.) +-   Q:What's your take on Emacs+Org vs. Jupyter notebooks (for +    interactive programming)? +    -   A: Not something I use right now.  Tend to include things from +        jupyter/python (e.g. numpy) that has been the biggest challenge +        (not knowing that stuff all that well), things like matrix +        multiplications are easy in jupyter not such much in org. May +        make sense to stay where you are comfortable.  Curious what the +        community can do to make this transition easier +    -   You can't work with Jupyter in \> 1 language either (I think). +        It's Py + SQL or R + SQL etc. Org allows 45+ languages in one +        document (I often mix languages). +-   Q: Do you think any programming language is more suited to literate +    programming than another? +    -   A: R, C are my favorites (for literate programs). C (and C++) +        have got great support. There are some great books implemented +        in literate programming I think. The two that come to mind are +        Physically Based Rendering: From Theory to Implementation and C +        Interfaces and Implementations. The first is C++ and the +        second C. Ty. +    -   \<gs-101\> Personally, when working with Org files, I have a +        better time dealing with interpreted languages, such as Python, +        because you can initialize a session and the code is all +        conected. You can divide blocks however you seem fit. +-   Q: related to above, do you use inline org function calls and org +    babel library and such? +    -   A: Used to use more org-babel inline functions, found sound bugs +        (maybe) 8yrs ago, right now my literate dev-ops is calling a lot +        of backend programs so the org-babel has limited help in that +        regard while in the emacs session things are "just available" +        so that hasn't help much either +-   Q: How do you handle the cases where org markup may sometimes +    interfere with some of the code, in places where you can't use +    "escapes" (\~ or = or \| \<- vertical bar), doubly so if you use +    modes to not show these but the styled text instead, and so on? +-   I think an example is in C when you assign to a pointer  \*p = &i;   +    (In Org, you need to write (\*p) or ,\*p = &i; or it will be +    mistaken for a headline \* +    -   A: (clarifying) when I'm making pros and I'm talking about a +        function I've written somewhere else I'll use tildes and look +        for those things so I can strip them off.  Is that the spirit of +        the question.  (confirmed).  Yes, I'll strip that off after +        finding the function name, so I can still mark it correctly. +    -   Q: clarifying: when in code inside an org buffer, you don't get +        to use \~ or = (verbatim/etc), and any font-locking interferes +        with the proper display in the src blocks, that kind of +        interference. +-   Q: You said at the start that literate didn't catch on in corporate +    DevOps - why not? +    -   A: I guess the big thing is not everyone is using Emacs and org +        is needed to make it work really well. +-   Q: I gotta ask: why not that full stack on Markdown, I'm sure it's +    crossed your mind at least a few times how the same setup on +    Markdown would be more interop-friendly with colleagues and such? +    -   A:  It's a real good idea. +-   Q: How does your management of "TODOs" (projects/tasks) interact +    with this literate mindset, any insightful things you do on that +    front? +    -   A: Yeah. Okay. So, uh, on to do's and that sort of thing, um. You know, a lot is the same as it was 10 years ago. At the beginning of every sprint, my company, we're using JIRA. All jokes are valid when I say that. But I just go to its web page. I copy all the tasks that I need to do that sprint. I wrote a function that takes that code and reformats it as a bunch of org tasks for me to do that I can just now have all my to-dos. And I start to work off of that from that point on. So it'll reference all the projects, and I do symlinks to every code base that I need to use. Most of the to-dos I put inside my code block is kind of just for me, just so I can remember it. Because the work that I have to do needs to be tracked a little more fine-grained, I guess. Yeah. +-   Q: \<Donovan\> Do you LP also on larger projects? (More files & +    nested directories)  +    -   A:  I haven't done nested directories, but I can now. Now that +        i've realized I have the feature where I can just jump to any +        projects and all the org-files and all the headings just show +        up, that works in nested directories, that that's fun. +-   Q: Have you used Cucumber/Gherkin/BDD and do you think it has a +    strong overlap to what you talked about here? +    -   A: I tend to put the tests right next to the function, I like +        tangle it out to different files; keeping things together is +        nice.  Many frameworks assume we'll have things seperated out +        in a way that isn't useful to me.  I like to go old-school on +        that? +-   Q: What granularity are you looking for re your org files and +    contents, with respect to a codebase that it tangles to, or in +    non-coding contexts? +    -   A:  Great questions, really subjective.  I change that all +        time.  I have an idea, I start to refine it. My goal at one +        point was to have an emacs config that was really small and +        simple and that just really doesn't happen, it's full of ideas +        and things that are half-baked and i pull them out and polish +        them up bit by bit so it ends up being like any code-base it +        just keeps getting refined.  Sub-trees, archiving are useful. +    -   I've found it useful to prune the init file back to minimal +        every once in a while (actually, AI has been surprisingly +        helpful - perhaps it helps that Emacs is ancient and hence there +        is a lot of doc out there and much of it \... correct?) + +## Notes + +-   My literate programming code extensions: +    [https://www.howardabrams.com/git/howard/hamacs/src/branch/main/ha-org-literate.org](https://www.howardabrams.com/git/howard/hamacs/src/branch/main/ha-org-literate.org) +-   My Emacs configuration written in a literate style: +    [https://github.com/howardabrams/hamacs](https://github.com/howardabrams/hamacs) +-   See it rendered here: +    [https://howardabrams.com/hamacs/](https://howardabrams.com/hamacs/) +-   My JOPS (Jump to Project Sections) code that "searches Org +    headers": +    [https://www.howardabrams.com/git/howard/jops](https://www.howardabrams.com/git/howard/jops) +    \... temporary location? +-   snippet on \<ssl: Cool one.  +    -   0_0 I need to do this. +-   This (evaluating babel blocks) is also possible with the +    Avy + Embark combo developed by karthik: +    ([https://karthinks.com/software/avy-can-do-anything/#avy-plus-embark-any-action-anywhere](https://karthinks.com/software/avy-can-do-anything/#avy-plus-embark-any-action-anywhere)), +    just jump to a block and then "RET". +-   Really good talk.  I need to find out how to extend +    xref to handle org files! +    -   same here, I asked a long-winded +        question that was about that (before he touched a bit on it), +        but feel there's more in terms of wrappers and such +-   Denote has some pretty good use of dynamic blocks I +    think +    ([https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779](https://protesilaos.com/emacs/denote#h:8b542c50-dcc9-4bca-8037-a36599b22779)) +    -   There's also the dynamic blocks from org-nursery: +        [https://github.com/chrisbarrett/nursery?tab=readme-ov-file#org-roam-dblocks-incubating](https://github.com/chrisbarrett/nursery?tab=readme-ov-file#org-roam-dblocks-incubating) +-   there is an RFC in for 'cargo-script' which allows +    building single-file crates - i think that will be quite useful in +    ob-rust +    -   There's a ob-rust already and it uses +        rust-script: [https://github.com/micanzhang/ob-rust](https://github.com/micanzhang/ob-rust), +        but the developer wanted to use rustc instead. +    -   cargo-script RFC issue:  [https://github.com/rust-lang/cargo/issues/12207](https://github.com/rust-lang/cargo/issues/12207) +-   Not a Q, just a comment that we need more of your insightful +    posts and videos! :) (sic) + + +- I am both hyped and scared by Howard's talk, some of his past insights into using org-mode (literate everything, many small spreadsheets, etc.) have changed the way I operate so thoroughly... +- 19th century? Isn't that in the 1800s? +  - 21 1/4 century? +  - you are not incorrect I believe - easy mistake to make, it's not intuitive! +  - YouTube comment: 1:00 So Knuth invented literate programming in the 19th century? I knew he was old, but not that old! +- i think the only time i have worked with literate programming is Inform 7 +- I find that the Julia support in org (babel) is good enough. Most of my programming is in Julia. +  - re: Julia in Org: For ob-julia support I wrote an ob-julia that does a few more things than the one that ships with ESS.  https://github.com/karthink/ob-julia +- (I'm here trying to milk Howard for all his fantastic insights in the Etherpad, hope that's not a faux-pas...!) +  - I, at least, am enjoying the Q&A session so not a faux-pas as far as I'm concerned. + +- YouTube comment: The best reason I've heard explaining why most programmers don't (and won't) use literate programming. It requires them to be literate in three languages: the programming language, the markup language, and most challenging of all, English. +- YouTube comment: Q: Literate programming is very appealing in theory, but it's difficult with languages like Go where your code is split across multiple files.  Any suggestions? + +Feedback: + +- very cool +- Lovely talk, thank you! +- Awesome, thank you! +- That was wonderful, thank you! 😊 +- Thank you Howard! +- Thanks for your continued work, Howard! +- A legend!  ... loved the Ironsworn presentation from previous year. +- excellent presentation indeed +- Thank you for the marvelous talk!! +- Thanks for the presentation +-   Your way of delivering is inspiring. +-   god I wish I was that good a presenter +- I for one had been looking forward to this particular talk, so there's that :) +- YouTube comment: Legend! +- YouTube comment: Howard! Your videos have been such an amazing source of information. You voice is engrained in my brains haha +- Somehow my interest in #emacs reignited and a lot of is due to org presentation by @howard [@mms@bsd.cafe](https://mastodon.bsd.cafe/@mms/113724843960332570) +  [[!inline pages="internal(2024/info/literate-after)" raw="yes"]] | 
