diff options
Diffstat (limited to '2025/talks')
36 files changed, 4149 insertions, 0 deletions
diff --git a/2025/talks/authoring.md b/2025/talks/authoring.md new file mode 100644 index 00000000..c5120713 --- /dev/null +++ b/2025/talks/authoring.md @@ -0,0 +1,30 @@ +[[!meta title="How Emacs became my authoring playground—no Lisp required"]] +[[!meta copyright="Copyright © 2025 Uli"]] +[[!inline pages="internal(2025/info/authoring-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# How Emacs became my authoring playground—no Lisp required +Uli - Pronunciation: 'u:li, IRC: rhaen, Mastodon: <https://digitalcourage.social/@rhaen> + +[[!inline pages="internal(2025/info/authoring-before)" raw="yes"]] + +In this talk, I will share the story of my journey with Emacs as a writer, author, and storyteller. Over the years, I have crafted a personal workflow to write technical articles, analyses, and handouts using Emacs, Pandoc, Org Mode, and Zotero. I’ll demonstrate how this setup enables me to easily produce documents in PDF, DOCX, and EPUB formats on macOS and Unix-like systems—with potential extensions to Windows. + +Rather than diving deep into complex Org Mode customizations, my approach focuses on maintaining flexibility in translating documents between formats. This workflow, developed incrementally over several years, illustrates how you can build a comfortable and efficient writing environment in Emacs without needing perfect Lisp mastery or an encyclopedic knowledge of Emacs internals. + +I'll introduce the key packages I use and how they weave together into a cohesive personal authoring system—proving that Emacs can be a powerful yet approachable tool for writers. This talk is not a deep technical dive but a practical exploration of methodology and workflow that can inspire writers to harness Emacs in their own unique ways. + +About the speaker: + +I'm a writer with a strong passion for open-source software. As an agile coach, I enjoy helping people work together. I truly believe in the power of free code and prefer platforms like Codeberg over GitHub, just as I find Mastodon a friendlier space compared to X. I’m also deeply interested in audio and love capturing the world around me through my field recording podcast. At the heart of everything I do is combining these passions into practical workflows—especially using Emacs as a powerful and flexible tool to bring my ideas to life. + + + +[[!inline pages="internal(2025/info/authoring-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/authoring-nav)" raw="yes"]] + + diff --git a/2025/talks/bibliography.md b/2025/talks/bibliography.md new file mode 100644 index 00000000..4c597cdf --- /dev/null +++ b/2025/talks/bibliography.md @@ -0,0 +1,83 @@ +[[!meta title="An enhanced bibliography in org-mode for scientific research and self-directed learning"]] +[[!meta copyright="Copyright © 2025 Blaine Mooers"]] +[[!inline pages="internal(2025/info/bibliography-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# An enhanced bibliography in org-mode for scientific research and self-directed learning +Blaine Mooers (he/him) - <mailto:blaine-mooers@ouhsc.edu> + +[[!inline pages="internal(2025/info/bibliography-before)" raw="yes"]] + +This 20-minute talk introduces a modernized approach to creating annotated bibliographies using Org-mode. +This new approach overcomes the limitations of traditional BibTeX-based methods. +Unlike classical annotated bibliographies, this system supports rich content including text-wrapped figures, tables, code listings, equations, and appendices. +These features transform static reference collections into visual knowledge repositories. + +The presentation will demonstrate how this system leverages Org-mode's unique capabilities, particularly literate programming, to enable real-time data transformation and visualization from cited papers. +I introduce a modular architecture to overcome BibTeX's whitespace limitations in the annotation field, which stores notes for assembling annotated bibliographies in the classical approach. + +Key features of the new approach include: + +- A modular design that supports the reuse of annotation files between bibliographies and with literature notes in org-roam and denote +- Support for including figures, tables, equations, code listings, and literature programming blocks +- Citation key injection into subsection headings +- Automated PDF downloading, relabeling, and storing +- Property drawers for keywords, links to annotation note files to ease making further edits, and links to PDF documents +- Specialized sorting function for bibliography organization (by author, year, or keywords) +- Inclusion of a table of contents with hyperlinks +- Specialized glossaries for acronyms, software packages, equations, and mathematical notation + +I will address how this approach complements, rather than replaces, modern personal knowledge management systems like org-roam and denote. +This approach strengthens project-focused knowledge organization. +I will discuss the practical benefits, including improved visual memory reinforcement through embedded figures and reduced context switching during in-depth academic work. + +I will share the implementation details of the Emacs Lisp functions that power this system (available as a package). +The presentation will include demonstrations of how these functions streamline everyday tasks such as adding new entries, navigating between bibliography and source material, and preparing project-specific BibTeX files. +These functions reduce the friction in the academic reading and writing workflow. + +For those interested in adopting this approach, I will discuss adaptations for various workflows and address practical considerations, such as copyright implications when sharing illustrated bibliographies. +The talk will conclude with thoughts on how this system supports different reading styles (reference, survey, and deep reading) as identified by Stephen Heard in his 2022 book "A Scientist's Guide to Writing". +This approach is particularly valuable for researchers, graduate students, and knowledge workers who need to maintain project-specific literature collections. +The approach recognizes the reality that most scientists do not need access to their entire knowledge corpus when working on a specific paper. +Instead, they need a visually reinforced understanding of a targeted subset of the literature. + +The format is a 20-minute talk presented as a narrated slideshow. The outline follows: + +- The role of the annotated bibliography in my three-pronged approach to scientific writing project management, which I introduced last year in my talk about writing logs. +- My innovative use of a modular approach, along with numerous enhancements, promotes deep work. +- Why make an annotated bibliography in the Age of Zettelkastens and Generative AI? +- Why not assemble a notebook instead? +- The classic annotated bibliography and its deficits (i.e., why I developed the enhanced bibliography). +- The advantages of Org-mode for making this annotated bibliography. +- Defining the scope of the enhanced bibliography: research program level versus writing project-specific. +- Tour of the master org file that controls the assembly of the final PDF. +- Project file tree and version control with helper functions. +- The annotation file and accommodation of three levels of detail for reference, survey, and deep reading. +- Demonstrations of creating an entry by wrapping a citar, org-ref, and org-cite citekeys. +- Show how to use literature programming to carry out further analyses using data from a specific paper. +- Show integration with Zettelkasten by including annotation org files in literature notes. +- Feeding annotation files into generative AI for help with querying, brainstorming, planning, and synthesis. +- How does working on an annotated bibliography fit into my weekly writing schedule? +- Tour of the GitHub repository for this project. +- Copyright of figures and limits on sharing the enhanced bibliography in public. +- Summary +- Acknowledgements + +About the speaker: + +Blaine Mooers is an associate professor in the Department of Biochemistry and Physiology at the University of Oklahoma Health Campus, where he specializes in macromolecular crystallography. His research focuses on RNA structures and protein-drug complexes important in cancer. +As an avid Emacs user for five years and LaTeX and Python user for 15 years, Dr. Mooers has developed tools to optimize scientific writing workflows. +In this talk, he shares his system for managing academic literature using Org-mode, which he developed as a solution to his frustration with traditional annotated bibliographies. +This new approach enhances scientific creativity and productivity by combining visual memory reinforcement with project-focused knowledge organization. +This approach addresses the challenging reality of scientific research, where focus is often more valuable than breadth. + + + +[[!inline pages="internal(2025/info/bibliography-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/bibliography-nav)" raw="yes"]] + + diff --git a/2025/talks/blee-lcnt.md b/2025/talks/blee-lcnt.md new file mode 100644 index 00000000..3f2925e0 --- /dev/null +++ b/2025/talks/blee-lcnt.md @@ -0,0 +1,119 @@ +[[!meta title="Blee-LCNT: An Emacs-centered content production and self-publication framework"]] +[[!meta copyright="Copyright © 2025 Mohsen BANAN"]] +[[!inline pages="internal(2025/info/blee-lcnt-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Blee-LCNT: An Emacs-centered content production and self-publication framework +Mohsen BANAN (he/him) - Pronunciation: MO-HH-SS-EN, <http://mohsen.1.banan.byname.net> + +[[!inline pages="internal(2025/info/blee-lcnt-before)" raw="yes"]] + +In a sense this is yet another talk about how you +can use Emacs to produce fancy presentations like +this or write complex books and self-publish them. +But our approach is fundamentally different. + +Many talks at previous Emacs Conferences have +described how Emacs and org-mode can be extended +to facilitate content production by adding more to +Emacs. Our approach is that of putting a smaller +Emacs at the core of something bigger. That +something bigger is an autonomy oriented digital +ecosystem called "ByStar" which is uniformly built +with a layer on top of Debian called BISOS (ByStar +Internet Services OS). + +At Emacs Conf-2024 the title of my talk was "About Blee" – +<https://emacsconf.org/2024/talks/blee>. +Blee (ByStar Libre-Halaal Emacs Environment) is that +smaller Emacs packaging that positions Emacs at the core of BISOS and +ByStar. BISOS and Blee are intertwined and +ByStar is about autonomy oriented unified platforms for developing and +delivering both internet services and +software-service continuums. + +This talk is about Content Production and Self-Publication capabilities of +Blee and BISOS. + +Blee-LCNT is LaTeX centric. The original text is always in COMEEGA-LaTeX – +LaTeX augmented by Org-Mode. This is +the inverse direction of exporting LaTeX from Org-Mode. For typesetting, +the LaTeX syntax is far more powerful than +org-mode. And with COMEEGA-LaTeX, you can also benefit from all that +org-mode offers. The scope of Blee-LCNT is all +types of content from presentations to videos to books to name-tags and +business cards. + +LaTeX to HTML translation is done with HeVeA. For +presentation/screen-casting, the original text is then augmented +in layers by images, audio voice-overs, screen captures, videos and +captions. The Beamer LaTeX file is then +processed by both LaTeX and HeVeA. LaTeX produced slides are then absorbed +in html by HeVeA as images. HeVeA output +is destined to be dispensed by Reveal.js. The video is then just a screen +capture of the autoplay of reveal file. +Viewing presentations in their original Reveal form makes for an even +richer experience. + +All of this involves a whole lot of integration and scripting. But all of +that has been done and you can get it all +in one shot by just running one script. + +To get started with BISOS, Blee, and ByStar, visit +<https://github.com/bxgenesis/start>. From a vanilla Debian 13 +installation ("Fresh-Debian"), you can bootstrap BISOS and Blee (with +Emacs-30) in one step by running the +raw-bisos.sh script. It produces "Raw-BISOS" which includes "Raw-Blee". + +You can then add the LaTeX sources for your content as ByStar Portable +Objects (BPO) to BISOS and process +your content with Blee-LCNT. + +All of this and more has been documented in a book that was produced by +Blee-LCNT itself. +The title of that book is: + +Nature of Polyexistentials: +Basis for Abolishment of the Western Intellectual Property Rights Regime +And Introduction of the Libre-Halaal ByStar Digital Ecosystem + +- On Line US Edition: <https://github.com/bxplpc/120033> – Download: + +<https://raw.github.com/bxplpc/120033/main/pdf/c-120033-1_05-book-8.5x11-col-emb-pub.pdf> + +- On Line International Edition: <https://github.com/bxplpc/120074> – + +Download: +<https://raw.github.com/bxplpc/120074/main/pdf/c-120074-1_05-book-a4-col-emb-pub.pdf> +DOI: <https://doi.org/10.5281/zenodo.8003846> + +- US Edition Book Prints At Amazon: <https://www.amazon.com/dp/1960957015> +- International Edition Book Prints in Iran: + +<https://jangal.com/fa/product/252689/nature-of-polyexistentials> + +I welcome your thoughts and feedback, especially if you experiment with +Blee, +BISOS, ByStar, and the model and the concept of Libre-Halaal +Polyexistentials. + +## Discussion / notes + +- Q: all the outputs and the inputs that you mentioned, where are they? + - So they are on GitHub, and this is in one of my slides. I mentioned the URL for it. I'll show you that as well. So the URL for it is https://github.com/bxplpc/180068, which is the handle for this talk. In there, you have all the PDFs and the HTMLs, a citation, a bib input, and also the sources. So if you were to go to the PDF, you will see um, both the article presentation and the beamer, let's take a quick look at the beamer, which is what you have seen. So. And as far as the sources are, there are two primary files. This presentation, left to right, is the one that includes all the LaTeX packages. We might as well take a quick look. So what's in there is primarily the use packages. And then it dispatches to bodyPresArt, and this is where the code is. And I walked through this briefly. So, notice here again that this is a mixture of LaTeX and Org. Each of the presentation slides are here. For example, my introduction is just a video that gets included. And then the notes that I use, the voiceover, is also included in the LaTeX file. Let me... It'll probably be easy to take those voiceover notes and then align them with a tool like Aeneas to make subtitles for your videos. Exactly, and that is what I do. So there is a way to gather them all as P-notes. And so all the P-notes get together in a single file, and then you feed that to Aeneas, and it will align them. And then there is the work of using your subed to just get the right sort of line length on them. But you did all of that for me this year, Sacha. Thank you very much. It was just a matter of not having time. Otherwise, I planned to do it myself. It's all right. It was very easy since he provided the full narration. I still need to tweak it sometimes, so I often use the waveforms in subed to find the right starting time and ending time for things. But it is so nice to have a presentation where you can experience it in different forms, as an article, as a video, as a post with links and everything. Very handy. Right, and in case a teacher uses this for class lectures, then the student profits from all sorts. The article presentation format is very useful for a student to add their own notes to it and the rest. Exactly as you said, having multiple forms is great. Video has its place, reveal has its place, PDF has its place, article has its place. All of them work together. +- Q: what changes have you seen in the culture while developing all + these things like libre-halal system and now blee-lcnt? + - A: We learn from one another. And what I'm doing may be considered just a stepwise increment, but the cultural input is that we really should start thinking about providing solutions as opposed to packages. The FOSS culture is really limited in its scope to packages or even if when you think something very large like Debian, which is a collection of packages. And it is still choice oriented, as opposed to solution oriented. Yeah. Are there any additional topics or questions? Otherwise, I'll just add a few additional concepts. + - I agree with 'Solutions over Packages' phrase :) + - Thank you Mohsen +- Q: Really interesting stuff, thank you for your talk :) Given that large AI companies are openly stealing IP and copyright, thereby eroding the authority of such law (and eroding truth itself as well), can you see a future where IP & copyright flaw become untenable and what sort of onwards effect might that have? Apologies if this is outside of the scope of your talk + - So yeah, over the past two years, something huge has happened. And what I am seeing in there as a solution is essentially comes down to a talk that was given maybe two years ago by someone at EmacsConf, and its label was attribution-based economics. In my thinking, intellectual property as a whole is invalid. But that means that through something like a Affero GPL, you focus on attribution basing, proper attribution basing. If somebody has done some work, it should be clear, no matter what, that that work is his. And that we already, even prior to AI, we were seeing this. We were seeing large GitHub repos with hundreds of authors. And it was utterly unclear as to who would own this whole thing. And any piece of it is not of significance. What is of significance is the whole thing. So moving towards that attribution based economics is key. And then once we do that, and then we accept AI as a reality. AI should still take very seriously and conform to attribution-based economics. In other words, what is generated by the machine should not be claimed to be no one's or the machine owners, the AI owners. It should still clearly be attributed to the people who contributed in its creation. This all becomes very muddy, very clear, and I don't have a simple or clear answer to it. But the perimeters of the solution lie in rejection of intellectual property, replacement of the intellectual property with attribution-based economics, and restrictions on AI use of not properly attributed content. Yeah, I'd say that would be, it's a complicated topic and I would simply say I haven't figured it out at all. I just have a perimeter set of concepts that can be used to drive it. + +[[!inline pages="internal(2025/info/blee-lcnt-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/blee-lcnt-nav)" raw="yes"]] + + diff --git a/2025/talks/bookclub-tapas.md b/2025/talks/bookclub-tapas.md new file mode 100644 index 00000000..3f8f877c --- /dev/null +++ b/2025/talks/bookclub-tapas.md @@ -0,0 +1,425 @@ +[[!meta title="Bookclub tapas"]] +[[!meta copyright="Copyright © 2025 Maddie Sullivan"]] +[[!inline pages="internal(2025/info/bookclub-tapas-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Bookclub tapas +Maddie Sullivan (she/her) - IRC: ElephantErgo, <https://ElephantErgonomics.com>, <mailto:hello@ElephantErgonomics.com> + +[[!inline pages="internal(2025/info/bookclub-tapas-before)" raw="yes"]] + +I've been experimenting with a new programming methodology that I've +stumbled upon. I call it "Bookclub Tapas". It is comprised of two parts, +"Bookclub" and "Tapas". Together, they form a literate-inspired, +Agile-inspired development method which centers around developer +self-reflection as a means to chip away at identifying powerful custom-fit +abstractions. + +Bookclub turns literate programming on its head by having the target +audience of the source document's commentary be its own developer. Bookclub +files contain source code, issue tracking, research, feature requests, and +reflections on the development process all seamlessly integrated into a +single file. Developers no longer have to worry about keeping track of what +they want to be doing, why they want to do something, or even the full +picture of how to go about doing something, because the Bookclub file acts +in cooperative conversation with the developer as a living record of their +hopes, intentions, and efforts. + +Tapas is the idea that instead of writing stand-alone programs, we write +library ecosystems. Instead of getting ahead of ourselves by trying +immediately to write large programs to solve large problems, we instead +focus on writing abstractions that reduce the scale of our problem. Our +goal is to identify what sort of tool would make the problem at hand +trivial to solve, implement said tool, and even work recursively to +implement tools to implement our tools. Our goal is that each next level of +abstraction is roughly a three-line trivial case of the level of +abstraction below, and eventually the solution to our initial problem is +itself trivial. + +Over the course of the talk, I intend to dive into what is Bookclub, what +is Tapas, what do they look like when used together, and why they provide a +meaningful set of methodologies both for getting real work done and also +elevating the programming process' beauty. I will use a live demo centered +around light development on a real-life yet-to-be-released Emacs Lisp +package. I intend to showcase how Org Babel enables Bookclub by allowing +for incredibly malleable documents that seamlessly integrate source code, +documentation, issue tracking, research, and even the build process. I also +intend to showcase how the Emacs Lisp macro system enables Tapas by +allowing us to recontextualize and reinvent syntax in order to build +powerful, composable abstractions that do exactly what the context calls +for while using phrasing that is both natural and intuitive. + +About the speaker: + +Hi! I'm Maddie Sullivan, my pronouns are she/her, my handle is +ElephantErgonomics (ElephantErgo on IRC), and my email is +hello@ElephantErgonomics.com. My talk is on a programming methodology I've +stumbled into that I've come to call "Bookclub Tapas". It's inspired by +literate, agile, and last year's Emacsconf! I've had great success with it +for my personal development process, and I'm hoping you can get something +out of it as well. I'll be laying out what it is, how I found it, why Emacs +makes an awesome environment for it, and how you can get started with it +too! + +## Discussion / notes + +- Q: I missed the beginning of the talk... did you show examples of + files in bookclub style? that seems to be related to what I've been + doing, but coming from different influences... + - [https://github.com/ElephantErgonomics/Squint](https://github.com/ElephantErgonomics/Squint) + - A: So I included a... Let me see, I'm just looking at the IRC + here and smiling at all the people. So, yes, I provided a link. + So I think that an excellent... So I have gone ahead and + provided the link to the repo and I'm going to go ahead and + post that again. So this should serve as a full example of what + a just sort of standard book club file looks like. And if anyone + has specific questions about anything in particular, they would + love to see my walkthrough and narrate specifically, you know, + any place in this file that they would like to see me go over + live, I would be super happy to do that. So I have the whole + more or less complete book club file for Squint pulled up here. + Yeah, I have my vision laid out, which has my initial sort of + goal. The background and the vision sort of combined to lay out + what my general sort of goal is. +- Q: The product of a Tapa like squint.org would be pure GOLD for an + agent like Claude Code - have you experimented with providing an + agent with the final output and letting it chew through todos? + - A: The product of a tapa like squint.org would be pure gold for + an agent like Claude Code. Have you experimented with providing + an agent with a final output and letting it chew through to-dos? + That would be a really excellent question. I actually just kind + of recently got into Claude in particular. I played quite a bit + with GPT and and a lot of 8 billion parameter local models. And + I was never super impressed. It always felt like I was just sort + of wrangling to get it on the same page, whether as a result of + sycophantism or really just not having enough parameters in + order to understand the context of what's going on. Claude has + completely changed my perception of what an LLM can do or not. + It makes autonomy not seem like a total fever train. I have + definitely been curious about how an LLM would react to book + club files. I think that, yeah, especially like, I've been + daydreaming a little bit about, you know, having it generate + scratch artifacts or suggesting, you know, changes to the + format. It's like, yeah, the fact that this is all like, you + know, like super, The goal and the hope for all of this is that + we're being verbose about our thinking anyway. This is sort of + how, by default, deep reasoning kind of works. + - I actually think that I totally agree. It would be a great fit. + I have yet to personally do it, because I've always been just a + little bit wary about, like, you know... Well, if I'm writing + a program, I want to write it, you know? People often talk + about, like, you know, oh, I just want to hand off the boring + parts to Claude. But the thing is, if I'm writing in Elisp, I + find the whole thing to be kind of fun. I'd be super interested + in, you know, just sort of as a point of exercise, seeing what + it's capable of. Because I think, I really do think that this + would be kind of an ideal environment. It is kind of close to, + you know, native-ish, how LLMs think. There's also, like, you + know, of course, the, um, the privacy angle. I don't + necessarily want to provide a whole bunch of code verbatim that + I intend to GPL3. But I believe that Claude kind of has a better + policy in terms of what does and does not become training data. + I'll have to look into Claude in particular because I feel like + that would be my target for it. But yeah, I think that's + definitely onto something. I've definitely thought about this. + I've definitely been really curious about this. +- Q: Do you think every Tapa should have it's own Bookclub file as + well? Or would you rather keep just one bookclub file in the top of + the project? + - So I think that I definitely would advise that each Tapa have + its own book club file. The reason being is because I find that + for me personally, the way that my brain kind of works is that + out of sight, out of mind is very literal for me. I find + that... I find that... What am I thinking of? Sorry, I just + saw that I got an email and I'm like, yeah, okay, cool. Case in + point, right? We are at case in point, you know, out of sight, + out of mind. Yes, no, absolutely. Yeah, no, exactly. I, um, I'm + definitely quite ADHD and it works for my advantage because it + provides all sorts of versatility. This is another great + advantage of book club. If you have an ADHD mind like I do + where, you know, You love jumping around and working on all + sorts of different pieces simultaneously. You don't like + sitting down and doing the same thing all day unless it really + latches onto you. You know, you can pivot and you don't do + anything. It really rewards the fact that you can pivot. So I + find that to be really excellent. + - But to go back to the original question, I would definitely + recommend, at least in my circumstance, I find it to be + incredibly useful to have each tapa be its own book club file + rather than to have a unified file that holds all of your tapas. + You can definitely do this, especially if you're using org to + organize it hierarchically. It's just sort of a matter of + preference and style at that point. So long as you're making a + clear distinction between your tapas, that's the main thing + that I would recommend no matter what, because the whole hope + that I have is that you have a sort of separation of focus + between the different you know, the different focuses of your + different tapas, they really should ideally feel like different + programs so that you're not, you know, getting over yourself, + getting ahead of yourself. + - I think that, you know, on that basis, I would probably default + to recommending that tapas have their own separate book club + files, because ideally they should kind of be different sort of + independent but related thoughts. But at the same time, I mean, + like, you know, this is coming from someone who like has a + billion small, like, you know, I had one giant org file for a + long time and then realized that really didn't work for me. So + now I have a billion tiny ones. So depending upon how you feel + about, you know, should I have one really big org file or a + bunch of really little org files? I feel like that more or less + gives your answer. I think it's whatever works best for you. I + know that far and away what works best for me is having separate + files. No matter what, you should have separation of concept + though. But however you do that is, you know, is best your + judgment call. + - ([Sacha]: Oooh, if you're jumping around a lot, C-u + org-refile is great for that, set it up with your agenda + files) + - Thank you! Makes sense! :-) +- Q: How do you build habits when it comes to documentation? I tend to + produce lots of documentation in one go, then effectively "forget" + to do it for long periods of time, and end up playing catch-up which + results in a loss of precision as you aluded to in your talk. In a + work setting, when something goes on fire or priorities change, it + can be hard to keep discipline. Would love your thoughts, thanks! + - A: Yes, absolutely. So what I tend to do is I don't... So + really, so far, what I've been doing is that I haven't been + making a conscious priority of writing documentation at all. And + if that sounds contradictory to the talk, that is correct. What + I mean by this is that I go about is that when I'm writing + code, when I'm writing, you know, drafts of my functions, the + way that I tend to approach this, the way that I really + emphasize the approach for it, is that I want to focus first and + foremost on sort of like just writing down what my internal + monologue is for what I'm doing for that pass working on the + file. So my document takes ultimate... Distance of doc is + ultimately a property from the fact that I am writing what I'm + doing as I'm doing it. And it's more or less just I'm just + mashing out the stream of consciousness of what's going on + inside my head as it's happening. + - So if we go down and we take a look at, yeah, so let's go ahead + and take a look back at the macro. Yeah, really, this is kind of + cheating, because mostly I would consider this to be + self-documenting, but we all kind of know that that in and of + itself is a slippery slope. That's not great. Because it's + like, I could believe that this would be self-documenting if + this was a three-liner. It is not. which, you know, also goes to + show me that this needs to be splitting into its own Tapas I + intend to, you know, write a Tapa that's a sort of macro + builder that automatically, you know, does the gensyms for you. + Something along the lines of what's the Common Lisp macro for + that called? It's like, there's some Common Lisp faculty that + does automatic gensym binding. I can't quite remember what + it's called. A prior version of this talk had my live coding + that, but that ended up sort of distracting from what I kind of + wanted to nail out and focus on. + - But really kind of what I do is that, let me see here if I can + find some sort of... Yeah, so I have in my research section + sort of layout like what the quirks of all this sort of are. I + think my development focuses contain a little bit of what could + be ultimately considered to be documentation. Yeah, as I'm + looking through all of this, I'm kind of realizing that like, + you know, yeah, there's stuff that I'm into documentation + here, but it's all a little ad hoc. You know, I would, in part, + the design of this particular tapa is arguably not currently, + but is going to be simple enough such that a doc string is + sufficient for documentation. That is not the case currently. +- Q: How do you write examples and tests? I think that you mentioned + that during the talk, but I couldn't find them on a very quick look + at your org file in the squint repo... + - My use of the word test was a little bit creative. It's my + validation of the code that I've written. I more or less tend + to do a, I tend to try and write really small functions and have + really aggressive validation by just making sure that, like, you + know, when I chain functions in the REPL, each step of them + produces results that are really quite immediately and + self-verifiably seen. Now, this isn't a great excuse to not use + a test suite, but it's gotten me pretty far. + - What I mean by tests is that in the research sections, what + I've done is, so I've created a sort of tested in the sense + that I have created a really highly representative case of the + way that the program ultimately ought to behave. In doing so, I + created a sort of embedded domain language that I have termed + Animal Houses. And Animal Houses is a sort of markup language + that has rather simple rules. This here is the entirety of the + spec for Animal Houses. Grammar or anything, but like, it is + more or less. Breadth of everything that needs to be known about + how Animal Houses works. And I've created Animal Houses because + it is an ideal and incredibly simple circumstance for how to go + about as-needed tests for how Squint ultimately ought to work in + practice. So when I'm doing research, what I do is I take the + text of animal houses, and I will go ahead and insert it into a + buffer. And I'll just create an analog buffer. I just called it + awoo. + - And then what I'll do is in my research sections, I will + write... Like I'll write like step-by-step instructions on how + to go about with a REPL-driven detection using Animal Houses. So + it does squint pass label to :with-restriction: correctly. The + tests conducted here indicate that it does not. And then I link + to a development focus that effectively acts as my bug report, + or, sorry, my bug listing for this particular problem that I've + identified. I lay out some criteria of how to go about using the + REPL to... you know I identify what I believe is sort of like + the quarantined area that I found for the bug, and then test is + that I will go about engaging with narration the step-by-step of + how I produce the circumstances around the bug until I + ultimately narrow all the way in and arrive at a conclusion. + - Yeah, this is the sample text for animal houses. This is the + spec, not a formal grammar, but it is more or less the whole of + the spec that you need to write a parser for animal houses. Most + of the tests around Squint involve writing ad-hoc parsers for + animal houses. Just when I have it in its own buffer, you know, + I find, more or less, it's an excellent way of going about + testing in an ad-hoc sort of REPL-driven manner that I just sort + of write regular... that pull out the pieces of the sections of + buffer that represent the different fields and data types in + association with the animals and the houses to which they + belong. And then when I am engaging in research, what my + research section is, is I'm ultimately just laying out, like, + you know, I'm thinking to myself, is this working right? I feel + like there's something here, something in this area. And I'll + ask myself, well, what is it, what am I looking for? And then + nail down, how am I going to go about looking for it? The + process of working with the REPL to pin down what exactly is + going on and come to a conclusion on... +- Q: what is the largest project in terms of team size you had the + chance to consult and introduce the Bookclub Tapas concept and what + have been your experiences with these setups (implying larger + applications / solutions a company is working on)? + - A: It's been interesting. So in regards to this, the largest, I + would say two people in a couple of different circumstance. So + it's the pair of us working in a startup context. And then, you + know, we both have like rather technical backgrounds. We can + both more or less, you know, You know, sort of reason about + particularly excite, especially as we've been building up top + us is that, you know, well, we're both rather technical. You + know, I'm definitely software engineering sort of end. And, you + know, this partner is more. I mean, he's done all sorts of + different engineering, but none of it in a, like, especially + software context. So like, you know, but what's been really + cool about that is that especially as we've built up top us and + made clear distinctions about what they ought to do, you know, + he doesn't have a ton of like really, he doesn't like + experience like specifically in software engineering, but + because we have it all laid out in this really flexible way, + he's able to pick up the ball and like, you know, like he's + able to take the ball and run with it. because it's all laid + out in a way that's so intuitive. Like, you know, he's able to + like collaborate with me and like, you know, like, you know, run + off these ideas and like really go for it. Like, you know, + almost as quickly as I can, just because we've set up a + structure where like all of the different pieces have these + really intuitive and intrinsic and straightforward roles. And + that's, that's something that's really exciting in of itself + that I didn't really go over in the talk. Like a managerial + perspective, this is actually a really excellent way of + understanding the whole context of like what the software stack + looks like. Because it's like, you know, it makes it more + intuitive for developers for sure, but it makes it more + intuitive for everyone. You know, it's on that basis that I + can't imagine clients like just a better way at this point. Um, + that was that was the other circumstance where I have been + working with a partner. This has been with, um, you know, I + would be, uh. You know, sort of going back and forth with + someone who had hired me. Um, to, uh, like, you know, to work on + contract. And I would use this to sort of go over with them + about, um. Sort of get a solid idea of scope and function, do + pre-planning as we're going into more specifics on what the + overall look for the project and how it ought to look and how it + all ought to be laid out. So there's a lot of really exciting + flexibility there that I think is really cool. +- Q: people will also be curious about the mechanics of collaboration: + other person uses Emacs and Org? Shipping things back and forth via + git / version control? CRDT? + - A: Screensharing, I'm stepping through the buffer by hand. + Using Emacs+Org is a bit to ask. I love the idea of crdt, would + love to use it with someone someday. Also would be nice to have + people thumb through individual Tapas in the stack. + - Note: (ah, maybe Org publishing for ease of + reference) + + - Maybe a read-only version of the Org, making + screensharing a little bit neater. +- Q: Have you experimented with something like whisper.el for doing + speech-to-text as you think out loud into your Bookclub? Might also + be fun to hook it up to Org-capture to link to whatever you're + looking at and then save it to your file + - A: Have you experimented with whisper.el for doing speech to + text as you think out loud into your book club? Now I am. I love + that idea. That is awesome. Yeah, no, I love that. + - [Sacha]: Even with... I only have a CPU, no GPU on mine, it + does capture things a lot faster. And because it actually saves + the recording to a WAV, or I guess you can configure it, in case + it doesn't recognize something well, you can go back and check + it. That's nice. I like that more than a straight speech-text + thing. I've been mulling over the idea of having a keystroke + save into a background buffer so that even when I'm looking at + something else, I can dictate into my equivalent of the book + club file. + - [Maddie]: Yes, yes, yes, absolutely. So you can be scrolling + through documentation on, like, you can be scrolling through + documentation on one screen and you can be musing to yourself + about, like, you know, is this supposed to work this way? Like, + you know, like, what in terms of, like, you know, like, I see + this function. It sounds like it's what I'm looking for. I + don't know if the types are quite right. I don't understand. + It's named what I'm looking for, but I don't know what it's + taking in. You can reason through all of this. You're not even + writing into the buffer that you're working with. That's + actually so cool. + - [Sacha]: Or you can tie it into the org capture process so + that it can pick up an annotation automatically. Sorry, + annotation is the link to the thing, whatever you're looking + at. + - [Maddie]: Oh, that's super cool. Yes. No, I actually really + love it. I haven't, you know, hooking this all up to Org + Capture at all. I actually really love that idea in and of + itself. Yeah. + - [Sacha]: Org capture will give you a lot of capture options. + You can capture to your currently clocked in heading. So then it + just files your note in the right place automatically. + - [Maddie]: Absolutely. I love that. Let me see. I'm actually + like writing a note to try that out. I'm definitely going to + have to do that. Like the flexibility of that in particular + sounds just perfect. + - Also related: + [https://newsletter.pragmaticengineer.com/p/san-francisco-is-back?open=false#%C2%A7wispr-flow-a-new-modality-for-programming](https://newsletter.pragmaticengineer.com/p/san-francisco-is-back?open=false#%C2%A7wispr-flow-a-new-modality-for-programming) +- Q: I guess a major pro is it has less friction as people can do (a + lot, maybe not everything) in BookClub Tapas file vs. having to log + into gazillions of different systems, each one of them keeping a + portion of the information. Did I get that viewing point right from + your elaboration of the collaboration between you and your team + mate(s)? + - A: + +- i appreciate how easy this is to follow +- i think i'm already getting an idea of how this comes together +- Important caveot on this callout: The Emacs community has been really great about this, but this is a pain point of software development as a whole 😛 +- I don't think I've ever written really excellent documentation... +- i don't think i've ever written even decent documentation +- I don't know if I have ever written excellent documentation but I do actually enjoy writing it. But partly because I do tend to approach projects the way you are describing in this talk! And I like having a name for this process! +- one of my ways of writing a mix of tests, examples and documentation is here: https://anggtwu.net/eepitch.html#test-blocks +- +- modern world, no time to read or write it anymore +- A: I'm so glad to see that people are noticing bits and pieces of already doing all of this! 😊 I definitely found a lot of what I arrived at out in things that we're already doing. My hope was to formalize, name, and pull it all together 😊 +- “Clean Code" from Robert C. Martin ("Uncle Bob") is also worth taking a look and his views on documentation and so on. + - A: Clean Code is definitely a big inspiration for me, and I would highly recommend just about anyone read it. I don't think all of it is *perfect*, but *all* of it is worth considering +- i definitely think this has a good balance between complexity and simplicity +- Thank you! 👏 +- Great talk! +- Excellent work! +- great talk +- Interesting concept! Now I'm thinking about how can I adopt it +- I definitely noticed the utility of this process for ADHD +- Would be very cool to record buffer information to effectively bookmark the context for that stream of thought +- https:////newsletter.pragmaticengineer.com/i/177384640/wispr-flow-a-new-modality-for-programming "In the office, every desk is fitted with a $70 BOYA Gooseneck microphone, into which devs whisper" + + +[[!inline pages="internal(2025/info/bookclub-tapas-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/bookclub-tapas-nav)" raw="yes"]] + + diff --git a/2025/talks/calc.md b/2025/talks/calc.md new file mode 100644 index 00000000..d7a6faee --- /dev/null +++ b/2025/talks/calc.md @@ -0,0 +1,60 @@ +[[!meta title="Basic Calc functionality for engineering or electronics"]] +[[!meta copyright="Copyright © 2025 Christopher Howard"]] +[[!inline pages="internal(2025/info/calc-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Basic Calc functionality for engineering or electronics +Christopher Howard (he/him) - IRC: lispmacs or lispmacs[work], gemini capsule: gemini://gem.librehacker.com, <mailto:christopher@librehacker.com> + +[[!inline pages="internal(2025/info/calc-before)" raw="yes"]] + +An introduction to some of the basic Algebra and Calculus functionality in Calc, as might be useful in engineering or electronics. + +About the speaker: + +Christopher Howard is a simulator technician in Fairbanks, Alaska, and a GNU Emacs user for a little over a decade. My technical interests are focused on analog computing and modeling with differential equations. + +## Discussion / notes + +- Q: How sophisticated an ordinary differential equation solver would + be useful? There are some C libraries one ould try to build upon, + but there are many corner cases, stiff, non-stiff is one + categorization, but an explicit Runge Kutta would work for many + non-stiff equations + - A: I don't really have any opinions right now about the + approximation methods. For me, what I really want is one of + those old style languages where you basically just type in the + list of differential equations and don't have to do any other + computer programming, or know the details of another programming + language. I played around a bit with python-dda, though it has + some deficiencies. There are some graphical free software + programs where you do this sort of thing with blocks, but they + all depend on Java which is problematic in Guix. +- Q: Is there a way to see the input of a custom function? E.g. if you + forget the order of f and C in the example you showed + - A: Let's see... there is calc-user-define-edit. One calc also + view the file where the definitions are stored, though that is a + somewhat obscure format. +- Q: Have you tried interacting with calc via org-babel (first thing + that came to mind when you said that you'd like to annotate + values)? Any thoughts on that? How about rendering gnuplots on org + documents via calc? + - A: I played around with babel once like two years ago, trying to see if it would make more sense to use babel or one of those jupiter notepad things. But I guess I haven't really had any need to play around with either one since then. I don't really have any need to produce plots on org documents right now, but it is an interesting idea. +- Q: Who is in charge of calc development anyway? Is there an active maintainer? +- Nice talk. +- Thanks for the cool talk! I've been using Calc quite a lot recently for linear algebra work. I also use it quite often for unit conversion. There's a package called calc-currency which is very useful but unfortunately does not seem to be maintained anymore. +- I'm going to have to rewatch this talk. +- thanks for your talk! Calc strikes me as one of those really powerful things I should spend time learning a little more about one of these days =) +- calc is suprisingly good at datetime math. +- I mostly use it for that and unit conversion. I don't do any fancy calculus like lispmacs did in his talk. +- Funny, I'm studying computer engineering and just a few weeks ago I'd decided to properly learn how to use calc myself. +- Interesting descriptions of stargazing on Christopher Howard's gemlog + +[[!inline pages="internal(2025/info/calc-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/calc-nav)" raw="yes"]] + + diff --git a/2025/talks/claude-code.md b/2025/talks/claude-code.md new file mode 100644 index 00000000..0e4c198c --- /dev/null +++ b/2025/talks/claude-code.md @@ -0,0 +1,69 @@ +[[!meta title="emacs-claude-code: Intelligent Claude Integration for Emacs"]] +[[!meta copyright="Copyright © 2025 Yusuke Watanabe"]] +[[!inline pages="internal(2025/info/claude-code-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# emacs-claude-code: Intelligent Claude Integration for Emacs +Yusuke Watanabe (he/him) - Pronunciation: you-SKAY wah-tah-NAH-bay, GitHub: <https://github.com/ywatanabe1989/emacs-claude-code>, <mailto:ywatanabe@alumni.u-tokyo.ac.jp> + +[[!inline pages="internal(2025/info/claude-code-before)" raw="yes"]] + +As AI coding assistants become essential development tools, integrating +them seamlessly into our Emacs workflows becomes crucial. This talk +introduces emacs-claude-code, a package that transforms how Emacs users +interact with Claude Code through intelligent automation and enhanced vterm +integration. + +The main challenge with terminal-based AI assistants is the repetitive +manual interaction required. Claude Code presents various prompts (Y/N +choices, waiting states, continuation prompts) that interrupt the +development flow. emacs-claude-code solves this by introducing smart +auto-response patterns that recognize Claude's state and respond +appropriately, allowing developers to maintain focus on their code rather +than managing the AI interface. + +Key features I'll demonstrate include: + +1. **Intelligent Auto-Response System**: Automatically handles Claude's various prompt states (INITIAL WAITING, Y/N, Y/Y/N, WAITING) with customizable responses. This allows uninterrupted AI-assisted coding sessions. + +1. **Centralized Buffer Management**: A dashboard view of all Claude sessions showing their current state, auto-response status, and last interaction time. Users can quickly navigate between multiple AI conversations and toggle automation settings. + +1. **Yank-as-File Functionality**: Elegantly handles large code snippets by saving them as files instead of cluttering the terminal, with full TRAMP support for remote development. + +1. **Periodic Command Automation**: Executes custom commands at specified interaction intervals, perfect for maintaining context or triggering regular actions like compacting conversation history. + +The package leverages Emacs' powerful vterm-mode to create a robust +integration layer. I'll share implementation details about state detection +using regular expressions, buffer management techniques, and the advice +system used for seamless clipboard integration. + +Beyond the technical implementation, I'll discuss practical workflows that +emerge from this integration, including custom Claude commands (stored as +Markdown files) that can be triggered automatically based on context. The +talk will include a live demonstration showing how these features work +together to create a fluid AI-assisted development experience. + +This project embodies the Emacs philosophy of extensibility and automation, +making cutting-edge AI tools work the way Emacs users expect - efficiently, +automatically, and under their complete control. + +About the speaker: + +I'm Yusuke Watanabe, a researcher who uses Emacs for both academic work and +software development. After experiencing friction with manual Claude Code +interactions, I developed emacs-claude-code to automate repetitive tasks +and integrate AI assistance smoothly into Emacs workflows. This project +represents my approach to making modern AI tools work within the Emacs +ecosystem while maintaining the editor's core principles of efficiency and +user control. + + + +[[!inline pages="internal(2025/info/claude-code-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/claude-code-nav)" raw="yes"]] + + diff --git a/2025/talks/commonlisp.md b/2025/talks/commonlisp.md new file mode 100644 index 00000000..df968e08 --- /dev/null +++ b/2025/talks/commonlisp.md @@ -0,0 +1,88 @@ +[[!meta title="Common lisp images communicating like-a-human through shared emacs slime and eev"]] +[[!meta copyright="Copyright © 2025 screwlisp"]] +[[!inline pages="internal(2025/info/commonlisp-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Common Lisp images communicating like-a-human through shared emacs slime and eev +screwlisp (he/him, they/them) - IRC: screwlisp, <https://gamerplus.org/@screwlisp>, <https://screwlisp.small-web.org/> + +[[!inline pages="internal(2025/info/commonlisp-before)" raw="yes"]] + +Demos a typical orgmode user's regular useages, segueing into Eduardo Ochs' +eev executable-logs emacs style generally emphasising language/target +interoperability ANSI common lisp / C / emacs lisp / org-mode / eev homed +around eev. + +On the theory that an agent is intelligent to the extent it is +human-relatable, an autonomous software agent is started which receives +messages pushed to an emacs lisp list, but otherwise does its own thing +using eev eepitch, just like the human does. + +Good as a normal lisp-user emacs example underscoring the org-mode and eev +focused talks feeding into using software agents that use emacs/eev exactly +like the human does via my port to emacs of Sandewall's 2014 Leonardo +system software-individuals release. + +Naturalistic style. + +- Blog <https://screwlisp.small-web.org> +- Mastodon <https://gamerplus.org/@screwlisp> + +Some related blog articles. + +- <https://screwlisp.small-web.org/software-individuals/same-universe-multiple-agents> +- <https://screwlisp.small-web.org/software-individuals/trivial-program-that-never-stops> +- <https://screwlisp.small-web.org/software-individuals/fipa> +- <https://codeberg.org/tfw/pawn-75> + +Weekly shows past. + +- <https://communitymedia.video/c/screwtape_channel/videos> +- <https://toobnix.org/a/screwtape/videos> + + +Q&A will be on IRC and in LambdaMOO. + +**Q&A in LambdaMOO**: + +As an experiment, screwlisp will also be taking +questions from LambdaMOO. Here's how to join: + +1. Use `M-x telnet` to connect to `lambda.moo.mud.org 8888`. Alternatively, you can use a web-based client like https://mudslinger.net/play/ or rmoo.el (see rmoo.el note below) +2. `connect Guest` to connect as a guest. If that doesn't work, please ask in `#emacsconf-org` and we'll try to get you sorted out. +3. Agree to the terms by typing `YES`. +4. Teleport to where the speaker is by typing `@join screwtape`. + +To say something, start with `"` and omit the ending quotation mark, like this: `"Hello everyone!`. To say something to a specific person, start with a backtick (`` ` ``) and the person's nick, then your message, like this: `` `sachac I made it to LambdaMOO``. Use `help communication` to learn more about other communication tools, such as `:` for emoting and `whisper` for sending private messages. + +rmoo.el note: You may need to define process-kill-without-query if it doesn't exist on your computer. Here's a use-package declaration that might be a good starting point. If your version of use-package doesn't support `:vc` yet, you can check out the code from https://github.com/toddsundsted/rmoo and add it to your load-path, or use `M-x telnet` for now. + +``` +(use-package rmoo + :vc "https://github.com/toddsundsted/rmoo" + :init + (unless (fboundp 'process-kill-without-query) + (defun process-kill-without-query (process &optional flag) + (set-process-query-on-exit-flag process nil) + t)) + :config + (rmoo-worlds-add-new-moo "LambdaMOO" "lambda.moo.mud.org" "8888")) +``` + +You can also ask questions via BigBlueButton, Etherpad, or IRC, and the host will try to make sure your question gets to the speaker. Enjoy! + +About the speaker: + +Flocking lisp images with Screwlisp (Lispy Gopher Climate and +<https://screwlisp.small-web.org/>). + + + +[[!inline pages="internal(2025/info/commonlisp-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/commonlisp-nav)" raw="yes"]] + + diff --git a/2025/talks/completion.md b/2025/talks/completion.md new file mode 100644 index 00000000..a074b568 --- /dev/null +++ b/2025/talks/completion.md @@ -0,0 +1,36 @@ +[[!meta title="corfu+yasnippet: Easier than I thought"]] +[[!meta copyright="Copyright © 2025 Pedro A. Aranda Gutiérrez"]] +[[!inline pages="internal(2025/info/completion-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# corfu+yasnippet: Easier than I thought +Pedro A. Aranda Gutiérrez (he, him) - <mailto:paaguti@gmail.com> + +[[!inline pages="internal(2025/info/completion-before)" raw="yes"]] + +I describe my experience in "getting rid" of company-mode and +transitioning to corfu. I now have yasnippets integrated with +a couple lines Emacs Lisp. The main advantage is that with I +need less packages and configuration, specially on master. +The talk will include some code snippets that show it was +easier than expectedand a life demo. + +20 minutes (with demo) + +About the speaker: + +After 30 years using Emacs, professionally and for my PhD, I'm currenly +quite involved in org-mode, where I'm revamping the LaTeX backend. +To do this, I needed a new approach to auto-completion because +company-mode started requiring too much code and integration. + + + +[[!inline pages="internal(2025/info/completion-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/completion-nav)" raw="yes"]] + + diff --git a/2025/talks/gardening.md b/2025/talks/gardening.md new file mode 100644 index 00000000..e8882c7f --- /dev/null +++ b/2025/talks/gardening.md @@ -0,0 +1,84 @@ +[[!meta title="Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph"]] +[[!meta copyright="Copyright © 2025 Marco Bresciani"]] +[[!inline pages="internal(2025/info/gardening-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Gardening in Emacs: A Windows user's tale of tending, tweaking, and triumph +Marco Bresciani - Pronunciation: [mˈarko breʃˈanɪ](https://unalengua.com/ipa-translate?hl=en&ttsLocale=it-IT&voiceId=Giorgio&sl=it&text=Marco%20Bresciani&ttsMode=word&speed=3), [Delta Chat](https://i.delta.chat/#F4A07D3A629AC049257C7D02271C8AB34DA36085&i=BzsU0ErXsb1QHvQVnkVpKC3N&s=8DaaDMCc1_yNnJOTv9OO5AFD&a=26sjhl7dn%40nine.testrun.org&n=MB), [@AAMfP@fosstodon.org](https://fosstodon.org/@AAMfP), [marcoxbresciani.codeberg.page](https://marcoxbresciani.codeberg.page/) + + + +[[!inline pages="internal(2025/info/gardening-before)" raw="yes"]] + +I'm a not-ashamed Windows user, both at +work and at home, since forever. I also like portable applications, to +bring everything I need, everywhere, on my tiny USB thumb drive. +And now also Emacs is there, on my USB! + +I'm also not the blogger type of person: I've tried, for a time. I +stopped at entry ~8 of a "100 days blogging" saga. + +But I actually immediately fell in love with the (possibly slower pace) +digital garden concept and since I wanted to try Emacs, I decided to +catch two pigeons with one stone. + +This is the story of how I learned the very basics of Emacs and Org Mode, +from how to save and exit to how to change letters case of a whole region +or the (long searched for) fill-paragraph feature. + +This is the story of how I learned Org Mode publishing configuration and +tricks, to create my digital garden, give it a structure and make it +freely available for anyone to read (and hopefully enjoy) in HTML format. +This is the story of how I added Japanese furigana and PlantUML diagrams +and a <del>one</del> few clicks-away "go to market" strategy. + +This is the story of my digital garden, how I tend to it while learning +the tool(s) I'm using to care of my garden, Emacs and Org Mode. +And this is the story of how I ask for your help, to continue learning +Emacs and Org Mode. + +About the speaker: + +20+ years software +developer and Vi user during university life, now moved to the dark side +of agile coaching as Scrum Master. +Started learning Emacs by chance since I wanted to try it since ages. + +## Discussion / notes + +- Q: Have you faced any major problems while using emacs in Windows? + - A: Hello, thank you for the message and sorry for the delay, + messy days... No major issues till now, but I'm basically + using it just like any other text editor, mainly for my Org Mode + garden. +- Q: What do you run when you want to publish content from your org + files to your web page on codeberg? + - A: Hello, thank you for the message and sorry for the delay, + messy days... Basically, as I wrote here + [https://marcoxbresciani.codeberg.page/digital-garden.html#garden-my-garden](https://marcoxbresciani.codeberg.page/digital-garden.html#garden-my-garden) + I open my publish.el file and evaluate it (M-x ev-b). Then I + usually (but it's just an habit) switch to the index.org file + and run the export-publish-project command (C-x C-e P p) that + will automagically generate all the needed HTML files for the + org files that have been updated or changed since last time. +- [https://marcoxbresciani.codeberg.page/](https://marcoxbresciani.codeberg.page/) + - [https://codeberg.org/marcoXbresciani/pages](https://codeberg.org/marcoXbresciani/pages) +- Lovely talk, thanks! =) +- Ok, loved the humour in this, and yes an `outlook' email in this + day and age, SIN!! :P + - It is fine, the way to freedom is a ladder. +- Nice talk +- Thank you every one. Hope this message will reach you. Sorry messy + days... +- I'm loving this talk. I admit that I was influenced by his accent, but the ideas are great +- i like his philosophy on customization/configuration. (make it your own) + + +[[!inline pages="internal(2025/info/gardening-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/gardening-nav)" raw="yes"]] + + diff --git a/2025/talks/gmail.md b/2025/talks/gmail.md new file mode 100644 index 00000000..2768748b --- /dev/null +++ b/2025/talks/gmail.md @@ -0,0 +1,64 @@ +[[!meta title="org-gmail: A Deep Integration of Gmail into Your Org Mode"]] +[[!meta copyright="Copyright © 2025 Bala Ramadurai"]] +[[!inline pages="internal(2025/info/gmail-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# org-gmail: A Deep Integration of Gmail into Your Org Mode +Bala Ramadurai (he/him) - <https://balaramadurai.net>, <mailto:bala@balaramadurai.net> + +[[!inline pages="internal(2025/info/gmail-before)" raw="yes"]] + +For many, email is the starting point for tasks, projects, and reference +material. While Emacs has powerful, full-featured mail clients like Gnus +and mu4e, they are designed to manage the entire email workflow. + +org-gmail offers a different approach: it is not a replacement for a full +mail client, but a tool for deeply **integrating** your most important emails +into your Org Mode knowledge base. + +This talk will introduce org-gmail, a package that allows users to fetch +entire Gmail threads or individual messages and save them as entries in Org +mode files. The core idea is to triage emails in the Gmail interface and +pull relevant threads into Org Mode, where they can be linked to tasks, +notes, and projects. + +We will explore the key features of the package, including: + +- Fetching emails by label and syncing new messages for previously downloaded labels. +- Managing labels directly from Emacs, including creating, deleting, editing, and bulk-moving threads between labels, which updates both Gmail and the corresponding :LABEL: properties in your Org files. +- Performing common email actions from within Org Mode, such as replying, forwarding (delegating), snoozing (deferring), and moving messages to the trash. +- Integrating emails into a task management workflow by creating actionable sub-tasks that appear in the agenda. + +The session will demonstrate practical use cases for both Getting Things +Done (GTD) and the P.A.R.A. method (Tiago Forte). For GTD, we'll show how +to process a Gmail inbox, download actionable emails into an Org file, and +then defer, delegate, or create TODO items. For P.A.R.A., we'll demonstrate +how to label emails according to projects and areas, and how to archive +them systematically using the bulk-move feature. + +By the end of the talk, attendees will understand the unique workflow +org-gmail enables and how it can help them turn their email into a +structured, actionable part of their Org Mode system. + +About the speaker: + +Bala Ramadurai is an entrepreneur, professor, author, coach, consultant, +and podcaster. He is the CEO of Spirelia, a company that helps innovate. He +has authored a book called Karmic Design Thinking and holds 3 patents. + +In this talk, Bala will introduce org-gmail, a package he developed to +seamlessly integrate Gmail with Org Mode. You will learn how to transform +your important emails into actionable tasks and reference material, +leveraging the power of Org Mode for a more organized and productive +workflow that supports methodologies like GTD and P.A.R.A. + + + +[[!inline pages="internal(2025/info/gmail-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/gmail-nav)" raw="yes"]] + + diff --git a/2025/talks/gnus.md b/2025/talks/gnus.md new file mode 100644 index 00000000..b1d37df5 --- /dev/null +++ b/2025/talks/gnus.md @@ -0,0 +1,94 @@ +[[!meta title="Reading and writing emails in GNU Emacs with Gnus"]] +[[!meta copyright="Copyright © 2025 Amin Bandali"]] +[[!inline pages="internal(2025/info/gnus-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Reading and writing emails in GNU Emacs with Gnus +Amin Bandali (he/him) - IRC: bandali, <https://kelar.org/~bandali>, <mailto:bandali@gnu.org> + +[[!inline pages="internal(2025/info/gnus-before)" raw="yes"]] + +Gnus has had the reputation of being difficult to grasp and +configure. The myriad of configuration options of its many major +and minor modes which afford Gnus its high degree of customizability +can also seem overwhelming and daunting for folks looking to learn +about and use it to build a workflow for doing email in GNU Emacs. + +This talk aims to provide a high-level outline of some of the key +concepts in Gnus, and a roadmap for approaching and configuring Gnus +and Message to your liking so that you, too, can read, compose, and +send emails with GNU Emacs. + +About the speaker: + +Amin Bandali is a computing scientist and activist for user freedom, +and a participant in various free software projects and communities. +Bandali wears a few hats around the GNU Project and is a volunteer +member of the Free Software Foundation SysOps team, a core organizer +of EmacsConf, a Debian Developer and a contributor to the Trisquel +GNU/Linux distribution. + +In this talk, Bandali will go over configuring Gnus and Message for +reading and composing emails, showcasing one of many approaches for +using GNU Emacs for email communications. + + +## Discussion / notes + +- bandali: here's the talk page on my site, along with the sample init and authinfo files: https://kelar.org/~bandali/2025/12/06/emacsconf-2025-gnus.html + +- Q: I noticed that it took a considerable amount of time to send + email. Is it possible to configure gnus to use an external smtp + client to send emails? (thanks! I agree, even on thunderbird it's + slow sometimes). + - A: Right, yes, it definitely is possible. In fact, in the past, I've used, I believe, MSMTP, which is a small SMTP implementation that's independent of Emacs. So you can do that. It's also possible to, pointed to have it use the sendmail binary on your system. If you have a local MTA mail transfer agents like Exim or Postfix installed and configure. I believe that should also dispatch and return instantaneously and then have Postfix or Exim deal with sending the message on their terms without blocking Emacs. I don't know, it depends. Normally it's not always that slow. Sometimes it is. I think it also depends on the load on your mail server. Sometimes it's instantaneous, sometimes not. So I hope that helps. +- Q: Is the dovecot workaround actually a solution? I haven't tried + it, but if it works smoothly I'll surely do so. + - A: It is, it really is. I've actually been using that setup for many years. I can't remember. Oh, I believe it's Eric Abramson who first shared instructions on how to set this up. Let's see if I can find it. There we go. Yeah, this is it. I'll share this on IRC as well. Yeah, so Dovecot is very, very efficient. It's written in C. And yeah, when you point Gnus to an IMAP server like Dovecot, dealing with email is pretty instantaneous. This article or post by Eric is great. Although I will say that there was a recent major release of Dovecot. I can't remember if it's 2.4 or 2.5. and it's a breaking change. They change a lot of the configuration syntax, so there's a high likelihood that this drop-in configuration won't work, even though that's what I used as my starting point a couple years ago. I will be writing an article on my personal site to go over how to configure recent versions of Dovecot for such a setup, for a local setup. +- Q: Do you have experience with mu4e or Notmuch, and why would you say + Gnus is worth using compared to these? + - A: I do have experience with these, although it goes back many years, and I'm sure both of these have evolved since, and they're great pieces of software in their own rights. And actually I did use them in that order. Like I first tried Mu4e in Emacs, when I started using email in Emacs, then I tried Notmuch for a while, and then I went to Gnus. They're great. They have like pros and cons. Mu4e, I believe, has excellent maildir handling directly, if I'm not mistaken, unlike Gnus, so you can point it directly to your maildirs locally, and it should work fine, if I'm remembering correctly. Notmuch is also excellent. The thing with Notmuch is that it uses Xapien for indexing and searching email. It's tag-based, so you can tag messages. And then, yeah, it's amazing for tagging and searching capabilities, very powerful search features. And my reason for trying Gnus and then, I don't know, eventually liking it was couple of years ago, I went through this kind of phase of trying and trying to like use and stick with packages that are built into GNU Emacs as much as possible. No particular reason that I would like, you know, recommend people do that per se, but yeah, that's just what I wanted to do. Cause I noticed my configurations were like growing unwieldy. So I, like many others declared, Emacs in its bankruptcy, in its file bankruptcy, and configure things from scratch and try to use whatever that Emacs had to offer built in itself, and then only reach for a couple of external packages here and there. So that's what I went to. That's how I ended up on Gnu's. And it's been very nice. I've tried a few other email clients since then, temporarily, like I tried AERC, A-E-R-C, which is not built into Emacs, but I don't know, I keep coming back to Gnus. It's great to have it all, to be able to do all these things from within GNU Emacs. +- Q: At my organization, we're forced to use OAuth with outlook and + they've also blacklisted all email clients except thunderbird (but + they don't support it, only the webmail or the outlook app). Do you + know if this is something that can be circumvented in Gnus? (I've + tried it with notmuch for example, and it never worked. Even K-mail + on android didn't work). But this specific to IT at my org. I'll + ask on IRC. Thanks! + - A: So if I'm pretty sure, at least with the recent Emacs versions, Gnus does support xOAuth as a backend. So I think you should be able to do that even with just the things, the machinery built into Emacs. Even so, I think there are external packages and programs. One of them I think comes from this Cyrus IMAP world of things that implement like XOAuth. So you should be able to do that. You should be able to use that to get authenticated to your organization's mail server. But I've never tried that myself. In terms of like blacklisting all email clients, I don't know how they would do it outside of, you know, this kind of authentication thingy. If, you know, they check the user agent header or something, that's pretty easy to customize and set. With Gnus, you can set, define a posting style to set a custom user agent. So, yeah, that's as far as I know. Thunderbird is pretty nice too. Like I reach out for it sometimes when I'm in a rush or can't, don't have the time to like set up Gnus with like some new like IMAP server or something. I reach for it sometimes, but yeah, I primarily use Gnus. I see. So the question says they tried it with not much and it never worked. Even KML on Android didn't work. Right. Yeah, I'm not sure. If you can like provide maybe more details as to like what doesn't work or if you get any particular error messages or like how they're trying to like prevent you from using it, then maybe folks could have some ideas of maybe how to get around that. ... So the organization is doing some kind of check during setting up of OAuth. So I think how that works is sometimes these email clients, I think at least this is the case for Gmail or something, where a project such as Thunderbird needs to apply for some kind of token to be able to authenticate and connect its users to a mail server. So all I will say is that Thunderbird is free software and the sources are available and you might be able to find the token that they use and yeah. + +- excellent introduction to gnus! thanks!! +- Very nice talk! Thank you. +- Really good introduction, this will be my go to link from now whenever someone asks "how to use gnus". +- great - going to finally be brave and give gnus a look after that, no excuse not to anymore +- I really enjoyed, from time to time I came across to gnus, but I don't have the time to tune it and I keep with mu4e+mbsync to handle my email +- Yes, it covered the key points very well and should hopefully encourage others to start using gnus. +- https://ericabrahamsen.net/tech/2014/oct/gnus-dovecot-lucene.html +- okay thanks, will do gnus + dovecot ater the conf. +- For me, the key feature of gnus is scoring (both manual and adaptive)! +- I use davmail to access Outlook from gnus. +- Looking forward to more videos on GNUS from you! Excellent talk!! +- +1. Excellent introduction. If I would have had such a tutorial some + 15 years ago when I first used Gnus, my learning curve would not + have been that steep. Thanks! Hope it will help new users. So, + spread the word about your talk! +- Fantastic presentation! +- Thanks for this talk, I liked that you started with a clean setup + and built from that. Reading and writing emails in Emacs is + definately not straighforward, I find it frustating that there are + so many pieces to put together, and a bunch of documentation to + read. I admit I find Gnus overwhelming. Still, like you said, this + is built-in into Emacs, and it can be used to read different type of + contents, like emails and newgroups, rss feeds, etc. Looking forward + to more documentation and tutorials from you, thanks again! +- BTW, I would have like to see a quick demo of Gnus while it is fully + configured and tweaked, just to tease me to bother using it! + +[[!inline pages="internal(2025/info/gnus-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/gnus-nav)" raw="yes"]] + + diff --git a/2025/talks/graphics.md b/2025/talks/graphics.md new file mode 100644 index 00000000..0f525a81 --- /dev/null +++ b/2025/talks/graphics.md @@ -0,0 +1,43 @@ +[[!meta title="Modern Emacs/Elisp hardware/software accelerated graphics"]] +[[!meta copyright="Copyright © 2025 Emanuel Berg"]] +[[!inline pages="internal(2025/info/graphics-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Modern Emacs/Elisp hardware/software accelerated graphics +Emanuel Berg (he/him) - Pronunciation: Swenglish, IRC: lacni, <https://dataswamp.org/~incal>, <mailto:incal@dataswamp.org> + +[[!inline pages="internal(2025/info/graphics-before)" raw="yes"]] + +Modern graphics with Emacs with hardware/software acceleration + +This video has no narration. + +- <https://dataswamp.org/~incal/tmp/greeting.webm> +- <https://dataswamp.org/~incal/tmp/kitty-vt.webm> shows the software can be used from a -nw Emacs + +- didn't expect to see demos today :| +- I was reminded of the demo scene by this presentation. https://scene.org/ +- does the demo show its code at some point? + - It doesn't :/ + - https://dataswamp.org/~incal/bad-www/index.html +- this has more than when I previewed it last. Wow! +- So how to download the source from https://dataswamp.org/~incal/bad-el/src/ ? +- maybe he likes to be mysterious + +- Q:So how to download the source from that site? + - A: there is a link to src/ maybe I can do a tar ball for y'all. + if so I'll put it in that dir + - wget use -e robots=off if robots are a problem + - https://dataswamp.org/~incal/bad-el/src/bad-el.tar.gz <-- there is a tarball you can download now. +- Q: How do you get into demomaking? + - A: never thought of it that way. is it different from other + programming? + +[[!inline pages="internal(2025/info/graphics-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/graphics-nav)" raw="yes"]] + + diff --git a/2025/talks/greader.md b/2025/talks/greader.md new file mode 100644 index 00000000..341d4642 --- /dev/null +++ b/2025/talks/greader.md @@ -0,0 +1,41 @@ +[[!meta title="GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence"]] +[[!meta copyright="Copyright © 2025 Yuval Langer"]] +[[!inline pages="internal(2025/info/greader-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence +Yuval Langer (he/him) - Pronunciation: /juval/ /lˈangeʁ/, IRC: cow_2001, +[@mu@posting.solutions](https://posting.solutions/users/mu), <mailto:yuval.langer@gmail.com> + +[[!inline pages="internal(2025/info/greader-before)" raw="yes"]] + +<https://gitlab.com/michelangelo-rodriguez/greader> + +A short talk explaining why Greader mode is needed, demonstrating its normal +use, some interesting features, some interesting customization variables, and +so on. Greader is a text-to-speech minor mode written by Michelangelo +Rodriguez. For various reasons, I find it hard reading long things on the +computer screen. Using Greader greatly helps me with that. I use it to read +sites on EWW, books with Nov.el, blogs with Elfeed, and various other texts I +copy from other programs and yank to a randomly named `C-x b alsdkfjoewjfocm RET` buffer. The author had also provided some interesting features he would +like me to cover. + +About the speaker: + +I am a mere user who loves reading, but damned to be a slow reader. Alas! +Thankfully, there's Emacs and Greader mode. + +Note: This talk will be narrated by a +text-to-speech engine because of a request from +the speaker. + + + +[[!inline pages="internal(2025/info/greader-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/greader-nav)" raw="yes"]] + + diff --git a/2025/talks/hyperboleqa.md b/2025/talks/hyperboleqa.md new file mode 100644 index 00000000..764cb174 --- /dev/null +++ b/2025/talks/hyperboleqa.md @@ -0,0 +1,433 @@ +[[!meta title="Questions and answers to help you fly with Hyperbole"]] +[[!meta copyright="Copyright © 2025 Bob Weiner"]] +[[!inline pages="internal(2025/info/hyperboleqa-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Questions and answers to help you fly with Hyperbole +Bob Weiner - Pronunciation: Wine-er, <https://savannah.gnu.org/projects/hyperbole/> , <https://rswgnu.github.io/hyperbole/man/hyperbole.html> , <mailto:rsw@gnu.org> + +[[!inline pages="internal(2025/info/hyperboleqa-before)" raw="yes"]] + +RSW, the autthor of Hyperbole, will answer your questions on Hyperbole +live and demonstrate how it can make you more productive. + +Hyperbole is an extensive, easy-to-use package that brings +hypertextual information management across all of Emacs to files with +minimal or no markup, including source code files. It works with all +modern versions of Emacs and does not require the use of any +third-party packages or compiled modules. Its keyboard-driven +minibuffer menus let you learn the key bindings for one set of +features at a time. Its global minor mode lets you turn on and off +its features with a single command. + +Many people express interest in Hyperbole but find its breadth makes +it difficult for them to get started with it. Or they struggle to +find specific workflows because of its infinite flexibility. This Q +and A session is intended to help people over this initial hump by +covering introductory topics such as the Action Key and how Implicit +Buttons in your existing documents act as hyperlinks automatically. +If more advanced topics are of interest, we could even answer +questions such as: + +- How can I quickly turn my Lisp expressions into hypertext buttons? + +- Can I point Hyperbole at thousands of Org files and have it quickly + jump to arbitrary sections in the files without any prior indexing + or need for a database system? + +- Can Hyperbole build a wiki with Org files, automatically + highlighting WikiWord references with no special markup and then + publish it to the web? + +- When programming, can Hyperbole help me rapidly select, move and + display programmatic information? + +- What if I need an entire outline with builtin hyperlink anchors + and automatic paragraph numbering? + +- So Hyperbole just augments everything I do in Org mode already? + +The session will be driven by the topics that participants want to +know about, so come with your questions and lets dive in together to +see whether its all just Hyperbole. + +About the speaker: + +Bob Weiner (rsw) has been developing hypertextual systems since the +dawn of the web in 1991 and using Emacs since 1982, though the other +day someone said I look 28-years-old, so neither I nor Hyperbole feel +that old. We have gained some perspective through the years, so maybe +I can help you learn something new or see something in a new way. + +## Discussion / notes + +- Q: I'm excited to know opinion on current state of using MCP and Ai + for PKM and PIEs. Since they do carry lot of burden out of us and + ease lot of process. How does hyperbole stand with coming days? + - A: We haven't yet done anything specific for MCP-based modes + but Hyperbole is a toolchest of capabilities for interlinking + information across Emacs. You can use existing link types or + create your own with just a few lines of code. + - AI is obviously on everybody's mind. We haven't done a lot of + integration with any of the popular AI engines, but I think as + you'll see through this Q&A session, Hyperbole's function is + really to interlink your information everywhere throughout + Emacs. And so, whether you're using a chatbot in a specific + buffer, you can use hyperbole implicit links, implicit buttons + to activate different actions there as well. So sometimes it + takes a bit of customization, a small amount of two to seven + lines of code to do that. As we get to working with more of + these engines, we'll build that into the core part of + Hyperbole. But right now, that's left as an extension for users + who are heavily using MCP or other protocols right now. We have, + for example, integrated with LSPs, you know, for coding and have + that interface through xref and basically using the single key, + the action key, which is made a return. You can jump around to + any of your source definitions from any reference in almost any + language that anybody uses today. So you can extrapolate from + that how that might work with AI as well. And I think you'll + see later when we talk about HyWiki that we're now enabling + just just wiki words to be buttons in hyperbole. So those could + be part of your chat with an AI and you just click on it and you + jump right to all your references associated with that + terminology. +- Q: As a normal user who codes and takes notes, I really want to + deep-dive and learn Hyperbole, but always end up winding back up to + embark and org-mode being the better system. For me hyperbole looks + like over-engineered (or over-configured) system which other + individual packages do well. And outside emacs there is no system + supporting hyperbole nor any usability. + - A: Listen to this Q&A session and take it one bite at a time. + Across time, you will see how the parts of Hyperbole integrate + together and why they are all there. + - Right, Hyperbole is large, but there's reasons behind that. + We're just trying to link all your information in Emacs. So I + think you can see my screen here in Emacs. So for example, you + can take any Lisp expression, even a variable like here we have + in Hyperbole, hyperb:dir variable, and I just hit the action key + M-RET, and in my minibuffer, I see the value of that variable, + but I could just as well take any other expression and take the + outer parens off and change them to angle brackets and now + that's a live hyperbutton. Could be in a comment in a + programming buffer in this case. It's in Koutliner buffer, + which is a an auto-numbered outliner part of hyperbole. So + let's just try this and say M-RET. I pressed and it ran occur + and found all the occurrences of buttons. And similarly in here, + I could just jump and go to any of these lines directly by + hitting M-RET in that buffer as well. So all your text, all your + sort of what we call implicit links become live in Hyperbole. + And you didn't have to learn much. You just learn, you know, if + you know a little Lisp or how to type any expression, then you + just change the outer brackets. And all of a sudden, you have + hyperbuttons. So Hyperbole, you can learn a little bit at a + time. And although it seems daunting at first because it has so + much functionality, very large and rich architecture. But what + we do is teach people one piece at a time. + - So just to continue on that a little bit, implicit buttons are + buttons that exist just from the text pattern in the buffer. So + you saw an example of changing Lisp into implicit buttons right + there. I could do keystrokes. I can just type them out in my + buffer and surround them with braces. So here's something, + let's see, this is actually a command in the K Outliner to jump + to the cell numbered four. So let's just do that. And it took + me right there, right? So I'm just pressing M-RET to activate + these buttons. Similarly, any sort of, this is a complex + example, but any path name I can surround with double quotes, + and it's a live hyperbutton. In this case, I want to jump to a + path name called readme.md, but it's in a directory that's + specified by an actual list variable. And then I want to go + directly to a headline within that file called Hyperbole manual. + And within that headline, I wanna go to the eighth line relative + to that. So all I have to do, M-RET again, and boom, I'm in + that, I'm directly linked to that. And Hyperbole has ways that + you can just split your windows like this and create that + reference in the source buffer right there. You just press a few + keys and it'll embed that link. We'll see that a little later. + - Another example, so all of these buttons, if I just show you + here, you can press C-h A anytime. and it will show you exactly + what M-RET will do in that context. In this case, it's an + implicit button, and it shows you even where the button starts + and ends, what type of action it will run, it's a link to a + file line, and then what arguments it takes. So Hyperbole + extracts all this meta information just from the text in your + buffer and displays it to you conveniently so you can know + before you ever touch a hyper button if it will do something + that you want it to do. Here we have a fairly advanced button + that's very simple to do. You just specify a bug in Emacs that + you want to reference to. Notice no delimiters, just bug pound, + whatever, M-RET. And I'm in Gnus reading the conversation for + that bug. And I can just, you know, move through all the + conversation. I can quit out of there and go back to where I + was. So very, very easy to use these implicit buttons because + they're already there throughout your Emacs buffers. I + described the C-h A, what that does. And there's other types of + buttons that we can get into as questions go on, but you can + create your own explicit buttons that have a little slightly + different delimiter than you see in the implicit buttons. And + this one I just put in here to show you that If you use it and + you go, this is the hyperbole to do list, which is an org + buffer. But I wanted to show in here that similarly, we have + implicit buttons for TODOs in the work. And when we hit M-RET, + it just changes the state of that to do. And I can cycle through + those but even better with the prefix argument if I have + multiple sequences of TODOs because there's Bob and Mats that + maintain hyperbole so I can shift to Bob's TODOs with C-u M-RET + and then cycle through the states for me So very very easy to + use, you know something that's a little bit more difficult to + do I think in org without it. + - So that's an explicit button where I had to actually say I want + to create this button, and I had to specify what type it is. If + I show you the information there again, you see it has a little + different type called a keyboard key, which runs just the key + sequence. So you're starting to see already that explicit + buttons have a type that's connected to an action that an + implicit button can do as well. So all of this ties back + together. + - And finally, there's a homepage that Hyperbole has, a personal + homepage that you have. You hit C-h h, which is our mini-buffer + menu, and then you hit what is it, b for button file and then p + for personal file. And that just brings you to basically a set + of links that you can create buttons in any format you want. + There's no structure that you see here. But the nice thing is + that all of these buttons that have these names, as we call + them, with the delimiters here, can be referenced now as what we + call global buttons wherever you are in Emacs. So I'm in a + separate buffer here and say I want to jump to that to-do button + that's labeled td on line 10 down there. No matter what I have + on screen, I can hit C-h h g for global button, a for activate, + and then it gives me a list of those. So I know it's td, I just + put td in. Okay, that's a path link problem I have, but when I + fix the link, it would go to it. So you can create buttons that + you can access in any mode, anywhere, and just give them quick + names, and it's very easy. So that kind of gives you an idea of + how you can get very productive with hyperbole with just a few + simple techniques. +- Q: I've been using "activities.el" and "Bufferlo" to save + dedicated workspaces (open buffers, window positions) in tabs and + frames for tasks/projects across Emacs sessions. Could I do + something similar with Hyperbole? + - A: We plan to have Hyperbole activities.el integration in about + another month, so stay tuned for that. In the meantime, there + is the Win/ minibuffer menu, that lets you save window and frame + configurations by name or onto a window config ring similar to + the kill-ring. + - Yes, you can. And activities is a nice package from alphapapa. + We've actually been working with it lately. So we're probably + in the next month or so we'll have a specific integration to + activities built into Hyperbole. But right now, we don't. But + of course, you can call any of its functions or key bindings + using the techniques that I just showed you earlier. But what we + do have built in if you go to the menu again. and you see C-h h, + and then there's a w, Windows, WinConfig menu, and there's two + types of window configurations that you can save here. They are, + right now, they're per Emacs session. They're not stored + beyond that, but we'll probably add that in as well, or we'll + use activities for that. so the two types are you can either + just save a window configuration in a frame... Actually, it + stores the frame configuration to a ring just like the kill + ring. So you have the three commands at the right. you can save + with an s, you can pop one off the ring with p, or you can just + yank and keep cycling through with a y and it will restore the + frame configuration that you saved. Similarly, you can just do + it by name, and you can say "I want to add a name" and then + just give it a name again, winc, and store it and it stores it + there and then you can get back to it by name as well. So fairly + easy to use as well and again integrated in the same simple menu + system. S +- Q: How well do Hyperbole and org-mode work together? Is there any + kind of integration? + - A: Hyperbole is very well integrated with Org mode and most + Hyperbole capabilities are live within Org mode buffers. We did + an EmacsConf talk in an earlier year about the integration. + Find it here: + [https://emacsconf.org/2022/talks/hyperorg/](https://emacsconf.org/2022/talks/hyperorg/) + - How well do hyperbole and org mode work together? Is there any + kind of integration? Yes, in fact, that's really good. I'll + just mention something. Let me go back to my homepage. I just + stored that here. So we gave a talk at an earlier Emacs + conference right here on org and hyperbole integration. So + that's a good one to go back to. And I believe it's in this + files included with hyperbole as well. So you can learn various + techniques of how the action key helps you in org. It does + special things in tables. And there's some nice support for, + for example, working with code blocks. Let me see where that is. + Okay, so right back here. So you can run them with the action + key. You can refresh the output and do things like that. So + again, if I just hit C-h A, it'll tell me that it's in smart + org, and it'll give me all the different contexts that that + operates within. So there's a lot that it does in here. And you + can see it would point on the dir value of a code block + definition that will actually display a summary and all sorts of + functionality. So the integration is quite tight. And one of the + things we do since M-RET is used in org, we have a customization + setting, c then o. And you have these three settings where you + can say, I want M-RET to... I want hyperbole to control that + and everything that the action key does I want to happen, or I + only want hyperbole to control when I'm over a hyperbole + implicit/explicit button, or I want org to control that key and + never use hyperbole. So you just set that once, it's persistent + across sessions and you're good to go. And again, it's built + right into the menus. + - But even following that we've the latest addition to hyperbole + is something, and this is the first time we're really showing + it publicly, is the Hywiki, which is a new subsystem as we call + it, and this is I think the best wiki capability in Emacs. Now + what it does is it automatically highlights... Let me turn it + on. I have to turn on hywiki mode. And you see those wiki words + now got highlighted, so any any wiki word which is the + capitalized alpha word you know, so you can have multiple + capitals in there and it'll get recognized, can be used as a + wiki word. So for example when I just type HyWiki here, it + automatically recognizes it, and you see it turned it into a + hyperlink button, which again, C-h a will tell me exactly what + it does there. But I can just hit the action key, M-RET, and + it'll display my hywiki.org file. All wiki pages are org files. + So we're using that for the wikis, and you have You can export + an entire wiki using essentially the org export capability with + a little extra set of features that we've added in, but let's + say, even better. You see I have this heading here, so let me + just change this. You go back here, and I'll say go to heading, + so you just put a pound on it, and now that whole thing is a + reference to a specific org section. Notice there's no org IDs + here. There's nothing other than the text that you're seeing. + There's not even a delimiter. So we have automatic implicit + hyper buttons being added in any buffer. Could be a comment in a + programming buffer with all you You don't have to add anything. + I'll show you how to create a new page in a minute. But you see + I can link to any org section without any IDs. And then I can + also do like org-roam does, but without the indexing or database + that it requires. I can scan over all of my wiki files and + headings. find a match really quickly. So we can get into some + of that a little later as well. But, you know, very convenient. + There's nothing that you change on org to do this. So how do I + create a wiki word? Well, let's say I wanted, you know, wiki + word for me. So that's already, that was a wiki word, but now + this is a new one. So you see it doesn't highlight because I + haven't created a wiki page yet. So all I hit is the action + key, and boom. Now it created it as a new wiki word. It created + the .org file. If I don't edit this file, it won't save it, + and it'll not become a word in case you made an accident. But + let's just say I want to say it. So, you know, heading. That's + it. I'm just in org mode. Now anytime that hywiki mode is + active, in any buffer essentially, I can type that out and + it'll recognize it. Notice so that's not a wiki word. So it's + highlighting and it's unhighlighting right as I type. So, + again, you can embed these as org links in org. There's a + special format like this, HyWiki word that you can make an org + link if I was in org mode, just like that. So there's all sorts + of compatibility, but basically it's just words, and HyWiki + takes care of the rest for you. So there's a directory where + all these, it's HyWiki, hywiki, ~/hywiki is the default place + where all these would be found, and there's a menu now in + hyperbole for hywiki, h, and you can see, it has a lot of + capabilities. But I can say, b, go into the directory of all the + files, just pull them up, and any of these you'll see... Let + me give you one like this. Okay. So you can see the other wiki + words being highlighted in here. It's very fast too. There's + almost no delay for anything, and yet very flexible, and you + have this ability where you could type emacs#section-1-2 and if + you didn't have delimiters around it, but you can put any + delimiters like double quotes or parentheses, and then it'll + match without you having to change the header at all with the + spaces included, and all of those will get recognized. I don't + know if the section exists right there. So anyway a lot of + capability you can see that here where I did the hy... it + actually highlights as an org link because it is an org link, + and it'll operate just like any other org link even though + it's a hywiki word link as well. So very powerful stuff and + totally integrated with Org Mode throughout. Great. +- Q: Are there any talks from this year's emacsconf that discussed + things that would work well with Hyperbole? + - A: Had to work yesterday so I haven't followed the talks. Pick + your favorite mode/type of information. Can Hyperbole work with + that? The answer is yes. + - Demo of how to create an implicit button type. See + documentation here: + [https://rswgnu.github.io/hyperbole/man/hyperbole.html#Creating-Types](https://rswgnu.github.io/hyperbole/man/hyperbole.html#Creating-Types) + - No. Unfortunately, I had to work yesterday, so I haven't been + following the conference as much as I do. Maybe somebody else + could comment on that. But I think, you know, again, it's like + pick your favorite mode, pick your favorite type of information. + Can hyperbole work with that? You know, the answer is almost + always yes. So, you know, if I show you just a little bit, if I + show you some of these implicit button types, just so you know + the amount of code involved to create a type. So here's like a + mail, recognizing an email address as a button. It's a little + long, so that it creates a lot of things, but you know it's + less than 15 lines of code for that. Path names are complicated, + so that's a longer one, but let's look at... So here's one + recognizing a bibliography entry. So it can be between two and + 20 lines of code to create an entirely new button type. And you + create it once, and you just add it to the set of types, just + like at the fun, except it's done with this macro called def + implicit button type, and defib. And it's part of your + hyperlinking system forever then. So say you got dumped with + 5,000 documents that were in this weird text format, and they + all had cross-references among them, but it was, again, using a + weird format. You could just write your own little type for + that, and then those 5,000 documents are hyperlinked for you + every time you're browsing them in Emacs automatically. So we + do that all the time, create small things, but all of these are + built into Hyperbole. Markdown links, texinfo links, all of + that's automatic. I could even be in a shell mode, and I just + say ls, and these are hyperlinks that Hyperbole understands, + right? It just jumps right to the file. So grep -n, you know, + looking at any line numbers, you don't have to remember all + these different commands anymore. You just hit M-RET, and + Hyperbole does the right thing in all these different contexts, + including following cross-references in code. So I would say + that's your answer. Most things that people are talking about, + we've already probably integrated with Hyperbole or with a + little bit of custom coding. You can do it. +- Comment: Interesting, but the many different link formats makes + reading and analyzing my notes much harder and less usable outside + Emacs. + - Well, I mean, the different formats that you're saying, like + angle brackets or curly braces, are just so that you can utilize + many different types. of buttons, but if you just want to use + key sequences, there's only one markup format. With org, + you've got the square brackets, which are consistent, but in + order to have different types, you have to type a prefix name, + like you see the HY for the HyWiki buttons in org mode. So I + think the trade-off is pretty much the same, but Hyperbole + always, always works to minimize the amount of markup. Markdown + is pretty simple. A lot of people like that. But I think you'll + find in hyperbole texts, they read just like regular language. I + mean, the delimiters are fairly invisible. So I'm not sure what + the issue is there. And again, you can choose your own. You can + make your own types with your own delimiters. There's even a + custom macro that instead of using that defib where you have to + type out Lisp code, you can use regular expressions. And in one + line, you can define your own type of button with its own + delimiters. So, you know, depending on what works well for your + eyes, you can make Hyperbole adapt quite well to that. And + again, if you start using the HyWiki, there's literally zero + markup on that. So you're just reading text, and when you want + something hyperlinked, it's like a glossary or a dictionary + entry. It's just there, and it's just highlighted in the text. + So I don't see much barrier to using it with many different + types of documents. +- Q: Is there any doc on Hyperbole's design and architecture? + - A: See this very interesting AI-generated document with a bunch + of diagrams covering Hyperbole's architecture: + [https://deepwiki.com/rswgnu/hyperbole/1-gnu-hyperbole-overview](https://deepwiki.com/rswgnu/hyperbole/1-gnu-hyperbole-overview) + +- interesting but the many different link formats makes + reading/analysing my notes much harder, and less usable outside + emacs +- Hyperbole is designed to minimize the markup necessary on + hyperbuttons and with HyWikiWords there is literally no markup. Org + has uniform link delimiters but requires different link prefixes to + embed different link types. Hyperbole uses different delimiters for + different types instead, but they are always easy to read and not + heavyweight like some Org markup is, e.g. drawers and IDs. + + +[[!inline pages="internal(2025/info/hyperboleqa-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/hyperboleqa-nav)" raw="yes"]] + + diff --git a/2025/talks/juicemacs.md b/2025/talks/juicemacs.md new file mode 100644 index 00000000..1a5f8c79 --- /dev/null +++ b/2025/talks/juicemacs.md @@ -0,0 +1,171 @@ +[[!meta title="Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java"]] +[[!meta copyright="Copyright © 2025 Kana"]] +[[!inline pages="internal(2025/info/juicemacs-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Juicemacs: Exploring Speculative JIT Compilation for ELisp in Java +Kana (they/them) - IRC: kanakana, Blog: https://kyo.iroiro.party - ActivityPub: @kana@f.iroiro.party - Bluesky: @kana.iroiro.party, <mailto:kana@iroiro.party> + +[[!inline pages="internal(2025/info/juicemacs-before)" raw="yes"]] + +Just-in-time (JIT) compilation helps dynamic languages run fast, and +speculative compilation makes them run faster, as has been showcased +by JVMs, LuaJIT, JavaScript engines, and many more JIT runtimes. +However, Emacs native-compilation, despite its JIT compilation +(`native-comp-jit-compilation`), does not speculate about runtime +execution, making it effectively a JIT-ish AOT (ahead-of-time) +compiler. By introducing a speculative runtime for ELisp, we could +potentially improve ELisp performance even further, with many new +optimization opportunities. + +Juicemacs is my work-in-progress toy project re-implementing Emacs in +Java. At its centre sits an ELisp JIT runtime powered by Graal +Truffle, a JIT interpreter framework based on partial evaluation and +Futamura projections. This talk will cover the following along with +some demonstrations: + +- What is Juicemacs and its ambition? How compatible is it (or does + it plan to be) with GNU Emacs and how feature-complete is it now? + +- What is speculative compilation? How is it useful for an ELisp JIT + runtime? + +- How is the performance of Juicemacs compared to Emacs nativecomp? + How do we interpret the benchmarks? + +- What is Truffle and partial evaluation? What is needed if we are + to implement a speculative runtime in C without Truffle? + +- What JIT techniques and other things does Juicemacs plan to + explore? How to get involved? + +Relevant links: + +- Accompanying blog post (slides + transcript + more discussions): + <https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/> + (scheduled to become available after the talk) + +- Project repository: <https://github.com/gudzpoz/Juicemacs> or + <https://codeberg.org/gudzpoz/Juicemacs> + +- ERT testing results: <https://emacsen.de/dev/tests/> + +- Zulip chat (devlog + discussions): <https://juice.zulipchat.com> + +About the speaker: + +Hello! This is Kana, an Emacs hobbyist and Java lover from China. A +few years ago I discovered the Truffle JIT compilation framework and +have since hoped to implement a JIT runtime myself. Last year I +finally started implementing one for ELisp, called Juicemacs, and +have made some progress. In this talk I will share what I've learned +during the journey, including how three interpreters out of four (or +more?) in Emacs are implemented in Juicemacs and how speculative +compilation can make some optimizations possible. + +## Discussion / notes + +- Q: Sorry for the explain-for-CL-user question - is what juicemacs is + doing analogous to issuing a new declamation then doing something + like (funcall (eval (function-lambda-expression + #'my-sbcl-function))) ? + - - (Thanks I had been confused about JIT a little bit) + + - A: I actually know very little about CL (the benchmarks come + from an article linked in elisp-benchmarks). Personally I think + the difference between Juicemacs and CL impl like SBCL, is that, + most CL runtimes I know actually ahead-of-time compiles code, + even in REPL, but Juicemacs is a JIT runtime and tries to gather + statistics before compiling things (mostly through Truffle). For + function calls, Juicemacs has several optimizations, like + assuming unchanged function definitions (and recompile when it + changes), and cache functions produced by `#'(lambda () + ...)` constructs. +- Q: What's the inspiration behind the name Juicemacs? + - A: Since it is in Java, so I want the name to begin with 'J'. + Since juice is humorously not solid, I chose that name :) +- Q: Do you think the GC of Juicemacs will have similarities with the + GC iterations of GNU Emacs (such as IGC)? + - A: I am very much looking forward to IGC but haven't tried it + yet. The difference between IGC (using MPS under the hood) and + JVM GCs is that the MPS used by Emacs is conservative (GC term) + and not "precise" (also GC term), in that it guesses what + machine words on the stack are actual objects, but otherwise it + should be a very competent GC. +- Q: Just reading the blog - your experiments with Emacs are so + extensive :D how'd you get started? Have you experience writing + text editors? + - A: Thanks! Currently, Juicemacs is mostly about an ELisp runtime + though and has very little actual "text editor" things. (It + has proper elisp buffers, but not display in any way - no + GUI/TUI). And with a functional elisp runtime, an actual editor + can (1) be fairly easy if you ignore a bunch of things mentioned + in the blog, (2) or very very hard if you want to replicate + Emacs. And, sadly, no, I don't have experience previously + writing text editors, so my current plan is to delegate + rendering to GTK (and Pango for low-level rendering to support + overlays) (and other programmers by using a proper IPC protocol + :-) ), and delegate editing to ELisp (which is also what Emacs + does). + - For getting started, I don't know? I've already started + experimenting with a bit more things. Basically it is all about + replicating and learning from other implementations, like Emacs + and GtkTextView (and GraalJs for JIT compilers) (oh! and VS + Code, I just borrowed their intervalTree.ts for overlays): it's + all there, written by competent people. And all you need is + maybe read them all? ;P (Experimenting with Emacs and learning + about it (and crashing it sometimes) is very fun, by the way.) + - Here is a little devlog: + [https://juice.zulipchat.com/#narrow/channel/535506-gui/topic/Tiny.20progress.3A.20GUI.20dev.20log/with/562157361](https://juice.zulipchat.com/#narrow/channel/535506-gui/topic/Tiny.20progress.3A.20GUI.20dev.20log/with/562157361) + , in which I am trying to get a GUI (and after that maybe an + editor) working. + - (original question-asker) -> So: read read read, smash smash + smash. Love it :D and zulip is a nice idea for organising public + engagement with a project, looks v cool. Thanks for sharing! +- Q: <emarsden> GraalVM is able to run C code via LLVM; I wonder + whether it would be feasible to use some of the existing Emacs code + in that way + - A: (Came across this interesting question on #emacs IRC.) + Actually, Java has added FFI (or "Foreign Function and Memory, + FFM) API very recently, so we can directly run (dynamically + linked) C code without needing LLVM or GraalVM in Java. However, + the thing I'm afraid of is that, Emacs is very complicated, and + it seems rather impossible to just use "some" of its existing + code without incorporating a whole GNU Emacs... (For example, + even passing a cons list from Java to C code is very hard, since + we need to now care about ABI compatibility. Not to mention that + in many places Emacs just assumes it is run with its built-in + GC.) But, speaking of FFM, I think we can make very good use of + it to support Emacs dynamic modules (right now I'm also + listening to the Emacs PDF reader talk, which is also a dynamic + module). As far as I know, the API interface of Emacs dynamic + modules is very clearly decoupled from Emacs internals (when + reading /usr/include/emacs-module.h, which seems to make its + `struct emacs_value` opaque, meaning that we can use any + pointer, or even Java object references in that pointer), and we + should be able to support any dynamic modules out there with + FFM. +- [https://codeberg.org/gudzpoz/Juicemacs](https://codeberg.org/gudzpoz/Juicemacs) +- The blog article is now online: + [https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/](https://kyo.iroiro.party/en/posts/juicemacs-exploring-jit-for-elisp/) +- Wonderful explanations! Thank you for taking the time to share your + wisdom. +- A very impressive project! Thanks for presenting it +- [https://juice.zulipchat.com](https://juice.zulipchat.com) +- Very exciting project! + +- yet another exciting emacs clone lets goo!! +- I really want to end up with a formal specification of emacs lisp one day +- juicemacs elisp is suprisingly far along +- your jit compiled elisp is impressive +- Thanks, I know a little more about JIT now ! +- Kana here! Thanks! Please feel free to ask any question. I'm also trying out a Zulip chat server for maybe lengthier discussions: https://juice.zulipchat.com . + +[[!inline pages="internal(2025/info/juicemacs-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/juicemacs-nav)" raw="yes"]] + + diff --git a/2025/talks/languages.md b/2025/talks/languages.md new file mode 100644 index 00000000..4a54d73e --- /dev/null +++ b/2025/talks/languages.md @@ -0,0 +1,57 @@ +[[!meta title="Studying foreign languages with Emacs, Org Mode and gptel"]] +[[!meta copyright="Copyright © 2025 Marek"]] +[[!inline pages="internal(2025/info/languages-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Studying foreign languages with Emacs, Org Mode and gptel +Marek (he/him) - https://github.com/keram, <mailto:nospam.keram@gmail.com> + +[[!inline pages="internal(2025/info/languages-before)" raw="yes"]] + +This talk will demonstrate the workflow I’ve built +around Emacs and Org mode for creating and +managing multilingual texts. My focus is on +English, Mandarin Chinese, and Pinyin (the +Romanized system for Chinese). A key part of this +setup is a custom major mode derived from +`text-mode`, designed to handle language switching +and structured study notes more effectively. On +top of this, I use `gptel` as a writing companion: +it helps catch typos, grammar mistakes, and subtle +issues that arise when switching between +languages. + +Beyond editing, I’ll show how I publish my study +notes to the web: +<https://keram.github.io/ihl-hanyu/index.html> . By +combining Org’s export features with a small +amount of custom JavaScript, I’ve added +interactive functionality such as text-to-speech +playback and vocabulary practice exercises. + +Attendees will see how these tools and techniques can be combined to: + +- Customize Emacs for multilingual writing and study workflows. +- Use Org mode as a framework for language learning materials. +- Leverage `gptel` for proofreading and feedback. +- Enrich exported Org documents with lightweight web enhancements. + +The talk will be of interest to language learners, Emacs users curious +about publishing workflows, and anyone who wants to see +how Emacs can as a personal learning environment. + +About the speaker: + +I am GNU Emacs enthusiast living in London, UK. Using Emacs for years for +work, personal life and study. + + + +[[!inline pages="internal(2025/info/languages-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/languages-nav)" raw="yes"]] + + diff --git a/2025/talks/latex.md b/2025/talks/latex.md new file mode 100644 index 00000000..bd15369f --- /dev/null +++ b/2025/talks/latex.md @@ -0,0 +1,50 @@ +[[!meta title="LaTeX export in org-mode: the overhaul"]] +[[!meta copyright="Copyright © 2025 Pedro A. Aranda Gutiérrez"]] +[[!inline pages="internal(2025/info/latex-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# LaTeX export in org-mode: the overhaul +Pedro A. Aranda Gutiérrez (he, him) - paaguti@gmail.com, <mailto:paaguti@gmail.com> + +[[!inline pages="internal(2025/info/latex-before)" raw="yes"]] + +During the last year, the LaTeX backend in Org mode has received an overhaul. +The objectives, while keeping backward compatibility, were: + +- Better integration of the font-management features and packages with + lualatex/xelatex +- Reducing the amount of `#+LATEX_HEADER:` lines and avoiding to have to + include a pure LaTeX file to profit from them +- Flexibility, while using native Emacs Lisp features, like file/directory + local variables + +In this talk, I will present the new font management features in the LaTeX +backend and show a couple of examples of what can be achieved. + +About the speaker: + +After 30 years using Emacs, professionally and for my PhD, I'm currently +quite involved in org-mode, where I'm revamping the LaTeX backend. + +## Discussion / notes + +- Not a question but I will start using LaTeX fonts in org now +- Q: How's about video (mp4) support for ox-latex? I start to give + presentations with many videos. This is something that really push + me back using ox-latex. + - A: Experiment with a LaTeX file and then try to include the + relevant snippets in #+BEGIN_EXPORT latex + - [https://github.com/pdfpc/pdfpc/](https://github.com/pdfpc/pdfpc/) + can embed and play videos. For Org, latex fragments work fine. + - Thank you for all your information, I will try it and see. + Thank you. + + +[[!inline pages="internal(2025/info/latex-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/latex-nav)" raw="yes"]] + + diff --git a/2025/talks/life.md b/2025/talks/life.md new file mode 100644 index 00000000..335676d3 --- /dev/null +++ b/2025/talks/life.md @@ -0,0 +1,92 @@ +[[!meta title="From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact"]] +[[!meta copyright="Copyright © 2025 Andrew John Dougherty"]] +[[!inline pages="internal(2025/info/life-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# From FRDCSA to FLP2: Building AI-Powered Life Planning Systems in Emacs - A Journey from Research to Real-World Impact +Andrew John Dougherty (he/him) - Pronunciation: Andrew DOW-er-tee, IRC: aindilis, Website: <https://frdcsa.org> GitHub: <https://github.com/aindilis>, <mailto:adougher9@gmail.com> + +[[!inline pages="internal(2025/info/life-before)" raw="yes"]] + +Six years after my EmacsConf 2019 presentation on the Formalized Research +Database (FRDCSA), I return to share the evolution of this ambitious +project into the Free Life Planner (FLP) - a comprehensive AI-powered +system designed to help people manage the complex logistics of daily life, +from basic survival to thriving in challenging circumstances. + +This talk chronicles the development journey from FRDCSA's initial vision +of collecting and integrating all free software AI systems, to FLP's +practical focus on solving real-world problems like homelessness, medical +crises, and financial hardship. I'll demonstrate how Emacs serves as both +the development environment and user interface for a system that now +encompasses over 1000 subsystems including meal planning, financial +forecasting, medical management, and emergency preparedness. + +Key highlights include: + +Technical Architecture: How we've built FLP using SWI-Prolog as the core +reasoning engine, with Emacs providing the primary interface through 4680+ +custom ELisp functions. I'll show the integration of modern LLMs (Llama3, +DeepSeek-Prover-V2, etc) with classical AI planning systems (PDDL planners, +behavior trees, agent-based systems) all orchestrated through Emacs. + +Security Evolution: The transition from the original internet-connected +FRDCSA/FLP to air-gapped systems, and the development of FRKCSA/FLP2 as +open-source, internet-facing reboots. How we balance powerful AI +capabilities with privacy and security concerns. + +Real-World Impact: Using generative AI and our PresGen presentation system, +I'll showcase documented case studies where FLP has helped users navigate +homelessness, medical crises, and benefit loss scenarios. These aren't +hypothetical use cases - they represent the system's practical application +to urgent human needs. + +Emacs Integration: Deep dive into our Emacs-based development workflow, +including the CLEAR book reader for academic research, Verber planning +domain editor, UniLang integration for multi-system communication, and our +Academician mode for synchronized document processing. How Emacs serves as +mission control for a complex AI ecosystem. + +AI Planning Systems: Demonstration of how we've integrated automated +planning, temporal reasoning, and contingency planning into daily life +management. Users can ask "How do I get through the next month if I lose my +job?" and receive detailed, executable plans. + +Community Building: How FLP facilitates mutual aid networks and community +resilience, turning individual survival into collective thriving. The +system doesn't just help people - it helps them help each other. + +Future Directions: The roadmap for FLP2, including improved security +models, enhanced AI integration, and broader accessibility. How we're +preparing for a world where AI-powered life assistance could become a +virtual social safety net. + +This presentation will use our PresGen system to generate slides +dynamically, incorporating the latest AI developments and real user +feedback. Attendees will see both the technical implementation and the +humanitarian vision that drives this project - demonstrating how Emacs can +be the foundation for transformative social technology. + +About the speaker: + +Andrew Dougherty is the creator of the FRDCSA (Formalized Research +Database: Cluster, Study and Apply) and Free Life Planner projects. For +over 25 years, he has worked on integrating AI systems to solve real-world +problems, with a focus on helping vulnerable populations navigate complex +life challenges. His work spans automated planning, knowledge +representation, and practical AI applications. Andrew presented FRDCSA at +EmacsConf 2019 and has continued developing these systems with Emacs as the +primary development and deployment environment. He believes in using AI +technology to strengthen communities and provide practical assistance to +those who need it most. + + + +[[!inline pages="internal(2025/info/life-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/life-nav)" raw="yes"]] + + diff --git a/2025/talks/llm.md b/2025/talks/llm.md new file mode 100644 index 00000000..402d1910 --- /dev/null +++ b/2025/talks/llm.md @@ -0,0 +1,112 @@ +[[!meta title="Emacs, editors, and LLM driven workflows"]] +[[!meta copyright="Copyright © 2025 Andrew Hyatt"]] +[[!inline pages="internal(2025/info/llm-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs, editors, and LLM driven workflows +Andrew Hyatt (he/him) - @andrewhyatt.bsky.social, <mailto:ahyatt@gmail.com> + +[[!inline pages="internal(2025/info/llm-before)" raw="yes"]] + +This talk will outline the major ways LLMs are changing the world of +editors. There are a few different ways that LLMs are being used now: +smart completion, smart feedback, ad-hoc addition and transformation, and +out-of-band instructions which are typically done outside of the editor. +What are the current Emacs solutions for these, and what does it mean for +Emacs? + +- Intro and state of the art of LLMs and their workflow modalities that are currently used +- Smart completion: Emacs solutions and demo +- Smart feedback: Emacs solutions and demo +- Ad-hoc addition and transformation: Gptel, ellama, and other tools; several demos +- Out-of-band instructions: Aider, Claude Code, and more. +- Thoughts for what it an editor is for, for those working with LLMs +- Possible futures, and what these mean for Emacs, for editors in general, and for free software. + +About the speaker: + +Andrew Hyatt is a software engineer, and Emacs package author (llm, +websocket, vecdb, ekg, and more). LLMs have already transformed how many +people write and edit text. This talk explores the major workflows that +have developed and examines what these mean for Emacs. + +## Discussion / notes + +- Q: My biggest question with AI code editors trying to integrate with + Emacs is -- are the AI code editors able to read unsaved buffers + and not just saved files? + - A: And I think it's actually... this great thing that I did not mention is that like, if you have unsaved buffers, which is, you know, when you're actually doing editing, most buffers are unsaved. really you need something tightly integrated with Emacs to deal with that. So things like, you know, I demonstrated Copilot, I demonstrated Gptel, things like those things, things like Ellama, these things will all work with unsaved buffers because they work via, you know, the input is the buffer. as opposed to a file. Things like Claude Code, Gemini Code, et cetera, those are working with files. They have no idea what is going on with your buffers. And it could be that you can solve this problem by using this thing called MCP, which kind of gives the coding agent a way to see anything in particular. In this case, it would be Emacs and the state of your buffers. But I think that's not a particularly great solution if that's how you want to work. But I think that's kind of like if you're in the Claude Code that kind of world where you know things are happening, basically through a terminal. It's okay, like you typically would not be doing a mix of things. You would just be doing things either in one place or the other place. You know, it could be that you switch off from one place to another, but you wouldn't be doing both at the same time. And it's kind of a, you tend to just fall into one, you know, editing outside the editor or editing inside the editor. And I find myself switching between the two when I use those kinds of tools. So David, let me interrupt you for just one moment. I want to just take care to read out the question that we're answering. The question was, my biggest question with AI code editors trying to integrate with Emacs is, are the AI code editors able to read unsaved buffers and not just saved files? Sorry. Yes. Yeah. Thank you for reminding me to. I will read the questions from now on. But yes, that's what I think about. that interesting questions about unsaved buffers. +- Q: Personally I don't agree with the comment you made about VS Code + usage dying out because I see companies/products pushing for + tightly-integrated VS-Code agents/products like Windsurf. Thoughts? + - A: Yeah, I mean, it's really hard to be certain of anything, like things are changing very fast and it's very hard to predict the future. But the trend I see is that um, the sort of outside editing experience where you just kind of instruct a model, what to do is getting better. And as long as that keeps getting better, I think that's going to lessen the demand for these tightly integrated editing experiences. So it could be that, um, a lot of people, especially in, you know, corporate environments just start using, they're going to use whatever is going to make the most productive. And I think right now, it's not clear that that will be, you know, the very agent-based, you know, command line-centric way of doing things. But it certainly, the trend is, if that continues, I think it probably will be like that. So I think we'll have to see. I don't think your opinion is unreasonable. I guess I'm kind of cautiously saying I think it's gonna be the opposite, but I guess we'll see. Like, let's reconvene in a year and see what happens. +- Q: Do you have any thoughts about the environmental cost of using + LLMs - either the training of models we can download and use + locally, or the larger, commercial models used from the cloud? + - A: You know, I'm on social media, probably a little bit more than I should be. And I do see a lot of discussion there and a lot of concern about the environmental costs of using LLMs. I've looked into this as I'm also concerned about keeping my environmental footprint personally down. And I do this in many ways, but I certainly don't want to kind of like blow that all the water because I'm using LLMs so much. I think that the concerns are mostly overblown. There's a concern that, well, it uses a lot of energy. In aggregate, the total amount of energy used by the data centers in the US is a few percent. And this is a fraction. I think this is like LM's account for something like 20% now of all data center usage, which is a lot. But Those data centers are doing lots of things. They all need to be water cooled. Um, if you like per LLM prompt, the costs are relatively small and by relatively small, I mean, you know, people have said online, well, it's like a few bottles of water per prompt. That, that is not true. It is much, much less than that. It's a fraction of that. So, uh, I don't think the answer is nothing, but I would say it's, I would say you probably, if you want the most bang for your environmental buck, probably the best thing for you to do is take less flights and things like that. Like, yes, you can cut down on this, but I think it's pretty marginal at the moment. We do probably need to think about the total costs like of humanity using all of this. Like a lot of stuff you'll see corporations are using a lot of these things. And so like, just like if you look at water usage or energy uses in total, it's like really corporations that are using this. So there might, there's a lot of leverage there to make things more efficient as opposed to personal use. So I think it's wise to be cautious, but I think it's okay, I think, at least for personal use. +- Q: I must say, I liked your conclusion, but I differ insofar as you + said that VS Code differ from Emacs because the former is not as + easy to adapt as the latter. Why should Microsoft not adapt VS Code + as we adapt Emacs for the new era of coding? And why would VS Code + be harder hit? Could you please elaborate on this point? Thx! + - A: I think maybe I wasn't as sharp on my point as I could be. Because I think the core of what I'm saying is like, there is a going to be a trend. I believe there will be a trend away from editing. And if we are going to be editing less, I think VS Code, like people will be in editors less. And that means people will be in VS Code less, people will probably be in Emacs less. And yes, I think you can, VS Code is to some degree extensible. but I think there's less of a community, or that is, I think the people using Emacs have used Emacs for a long time. They're going to continue to use Emacs. I speak for myself, but I know a lot of people here are kind of like this, and they're going to just, like, we have a lot of momentum to keep doing things in Emacs, and especially because we have a lot of things that we already do in Emacs. We do to-do lists and, you know, with org mode and some people read email and some people are using shells in Emacs and all these things, I think will make Emacs kind of a better environment if you want to do various editing like things in Emacs. In, you know, in an editing environment, because I think just emails can edit more types of things I think will naturally be a bit more useful than VS code, which people are really just using to edit code and if people find it less useful to edit code. I think it's VS Code will be harder hit than emails because that's its whole, like, that's in the name, like the whole reason for it to be doing things as to edit code. So I think that it's it's vulnerable in a way that Emacs isn't just because Emacs is so very... you know, it's, it could do so many things and and people use it for so many different kinds of things that it's I think it's going to be a little bit more resilient. But as I said with the present. For those of us that are using Emacs, it's everywhere for us. Not necessarily everyone is an I live in Emacs person, but whatever you're using Emacs for, it is the thing you reach for to do that thing. +- Q: Do you think that we are falling behind in productivity as Emacs + users? Compared to all these VSCode forks that have 1000 buttons and + textboxes everywhere (i.e. much richer UIs which are basically + webpages). + - A: I do think Emacs is falling behind in some ways. I mean, it's definitely showing its age a little bit, especially you mentioned richer UIs that are basically web pages. I mean, this I think is one of the big problems Emacs has is that it uses a very, you know, a much more ancient way of kind of doing UIs that is not particularly flexible and not particularly comfortable for any modern UI coder. And I think if you look at the Emacs stuff out there, like, yes, you can do a few things with UIs. You can have some amount of UI richness, but it's pretty limited. And I kind of, if there's one thing I could wish for in Emacs, it's sort of like, I kind of wish Emacs could be on a, could be built on top of basically like Atom or something like that, where it's like a web framework that allows us to write actual rich pages, rich UIs in a modern style using things like CSS instead of the kinds of things Emacs lets you do. But that said, that is an advantage of VS Code and other editors like that. I think that Emacs does a good job of eventually catching up to all sorts of things people are doing in other editors. It's often that other editors get there first, but there's a lot of momentum to kind of keep Emacs fresh, keep it modern. And it's pretty easy to- I love that. I forgot about the lag. We do have a little bit of lag, but I just, I find that very captivating. We have with technologies like Apache Cassandra in the database world, we have this idea of eventual concurrency. And you make me think with Emacs, we have this idea of eventual feature parity, right? If a feature stays desirable long enough, Emacs will eventually grow it. I think that's a very contagious idea. Yeah, yeah, thanks. I hope that idea makes sense. And I hope it's correct, because I think that I do want Emacs to continue to succeed. And I personally, using Emacs, do not feel myself falling behind in productivity. That said, there's a lot of ways that Emacs can improve and should improve on this front. And a lot of these ways are pretty fundamental. So I kind of hope people pay a lot of attention to some of these more fundamental lower-level Emacs things that really allows the packages to do more richer and better things. + +- Q: I've been using Claude Code extensively. I recently switched to + Agent Shell with Claude Code. Have you tried it, what are your + thoughts? + - A: I actually have tried Agent Shell. And currently, I recorded this video like three months ago. So Agent Shell did not exist then. If Agent Shell did exist, I probably would have demoed it as well. Agent shell is great in the sense of it's... It does use comint, which is the way that I think all Emacs users would prefer to interact with something like Claude Code, or any of those types of tools, which is like, I don't. Um, the other, but it's a trade-off it uses like on the back and it's, it has a common buffer. And then on the back end, it's using a protocol to talk to agent, uh, to Claude Code and other things. The problem is this has a lot of problems. For example, like you don't have completion of slash commands. You don't have, um, if you ask to see the, in Claude Code, you can get a visual representation of. the context window. But you can't do this. I mean, last time I tried, I couldn't do this in agent shell. It's progressing rapidly. But it's not as rich in functionality as using Claude Code directly. On the other hand, because it's letting Emacs be Emacs and using comint, it's a much better experience to actually give instructions. I think the maximum power, though, is, to me, the best way is still like, you know, do your editing in org mode, and then just tell, you could have, you know, the richer experience of using of using Claude Code in, in it's more like shell like form where everything is, it's much, you know, designed to be used in the terminal, but you don't have to type in that much because you're really doing your typing in order to me, I think there's kind of the sweet spot that I like. Um, but agent-shell is a great step forward and I think it's, uh, it's quite good to use. And I, I personally use it a lot. +- Q: In terms of agent selection, what has your experience been with + different agents, and have you had any success with hosting your own + models and using open weights? + - A: I think there's, you know, many people have many different opinions on this. I think Claude Code is, most people I know would say Claude Code is probably, sorry, Claude is probably the best for coding right now. Gemini can be very hit and miss even with 3.0, but Claude is quite good. 4.5 Opus is actually relatively cheap compared to the previous version of 4.1 Opus. There's other models out there, but I think most people just stick with Claude because it's very reliable, it's very good, and nothing is obviously better than that. And as far as DeepSeek is pretty good as well, and then much cheaper. I've had some good luck using that locally, but actually the problem is for my day-to-day machine, like my personal machine, it's not powerful enough to run anything locally. And my work machine, it is powerful enough, but I can spend my company's money at will on more powerful models. So there's really not a lot of incentive for me to run locally. I think, as far as I know, I haven't heard of local models being incredible, but I think you can get reasonable quality with them. That is, especially if you're doing relatively simple things, I think it's pretty reasonable to be using those. Also, they tend to be slower than the models that are elsewhere just because they just have more horsepower, they can churn through those tokens a little quicker. +- Q: I'm reading angst in your thinking about AI/editing. What are + you excited about? + - A: I mean, I think there are possibilities. Like, yes, people are going in sort of a relatively obvious direction with LLMs right now. And I think there's lots of opportunities, clever opportunities to do things we couldn't have thought of... Things that are useful, but in ways that are not super obvious to us, and I think I'm still excited about the possibilities of using them in ways that are super helpful and different than normal. I'll give you an example. This is something that I intend to, I think, post on Reddit in a few days, but I have a extension to eshell where you can prefix a command with at, and then just tell it what you want to do, and it will substitute the command that you are thinking of. Because often, I do not remember. I never remember, like, how do you find a file in a directory tree, you know, recursing? Who can remember how to do that? It's like a find, and there's like a dash print there somewhere. Yes. There are some smart people who remember this but I am not one of them. And so I think, like, something like this is like, you just type out, find me this file, and it will substitute the correct command. I think this is, there's a lot of little, little tweaks you could do like, you know, if you want the AI, it could be there for you, and it will help you. And if you don't want it, it's not going to get in your way. And I think this is where Emacs can really shine. It can really take advantage of LLMs, but still remain true to its kind of editing experience, because it's not forcing you to use LLMs all the time. +- Q: Why does it matter to have a richer UI? All that is left is + basically writing and getting the results. + - A: I think maybe this is a response to me complaining about Emacs not having a richer UI before, but I think it does matter a lot for all sorts of things. It's hard to kind of explain succinctly, because I'm talking about UI and I'd have to show you things. But it should be just something like, oh I have an error, and I'm using flymake and I'm, I'm using the... I have options where it'll show me the error in line by underlining things and having a little message, but like, you know what, that message doesn't appear quite right a lot of the times. Or here's another one like. I program in Python a lot. And Python, it's super hard to program in unless you have these little vertical lines that shows you what the indents are. At least I find it. There are two packages that do that. None of them do it particularly well, just because Emacs at its base does not allow you to do this. And so you kind of have to hack it in. And there's lots of ways to mess it up. And when editing, you'll find yourself messing this thing up regularly. So it doesn't look quite clean. And like, there's little artifacts, or, you know, there's little ways that it, it kind of gets things wrong, or you can get things wrong with it. So I think that, like, there's a lot of issues with that sort of thing. And also, like, you know, what if you want to do something like play a video inline, like, I don't know, you might should be able to do that, you might should be able to do anything. But right now, it just can't. I think a lot of the reason as well... you know, we wanted to be compatible with TRS 80 machines or something like that. This is important, this really is important, but I hope there's some way that we can kind of eventually figure out how to get the best of both compatibility and more modern UIs. So, you know, we can have more modern UIs for people that have modern machines and other people either do without that functionality or sort of fall back to some reasonable default. + + +- Q: I have 45+ years editing, programming. I'm not sure I can + think about things without thinking of buffers, editors etc. Is + this a handicap/should we just have people with no experience with + code learn to prompt? + - A: I think experience only helps here - I don't trust people + with no experience creating code. It's OK for one-shot type + apps where you don't care about maintainability, but for + serious code where you need to think about a lot of different + types of typically software-engineering concerns such as + latency, maintainability, scalability, etc, experience is a huge + boost. We see this in the industry right now where junior + engineers are less desirable than senior engineers, because + senior engineers can just use LLMs more effectively. So I think + dipping your toes into the water is well worth it. + - A: +- I really like that sentiment. I like the idea that maybe we could + have a place for code that is "good enough", and have a place for + code where passion for the craft shines through +- I think editors like Windsurf/Cursor/VS Code will stick around but + to Andrew's point, the editing portion of the app will shrink while + the agent interaction will take center stage +- Thanks for answering the questions in such a clearly articulated + manner :) +- Monster write up on energy usage: + [https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/](https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/) - + tldr; AI's energy use is small per query but exploding + overall---driven by opaque, power-hungry data centers. +- interesting talk. I'll start asking it for everything: "but is it + editing?" + +[[!inline pages="internal(2025/info/llm-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/llm-nav)" raw="yes"]] + + diff --git a/2025/talks/modern.md b/2025/talks/modern.md new file mode 100644 index 00000000..e13e6ade --- /dev/null +++ b/2025/talks/modern.md @@ -0,0 +1,114 @@ +[[!meta title="Some problems of modernizing Emacs"]] +[[!meta copyright="Copyright © 2025 Eduardo Ochs"]] +[[!inline pages="internal(2025/info/modern-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Some problems of modernizing Emacs +Eduardo Ochs (he/him) - Pronunciation: Oks, IRC: edrx, <http://anggtwu.net/>, more info at <http://anggtwu.net/contact.html>., <mailto:eduardoochs@gmail.com> + +[[!inline pages="internal(2025/info/modern-before)" raw="yes"]] + +<https://anggtwu.net/emacsconf2025.html> + +This talk is going to be a reworked version of the incomplete video +in <http://anggtwu.net/2025-modern.html>. I will start by presenting +several notions of "simplicity" and "elegance", and show that when I +started learning Elisp it was "simple" and "elegant" in a way that +it no longer is; then I will show how to fix some tiny parts of the +problem by 1) using functions based on \`cl-prin1', 2) redefining +some printing methods with "(cl-defmethod cl-print-object …)", and 3) using Common Lisp to understand some recent parts of Elisp that are not well-documented. + +About the speaker: + +Eduardo is the author of an Emacs package called eev that makes +total sense to a handful of people and no sense at all to +practically everyone else - except for one part of eev, called +"eepitch". He intends to explain the reasons for that in his talk. + +## Discussion / notes + +- Q: [from IRC] why the lambda representation has recently changed + to vector-like? + - A: It is easier to debug Emacs if different kinds of objects + have different types... keeping everything as lists is better + for quick-and-dirty code, but the developers wanted something + that felt less "dirty"... +- Q: Do you have hints for integrating eev into an already existing + workflow? + - A: I need to understand the other workflows to see what I can + recommend... can we discuss that on chat? If your workflow + includes Org code blocks then I will learn a lot from your + workflow too... + - I was hoping for some document with some general notes or ideas. + Right now eev feels very 'dominant'. While it works great I + find it difficult to mix eev and other Emacs tools + - Which other tools? Can we discuss examples? I was able to + integrate eev with practically all the other packages the I + know... +- Q: [from IRC] What do you think of org-mode and its executable src + blocks? That seems to overlap with what eev seemed to provide. + - A: I need to learn more about Org and source blocks!!! The + problem is that every time that I tried to learn source blocks I + started to ask many technical questions about the details and + got lost in a big maze of rabbit holes... see: + <[https://anggtwu.net/2021-org-for-non-users.html](https://anggtwu.net/2021-org-for-non-users.html)> - + I even tried to write functions that would display the data + structures behind source blocks, but at some point I gave up and + decided that I would only come back when I had people who could + help me... =( + - A: in short: when I tried to use Org mode I was always asking the wrong questions and trying to understand internal details that the developers treated as very advanced +- Q: I just tested on SBCL, Guile and Chez Scheme, and all of them use + opaque objects for functions (Chez: `#<procedure square>`, SBCL: + `#<FUNCTION F>`). Why is Emacs Lisp changing to using + semi-opaque vectors considered so bad? (Or is just making them fully + opaque better for beginners?) + - Note: on SBCL you can inspect that function object and see + both the lisp code and the machine code it compiles to + - A: It is not bad at all! +- Q: What defines `find-classtree'? + +- I must confess I am still confused about eev. same with hyperbole. + - A: eev doesn't make any sense from the description and the sales blurbs, all the few people who learned it learned it from the tutorials. but that video has a big example that is very easy to run it the person has eev installed - it starts a bit after 13:00. +- I often find myself wishing other systems had a help system like Emacs. +- It took me about 5 years to move from Space & Doom to vanilla Emacs 🤣 + - Now that I think about it, it was about the same for me. + - it was less about learning elisp and more about finding the motivation & internal justification to start from scratch. David Wilson's tutorials helped propel me as well + - did you switch from vim/evil bindings to "Emacs Standard" bindings? + - The Doom & Spacemacs Frameworks obfuscate how vanilla Emacs actually works... and so after a while it became a barrier + - not really, I use evil when writing code but tend to stick to vanilla bindings for most other buffers + - My own motivation was that one day Spacemacs broke an important org-mode keybinding (M-RET) in a way that I couldn't work around. I had managed to learn a decent amount of Elisp by then, so I decided to go try my first vanilla config. + - I think it took me a few months + - me similar: I use evil mode for all prose and programming buffers but Emacs modes for everything else. + - I had installed too many packages that I didn't understand at all + - I was really unhappy with performance as I started to rely more on LSP modes (this was before the bytecode implementation). Switching to vanilla & moving to Eglot really helped with that, then of course the bytecode changes make it a non-issue now + - thanks! just started using emacs about 4-5 months ago via Doom. But I can't help think I've skipped some important learnings. + - I was quite happy when I got my first taste of native compilation. It improved Elisp performance tremendously. + - I really recommend giving vanilla a try! You can use this trick to setup a parallel config so you can try it out before scrapping your current setup: https://stackoverflow.com/a/58039656/315827 + - That SO strikes me as slightly more complicated that necessary.. I would usually do it inline, like: emacs -Q -eval '(setq user-emacs-directory "~/emacs.1.d")' [filename, maybe] + - There is also the --init-dir flag. + - Fair comment, with your version it could be nice to build a shell function or alias so you can have multiple configs at one time + - shell function or alias is a great idea! taking a note to set that up for myself! +- Q: following along a little using IELM... which version of Emacs was used in the recording? My (symbol-function 'foo) is giving #f(lambda (a b) [t] (+ a b)) + - A: 31 + - I get #[(a b) ((+ a b)) (t)] (not nil for the last vector element as shown in the presentation) + - Emacs 31 would be a development build (vs from the release branch) so it's possible two different builds of 31 could have subtle differences depending on which commit was the last included in the given builds. +- A: the demo is here + - https://anggtwu.net/2025-modern/00-try-this.html + - https://anggtwu.net/2025-modern/00-try-this + - I think that people can run the demo with just this (find-wget "https://anggtwu.net/2025-modern/00-try-this") except for one line that with give an error because it depends on a function that is not in ELPA - actually not even on the github version yet... + - if anyone has eev installed and wants to try it please tell me... I think that one line of the demo calls a function that is not in the version of eev that is ELPA yet +- Q: What do the leading red * in the left window mean? + - A: https://anggtwu.net/eepitch.html#test-blocks +- I was using eev for a month or so then my guix package broke and I am too lazy to fix it +- Very informative talk. +- Thank you edrx! eev has been on my list of things to check for some time! +- Super cool seeing pieces of the workflow with eev, gives me some ideas! + +[[!inline pages="internal(2025/info/modern-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/modern-nav)" raw="yes"]] + + diff --git a/2025/talks/n-angulator.md b/2025/talks/n-angulator.md new file mode 100644 index 00000000..9b1044b7 --- /dev/null +++ b/2025/talks/n-angulator.md @@ -0,0 +1,28 @@ +[[!meta title="Org-mode GTD vs N-angulator GTD"]] +[[!meta copyright="Copyright © 2025 Kevin Haddock"]] +[[!inline pages="internal(2025/info/n-angulator-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Org-mode GTD vs N-angulator GTD +Kevin Haddock - <mailto:kevinbanjo@gmail.com> + +[[!inline pages="internal(2025/info/n-angulator-before)" raw="yes"]] + +Typical real-world GTD operations are compared in org-mode and N-Angulator + +EmacsConf 2021 talk on N-Angulator: <https://emacsconf.org/2021/talks/nangulator/> + +About the speaker: + +Long term emacs enthusiast showcases the power of his prototype +n-dimentional metadata indexer in a real world application + + +[[!inline pages="internal(2025/info/n-angulator-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/n-angulator-nav)" raw="yes"]] + + diff --git a/2025/talks/open-mic.md b/2025/talks/open-mic.md new file mode 100644 index 00000000..53ffb322 --- /dev/null +++ b/2025/talks/open-mic.md @@ -0,0 +1,28 @@ +[[!meta title="Open session"]] +[[!meta copyright="Copyright © 2025 Participants"]] +[[!inline pages="internal(2025/info/open-mic-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Open session +Participants + +[[!inline pages="internal(2025/info/open-mic-before)" raw="yes"]] + + +## Discussion / notes + +- this is shoshin here I'm pretty sure, with links to various stuff of his https://cicadas.surf/~shoshin/ oh, also, shoshin spotted again here https://mathstodon.xyz/@shoshin@buzz.cicadas.surf +- Q: What are some of the efforts going on to make more "modern UIs" in Emacs? By "modern UIs" I mean not just text-based. Kind of like webpages. + - I think quite a few talks on the dev track were concerned with that. +- I ask because sometimes I get jealous of my VSCode / Cursor friends when I look at their screen and see all kinds of interactive content. Also in the future, if AI models start returning interactive outputs instead of just text then Emacs will be at a disadvantage because it won't be able to render them. +- I encourge Emacs Carnival entries this month: https://curious.port111.com/2025/11/01/emacs-carnival-december-the-people.html + - I welcome your submission this month. Some of the most interesting people I've known are emacs people. I'm betting that's true for others too. + +[[!inline pages="internal(2025/info/open-mic-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/open-mic-nav)" raw="yes"]] + + diff --git a/2025/talks/org-babel.md b/2025/talks/org-babel.md new file mode 100644 index 00000000..adc75eaf --- /dev/null +++ b/2025/talks/org-babel.md @@ -0,0 +1,108 @@ +[[!meta title="Making Org-Babel Reactive"]] +[[!meta copyright="Copyright © 2025 Abhinav Tushar"]] +[[!inline pages="internal(2025/info/org-babel-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Making Org-Babel Reactive +Abhinav Tushar (he/him) - <https://lepisma.xyz>, [@lepisma@mathstodon.xyz](https://mathstodon.xyz/@lepisma), <mailto:abhinav@lepisma.xyz> + +[[!inline pages="internal(2025/info/org-babel-before)" raw="yes"]] + +In Org mode, you can add and execute small snippets of code using +Org-Babel. This lets you have an extremely useful mixed-language notebook like +environment inside Emacs. These days, many notebook systems provide fully +reactive notebooks where changes made in any cell or variable propagate to its +dependents without manual execution. This pattern is very useful for exploratory +data analysis, visualization, and many other use-cases that notebooks are +generally good for. + +Unsurprisingly, we can enable such reactivity in Org-Babel without too much +effort. In this talk, I will cover how to do that while also adding certain +other interaction niceties to make full use of the resultant reactivity. + +About the speaker: + +I am a programmer and machine learning engineer, and I have enjoyed working with +Org-Babel code blocks inside my writings. Other notebooks and platforms have +recently started to adopt fully reactive computation, which is something I have +liked a lot for exploratory analysis. In this talk, I will show how to add +similar reactivity in Org-Babel. + +## Discussion / notes + +- Q: Is there a web page describing this topic? + - A: The repository readme is here + [https://dev.lepisma.xyz/git/ob-rx/](https://dev.lepisma.xyz/git/ob-rx/) + but not sure if you meant any other kind of description. +- Q: If I understand correctly, recomputation happens upon saving; why + not tie it to C-c C-c instead? + - A: You can tie the (interactive) function it to C-c C-c too, I + usually prefer on-save reactivity when I need reactivity. +- Q: You mentioned that you are working on something similar for + JS\... what do you have now? (Thanks! =)) + - A: I don't have something public but I am using a webkit child + frame to show up d3 plots. Will add this in ob-rx once I have it + stable. +- Q: If this could work on C-c C-c and as a minor mode, then it could + perhaps be contributed upstream! Is that planned? + - A: Not thought about it, maybe. +- Q:Is it possible to do something reactive with :result file :file + my-generated.file (?) - yes you got it, it's just I make + intermediate compilation steps in org sometimes using that. + - A: Yes, the core mechanism is to just control the order of + execution for code blocks. So any normal workflow involving + files will also work. I have tried a few file workflows and + ended up needing ob-async so that Emacs doesn't get stuck. But + I am not sure if I understood your exact use case (?). +- Q:how does it handle circular dependencies? + - A: I haven't checked if my approach gets stuck in circular + dependencies (it should), but usually when I am writing + org-babel notebooks, I end up not having circular dependencies. + The check for this should be easy enough though and the + minor-mode could warn if it detects a circular dep. Will add + this in later versions. +- Q: How to get the block dependence plot? Very nice. + - It's a small piece of graphviz code in the minor mode, here + [https://git.sr.ht/\~lepisma/ob-rx/tree/master/item/ob-rx.el#L118](https://git.sr.ht/~lepisma/ob-rx/tree/master/item/ob-rx.el#L118) + - Thank you. +- Q: I'm curious what packages you're using for org appeance. It + looks like a mix of org-modern and some other packages. (Yes I am + also interested in your overall emacs theme) + - A: So my config is here + [https://git.sr.ht/\~lepisma/rogue/tree](https://git.sr.ht/~lepisma/rogue/tree) + but maybe the core part of the look is based on my older blog + + + + +- I'm really looking forward to this talk. +- Excited to see reactivity in org-babel! +- Your emacs theme is very pleasing!! +- I will try this type of dependence block. It looks like it can save + a lots of mental effort to organize my data. +- Excellent talk! +- [https://dev.lepisma.xyz/git/ob-rx](https://dev.lepisma.xyz/git/ob-rx) + \<- source code +- Cool project! +- Great talk and beautiful Emacs! +- This seems to add useful features to org-babel, great job! +- Very cool! +- Very interesting ! +- https://dev.lepisma.xyz/git/ob-rx/ +- this looks useful. +- I'm quite fond of Pluto.jl in Julia, so it'd be nice to have something like this that I can use from inside Emacs. + - Yeah, it also reminded me of Pluto + - But I really prefer working from inside Emacs, so I don't use Pluto that much. This is great + - It could hopefully minimize my usage of rstudio + - I was thinking something like that too for the R folk + - Indeed, rstudio is nice, but it is not emacs +- excellent talk by tushar + +[[!inline pages="internal(2025/info/org-babel-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/org-babel-nav)" raw="yes"]] + + diff --git a/2025/talks/private-ai.md b/2025/talks/private-ai.md new file mode 100644 index 00000000..8f78c9e2 --- /dev/null +++ b/2025/talks/private-ai.md @@ -0,0 +1,119 @@ +[[!meta title="Emacs and private AI: a great match"]] +[[!meta copyright="Copyright © 2025 Aaron Grothe"]] +[[!inline pages="internal(2025/info/private-ai-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs and private AI: a great match +Aaron Grothe (he/him) - Pronunciation: Air-un Grow-the, <https://www.grothe.us> LinkedIn: <https://www.linkedin.com/in/aaron-grothe/>, <mailto:ajgrothe@yahoo.com> + +[[!inline pages="internal(2025/info/private-ai-before)" raw="yes"]] + +When experimenting with using AI with Emacs, many users have concerns. A few of the concerns that people have are the possibility of their information being shared with the AI provider (either to train newer models, or as a potential revenue source), the possibility of running up unpredictable costs with their cloud provider, and the potential environmental impact of using cloud AI. Using Private/Local AI models provide an AI environment that the user can fully control. User can add to it incrementally over time as their skills and experience grows. This talk will be a quick intro to using Ollama Buddy, Ellama, and gptel to add the ability to have a private AI integrated into your Emacs session. We’ll start with the basics and show people how they can add AI to their workflow safely and securely. Hopefully, people will come away from the talk feeling better about our AI futures. + +The talk will start with a simple implementation: Ollama and Ollama Buddy and a couple of models. After that it will build on that +for the rest of the 20 minutes. + +The goal is show the users multiple ways of using AI with Emacs and let them make their own choices. + +About the speaker: + +AI is everywhere and everyone is trying to figure out how to use it better. This talk will be a quick introduction to showing some +of the tools and techniques that a user can do to integrate AI privately and securely into their Emacs workflow. The goal is to help people take the first steps on what will hopefully be a productive journey. + +## Discussion / notes + +- Q: Why is the David Bowie question a good one for testing a model? + e.g. does it fail in interesting ways? + - A: Big fan, firstly; also Deepseek will tend to have errors and + I'm familiar with the data so easy to spot halucinations + - A: First off, huge fan of David Bowie. But I came down to it really taught me a few things about how the models work in terms of things like how many kids he had, because Deepseek, which is a very popular Chinese model that a lot of people are using now, misidentifies him having three daughters, and he has like one son and one, one, I think, two sons and a daughter or something like that. so there's differences on that, and it just goes over... there's a whole lot of stuff because his story spans like 60 years, so it gives good feedback. That's the real main reason I asked that question because I just needed one... That sea monkeys, I just picked because it was obscure, and just always have, write, I used to have it write hello world in forth because I thought was an interesting one as well. It's just picking random ones like that. One question I ask a lot of models is, what is the closest star to the Earth? Because most of them will say Alpha Centauri or Proxima Centauri and not the sun. And I have a whole 'nother talk where I just argue with the LLM trying to say, hey, the sun is a star. And he just wouldn't accept it, so. +- Q: What specific tasks do you use local AI for? + - A: refactoring for example converting python 2 to python 3, + cybersecurity researching + - A: I like to load a lot of my code into and actually have it do analysis of it. I was actually going through some code I have for some pen testing, and I was having it modified to update it for the newer version, because I hate to say this, but it was written for Python 2, and I needed to update it for Python 3. And the 2 to 3 tool did not do all of it, but the actual tool was able to do the refactoring. It's part of my laziness. But I use that for anything I don't want to hit the web. And that's a lot of stuff when you start thinking about if you're doing cyber security researching. and you have your white papers and stuff like that and stuff in there. I've got a lot of that loaded into RAG in one model on my Open WebUI system. + +- Q: Have you used any small domain-specific LLMs? What are the kinds + of tasks they specialize in, and how do I find and use them? + - A: On the todo list but not something I have used very much yet +- Q: Are the various models updated regularly? Can you add your own + data to pre-built models? +1 + - A: +- Q-piggy-back: Will the models reach out to the web if they need to + for more info? + - A: haven't +- Q: What is your experiance with RAG? are you using them and how have + they helped? + - A: +- Q: Thoughts on running things on AWS/digital ocean instances, etc? + - A: prefer not to have the data leave home; AWS and DO works + okay, oracle has some free offerings but tend to work locally + most often +- Q: What has your experience been using AI for cyber security + applications? What do you usually use it for? + - A: Yeah, really, for cybersecurity, what I've had to do is I've dumped logs to have it do correlation. Keep in mind, the size of that Llama file we were using for figuring out David Bowie, writing the hello world, all that stuff, is like six gig. How does it get the entire world in six gig? I still haven't figured that out in terms of quantization. So I'm really interested in seeing the ability to take all this stuff out of all my logs, dump it all in there, and actually be able to do intelligent queries against that. Microsoft has a project called Security Copilot, which is trying to do that in the Cloud. But I want to work on something to do that more locally and be able to actually drive this stuff over that. That's one also on the long-term goals. +- Q: Is there a disparity where you go to paid models becouse they are + better and what problems would those be? + - A: Paid models, I don't mind them. I think they're good, but I don't think they're actually economically sustainable under their current system. Because right now, if you're paying 20 bucks a month for Copilot and that goes up to 200 bucks, I'm not going to be as likely to use it. You know what I mean? But it does do some things in a way that I did not expect. For example, Grok was refactoring some of my code in the comments and dropped an F-bomb. which I did not see coming, but the other code before that I had gotten off GitHub had F bombs in it. So it was just emulating the style, but would that be something I'd want to turn in a pull request? I don't know. But, uh, there's, there's a lot of money going into these AIs and stuff, but in terms of the ability to get a decent one, like the llama, llama 3.2, and load your data into it, you can be pretty competitive. You're not going to get all the benefits, but you have more control over it. So it's a balancing act. + + +- Q: What's the largest (in parameter size) local model you've been + able to successfully run locally, and do you run into issues with + limited context window size? The top tier paid models are up to + 200k now. + - A: By default, the context size is I think 1024. But I've upped it to 8192 on this box, the Pangolin, because it seems to be, for some reason, it's just a very... working quite well. But the largest ones I've loaded have been in the... have not been that huge. I've loaded this... the last biggest one I've done... That's the reason why I'm planning on breaking down and buying a Ryzen. Actually, I'm going to buy an Intel i285H with 96 gig of RAM. Then I should be able to load a 70 billion parameter model in that. How fast will it run? It's going to run slow as dog, but it's going to be cool to be able to do it. It's an AI bragging rights thing, but I mostly stick with the smaller size models and the ones that are more quantitized because it just tends to work better for me. +- Q: Are thre "Free" as in FSF/open source issues with the data? + - A: Yes. Where the data is coming from is a huge issue with AI + and will be an issue long term. + - A: Yes, where's the data coming from is a huge question with AI. It's astonishing you can ask questions to models that you don't know where it's coming from. That is gonna be one of the big issues long-term. There are people who are working on trying to figure out that stuff, but it's, I mean, if you look at, God, I can't remember who it was. Somebody was actually out torrenting books just to be able to build it into their AI system. I think it might've been Meta. So there's a lot of that going on. The open source of the stuff is going to be tough. There's going to be there's some models like the mobile guys have got their own license, but where they're getting their data from, I'm not sure, so that's a huge question. That's a talk in itself. But yeah, if you train on your RAG and your data, you know what it's come, you know, you have a license that... but the other stuff is just more lines of supplement if you're using a smaller model. +- Q: Have you used local models capable of tool-calling? + - A: I'm scared of agentic. I'm going to be a slow adopter of that. I want to do it, but I just don't have the, uh, four decimal fortitude right now to do it. I've had to give me the commands, but I still run the commands by hand. I'm looking into it and it's on once again, it's on that list, but I just, that's a big step for me. +- Q: What scares you most about agentic tools? How would you think + about putting a sandbox around it if you adopt an agentic workflow? + - A: Air-gap; based on experiece in the defense industry + - A: In terms of that, I would just control what it's able to talk to, what machines, I would actually have it be air gap. I work for a defense contractor, and we spend a lot of time dealing with air gap systems, because that's just kind of the way it works out for us. So agentic, it's just going to take a while to get trust. I want to see more stuff happening. Humans screw up stuff enough. The last thing we need is to multiply that by 1000. So in terms of that, I would be restricting what it can do. If you look at the capabilities, if I created a user and gave it permissions, I would have a lockdown through sudo, what it's able to do, what the account's able to do. I would do those kind of things, but it's going to be, it's happening. It's just, I'm going to be one of the laggards on that one. So air gap, jail, extremely locked down environments, like we're talking about separate physicals, not Docker. Yeah, hopefully. +- Q: Tool calling can be read-only, such as giving models the ability + to search the web before answersing your question. (No write access + or execute access) I'm interested to know if local models are any + good at calling tools, though. + - A: Yes, local models can do a lot of that stuff. It's their capabilities. If you load LM studio, you can do a lot of wonderful stuff with that or with Open Web UI with ollama. It's a lot of capabilities. It's amazing. Open Web UI is actually what a lot of companies are using now to put their data behind that. They're curated data and stuff like that. So works well. I can confirm that from my own professional experience. Excellent. +- Q: Really interesting stuff, thank you for your talk :) Given that + large AI companies are openly stealing IP and copyright, thereby + eroding the authority of such law (and eroding truth itself as + well), can you see a future where IP & copyright flaw become + untenable and what sort of onwards effect might that have? Apologies + if this is outside of the scope of your talk + - A: I'm not a lawyer, but it is really getting complicated. It is getting to the point, I asked a question from, I played with Sora a little bit, and it generated someone, you can go like, oh, that's Jon Hamm, that's Christopher Walken, you start figuring out who the people they're modeling stuff after. There is an apocalypse, something going to happen right now. There is, but this is once again, my personal opinion, and I'm not a lawyer, and I do not have money. So don't sue me, is there's going to be the current administration tends is very AI, pro AI. And there's very a great deal of lobbying by those groups. And it's on both sides. And it's going to be, it's gonna be interesting to see what happens to copyright the next 510 years. I just don't know how it keeps up without there being some adjustments and stuff. +- [https://grothe.us/](https://grothe.us/) + <-- speaker's online presence +- Thanks for your demo and for encouragement. I'll actually give it a + try. +- I remember seeing the adverts for sea monkeys in old comic books as + a kid -- that was a blast from the past! +- Super inspired! And very well done as a live prezi! :) +- respect his commitment to privacy +- [https://aws.amazon.com/what-is/retrieval-augmented-generation/](https://aws.amazon.com/what-is/retrieval-augmented-generation/) + <- What is RAG? (an explanation) + +- File size is not going to be the bottleneck, your RAM is. You're + going to need 16 GB of RAM to run the smallest local models and + ~512 GB RAM to run the largest ones. You'll need a GPU with this + much memory (VRAM) if you want it to run fast. + - A: It also depends upon how your memory is laid out. Like example being the Ultra i285H I plan to buy, that has 96 gig of memory. It's unified between the GPU and the CPU share it, but they go over the same bus. So the overall bandwidth of it tends to be a bit less, but you're able to load more of it into memory. So it's able to do some additional stuff with it as opposed to come off disk. It's all balancing act. If you hit Ziskind's website, that guy's done some great work on it. I'm trying to figure out how big a model you can do, what you can do with it. And some of the stuff seems to be not obvious, because like example, being that MacBook Air, for the five minutes I can run the model, it runs it faster than a lot of other things that should be able to run it faster, just because of the way the ARM cores and the unified memory work on it. So it's a learning process. But if you want to, Network Chuck had a great video talking about building his own system with a couple really powerful Nvidia cards and stuff like that in it. And just actually setting up on his system as a node and using a web UI on it. So there's a lot of stuff there, but it is a process of learning how big your data is, which models you want to use, how much information you need, but it's part of the learning. And you can run models, even on Raspberry Pi 5s, if you want to, they'll run slow. Don't get me wrong, but they're possible. +- Great talk/info. Thanks. + +- it went very well! +- (from the audience perspective) +- respect his commitment to privacy +- Very interesting talk! Thanks! +- AI, you are on notice: we want SBOMs, not f-bombs! +- thanks for the presentation + + +[[!inline pages="internal(2025/info/private-ai-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/private-ai-nav)" raw="yes"]] + + diff --git a/2025/talks/python.md b/2025/talks/python.md new file mode 100644 index 00000000..59381c09 --- /dev/null +++ b/2025/talks/python.md @@ -0,0 +1,26 @@ +[[!meta title="Interactive Python programming in Emacs"]] +[[!meta copyright="Copyright © 2025 David Vujic"]] +[[!inline pages="internal(2025/info/python-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Interactive Python programming in Emacs +David Vujic (he/him) - Mastodon <https://mastodon.nu/@davidvujic> + +[[!inline pages="internal(2025/info/python-before)" raw="yes"]] + +Learning Lisp was an eye opener for me. The Interactive way of writing code is Amazing. Emacs has great support for this in general already. For Python, there's limitations and I have looked for ways to make Python development more interactive (and fun). Python is what I do at work and in Open Source projects. It has lead me to develop Emacs features specific for Python: evaluating code with visual feedback, modify a running Python app without restarts, and some LLM support. I will demo and talk about what I have developed to make Python development interactive and joyful. + +About the speaker: + +My name is David and I'm a software developer. Colleagues and friends may know me as an early adopter of agile ideas and test driven development. I am passionate about things like that, and share the things I learn to the community and the people I work with. My favorite programming languages are Python and Clojure. On my spare time I practice outdoor Parkour & contribute to Open Source. + + + +[[!inline pages="internal(2025/info/python-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/python-nav)" raw="yes"]] + + diff --git a/2025/talks/reader.md b/2025/talks/reader.md new file mode 100644 index 00000000..52ad2f55 --- /dev/null +++ b/2025/talks/reader.md @@ -0,0 +1,222 @@ +[[!meta title="An introduction to the Emacs Reader"]] +[[!meta copyright="Copyright © 2025 Divyá"]] +[[!inline pages="internal(2025/info/reader-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# An introduction to the Emacs Reader +Divyá - IRC: divya, Website: <https://www.phimulambda.org> Mastodon: <https://mathstodon.xyz/@divyaranjan>, <mailto:divya@subvertising.org> + +[[!inline pages="internal(2025/info/reader-before)" raw="yes"]] + +<https://codeberg.org/divyaranjan/emacs-reader> + +This talk will introduce a new document reader that I have been building for Emacs since the last few months. I will showcase the basic features of the document reader, how well it integrates with Emacs and the performance and other improvements that it provides in comparision to the existing document viewing options such as DocView, PDF Tools and others. + +I will also describe the core architectural decisions that were made, specficially the fact that it is a dynamic module and the pains and pleasures of interfacing Emacs with C and vice-versa. + +I will give a high-level tour of the codebase, which is pretty small as of now (<3K LOC), so that if a fellow Emacs developer wishes to contribute, they know where and how to get started. + +In conclusion, I'll summarize the current features we're in the process of developing, what challenges we're facing in diong so, and what we wish to work on for the upcoming versions of the package. + +About the speaker: + +I’m Divyá from India. My background has been as a mathematics teacher and now I'm a programmer. I’ve been hacking on free software as a hobby and, for the past three to four years, living inside Emacs. I loved reading PDFs in Emacs via pdf-tools, but poor hardware and maintenance gaps pushed me to build a faster reader. I learned MuPDF and Emacs Dynamic Modules and wrote The Emacs Reader: a dynamic-module-based, high-performance, resource-friendly document viewer for Emacs that supports PDFs and other formats (EPUB, CBZ) while integrating natively with Emacs. + +## Discussion / notes + +- Q: Is there scope for integrating the C library into Emacs itself + with muPDF becoming an optional dependency? + - A: That will entail having a pdf engine integrated into Emacs + source-tree, not sure if that\'s a good idea. +- Q: The dynamic modules sound great, and it\'s amazing they\'re there + since 2017. Why is it so slow to take off, do you think? Is there + prior art with them? + - A: Mostly because Elisp is so nice to use for almost everything + you need to do in Emacs. It\'s only in very specific cases that + you require to care about real-time latency and memory + efficiency. And packages like libvterm and others do use it for + such purposes. +- Q: How is pdf-tools difficult to install? I install it using the + built in package manager. Looking at the emacs-reader installation + instructions, I don\'t see how install it that easily. I don\'t use + use-package or straight. Question answered in presentation. +- A: Just the list of dependencies required to build epdfinfo itself + makes it difficult, and when you install pdf-tools it does a huge + autotools build as well. Emacs Reader only (and will always) depends + on MuPDF (and Emacs too.). +- Q: What tool(s) did you use to measure the memory usage between the + three packages? + - A: Valgrind\'s massif + massif-visualizer + - I've been using perf and then visualizing with hotspot when debugging FFI in Common Lisp... it's felt successful + - (I've never had success with valgrind, but I've not dug deep with it) + - I discovered perf only recently when I had a deep need for low-level optimisation (which is not something I often need) - it's a really nice workflow! +- Q: How is the conversion between ELisp and the foreign language type + system done? For example when interfacing with a C++ library that + makes heavy use of C++ object system and templates? + - A: Basically, dynamic modules make you write Emacs Lisp in your + language. Consult the blogpost above for a more elaborate and + complete explanation. +- Q: pdf-tools renders high quality images. Does emacs-reader do that? + - A: Yes! We can render high-quality images just fine! +- Q: Can one look at pdf metadata with emacs-reader? Can annotations + be added? Does it understand forms? Can it handle encrypted pdfs? + - A: Support for all of this is planned. +- Q: I installed emacs-reader already. It is as promised :) Great job! + How can I associate odt files to open with emacs-reader? + - A: It should just work with the **find-file** command**.** +- Q: If a pdf file is open in emacs-reader and I regenerate the pdf + with some changes, does emacs-reader actually refresh the pdf on its + own or do I have to reload the pdf? + - A: Yes if it\'s a complete file with the same filename, but no + if it\'s still being created with LaTeX - we need SyncTeX for + that +- Q: What are the challenges with integrating with SyncTeX and AucTeX? + This would be great to see as pdf-tools handles this well. + - A: Planned, no major obstacles anticipated. The only reason we + haven\'t done it yet is more important highlighting and text + selection features planned. +- Q: Loved that presentation! Will you be giving another talk on the + architecture you went over? A deep-dive there would be awesome. + - A: Not at EmacsConf, but check out my streaming sessions at + [https://tv.dyne.org/c/phimulambda](https://tv.dyne.org/c/phimulambda) + and I can talk about it there. +- Q: Is there search functionality? Something like isearch and occur? + - A: Not as such yet. But it is HIGH PRIORITY. +- Q: Does dynamic module prevent customization that Elisp usually + provide? (Advices, Hooks, etc). + - A: No, you can do everything on the Elisp side that you want. On + the dynamic side, it\'s a bit more tricky, not much support + there right now. +- Q: Follow-up on dynamic module: Do you usually create an Elisp shim + from the FFI and then use them with Elisp code? + - A: Yes, we usually wrap dynamic module functions in Elisp to + make sure the foreign function gets called when it\'s needed. +- Q: Is searching on the roadmap? Or is it already available as a + feature? Thanks! + - A: YES! HIGH PRIORITY \<3 +- Q: Will there be occur like searching? + - A: YES! Basically everything in PDF Tools is planned! +- Q: What is your timing expectation for it to appear on ELPA? + - A: By next major release, which will be in 1-2 months. +- Q: is this essentially FFI? + - A: Yup +- Q: interesting.. is that how webkit integration works? + - (audience): not really. +- Q: thank you. Are there other packages that use dynamic modules? + - (audience): Yes, vterm also uses a C module +- Q: Has any work been done to make org-noter work with emacs reader? + - (audience): not yet. It is in the plans, though. + - (audience): Nice. That would allow me to switch, because I use org-noter quite a bit. +- Q: Are any of you doing simple editing of PDFs in Emacs? I'm thinking about form-filling, adding signatures, that sort of thing + - A: that's something I'd also like to integrate once we have other basic features ready + - (audience): not yet. We do want to add annotation support though. Not sure if that's the same thing. + - I don't believe it is, but I could be mistaken + - A: slightly, but not exactly, mupdf does support forms and signatures so we shouldn't have much issues except making it work with emacs. + - I'm not fond of annotations, because it mutates the original PDF. +- Q: From the example when calling page 56, is there another thread immediately fetching the next 5 pages for cache? + - A: yeah indeed I'll talk about it later in the slides, you'll have to build mupdf from scratch in that case. + - A: there are multiple threads competing to fill the cache window, depending upon how long it takes to render each slice. +- Q: here is a question that I am a bit embarassed to ask... is there an easy way to install emacs-reader with package-vc without use-package? + - yes! + - I am asking just because I've been postponing learning use-package for ages + - you can use just package-vc totally. use-package uses package-vc under the hood anyway + - I tried this - (package-vc-install "https://codeberg.org/divyaranjan/emacs-reader") + - you need to do a build step. you can just go and do it manually +- Q: how does the dark mode compare to midnight mode in pdf-tools? + - it is simply inverting the colors + - Q: so it does not support setting the foreground and background colours? + - It does not. + - pdf-tools has pdf-view-themed-minor-mode that tries to match a PDF with the current theme. It's kinda nice. I'm glad Emacs Reader is aiming to have something similar in the near future. + - dark mode intergration with the dark themes would be cool +- Q: that is a question that I've had for ages - how do we handle that PDFs that (La)TeX generates one page at a time, and that will be broken until the last page is generated... + - using synctex +- Q: I will try to attend one of your streamings... where can I find info about them? + - A: https://tv.dyne.org/c/phimulambda + - we also have an IRC at #phi-mu-lambda you're also welcomed there edrx +- Q: Oh, emacs reader can open epubs? I use nov.el for that, and it has trouble sometimes with complex epubs. + - yup it can :D + - it comes for free with mupdf + - I mean if mupdf supports it, emacs reader will to + - the only thing we don't support is djvu, but i have plans of making it supported in upstream mupdf + - Oh cool, I didn't know about the other formats! + +- [https://codeberg.org/divyaranjan/emacs-reader](https://codeberg.org/divyaranjan/emacs-reader) + - [https://mupdf.com/](https://mupdf.com/) + - [https://www.phimulambda.org/blog/emacs-dynamic-module.html](https://www.phimulambda.org/blog/emacs-dynamic-module.html) + \<\-- that\'s a nice blog post. +- Love this arch diagram step through +- The linked blog for dynamic modules: + [https://www.phimulambda.org/blog/emacs-dynamic-module.html](https://www.phimulambda.org/blog/emacs-dynamic-module.html) +- You can set the maximum ram usage in Okular settings. If it is + configured to load the entire document scrolling is instant even in + large documents \[not the author: this is only relevant to hugely + beefy machines, surely? And it sounds like the Reader does it + naturally, if you will\] + +- 16GB of RAM goes a long way even for huge documents like technical + datasheets or photo pdfs. Just be careful not to open too many of + them while also having a lot of browser tabs. +- Looks like Reader simply displays the old page until the new one is + ready. While better than showing a white page it\'s not instant like + Okular +- A: Emacs reader doesn\'t require 16GB RAM to do that same, because + it doesn\'t need to cache everything at once, unlike Okular. The + talk shows a video demonstration of it getting stuck when not + configured to use maximum ram (in which it caches the pages.). +- I didn't realize pdf-tools was using so much RAM. + - I definitely noticed, lol + - The memory graphs are already a very compelling point for emacs reader. I will definitely give this a try. + - If you are dealing with large PDFs you *really* feel the difference + - For doc-view yes. For pdf-tools I have noticed it, but very rarely. + - But yeah, it is interesting how much memory it's taking + - I will definitely try this + - pdf tool caches the pages. once you are moving too fast, it is almost as slow as doc view, because it doesn't have it cached anymore +- This look promising! Dealing with PDFs is an important part of the + things I do with Emacs (academic work). Certainly that Pdf-tools was + already a much needed improvement to Doc-View - for example, not + being able to select text was quite an issue. So when you get text + selection and annotations working, I will be certainly looking + forward your library. +- Great talk about emacs-reader. Looking forward to using it. +- Thank you for making this! :-) +- Really tasteful typography on your slides divya + - A: Thank you it's all in Org :) +- I like pdf-tools, but I'm open to trying something new. +- pdf-tools mostly works well, but these points are very much valid +- also have been fairly satisfied with pdf-tools and avoided installation pain because the package manager of choice makes it easy, intrigued by reader and curious to try regardless though +- I've been using emacs-reader for some time - I have packaged it for nix, although I haven't submitted it to nixpkgs in the hope that emacs-reader will one day end up in ELPA/MELPA. https://git.sr.ht/~johnhamelink/nix/tree/master/item/home/modules/emacs/src/epkgs/reader.nix +- Love this arch diagram step through +- Org-noter integration would be very good + - I am also a big org-noter user + - A: I used pdf-tools for several years, indeed I love org-noter as well. certainly a priority integration for us. +- I like the use of diagrams in this talk. It makes it easier to understand. + - I just realized the thread pool has a bunch of "threads" in it! + - That's what those were! I was thinking, "What does 'S' stand for?" +- very impressive work, I'll have to try this later +- Very nice. I'm definitely giving this a try. +- On my OS: MuPDF version 1.19.0 too old. Require ≥ 1.26.0. + - yueah that is a major problem +- Already looks very promising and the upcoming features are likely to make me switch completely from pdf-tools. +- Exciting project! +- very cool! +- Playing with mupdf standalone, epubs look very nice! +- very nice talk. +- great talk divya! great talk indeed! +- Great talk, thank you! +- I'm sold on Emacs Reader. (looking forward to org-noter support) +- fantastic talk! many claps! =) +- Super cool, emacs-reader on the list to try, we'll see if I can get it installed before the ELPA release + +- I'm super excited about this 😊 +- great presentation 👏 +- Great talk about emacs-reader. Looking forward to using it. + + +[[!inline pages="internal(2025/info/reader-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/reader-nav)" raw="yes"]] + + diff --git a/2025/talks/reference.md b/2025/talks/reference.md new file mode 100644 index 00000000..128a94ec --- /dev/null +++ b/2025/talks/reference.md @@ -0,0 +1,192 @@ +[[!meta title="Emacs as a fully-fledged reference manager"]] +[[!meta copyright="Copyright © 2025 Vidianos Giannitsis"]] +[[!inline pages="internal(2025/info/reference-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Emacs as a fully-fledged reference manager +Vidianos Giannitsis (he/him) - IRC: vidianos, <https://github.com/Vidianos-Giannitsis>. Vidianos Giannitsis on LinkedIn <mailto:vidianosgiannitsis@gmail.com> + +[[!inline pages="internal(2025/info/reference-before)" raw="yes"]] + +Even though all of my note-taking and literature organization +infrastructure has been in Emacs for a few years, I haven't been able to +make myself independent from a literature manager (Zotero in my case) +until recently. Zotero was just too convenient. You can capture articles +seamlessly (although downloading attachments didn't always work as +intended), organize them in directories and take a quick look at your +lists to determine what to read next, before you move on to actually +reading them and taking notes. + +This year, I finally decided that I am tired of this and I will find a +way to do this fully in Emacs. This talk will be discussing my findings +in this regard. A lot of this was built in Ebib. It turns out that a lot +of what I considered useful for this workflow was already available +through this excellent software, built inside Emacs. Not everything +worked as I wanted on installation, but naturally, this is Emacs, so I +just hacked my way through getting the exact behaviour I wanted. This +required integration with other tools and especially a closer +interaction between Ebib and Org-roam. This came out incredible and I am +now very happy with using it, so I thought I should also showcase it in +EmacsConf! + +With this integration ready, only capturing articles from the web +remains. Zotra can capture articles in a way about as seamless as +Zotero's (it actually uses Zotero's translators, but from Emacs). +Attachments remain a problem sometimes, but that's publishers making +attachments hard to get because third party software can't see that you +have full access to them, so I have decided to do those mostly manually, +I often did that with Zotero anyways. + +Relevant links: + +- [Zotra - Capturing Articles](https://github.com/mpedramfar/zotra) +- [Ebib - Organizing literature before and after reading](https://joostkremers.github.io/ebib/) +- [Org-Roam - The missing link to create an effective reading list](https://www.orgroam.com/) +- [Bibtex Completion - Useful tools for manipulating literature](https://github.com/tmalsburg/helm-bibtex) +- [Ebib section of Dotfiles/emacs/.emacs.d/libs/zettelkasten.org at master · Vidianos-Giannitsis/Dotfiles · GitHub](https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib) + +About the speaker: + +I'm Vidianos and I'm currently doing my PhD in KU Leuven in Belgium. +Working on research means I have a need for good tools to help me with +my research. I have been using Emacs for roughly 5 years now and I can +confidently say it is the number one tool that helps me with this +research. This talk will be all about how it helps me and about finally +being able to remove external reference managers from my workflow, +something I have wanted for years, but that I haven't managed to do +before this. + +## Discussion / notes + +- Check out the ebib manual for an explanation of the features I + showed and more! + [https://joostkremers.github.io/ebib/ebib-manual.html](https://joostkremers.github.io/ebib/ebib-manual.html). + - Also my ebib config for the custom things [https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib](https://github.com/Vidianos-Giannitsis/Dotfiles/blob/master/emacs/.emacs.d/libs/zettelkasten.org#ebib) +- My 2022 talk if you're interested in the rest of my workflow + regarding scientific literature + [https://emacsconf.org/2022/talks/science/](https://emacsconf.org/2022/talks/science/) +- Use link to directly download bib info to the library is cool. I + always did that manually. +- The reading list, for me every download item will directly inside a + manuscript. + +- Q: Which version of \`org-ref\` you are using? I am so dependent on + org-ref and org-mode, so that I had huge resistant to update + \`org-mode\`, \`org-ref\`, \`ivy-bibtex.el\`, etc + - A: I'm not sure how recently I updated, so it may not be + master, but I generally try to keep up to date with the packages + I use. I generally haven't had many problems, unless when there + is a new major version, which may need an afternoon to confirm + everything works. + - Thanks for sharing this. +- Q: Have you try ivy-bibtex/bibtex-completion.el, how it compares to + ebib? + - A: I think they are not mutually exclusive. I typically use + ivy-bibtex to find an article quickly, to initialize a + literature note (integration with org-roam-bibtex) or to add a + pdf to the entry, where it will automatically rename it as it + should. ebib is more of a tool to manage the .bib file more, + find an entry with full text search (instead of just + Author/Title search) and reading list management. There may be + some overlap, but I use both a lot. + - Got it, quick check with ivy-bibtex etc. + - ebib is for heavy lifting for academics +- Q: Do you find showing abstract on your navigation panel helpful? I + always delete all the abstract info in my bib to make things little + concise. Just want to know you thoughts on this. + - A: I like showing the abstract. It can be long and reduce + visibility, but the whole point of searching with the navigation + panel inside ebib is that I cannot easily find it through an + Author/Title search. Therefore, the abstract is often the next + line of search where you will find what you were looking for, so + for me it is helpful. I sometimes also use the small comments I + leave on the annote entry for this purpose. + - Try to find relevent info using search. Abstract helps you + search better. + - annotation entry also help +- Q: it seems that there's a meta problem here: too much + information. Do your tools reduce cognitive load? + - A: There is definitely too much information, but that is an + innate problem of handling a lot of literature. I think these + tools can reduce cognitive load, because things don't stay in + my mind. They can be moved to the computer, which can handle + more overload than my brain. So it is to a large extent the + externalization that reduces the load, because too much + information is a reality with literature. + - thanks. Sounds like externalizing the problem is the point. +- Q: When you download a new article, how do you integrate its file to + your database? For example, do you move and rename the file + manually? + - A:Find the file in ivy-bibtex, run M-o, select l (add PDF to + library), find from file (f), find where you saved it and it + will be renamed automatically. It is not moved automatically, + but the rest of my packages know to find it in the folder I save + initially. You may look at the README of the package for more + details, it is one of the more well written ones in my opinion + ([https://github.com/tmalsburg/helm-bibtex](https://github.com/tmalsburg/helm-bibtex)). + - Ok, I see, Ivy-bibtex has a function for this, thanks! +- Q: What about annotations with ereaders. veiwng and taking on emacs + or erader touchscreen highlighting and notes, org-noter I think + would be an alternative out of ebook anotation alternative? + - A: I do not use an ereader. For touchscreen, I have a tablet, + which runs Emacs natively and I can work with org-noter with + touch, but in that case, nothing in the general workflow + changes. For books, I know org-noter also works with epub files, + so you can also directly take the notes there. If you use an + ereader for annotating that doesn't run Emacs, this is + obviously more complex. +- Q: How well do you feel about making notes an web sites, pdf, + videos, I know pdf is ussaly good but others I am less sure about? + - (Not the author) i always try to convert it to pdf, so only one + file format to worry about. Video is another story. + - I agree with the above comment. PDF is just the easiest to deal + with in general, so I try to go for it. For taking notes on web + sites, there is org-roam-protocol + ([https://www.orgroam.com/manual.html#org_002droam_002dprotocol](https://www.orgroam.com/manual.html#org_002droam_002dprotocol) + although I personally don't use it a lot. Video is much more + complex, but in practice, I tend to not annotate videos + directly, with a timestamp, but rather to take crude notes on + paper during the video and organize them online at a later + point. +- Q: how do you add a new article from scratch, a pdf that you did not + have in your bib file? How do you generate the 'bib' entry with + metadata and abstract? + - (Not the author) He mentioned he uses Zotra, which does that. + [https://github.com/mpedramfar/zotra](https://github.com/mpedramfar/zotra) + - Yes, this is my approach. Specifically the function + zotra-add-entry. +- Q: When you fact check every details for a bib entry? The author + names, published journal, doi stuff. Always painful for me when I + need to upload a final version of a manuscript. Tons of work. Maybe + I can do it at the download step. + - A: I haven't worried about that, because I think automatically added + bib entries work well. But Org-ref has a tool to automatically check + it. I generally think it is best to do it directly when you add + them. + - [https://github.com/jkitchin/org-ref/blob/master/org-ref-bibtex.el#L119](https://github.com/jkitchin/org-ref/blob/master/org-ref-bibtex.el#L119) + - Yes, i did it manully, so some time I have issues. + +- Comment: I just use Org headings for all the metadata. Why bother with bib files. https://0x0.st/Kvbi.txt + With Org, you can search through notes and title and metadata together. I use org-ql, but you can use anything that can search Org headings. And use attachments. can also directly export to .bib from org. with headings, reading list is just natural - assign todo to heading + - A: You can move this all to org, yes, but I think .bib is very ubiquitous and a lot of tools work well with it, so I haven't really felt the need to move away from it. It is an interesting approach though. I have seen some others use it as well + - A: Making a reading list is easy indeed. The primary goal of my additions were to be able to manipulate it without ever worrying about the file itself. I find it works better/faster for me if I can always access the content I want without opening the file. Which is mostly what the code I wrote for this does. +- I noticed that his command searches are automatically prefixed with "^" to prevent more generalized matching (e.g. all comands that have "copy") + - A: I believe that is done automatically by counsel-M-x. It served for something, but I don't remember exactly why. +- Q: for viewing pdfs, do you use pdf-tools? I always found it clunky imo. + - A: Yes, its pdf-tools With org-noter to take notes side by side. And I haven't had any problems with it. It generally works well. + - (audience): I tend to always call out to the external PDF viewers. + - (audience): maybe I didn't try it well enough, but I just prefer external viewers. pdf-tools feels like an image viewer to me + - A: Some external viewers can have more features, but again, the problem comes down to it not being Emacs :D Being in Emacs is better than not being in Emacs. + - A: Are you sure you are talking about pdf-tools and not doc-view? Because those problems are very much in doc-view, but I wouldn't say for pdf-tools. +- It's always interesting to watch other people work in their emacs environment. +- Thanks for the talk! There was a lot to digest, I'll have to rewatch it. + + +[[!inline pages="internal(2025/info/reference-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/reference-nav)" raw="yes"]] + + diff --git a/2025/talks/sat-close.md b/2025/talks/sat-close.md new file mode 100644 index 00000000..b4c6f458 --- /dev/null +++ b/2025/talks/sat-close.md @@ -0,0 +1,33 @@ +[[!meta title="Saturday closing remarks"]] +[[!meta copyright="Copyright © 2025 ${speakers}"]] +[[!inline pages="internal(2025/info/sat-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday closing remarks + + +[[!inline pages="internal(2025/info/sat-close-before)" raw="yes"]] + +## Discussion / notes + +- Wooooooo! Thanks all! Looking forward to tmmr +- 🎉 Thank you everyone :) Lots of really interesting stuff! +- Excited for another day of EmacsConf tomorrow +- It's been very interesting today +- thank you for the conference +- you all did great +- This is one of the most organized conferences I have attended and it is like that every year +- Y'all deserve amazing props +- Had a lot of fun today and looking forward to more sessions tomorrow. Thanks to organisers and presenters! +- Also want to thank you for making the videos available on many different mediums just-in-time. + + + +[[!inline pages="internal(2025/info/sat-close-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/sat-close-nav)" raw="yes"]] + + diff --git a/2025/talks/sat-open.md b/2025/talks/sat-open.md new file mode 100644 index 00000000..723867b5 --- /dev/null +++ b/2025/talks/sat-open.md @@ -0,0 +1,21 @@ +[[!meta title="Saturday opening remarks"]] +[[!meta copyright="Copyright © 2025 ${speakers}"]] +[[!inline pages="internal(2025/info/sat-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Saturday opening remarks + + +[[!inline pages="internal(2025/info/sat-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2025/info/sat-open-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/sat-open-nav)" raw="yes"]] + + diff --git a/2025/talks/schemacs.md b/2025/talks/schemacs.md new file mode 100644 index 00000000..1f13e06e --- /dev/null +++ b/2025/talks/schemacs.md @@ -0,0 +1,303 @@ +[[!meta title="One year progress update Schemacs (formerly Gypsum)"]] +[[!meta copyright="Copyright © 2025 Ramin Honary"]] +[[!inline pages="internal(2025/info/schemacs-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# One year progress update Schemacs (formerly Gypsum) +Ramin Honary (he/him) - Pronunciation: "Rah-mean" (hard-H) "Ho-na-ree", Mastodon (preferred): ; blog: <https://tilde.town/~ramin_hal9001>; Codeberg: <https://codeberg.org/ramin_hal9001/schemacs> - SourceHut: <https://sr.ht/~ramin_hal9001> + + + +[[!inline pages="internal(2025/info/schemacs-before)" raw="yes"]] + +During EmacsConf 2024 last year I presented my work on a +clone of GNU Emacs written in Scheme which also clones the +Emacs Lisp programming language. In this talk, I will +briefly present an overview of the project similar to the +talk I gave last year, and then discuss the progress that +I have made on this project in the past year. + +To quote the description from the presentation I gave last +year: + +> Unlike other editors which only clone the Emacs +> keybindings (Edwin, Jed, jEdit, Jove, Lem, MG, Yi, +> Zile), I hope my Emacs clone will also fully clone the +> Emacs Lisp programming language well enough that many of +> the packages in ELPA, Non-GNU ELPA, and perhaps even +> MELPA, can be used in [Schemacs, formerly "Gypsum"] +> without any modification. I would also like to talk a +> little bit about how I am implementing it (the software +> architecture), and invite others to contribute. +> +> I think my project is of interest to many Emacs users +> because, firstly, I have personally spoken with a +> relatively large number of people who have expressed +> interest in making Emacs programmable in Scheme. +> Secondly, there is a good amount of prior art for Scheme +> implementations of Emacs. There are even builds of Emacs +> that link to Guile which provides a "scheme-eval" +> built-in function that translates between Elisp data +> types and Scheme data types. The Guile compiler itself +> ships with an Emacs Lisp compiler as well, although it +> does not provide enough of Emacs's built-in functions to +> be of much use. + +The progress I have made so far: + +- Ported all Guile-specific parts of the Emacs Lisp + interpreter to fully standards-compliant R7RS Scheme + code. The interpreter now runs on a few different + Scheme implementations, not just Guile. The GUI remains + Guile-only for now. + +- Implemented a new R7RS-compliant lexer and parser which + constructs an Abstract Syntax Tree (AST) data structure, + making it easier to find the source of errors and + produce informative back traces. + +- Implemented enough of the Emacs Lisp interpreter to be + able to load the "subr.el" source file, this defines + what you might call the "core" of the Emacs Lisp + language, including macros such as "defun" and "lambda." + +My primary goal continues to be to make it as easy as +possible for other people to contribute to this +project. Pretty soon it should be possible to run the +Emacs Regression Test suite (ERT) in the cloned Emacs Lisp +interpreter. Once this is done, we can run the same test +code used during the building and testing GNU Emacs to +test Schemacs. Hopefilly then, anyone will be able to +select a failing test, write code to make the test pass, +and submit a patch. + +About the speaker: + +I am Ramin Honary. I have been professional software +engineer for 17 years and I have always had a passion for +functional programming languages, especially Haskell and +the Lisp family of languages. + +## Discussion / notes + +- Q: I think that Kiczalez et al.'s metaobject protocol has a scheme + implementation, does this mean schemacs will be + metaobject-changeable in practice? + - A: I was not aware of that implementation, but I will look into + it. The MOP has not been necessary for building the GUI, + actually (apart from the fact that Guile-GI uses GOOPS to + organize the Gtk3 bindings). Pretty soon I will demonstrate the + React-like programming framework I have developed for the + Schemacs GUI. + - A: I don't need a meta-object protocol for Schemacs, at least + so far it hasn't been necessary, but may be something to look + into if it can be made cross-platform (for various R7RS + Schemes). +- Q: How will the GUI display code be r7rs compliant afaik there is no + dlopen in r7rs? + - A: To handle these platform-dependent concerns, I make heavy use + of the `cond-expand` macro. Basically any Scheme + implementation upon which I would like to run the Schemacs GUI + will have to have it's own unique back-end code that is + loaded-in to the main Scheme program. `cond-expand` has + mechanisms for checking which Scheme implementation it is using, + so it is pretty easy to write code that can load-in different + back-ends for whatever platform you are using. +- Q: Will it be possible to write multithreaded code for Schemacs? + - A: The GUI is inherently single-threaded, but SRFI-18 provides + multi-threading. So yes, there is multi-threading, and I do have + ways of evaluating Scheme code inside of the GUI thread so that + you can update the GUI. This is necessary for running external + processes and putting the results into buffers. But anyone + should be able to use the threading mechanism through the + ordinary SRFI-18 APIs. + [https://srfi.schemers.org/srfi-18/srfi-18.html](https://srfi.schemers.org/srfi-18/srfi-18.html) +- Q: Do you think some of schemacs could be extracted into SRFIs since + you have made it portable between scheme implementations? + - A: Absolutely. I have considered making a SRFI for my + `(schemacs lens)` library. I would like to break up the + Schemacs into libraries and publish them on the Akku package + manager, or in the Guix repository. I am hopeful that some of + the libraries I have written will be useful for other Scheme + programmers. + [https://akkuscm.org/](https://akkuscm.org/) +- Q: Is there a recommended scheme implementation or does it try to be + as portable as possible? + - A:(He said earlier that Guile was the only version that worked + so far. He wants it to work for all R7RS though.) That's + right, Guile is the reference implementation, the GUI only works + on Guile, but Emacs Lisp works on Guile, Chibi, and Gauche. I + would like to support as many Scheme's as possible. If you want + to get started with Scheme and you want to try Schemacs, I + recommend Guile. +- Q: How would Schemacs deal with Emacs' (re)display architecture? + Would it be having its own display architecture? If so, how can it + be compatible with things like overlays, images, etc.? From what I + know, Emacs is extremely idiosyncratic here. + - A: That is all "to be determined." At some point we will have + to emulate the Emacs Lisp display architecture in Schemacs, but + for the time being Schemacs has it's own completely different + display architecture. +- Q: You were saying that you'd like to get "most" of the one + thousand three hundred and something Emacs packages done. Is there a + technical blocker to doing them all? Or just a problem of getting + enough people in to help and start writing scheme? + - A: just a matter of implementing enough of Emacs' built-in + functions; this relates to the bug we saw in the presentation + (stack dump); other people will have trouble contributing until + this is resolved because it does not handle closures correctly. + once that is worked out it will be a matter of implementing + Emacs' C-based functions in scheme. Don't have a way to be + sure but we probably do not need all of them implemented. +- Q: What are you thoughts on Chicken Scheme? Would it be a good fit? + - A: I think it will be; tried this in preping for the + presentation but ran into some issues; tried using the pattern + matcher from Alex Shinn; each implementation has a slightly + different take on macro-expansion for pattern matching; I would + definitely love help in this area. I will probably have to avoid + pattern matching to make it fully portable, or else implement my + own pattern matcher which I can be sure will work on all R7RS + Scheme implementations. +- Q: Can this emacs lisp implementation be used by Guile's emacs lisp + "mode"? + - A: This was touched on last year; Emacs Lisp in guile is a + different implemtation which is unfortunately quite incomplete, + it can't even run some of the GNU Emacs initialization code. + When I first started I was using Guile Emacs Lisp's parser, + however it did not give source locations, and was not portable + to other Schemes, so I had to basically write everything for + Schemacs from the ground-up. If Andy Wingo is interested, we can + probably replace the existing Guile Emacs Lisp implementation + with Schemacs. +- Q: I wonder if we could do some sort of programmatic analysis on + popular Emacs packages to see what list of functions they tend to + depend upon, follow function calls down to the lowest level + - A: Yes, please do this for me! :D :D +- Q: Shouldn't it be enough to just implement the builtin functions? + Most of the commands are written in Emacs Lisp, right? + - A: Yes, correct. That is the approach I am taking. My goal is to + get the Emacs Regression Test suite (ERT) system working in + Schemacs Emacs Lisp, then we can just use the reports generated + by the GNU Emacs regression tests to see what Emacs Lisp + functions we have left to implement in Schemacs. +- Q: Do you think there is an opportunity to use Racket? + - A: Yes, looking at getting Schemacs working Chez then could + somehow move onto Racket; haven't tried R7RS for racket. Racket + works on Chez, and I would like to make Schemacs work on Chez, + but I won't be able to make use of Racket libraries. Alexis + King has written a R7RS language package for Racket, and I + haven't tried it yet, but it may be a good way to get Schemacs + to work in Racket. +- Q: Tell us more about this show-stopping bug! How to squash it? Can + people help? + - A: Unfortunately, this is something I will have to do on my own + unless you happen to be a Scheme genius who can read and + understand all of my code so far in a short amount of time. It + has to do with how closures work. Closures were introduced with + Emacs 27 (?) and lexical scoped variables for ELisp. When we + create and return a lambda that uses a variable declared outside + of the Lambda in a "let" binding, that variable resides on the + stack, so the Lambda must have a "note" that captures part of + the current stack and then later restores it when the Lambda is + executed. This is where the issue is: it is not capturing the + variables from the stack properly. The plan is to do static + analysis of the Lambda and then store a reference to those + vairbles in the Lambda data structure. + - Q: How about using smaller test cases (instead of a full + Emacs loadup) to pinpoint the issue? When writing Juicemacs + I've gather a few closure-related test cases + ([https://github.com/gudzpoz/Juicemacs/blob/ddc61c08632cfdd1a9f2bc10f63e61c5679d6592/elisp/src/test/java/party/iroiro/juicemacs/elisp/runtime/ELispBindingScopeTest.java#L12-L91](https://github.com/gudzpoz/Juicemacs/blob/ddc61c08632cfdd1a9f2bc10f63e61c5679d6592/elisp/src/test/java/party/iroiro/juicemacs/elisp/runtime/ELispBindingScopeTest.java#L12-L91) + , and some more test cases in a blog post: + [https://kyo.iroiro.party/en/posts/emacs-lisp-interpreter-with-graalvm-truffle/#creating-closures-in-a-loop](https://kyo.iroiro.party/en/posts/emacs-lisp-interpreter-with-graalvm-truffle/#creating-closures-in-a-loop) + ). Could they be useful? (I just tried to take a peek at + Schemacs' code, but I'm really not familiar with + Scheme...) + - By the way, Emacs comes with its own static analyzer in + elisp (cconv.el) that seems to select captured variables + from env cons lists in Emacs, which might be useful if + you're also using a cons/linked list of lexical bindings, I + guess? +- Q: Are there performance concerns with implementing certain C + primitives in pure scheme? + - A: No :) I think it was Donald Knuth who said "Premature + optimization is the root of all evil." The graphical back-end + is usually written in C anyway (Gtk3), so the graphics is being + done in C. Besides that, Scheme compilers like Guile, Chez, + Gambit, and Chicken all have very good performance + characteristics. So for the time being, I don't think + performance is a major concern. +- Q: If this project is successful, are you worried about a possible + split in the community between Schemacs and GNU Emacs users? + - A: There seems to be a large call for a scheme based editor, so + the demand for this "split" is already there. There have been + attempts at rewriting Emacs in Scheme since the early 90s. And + there hasn't been a good, free-software, Scheme-based + programming environment like Emacs since Edwin on MIT Scheme. + So Schemacs may cause some fragmentation but "a rising tide + raises all ships". If I have time I would also like to + contribute some of what I learn from Schemacs back to GNU Emacs, + for example I would like to work on an interactive canvas + library based on the "Cairo" SVG rendering library. Cairo is + already built-in to Emacs, so I would like to maybe port my + Schemacs interactive canvas (still a work in progress) to GNU + Emacs when I have some time. +- Q: The dream of never even needing to change to the web browser - + would schemacs bring us closer to that? + - A: I hope so! this is also a dream of mine! I wanted to make + sure I have a good workable UI framework like React so we can + write proper GUIs for applications such as a Mastadon client, it + could be very nice to have a better GUI for this, or for Magit, + or Gnus. I would love to be able to do as much as possible in + Schemacs, e.g. social networking, public Git repos. That is a + goal of mine for this project. +- Q: Anything specific other than minimalism that made you choose + Scheme over Common Lisp? + - A: Philosophical question :) I love Haskell, and I once had a + conversation with William Byrd (author of "MiniKanren," who + studied under Dan Friedman at the University of Indiana) who + told me about why he didn't like Haskell and suggested looking + into Scheme. I like Haskell because it is a very pure + implementation of the "System-F" Lambda Calculus, and I like + Scheme because it's closer to the mathematical framework of the + Untyped Lambda Calculus, but Scheme is friendly (without the + strict type system), similar to Python. It provides a tiny + framework from which all of computer science can be explored. + Excited to see what this tiny language can do. I like the idea + of starting from a tiny "kernel" language and using it to + build-out all other alglorithms and software. I think it is a + shame that there isn't much Scheme code out there, and I would + like to try to expand the Scheme software ecosystem. +- [https://codeberg.org/ramin_hal9001/schemacs](https://codeberg.org/ramin_hal9001/schemacs) +- [https://github.com/spk121/guile-gi](https://github.com/spk121/guile-gi) + <-- that is the GUI back-end, by the way. +- [https://gi.readthedocs.io/en/latest/](https://gi.readthedocs.io/en/latest/) + <-- that is GObject Introspection, this is how the GUI bindings + work. +- lol it feels like rahim has been standing at the same place since + last year :P +- Basically, yes, I haven't moved at all! Of course I have moved away + from that spot in the interim once or twice. +- Awesome talk, I will surely try to contribute even though I don't + know stuff yet :) + - All are welcome, if you don't know anything, I'll be happy to + try and teach you! + + +- amazing progress +- nice talk. +- I'm so excited for this project! Amazing update 😊 +- I wonder if we could do some sort of programmatic analysis on popular Emacs packages to see what list of functions they tend to depend upon, follow function calls down to the lowest level +- would love to see that +- That is probably a good idea (getting rid of the baggage) + + + + +[[!inline pages="internal(2025/info/schemacs-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/schemacs-nav)" raw="yes"]] + + diff --git a/2025/talks/sun-close.md b/2025/talks/sun-close.md new file mode 100644 index 00000000..3617a1d1 --- /dev/null +++ b/2025/talks/sun-close.md @@ -0,0 +1,44 @@ +[[!meta title="Sunday closing remarks"]] +[[!meta copyright="Copyright © 2025 ${speakers}"]] +[[!inline pages="internal(2025/info/sun-close-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday closing remarks + + +[[!inline pages="internal(2025/info/sun-close-before)" raw="yes"]] + +## Discussion / notes + +- Thank you for everything sachac and everyone else that volunteered or that gave a talk +- It was very fun participating +- thank you all for everything!!! +- Thanks for another great emacsconf! +- thank you! +- Thanks everybody :-) +- Thank you for all your amazing work! +- Thank you sachac, corwin and everyone that made this possible. great emacsconf +- 👏👏👏 Thanks to the EmacsConf org (pun intended ;) ) team and community and of course all emacs contributors and maintainers +- Thanks to everybody involved with Emacsconf. Awesome conference as always +- Fantastic conference! +- Thank you so much for making it happen! :) +- Reddit and IRC mentioned, but most is happening on the Emacs mailing lists :) +- Emacs bugs mailing list is surprisingly interesting as well: lots of discussion there, on various details (and upcoming little features!), every single day. +- i.e. Not your boring bug tracker. :) +- The Emacs Carnival, perhaps? 🙂 I'm very curious about getting into the bloggosphere around Emacs. I haven't done much digging there yet 🙂 +- thanks all for this nice Emacs weekend +- See you all around, Happy Emacsconf! 😃😊 +- Excellent weekend. It went by so fast 😊 +- bye! good talks :D +- thanks for an excellent weekend, amazing conf + + + +[[!inline pages="internal(2025/info/sun-close-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/sun-close-nav)" raw="yes"]] + + diff --git a/2025/talks/sun-open.md b/2025/talks/sun-open.md new file mode 100644 index 00000000..854236fe --- /dev/null +++ b/2025/talks/sun-open.md @@ -0,0 +1,21 @@ +[[!meta title="Sunday opening remarks"]] +[[!meta copyright="Copyright © 2025 ${speakers}"]] +[[!inline pages="internal(2025/info/sun-open-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Sunday opening remarks + + +[[!inline pages="internal(2025/info/sun-open-before)" raw="yes"]] + + + + +[[!inline pages="internal(2025/info/sun-open-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/sun-open-nav)" raw="yes"]] + + diff --git a/2025/talks/swanky.md b/2025/talks/swanky.md new file mode 100644 index 00000000..be639835 --- /dev/null +++ b/2025/talks/swanky.md @@ -0,0 +1,158 @@ +[[!meta title="Swanky Python: Interactive development for Python"]] +[[!meta copyright="Copyright © 2025 Scott Zimmermann"]] +[[!inline pages="internal(2025/info/swanky-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Swanky Python: Interactive development for Python +Scott Zimmermann (he/him) - <mailto:sczi@disroot.org> + +[[!inline pages="internal(2025/info/swanky-before)" raw="yes"]] + +Project repository: <https://codeberg.org/sczi/swanky-python/> + +I'm working on a development environment for +Python based on Emacs' SLIME mode for Common Lisp. +In this talk I'll demonstrate some of its +features, like an object inspector, interactive +backtrace buffer, thread and async task viewer, +and function tracer. I'll also discuss its +implementation and limitations, along with future +directions for the project. + +This project aims to bring a Lisp and Smalltalk +inspired style of development to Python. You get a +faster feedback loop by developing inside a +running python process without needing to restart +your program and lose state on changes, allowing +you to immediately inspect the results of code you +write. We can also provide more advanced tooling +based on runtime introspection, as we have more +information available at runtime than is available +to traditional tools based on static analysis of +source code, mainly we have the actual values of +variables rather than just their types. + +About the speaker: + +Python is eating the world. Emacs is eating my computing environment. I'm +attempting to get them working together. + +## Discussion / notes + +- Q: Does swanky-python work with Sly? + - A: It doesn't, Sly is great but I went with slime for a few + reasons: + - I wanted to use some cool stuff from slime-star + - I actually think there's good potential with slime's presentations that sly removed. + - The main feature of sly missing from slime is stickers. + slime-star provides something similar in being able to + recompile a function with an expression traced, but I + think for python it'll be better to integrate with dape + for debugging + - In recent years slime has been more actively maintained + in terms of bug fixes and such. +- Q: Does this work with Hy? + ([https://hylang.org](https://hylang.org), + lisp syntax for Python) + - A: I actually first wrote this in Hy. + [https://codeberg.org/sczi/swanky-python/src/commit/6d8f4e0c8000c931746edd0fb442704dff853492](https://codeberg.org/sczi/swanky-python/src/commit/6d8f4e0c8000c931746edd0fb442704dff853492) + is the last commit before I switched back to python. + - Though even when the swanky python backend was written in Hy, it + was still targeted at editing python code, not Hy. Implementing + it in Hy just made the implementation a bit easier, as the slime + "protocol" is just slime sending lisp forms to the swank + backend to evaluate, so to write the backend in python we need + to implement a lisp interpreter (swank_eval in server.py), which + we already have in Hy. + - To make it work for editing Hy code would require some changes + on the backend, around evaling code, returning source locations, + and autocomplete. But most would stay the same, so I think it + could be made to support both without needing to fork a separate + project. I don't plan to use Hy or work on it. When writing + lisp I'd rather write CL, and when writing python I'd rather + use standard python syntax. But if someone wants to add Hy + support I'd be happy to merge it and assist a bit. +- Q: Where can I find a list of Slime-like interfaces for other + languages? + - A: I don't know that a slime-like interface really exists for + any languages outside of the lisp and smalltalk family. I made a + list of some of those at + [https://codeberg.org/sczi/swanky-python/src/branch/main/Hacking.org#headline-63](https://codeberg.org/sczi/swanky-python/src/branch/main/Hacking.org#headline-63) +- Q: Is there an IRC channel for swanky-python? If not, are you + interested in creating one? + - A: Good idea to have, I just made #swankypython on libera +- Q:How would this integrate with python notebooks such as marimo? + - A: I've never used marimo, just jupyter, but it looks nicer so + I'd like to try it out sometime. The most basic integration + would be to just run swanky python within the notebook. That way + you would use the notebook as normal, but get the interactive + backtrace buffer in emacs on any exception, and be able to use + the inspector, nicer repl, etc. A more complete integration + would probably be based on emacs-jupyter but I haven't looked + into it yet. +- Q: Why not org babel as well? +1 for org-babel with this, would be + awesome + - A: That'd be great and probably not much work at all. I just + tried evaling python code as a "lisp" block, since babel for + lisp calls slime-eval, and it dies with an exception because I + haven't implemented swank:eval-and-grab-output in swanky python + yet. Maybe it's just needed to implement that and then + configure babel for python src blocks to use slime-eval rather + than running with org-babel-python-command. +- Tangentially, did you see Kent Pitman's recent moves to introduce + his common lisp condition system to python? E.g. about resuming + execution after an exception. He showed it some sunday lispy gopher + climate. In my opinion, reach out to + [https://climatejustice.social/@kentpitman](https://climatejustice.social/@kentpitman) + since you asked for contact about lisp-style python exception + restarts which he has worked on recently. +- I hadn't seen that, thanks, it's super interesting to hear the old + legends talk. Here's the link for anyone else: + [https://medium.com/@screwlisp/live-interview-with-kent-pitman-incoming-216092e24f44](https://medium.com/@screwlisp/live-interview-with-kent-pitman-incoming-216092e24f44) +- But a condition system is a bit of a separate issue from the + exception restarts I'd like to have. A condition system can be + implemented without any changes to the runtime, in any language with + dynamic scope and first class functions. And dynamic scope can be + emulated in any language with global variables, so people have + implemented Common Lisp (CL) style condition systems as libraries + for many languages. If this was used universally in place of the + language's native exceptions, it would give the ability to drop + into a repl at the point of an otherwise uncaught exception, but not + the ability to restart execution from any stack frame. Smalltalk has + traditional exceptions and not a CL like condition system, but its + debugger does provide this ability, as does the JVM and v8 + debuggers. In CL this ability (sldb-restart-frame in slime) isn't + provided by the condition system, but in SBCL for example by + internal functions in the sb-debug and sb-di packages. +- It'd be interesting to experiment with a condition system in + Python, but what I'm more interested in is the ability on any + runtime error, to be able to fix the bug and restart execution from + any stack frame. +- Amazing work! +- [https://slime.common-lisp.dev/doc/html/](https://slime.common-lisp.dev/doc/html/) + (anyone who doesn't have this bookmarked) +- This is really cool, I am amazed how much functionality you have + implemented! I hope I can start using this in my day job! +- Very very impressive. I will definitely try to use this in my + workflow. I love the Lisp development style. +- very impressive. I am also working on a Python IDE with a python + process and a webview to host the python runtime and display the + IDE, but I am very far behind in terms of features. I just made the + reload system work and the code(AST)->html renderer +- Neat, if you publish it send me a link! +- Definitely going to give it a try! I've been missing interactive + since learning python many years ago, even before I knew Common Lisp + existed and one of the primary reasons why Common Lisp replaced + python as my go-to language +- Such a package alone would automatically make Emacs a much better option than something like PyCharm. +- I found it very funny how he showed M-x doctor But very interesting talk! + + +[[!inline pages="internal(2025/info/swanky-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/swanky-nav)" raw="yes"]] + + diff --git a/2025/talks/weights.md b/2025/talks/weights.md new file mode 100644 index 00000000..ea1c2908 --- /dev/null +++ b/2025/talks/weights.md @@ -0,0 +1,88 @@ +[[!meta title="Weightlifting Tracking with Emacs on Android"]] +[[!meta copyright="Copyright © 2025 Zachary Romero"]] +[[!inline pages="internal(2025/info/weights-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Weightlifting Tracking with Emacs on Android +Zachary Romero - <https://zacromero.com/>, <mailto:zacromero@posteo.com> + +[[!inline pages="internal(2025/info/weights-before)" raw="yes"]] + +The package covered in the talk can be found at <https://github.com/zkry/org-fit> + +Emacs on Android opens up a world of new possibilities for replacing +proprietary software with free alternatives. One such use case is +using Emacs and org-mode to replace the popular weightlifting tracking +apps like Hevy and Strong. + +Org-mode provides a solid foundation to replicate these apps +functionalities but by itself is cumbersome to use in the middle of a +workout. With the help of Elisp however, we can provide an experience +as seamless as these paid apps, but with added flexibility and +freedom. + +This talk will go over the package itself as well as the way org-mode +can be used as the foundation for applications on top of it. + +About the speaker: + +I'm Zachary Romero, a software developer and Emacs enthusiast. I've +been weightlifting for about three years when I grew tired of the +many apps constantly trying to push subscriptions. Knowing the many +things org-mode can do, I set about trying to replicate the same +functionality in Emacs. + +## Discussion / notes + +- Q: Very cool! It would be nice to build some One-rep max calculation + formulae into calc + - A: +- Q:Do you have plans to extend this to clock-report kind of + reporting? graphical reports, etc? + - A: Yes, yeah, exactly. Graphical reports. These are all something that, It currently doesn't have, and these nice apps do have. They have charts of all kinds. You can see your progress from week to week on various exercise. They have charts galore, all these fancy apps. And in theory, it wouldn't be hard at all to like, 'cause like, you know, there's gnuplot. There's those, and then they have like very good packages on any of them. So, I mean, I assume integration would be pretty seamless. So yes, that is definitely on the list of things I want to do. +- Q: Have you ever wanted to modify the functionality on your mobile + device while working out? Any good or challenging experiences or + tips with that? + - A: Yeah, that's actually funny. There was a time where, yeah, I mean, like debugging, there was like some bug I was having with my code. And so I have, in the middle of a workout, yeah, start, like, open up the debugger and kind of, and the cool thing is that, I mean, the biggest thing, like, the biggest thing by far is unexpected keyboard. <https://github.com/Julow/Unexpected-Keyboard> Like, I can't state how, I don't know how much Unexpected Keyboard is, because, like, with Unexpected, with the Unexpected, with that keyboard, you can literally just, like, it's, it's not hard at all to, like, you can do M-x or C-M-x or you know C-u C-M-x to debug, like, you can do all the key bindings with unexpected keyboard. There's no problem whatsoever with that part. The only part is muscle memory. It's because you get the muscle memory of the emacs key binding and so you have to kind of like yeah... I mean that translation is actually kind of you have to think about it like, like, okay, what was that key binding again? And you have to kind of like do it with your fingers. And it was like doing it on the, on Android is, I mean, it takes a little longer and it's just a different, yeah, different set of different muscle memory. +- Q: Sorry, if you covered this, but does the rest timer end with an audible notification at the end of the time? + - A: That's the cool thing. So with the Emacs, with the Android notification settings, you can, I can show that again in more detail. So bonus settings, apps, pick the app, notifications. And then here we get that org-fit-rest-over. And so here you can set, for example, whether it's a silent notification. And so this won't, this won't make it make noise. You can do... or like make it have a noise, and so you can have it make sure it's popped on the screen and then you can just pick whatever ringtone you want, and you can make it look like yeah. Then obviously you have the whole volume setting, so you can, when you're working you can just set the volume pretty high, so if you do happen to set your phone kind of away, you set the volume high, maybe make a really annoying sound, a loud sound you won't miss. And then, yeah, you'll be set. So that works. That was actually one of the biggest surprises. I wasn't expecting that to work so nice. +- Q: You mentioned file sync, what have you found works well for you? + - A: So in terms of what, yeah, I did have to play around with this a lot, but Syncthing Fork is what I eventually settled on. I mean, this is another thing that, I mean, I don't, it wouldn't nearly be as usable, like Emacs wouldn't be nearly usable without it. So Syncthing Fork essentially, okay. And then I also have like a droplet on DigitalOcean, just like, so that's kind of like the whole, that's kind of like what bridges it together. So like, so my Emacs can sync to that, and then my machine also syncs to that. And so I don't have to have them both on the same time. It's just there, that copy. And so that works pretty well. I also found that editing code in general, I think this also goes with the development experience question. +- Q: HAve you tried other keyboards such as Hacker\'s keyboard + - A: Not recently. I haven't, so I couldn't compare them. + - Q: Another keyboard question - have you tried the \"flickboard\" + on f-droid? It\'s the craziest keyboard, you use one thumb + - A: Oh, that is interesting. Let me see. Flickboard. Flickboard. Yeah, I'll have to try that. I'm curious to get the key bindings done. I wonder if the key bindings and all that work. I hope that's interesting. I'll definitely look into that. +- Q: This user interface is simplified but still keyboard based, can + you think of ways to make it more touch based? + - A: So the only thing currently, I think, of specific touch-based functionality I have, which, so this is like, so let's see, it's C-x C-+, That key binding wrong, what was it? Okay, whatever. Yeah, so in terms of touch commands, so pressing on a headline will actually unfold it and move your cursor to the next field that you, yeah, so like, yeah, at the beginning of the table. So like, there's that, yeah, and so. It sounds like that is something you're thinking about. Yeah, exactly. Like, you know, maybe like a little thing at the bottom, like, so this thing has the, this app has this, if you notice, like, if you do something, it has this rest timer at the bottom. So I mean, it wouldn't be, it wouldn't be pretty, it wouldn't be, it seems quite doable to just have like, maybe something at the bottom, like for a timer, and then you can just like plus 15 seconds or cancel it or, you know, just, and then those could all be just like touch based. And so, yeah. And then obviously just like, just like classic Emacs, the Emacs, like clicking actions, they just, yeah, they work just fine. Like, so there's no like weird Android touch thing you have to worry about. +- Q: I\'m curious about the development experience. Do you do + everything on the phone? + - A: And that's the thing. None of my development in general is done on the phone. just because, for one, my muscle memory isn't there, and two, just in general, typing on a virtual keyboard on the phone, it's just really slow. So yeah, all the development is done on my machine, but then there's the problem of you have to have an init.l in your Android, and so you're going to have to write, you know, I found like you'd have to like, when you first get Emacs set up, you might have to like write some, I don't know, like you'll kind of have to like get into your init file and then just like, maybe just like start to put things together. But the cool thing is with Syncthing Fork, I'm syncing my, I'm setting it to load off of a sync directory. Like this, this init file, my Android file is synced with my machine. So if I wanted to, I could just edit it on my machine and just have that synced automatically. So that makes like the whole, like in it, cause like it's, it's such a, like, that is one of the, it's just like get in, sit writing your init.el in Emacs on Android is just kind of a... + + [Corwin]: I think that's like. That's an extremely good tip, right? That if we're, as we're exploring Android, we want to think about that as adding support for another port of Emacs. So the whole dance of, oh, I took, you know, I took, you know, I took my init and I wanted to use it on BSD after mostly using GNU Linux. Now we're going in and we're looking at our Emacs. all of our Emacs and it stuff and thinking about compatibility, turning features on and off based on the OS that we're running underneath and so on. I think that's pretty heads up advice. +- Q: Have you thought about integrating cardio tracking like timed runs, bike rides, etc? + - A: Yes, I definitely thought about that. And that might be another thing where a touch interface might be helpful. I don't know if I can easily pull it up, but the app itself, oh yeah, here it is. So you can see kind of how they have, and you can kind of see how this fits. This is like an org, you can see that these are just tables, right? This is just like this whole interface in general, just like kind of screams like an org mode, file with you have you have your different headings like here's a warm-up heading and then you have the tables and you know you could just like envision how you could have a org table with one of the columns called time and then you could just imagine like there'd be a button there and you can just have it click, and then you'd have a timer in the background that would update this timer. It's so, I mean, conceptually, there's nothing really, it conceptually maps really well to this. So yeah, I mean, that's definitely something. +- Q: Seems like a great use case to combine with some of the other + talks like Ramin\'s UI demos, maybe some speech/LLM stuff. And + Hyperbole\'s M-RET! + - A: +- Q: emacs on android can be installed on a GrapheneOS-set up device too, can't it? + - yes it is available in f-droid + - Oh man... I haven't used a smartphone in a while, but I'm really excited to take advantage of all of the Emacs features people have made once I pick one back up. I got a Linux phone that should hopefully be arriving relatively soon here 😊 + - Touch seems so wildly usable nowadays. That's so awesome 😊 + - which one? I'm using the Jolla C2 Community Edition with SailfishOS + - Oh nice! 😊 I ordered a FuriPhone quite a while ago, but it got really hit hard by tariffs. It seems like it's finally happening now 😊 + - Oh I saw that one :) I think its quite a bit more powerful than my one + - I'm so looking forward to it. 🙂 I think it'll have a *little* performance bump coming from my original PinePhone 😛 + - next to the fully fledged Emacs, an app on Android like beorg on iOS would be great companion. when using orgmode content especially as todo/checklist tool, then an app designed for mobile UI with touch operations is key for easy use onthego. +- I'm very interested in this as I work on similar problems in this space at work + +[[!inline pages="internal(2025/info/weights-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/weights-nav)" raw="yes"]] + + diff --git a/2025/talks/writing.md b/2025/talks/writing.md new file mode 100644 index 00000000..476d2123 --- /dev/null +++ b/2025/talks/writing.md @@ -0,0 +1,40 @@ +[[!meta title="A Writing Day in the Life with Org-Mode"]] +[[!meta copyright="Copyright © 2025 Jeremy Friesen"]] +[[!inline pages="internal(2025/info/writing-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# A Writing Day in the Life with Org-Mode +Jeremy Friesen - Pronunciation: Jair-ah-mee Free-sen, <https://takeonrules.com>, <mailto:jeremy@jeremyfriesen.com> + +[[!inline pages="internal(2025/info/writing-before)" raw="yes"]] + +In this talk, I’ll walk through my daily writing and organization using +Org-Mode. Building from the basics of the Org-Mode ecosystem, we’ll look at a +the parts that I’ve assembled to create a “rich for me” writing experience. + +This will be a tour of my writing ecosystem, from capturing books by ISBN, +tracking quotes I find meaningful, utilizing abbreviations (and clarifications), +exporting a journal node to a blog post, toot-ing about a blog post, and +printing my monthly journal entries with references to books I finished. + +The goal is not to say “this is the way” but to show a bit of “this is my way.” +And from there to have further conversation about ideas we each might +incorporate into our writing processes. + +About the speaker: + +I’ve always aspired to be a writer. And while I haven’t published long-form +material, I’ve been consistently writing for over a decade. In 2023, I talked +about how Emacs super-charges my writing. And I want to revisit that +conversation and walk through a day in the writing life. + + + +[[!inline pages="internal(2025/info/writing-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/writing-nav)" raw="yes"]] + + diff --git a/2025/talks/zettelkasten.md b/2025/talks/zettelkasten.md new file mode 100644 index 00000000..b4177971 --- /dev/null +++ b/2025/talks/zettelkasten.md @@ -0,0 +1,453 @@ +[[!meta title="Zettelkasten for Regular Emacs Hackers"]] +[[!meta copyright="Copyright © 2025 Christian Tietze"]] +[[!inline pages="internal(2025/info/zettelkasten-nav)" raw="yes"]] + +<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing --> +<!-- You can manually edit this file to update the abstract, add links, etc. ---> + + +# Zettelkasten for Regular Emacs Hackers +Christian Tietze (he) - [@ctietze@mastodon.social](https://mastodon.social/@ctietze) <https://christiantietze.de> <https://zettelkasten.de>, <mailto:hi@christiantietze.de> + +[[!inline pages="internal(2025/info/zettelkasten-before)" raw="yes"]] + +There's this one thing you can do with your Emacs that is not chiefly a technological problem to solve: thinking through writing. + +Emacs offers a malleable environment where you can tweak every key stroke, and every pixel on screen to your needs. + +Since we're all here at EmacsConf, the intention is clear: to use and enjoy Emacs, and spend our lives in this amazing environment. + +While it's easy to ditch modern UI conveniences and pull technology like email, chat, database and server management, and editing book drafts into Emacs – well, these are tasks that have been implemented, for which there exist alternatives, and which you can teach Emacs to do in a similar way. + +Oversimplifying: we can copy and tweak existing solutions and have a good life. + +Now while everyone's email needs to use the same protocol, everyone's approach to _thinking_ is different. There's no cookie cutter solution to merely rewrite in Emacs Lisp. We all need to figure out how to do this on our own, and then find an implementation that suits our needs. (Including using paper, but we're not talking about paper here.) + +**This is where I want to show you one simple foundational method to deep thinking, understanding, and problem solving:** create yourself a Zettelkasten, an environment of linked notes that scales well over decades, so that you can take it with you into retirement and beyond for a lifelong journey of learning. + +For this presentation, I merely assume that you agree that writing improves the quality and depth of thought. I also assume that you know how to type and move around in Emacs. The rest is just convention, and we'll walk through a couple of examples and exercises together so that after this talk, you're equipped with the simple tools that help you unlock new insights in your future. + +## About Christian + +Christian is a macOS/iOS developer with a strong focus on user experience and clean architecture. Driven by a passion for accessibility and performance, Christian has shipped many apps and authored three technical books and 895+ blog posts, helping developers world-wide to realize their app ideas with a deep understand for the technologies they use. In 2013, Christian wrote about the Zettelkasten topic on his own personal blog and eventually moved everything over to <https://zettelkasten.de> where he and Sascha continue to teach and write. + +## Code and Notes from the Talk + +### Minimal Emacs + Denote Configuration + +This is the relevant configuration Christian used in the Emacs demo. Save this to a folder as `init.el`, and launch via: + + $ emacs -nw --init-directory . init.el + +`init.el` contents: + +```elisp +(load-theme 'modus-vivendi-tinted) ;; Dark theme to match dark slides +(menu-bar-mode -1) ;; Disable topmost menu bar + +(package-refresh-contents) + +(use-package denote + :ensure t + :hook (dired-mode . denote-dired-mode) + :bind + (("C-c n n" . denote) + ("C-c n r" . denote-rename-file) + ("C-c n l" . denote-link) + ("C-c n c" . denote-link-after-creating) + ("C-c n b" . denote-backlinks) + ("C-c n d" . denote-dired) + ("C-c n g" . denote-grep)) + :config + (setq denote-directory (expand-file-name "./notes/")) + + ;; Automatically rename Denote buffers when opening them so that + ;; instead of their long file name they have, for example, a literal + ;; "[D]" followed by the file's title. Read the doc string of + ;; `denote-rename-buffer-format' for how to modify this. + (denote-rename-buffer-mode 1)) + +;; For the demo, I forced notes to show in full screen by default. +(setopt display-buffer-alist nil) +(add-to-list 'display-buffer-alist + '("^[D] " ;; Denote buffer name prefix + (display-buffer-reuse-mode-window display-buffer-full-frame) + )) +``` + +### Notes created during the demo + +These are the notes Christian created during the recording. The recording was sped up 3x--4x, so this could be nicer to read than having to squint at the video: + +#### `20251121T204827--mechanics-and-habits-to-use-a-zettelkasten__zettelkasten.org` + +```org +#+title: Mechanics and habits to use a Zettelkasten +#+date: [2025-11-21 Fri 20:48] +#+filetags: :zettelkasten: +#+identifier: 20251121T204827 + +Essential: +- Write: put in effort; [[denote:20251121T205045][GIGO]] +- Connect: Link notes to create trails +- Correct: Improve as you go + +Additional: +- Design for use: give things a purpose, e.g. blog about it +- Create structure. [[denote:20251121T205312][Types of structures in a Zettelkasten]]: design new entry points and trails +- Start in the Zettelkasten: use the system to learn, make it grow, get better +- Start with a link: keeps your notes connected. [[denote:20251121T210416][Create notes as link first to avoid orphans]] + +Tool doesn't matter as much. Small files are good. [[denote:20251121T210107][Use Denote in Emacs]] + +(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025) +``` + +#### `20251121T205045--gigo__programming_quality.org` + +```org +#+title: Garbage in, garbage out +#+date: [2025-11-21 Fri 20:50] +#+filetags: :programming:quality: +#+identifier: 20251121T205045 + +The principle known as "Garbage In, Garbage Out" (GIGO) in computer +programming states that for any system, the quality of output is +directly depending on the quality of input. + +See: https://en.wikipedia.org/wiki/Garbase_in,_garbage_out +``` + +#### `20251121T205312--types-of-structures-in-a-zettelkasten__structure_zettelkasten.org` + +```org +#+title: Types of structures in a Zettelkasten +#+date: [2025-11-21 Fri 20:53] +#+filetags: :structure:zettelkasten: +#+identifier: 20251121T205312 + +Non-comprehensive list of structures that could be used in a Zettelkasten: + +- Opposition pair: 1 note for the pair, 1 note per position/opposition each; pro/contra +- Table of contents: list of topics/headings + - an outline for a writing project + - recreation of a book's contents (so I can write in detail about the book); +- Argument: recreation of a distilled form to get to a conclusion; + list premises and evidence, and how these support the conclusion + - Counter-argument: address parts of the original argument to support another + view and test the argument's strength +- Table of things +- Graphics, like a concept map, Mind-Map, diagram: visually bring + elements into a relation, then write about the relation and the elements + +Metaphors: +- Iceberg: visibile tip with hidden depth; someting that appears small + but is large; good metaphor for obstacles +- Black box: focus on inputs and outputs, and ignore the 'how' in the middle + - e.g. most Emacs Lisp functions (hoping the documentation is good) +- [[denote:20251121T205739][Atom, molecule, organism]]: how small parts compose to larger parts, + which compose to even larger pieces + + +(Christian Tietze: Zettelkasten for Regular Emacs Hackers, EmacsConf 2025) +``` + +#### `20251121T205739--atom-molecule-organism-metaphor__composition_recursion.org` + +```org +#+title: Atom, molecule, organism metaphor +#+date: [2025-11-21 Fri 20:57] +#+filetags: :composition:recursion: +#+identifier: 20251121T205739 + +Atom: smallest part, indivisible elements +Molecule: comprised of atoms; structure added to combine elements +Organism: comprised of molecules; different level of analysis, irreducible to molecules/atoms + +This can be used e.g. for programming: functions compose into larger +functions which compose into packages. + +Actual biological organisms also work in such a way. Organs are part +of bodily functions (high abstraction), but from a chemical or +physical perspective, you can decompose them into atoms. That doesn't +tell you anything about the organ's function. +``` + +#### `20251121T210107--denoteel-for-zettelkasten-in-emacs__denote_emacs_zettelkasten.org` + +```org +#+title: Denote.el for Zettelkasten in Emacs +#+date: [2025-11-21 Fri 21:01] +#+filetags: :denote:emacs:zettelkasten: +#+identifier: 20251121T210107 + +While not shipping with Emacs out of the box, Denote is easy to install and a great start to manage notes: + +- it comes with unified way to create new notes, and hides time-stamped ID's with "[D]" in buffer lists +- it can manage links, and show incoming links to notes ("backlinks") +- it supports quickly adding links, and creating links _first_ out of + the box -- it just creates the note immediately, so you don't notice + - [[denote:20251121T210416][Create notes as link first to avoid orphans]] + +* Example configuration + +#+BEGIN_SRC elisp +(use-package denote + :ensure t + :hook (dired-mode . denote-dired-mode) + :bind + (("C-c n n" . denote) + ("C-c n r" . denote-rename-file) + ("C-c n l" . denote-link) + ("C-c n c" . denote-link-after-creating) + ("C-c n b" . denote-backlinks) + ("C-c n d" . denote-dired) + ("C-c n g" . denote-grep)) + :config + (setq denote-directory (expand-file-name "./notes/")) + + ;; Automatically rename Denote buffers when opening them so that + ;; instead of their long file name they have, for example, a literal + ;; "[D]" followed by the file's title. Read the doc string of + ;; `denote-rename-buffer-format' for how to modify this. + (denote-rename-buffer-mode 1)) +#+END_SRC +``` + +#### `20251121T210416--create-notes-as-link-first-to-avoid-orphans__linking_zettelkasten.org` + +```org +#+title: Create notes as link first to avoid orphans +#+date: [2025-11-21 Fri 21:04] +#+filetags: :linking:zettelkasten: +#+identifier: 20251121T210416 + +Recommended practice by Christian Tietze: start a new note with a link +first from some place, any place, then create the file to match that +link (which would initially lead nowhere). + +- Reduces orphans in the Zettelkasten by guaranteeing every note to + have at least one link. +- Supposedly teaches you to think about possible connections early, + which makes the network better. + +A very loosey-goosey approach, when taken literally and used +liberally: it doesn't matter where you are, just leave a forward link +to something you wish existed. Even if it doesn't fit the current +note. After all, you came up with the idea just now -- so maybe +there's a connection that you just can't spell out, yet? +``` + +## Discussion / notes + +- Q: I wonder what they use for the fancy animations (what is your + presenation software stack?) +- A: Apple Keynote -- sorry for the proprietary product, I'm + just fastest with that. PowerPoint also works, and when + PowerPoint can do, LibreOffice can also do. It's more about + sticking to a few simple transitions and timings, like fading + and directional movement/wiping, and you're good. Read + "slide:ology", that's amazing and full of great examples. +- Q: Are you not a fan of using *, **, *** headings in + org-mode? (It's interesting to see how people have different + styles of writing org content.) + - A: Didn't see a need for hierarchical structure for the + presentation. Also I'm leaning towards sequential writing, i.e. + 'notes as blog post' pattern, or in our technical terms: "A + Zettel should be like a StackOverflow post: a self-contained + answer, specific to the question, with references to learn more + if needed." An outline doesn't fit that well. + - Fair enough. Thanks. +- Q: can you use org files and all its features inside denote? + - A: Yes, this is an org file and Denote uses Org headings. +- Q: Where/how do you like to capture fleeting notes? + - A: Uses small paper notes. (Also don't get hung-up on + terminology like this please :)) +- Q: Zettelkasten feels like a very "cagey" approach to note-taking + and knowledge management. Doesn't it restrict one to think in + certain ways rather than what feels natural to someone? + - A: Take that feeling of being caged in as feedback to adjust the + process. Otherwise, the rules I subject myself to are voluntary. + I give my best during the writing stage, which is 'cagey' and + taking more effort, too, for the benefit of my research in the + long run. + - (audience): Makes sense. Thanks! I'll give another shot to zettelkasten and + rewatch your talk! + - (audience): the point of zettelkasten is to see varying differences between various notes and make interesting connections. so the only 'cage' is to just write notes, the creativity will happen when you see the interesting connections. + - (audience): as luhmann put it: "without noticing differences, one cannot think" +- Q: How does denote compare to org-roam? + - A: Denote is smaller, allows finding notes, but gets out of your + way otherwise. +- Q:I noticed that the wikipedia link you wrote was typed wrongly - + and it got me thinking about how to deal with broken links at scale? + Do you have any thoughts on this? What about archival? + - A: Use any script to automate fixing broken links +- Q:When I completely re-worked my config some two years ago, I also + tried out some of these packages for making notes in Emacs. But none + of them actually fit my purpose because **I do not like the idea of + splitting up my ideas**. I am writing prose, I collect material, + reading lists and so on in **just one big file** everything fits in. + In this notebook.org file I do archiving from time to time in a + monthly basis, and I search these files in Finder on macOS to find + older notes I would like to go back to. So, if I write a paper, + it's basically an extract from my old notes that only have one + structure, viz. when I took them. **Time structures my thought, and + my notes.** But they would get lost if I split them up in a + network-like structure like a wiki, or even a zettelkasten. My 2 ct. + BTW, I work on legal and sociological topics. I'm a lawyer by + training. + - A:Cool! Happy for you :) See Twyla Tharpe. +- Q:How Zettelkasten is useful for highly mathematical STEM academic + fields like computer science or engineering fields? Like when + studying a STEM field, what should we make notes of? The important + bits are interconnected in a heirarchy, usually chapters of a book (1 -> 2 + -> 3). Main points are usually dense, highly context-dependent + sentences. One feels like he is copying information to another box. + It's usually not possible to reword scietific results in ones own + words. + - A: (probably by oliver epper!! )Zettelkasten is great for + Mathematics and incredible for CS. With org-babel you can have + living source code that you can execute from the note. + (Zettelkasten using denote, using org is the link here). You can + even use Agda if you want to have living proofs in your note. + Even inline LaTeX is an option for beautiful commutative + diagrams or math terms. Quote the sentence as is and add ...? + - A: foundational knowledge is important for tests mostly; and + eventually becomes your inventory of skills (you can do X proofs + from the top of your head). Copy box: fridge me + - see appendix A below: local link in supply chain of + knowledge + - engagement doing the work of not copying, but rephrasing, + organizing, but sometimes also retyping alone + +- Q: In your experience, would you say that you re-use most of your + notes? Watching your demo, I though that more notes your create, + less you might re-use them... Thanks for sharing! + - A: No, that'd be impossible. I have 11k notes. "Most" would + be 50%, 5500 of them. I can't use that many things most of the + time, it's impossible. Focuses shift, and I go from one + department to another, metaphorically, as the hours, days, weeks + pass. + +- 2:09 PM EST Q: How are notes structured and accessed when the notes + grow from 10K to 100K notes. + - A: Like a fractal; self-similar structures + +- 2:13 PM EST Q: Not a Question but I would be very interested in your + thought on this video by Westenberg :- + [https://www.youtube.com/watch?v=CjSWwmg-JRM](https://www.youtube.com/watch?v=CjSWwmg-JRM) + , Why I Deleted My Second Brain: A Journey Back to Real Thinking + - A: dunno, probably a lot of collection, not a lot of thinking in + the ZK to some purpose that worked...? Usually, posts/videos + like this conflate note taking as a dumping ground for 'stuff' + with something that is valuable in the long term. + +- Q: Is there a danger that with a Zettlekasten-process, that the + process gets a bit in the way of the content? + - A: STrive for speed of thought tools, not e.g. typewriter. THEN: + reduce ritual and ceremony. + +- Q: How do you navigate looking at all posts with certain tags (this + might be in emacs already; new to emacs ;)) + - A:I don't; tags are just a way to loosely group notes (and + stuff in general) so that you can find potentially relevant + pieces of information more quickly. To navigate, use links. + Create nativigational aids. +- Q: I thought denote uses md files + - I think it can use either markdown or org. + - denote is agnostic to the format + - and I already use org-roam but this makes me think I may want to switch. + - denote is more minimal + - Denote is simpler + - Org-roam feels more hackable for me + - org-roam tries to implement Roam Research + - I'm just used to org-roam since years + - after some research I went with org-roam just beacuse it handles org files. boy if I knew that back then + - I have a lot of stuff that depends on org-roam, because it does more than just the zettelkasten. It is more of a database structure. +- His slides are very aesthetic. +- all these speakers need to provide there emacs ui setup in emacsconf + repo + - it was a compliment, all of them have eye-candy emacs +- How did I not know the guy who runs zettelkasten.de was an Emacs + user. (It makes total sense, but I didn't know until now.) + - oh wow, is that a video editing thing or an Emacs thing? + - the video-editing is really great +- So meta! Loved seeing how they turned a zettelkasten into a talk. +- Very, very interesting talk! +- I'm going to have to rewatch this one a couple times. There's so + much good stuff here. I don't know if the Zettelkasten idea has + every fully "clicked" for me, but I think this is the closest + I've been to "getting it" +- (add-hook 'org-mode-hook #'visual-line-mode) +- oh yeah I have started to download the webpages I refer to + - I use wget manually though. +- I have tried zettelkasten through org-roam before. it felt too overwhelming, so I just do "bunch of org files in a directory" now + - I think everyone has to find their own style. + - org-roam can feel confusing in the beginning, I do get that + - I feel like it is okay to just do what you feel suits you and slowly improve your flow + - I am very addicted to it at this point, but I understand this + - it doesn't have to use the hottest thing in the market + - I don't do second brain thing now, I just write whenever I want to + - I use org capture to maintain a journal and separate org files later. + - I always start with writing and link things after I have a first draft of a file + - I can confirm that 2k notes need to be very well organized to not get lost. Once you get to the point where your notes grow too fast, you really need a very good structure +- it is an org file? + - it looks like an org file. He just doesn't use headings that much. +- I'm going to have to rewatch this one a couple times. There's so much good stuff here. I don't know if the Zettelkasten idea has every fully "clicked" for me, but I think this is the closest I've been to "getting it" 🙂 +- Excellent talk (slides and presentation itself). 👏 +- agreed, it's going to require several listens! +- easily one of the best talks during emacsconf +- Thanks for the talk! +- lol, 'so is wearing underwear' + - Amazing parallelisms +- "so is brushing your teeth everyday" +- Q: does christian make videos too + - I have seen them somewhere +- so far this talk has been very good +- off topic, but I really dig there overall room aesthetics +- https://github.com/yibie/org-supertag + - it's by the emacs-china guy + - though I don't like the ai integration in there + + + + +Appendix A: +# 202402121625 Zettelkasten can be the fridge-like buffer of knowledge +#zettelkasten + +Any local knowledge database serves as a **buffer** between all +available information sources on the internet and actual problems that +have been solved. + +> [T]here's no "local link" in this supply chain that we've +developed. Google is the closest link, meaning we use the massive, +unsorted network that is the Internet and Google's interpretation of our +problem as our "second brain".[#20240212ds][] + +A Zettelkasten, as a trusted system[[201304061037]] for information +retrieval, becomes the first line of defense when looking for a +solution: + + Problem → Zettelkasten → Google + +As Aseem Thakar points out, we don't go foraging in the woods whenever +we get hungry, but instead go to the fridge in our apartment, then head +to the supermarket if we don't find anything there, then maybe check +out farms if the market is empty.[#20240212ds][] Defaulting to web +search for a solution and never building up a local storage buffer of +answers to our problems would be similar. + +[#20240212ds]: Aseem Thakar: "How to build a second brain as a +software developer", 2021-09-26, +<[https://aseemthakar.com/how-to-build-a-second-brain-as-a-software-developer/](https://aseemthakar.com/how-to-build-a-second-brain-as-a-software-developer/)> + + + + + +[[!inline pages="internal(2025/info/zettelkasten-after)" raw="yes"]] + +[[!inline pages="internal(2025/info/zettelkasten-nav)" raw="yes"]] + + |
