diff options
Diffstat (limited to '2025')
27 files changed, 7583 insertions, 22 deletions
diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt new file mode 100644 index 00000000..a32fdf09 --- /dev/null +++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt @@ -0,0 +1,77 @@ +WEBVTT + + +00:00:05.760 --> 00:01:20.079 +Introduction + +00:01:20.080 --> 00:02:10.319 +Scope: A complete multi-media content processing framework + +00:02:10.320 --> 00:03:02.419 +Prior art and similar art + +00:03:02.420 --> 00:03:57.159 +LaTeX-Beamer + Reveal.js with Blee and BISOS + +00:03:57.160 --> 00:05:12.519 +Blee-LCNT novel concepts + +00:05:12.520 --> 00:06:32.559 +Part of a bigger picture - part of a series + +00:06:32.560 --> 00:12:52.639 +Nature of polyexistentials + +00:12:52.640 --> 00:14:23.119 +Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB) + +00:14:23.120 --> 00:14:31.279 +ByStar containment hierarchy and ByStar capability bundles + +00:14:31.280 --> 00:15:21.999 +Aggregated conviviality of ByStar capabilities + +00:15:22.000 --> 00:15:47.867 +Parts list: integrated components + +00:15:47.868 --> 00:18:45.719 +Resulting contents - output forms and formats + +00:18:45.720 --> 00:20:31.979 +reveal.js + +00:20:31.980 --> 00:21:33.479 +Generating the video + +00:21:33.480 --> 00:22:39.179 +A unified single input -- a sequencef of frames + +00:22:39.180 --> 00:23:16.199 +Abstractions to keep in mind + +00:23:16.200 --> 00:24:24.359 +Frame control types + +00:24:24.360 --> 00:26:25.199 +How outputs are generate from the inputs + +00:26:25.200 --> 00:27:46.479 +Context for unified source walkthrough + +00:27:46.480 --> 00:29:24.079 +One slide + +00:29:24.080 --> 00:31:05.799 +Dynamic blocks + +00:31:05.800 --> 00:33:42.279 +Internationalization - a non-Americanist perspective + +00:33:42.280 --> 00:35:07.719 +Autonomous self-publication and federated re-publications + +00:35:07.720 --> 00:36:02.559 +Ingredients of BISOS platforms and their progression + +00:36:02.560 --> 00:36:41.640 +Moving forward diff --git a/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt new file mode 100644 index 00000000..90f7b470 --- /dev/null +++ b/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt @@ -0,0 +1,2058 @@ +WEBVTT captioned by mohsen + +NOTE Introduction + +00:00:05.760 --> 00:00:08.159 +Greetings. Salaam. + +00:00:08.160 --> 00:00:10.159 +This is Mohsen Banan. + +00:00:10.160 --> 00:00:12.839 +I am a software and internet engineer. + +00:00:12.840 --> 00:00:14.679 +The title of this presentation + +00:00:14.680 --> 00:00:18.839 +is "Blee-LCNT: An Emacs Centered + +00:00:18.840 --> 00:00:23.659 +Content Production and Self-Publication Framework". + +00:00:23.660 --> 00:00:25.559 +Blee stands for + +00:00:25.560 --> 00:00:29.279 +ByStar Libre-Halaal Emacs Environment. + +00:00:29.280 --> 00:00:31.799 +In last year's EmacsConf, + +00:00:31.800 --> 00:00:36.079 +I introduced Blee, BISOS and ByStar + +00:00:36.080 --> 00:00:39.439 +as concepts and as foundations. + +00:00:39.440 --> 00:00:41.079 +This year I want to focus + +00:00:41.080 --> 00:00:43.879 +on one concrete capability. + +00:00:43.880 --> 00:00:47.959 +Content Production and Self-Publication + +00:00:47.960 --> 00:00:54.119 +is a foundational Blee and BISOS Capability Bundle. + +00:00:54.120 --> 00:00:55.759 +Both this presentation + +00:00:55.760 --> 00:00:59.079 +and the Nature of Polyexistentials book + +00:00:59.080 --> 00:01:02.879 +were developed with Blee-LCNT. + +00:01:02.880 --> 00:01:06.759 +In this presentation I want to look at Emacs + +00:01:06.760 --> 00:01:08.519 +as a central ingredient + +00:01:08.520 --> 00:01:10.959 +for a usage environment + +00:01:10.960 --> 00:01:14.919 +that we can use to orchestrate production of + +00:01:14.920 --> 00:01:20.079 +quite fancy multi-media presentations. + +NOTE Scope: A complete multi-media content processing framework + +00:01:20.080 --> 00:01:23.079 +Let's consider two different scopes. + +00:01:23.080 --> 00:01:27.919 +First, the scope of Blee-LCNT Capabilities Bundle, + +00:01:27.920 --> 00:01:29.919 +which is that of a complete + +00:01:29.920 --> 00:01:32.599 +multi-media content authorship, + +00:01:32.600 --> 00:01:34.799 +generation, publication + +00:01:34.800 --> 00:01:37.639 +and distribution framework. + +00:01:37.640 --> 00:01:40.999 +That complete scope is presented in this slide + +00:01:41.000 --> 00:01:44.239 +and it spans both black ink + +00:01:44.240 --> 00:01:46.639 +and violet ink. + +00:01:46.640 --> 00:01:49.799 +Second, the scope of this presentation, + +00:01:49.800 --> 00:01:52.119 +which is more limited. + +00:01:52.120 --> 00:01:54.919 +In this presentation I confine myself + +00:01:54.920 --> 00:01:58.519 +to the bullets is violet ink. + +00:01:58.520 --> 00:02:01.159 +Here, I focus on presentation + +00:02:01.160 --> 00:02:03.599 +and video as content types + +00:02:03.600 --> 00:02:05.999 +and their authorship and generation + +00:02:06.000 --> 00:02:10.319 +and their federated re-publication. + +NOTE Prior art and similar art + +00:02:10.320 --> 00:02:12.559 +This is a common topic. + +00:02:12.560 --> 00:02:14.839 +It makes good sense for us to start with + +00:02:14.840 --> 00:02:19.079 +a review of prior art and similar art. + +00:02:19.080 --> 00:02:21.959 +I went through the past EmacsConf talks + +00:02:21.960 --> 00:02:23.919 +and found a good number of them + +00:02:23.920 --> 00:02:25.999 +that also deal with the topic + +00:02:26.000 --> 00:02:28.839 +of content generation. + +00:02:28.840 --> 00:02:30.319 +A few of these are included + +00:02:30.320 --> 00:02:33.359 +in black ink in this slide. + +00:02:33.360 --> 00:02:35.599 +Many of these have chosen the Babel, + +00:02:35.600 --> 00:02:40.719 +in other words Org-Mode+LaTeX as primary input. + +00:02:40.720 --> 00:02:43.599 +I prefer the inverse of that. + +00:02:43.600 --> 00:02:45.839 +I also looked for past talks + +00:02:45.840 --> 00:02:49.999 +which have used Reveal.js and LaTeX-Beamer. + +00:02:50.000 --> 00:02:53.399 +For example, Sacha's use of Reveal.js + +00:02:53.400 --> 00:02:56.959 +is shown in violet inK. + +00:02:56.960 --> 00:03:02.419 +And Ihor's use of Beamer is in teal ink. + +NOTE LaTeX-Beamer + Reveal.js with Blee and BISOS + +00:03:02.420 --> 00:03:05.399 +This presentation is about a combination + +00:03:05.400 --> 00:03:08.639 +of Reveal.js and LaTeX-Beamer. + +00:03:08.640 --> 00:03:10.599 +For those who may not be familiar + +00:03:10.600 --> 00:03:12.619 +with Beamer and Reveal, + +00:03:12.620 --> 00:03:14.799 +here is a quick intro. + +00:03:14.800 --> 00:03:19.039 +Among academics, LaTeX-Beamer is the go-to tool + +00:03:19.040 --> 00:03:22.159 +for producing presentations. + +00:03:22.160 --> 00:03:24.239 +Reveal.js is recognized + +00:03:24.240 --> 00:03:25.919 +as the best of breed + +00:03:25.920 --> 00:03:29.919 +for dispensing HTML slide decks. + +00:03:29.920 --> 00:03:32.439 +For many, Reveal and Beamer + +00:03:32.440 --> 00:03:35.959 +live in different universes. + +00:03:35.960 --> 00:03:38.679 +Beamer is pdf oriented + +00:03:38.680 --> 00:03:42.019 +and Reveal is html oriented. + +00:03:42.020 --> 00:03:44.519 +Combining two powerful tools + +00:03:44.520 --> 00:03:48.359 +makes for an even more powerful tool. + +00:03:48.360 --> 00:03:51.879 +This Blee-LCNT Presentations combines + +00:03:51.880 --> 00:03:57.159 +the best of LaTeX-Beamer with Reveal.js. + +NOTE Blee-LCNT novel concepts + +00:03:57.160 --> 00:04:00.679 +Beamer primarily functions as producer + +00:04:00.680 --> 00:04:03.099 +and Reveal functions as dispenser + +00:04:03.100 --> 00:04:05.579 +and multi-media enhancer. + +00:04:05.580 --> 00:04:08.299 +Here is how the combination works. + +00:04:08.300 --> 00:04:10.439 +LaTeX Beamer pdf result + +00:04:10.440 --> 00:04:13.839 +is dissected into named frame images + +00:04:13.840 --> 00:04:18.799 +which can then be inserted in Reveal.js. + +00:04:18.800 --> 00:04:21.239 +LaTeX Beamer frames can also be + +00:04:21.240 --> 00:04:24.799 +translated into html with HeVeA + +00:04:24.800 --> 00:04:28.999 +which can also be inserted in Reveal.js. + +00:04:29.000 --> 00:04:31.119 +Voice-overs for Beamer frames + +00:04:31.120 --> 00:04:34.039 +can be correlated to frame names + +00:04:34.040 --> 00:04:37.119 +and applied to image or html frames. + +00:04:37.120 --> 00:04:42.079 +Screen captures and image narrations as videos + +00:04:42.080 --> 00:04:44.359 +can be directly dispensed + +00:04:44.360 --> 00:04:46.379 +through Reveal. + +00:04:46.380 --> 00:04:49.439 +There are various additional novel concepts + +00:04:49.440 --> 00:04:50.599 +with regard to the way + +00:04:50.600 --> 00:04:54.559 +that we have integrated all of this together. + +00:04:54.560 --> 00:04:57.599 +Instead of Org-Mode+LaTeX, + +00:04:57.600 --> 00:05:00.999 +we do LaTeX+Org-Mode. + +00:05:01.000 --> 00:05:03.999 +Instead of Babel, we do COMEEGA, + +00:05:04.000 --> 00:05:05.999 +instead of the Literate model + +00:05:06.000 --> 00:05:08.839 +we introduce the Surrounded model. + +00:05:08.840 --> 00:05:10.839 +You shall see various examples + +00:05:10.840 --> 00:05:12.519 +of these shortly. + +NOTE Part of a bigger picture - part of a series + +00:05:12.520 --> 00:05:15.639 +All of this is part of a bigger picture. + +00:05:15.640 --> 00:05:17.619 +A much bigger picture. + +00:05:17.620 --> 00:05:23.599 +My talks at EmacsConf 2021, 2022 + +00:05:23.600 --> 00:05:26.519 +and 2024 are related. + +00:05:26.520 --> 00:05:31.399 +This 2025 talk builds on those. + +00:05:31.400 --> 00:05:34.719 +Last year's talk "About Blee: + +00:05:34.720 --> 00:05:36.839 +enveloping our own autonomy + +00:05:36.840 --> 00:05:38.999 +directed digital ecosystem + +00:05:39.000 --> 00:05:42.199 +with Emacs" in particular, + +00:05:42.200 --> 00:05:44.979 +lays the foundations for this talk. + +00:05:44.980 --> 00:05:47.119 +If you have not seen that, + +00:05:47.120 --> 00:05:51.159 +it would make good sense to review it. + +00:05:51.160 --> 00:05:54.279 +In my previous talks I have been criticized + +00:05:54.280 --> 00:05:58.359 +of having a "prophetic" style. + +00:05:58.360 --> 00:06:02.059 +The scope of ByStar is lofty and immense. + +00:06:02.060 --> 00:06:04.879 +In many ways it is unbelievable. + +00:06:04.880 --> 00:06:09.139 +And EmacsConf talks are meant to be short. + +00:06:09.140 --> 00:06:11.839 +So, as a result, sometimes + +00:06:11.840 --> 00:06:13.959 +I end up being cryptic. + +00:06:13.960 --> 00:06:17.499 +Having accepted the "prophetic" criticism + +00:06:17.500 --> 00:06:19.399 +as legitimate, + +00:06:19.400 --> 00:06:23.599 +I now need to put a book on the table. + +00:06:23.600 --> 00:06:26.839 +With that book in place, moving forward, + +00:06:26.840 --> 00:06:29.339 +when needing to be cryptic, + +00:06:29.340 --> 00:06:32.559 +I shall cite Chapter and Verse. + +NOTE Nature of polyexistentials + +00:06:32.560 --> 00:06:34.879 +I am delighted to announce + +00:06:34.880 --> 00:06:37.559 +the availability of my recent book, + +00:06:37.560 --> 00:06:40.199 +"Nature of Polyexistentials". + +00:06:40.200 --> 00:06:42.959 +The full title of my book is: + +00:06:42.960 --> 00:06:45.039 +Nature Of Polyexistentials--- + +00:06:45.040 --> 00:06:48.239 +Basis For Abolishment Of The Western + +00:06:48.240 --> 00:06:51.219 +Intellectual Property Rights Regime--- + +00:06:51.220 --> 00:06:53.899 +And Introduction Of The Libre-Halaal + +00:06:53.900 --> 00:06:56.999 +ByStar Digital Ecosystem. + +00:06:57.000 --> 00:06:59.199 +Knowledge, know-how, uses of know-how, + +00:06:59.200 --> 00:07:02.879 +ideas, formulas, software and information + +00:07:02.880 --> 00:07:05.519 +are inherently non-scarce. + +00:07:05.520 --> 00:07:08.439 +They are *polyexistentials*. + +00:07:08.440 --> 00:07:10.239 +Unlike monoexistentials + +00:07:10.240 --> 00:07:12.259 +which exist in singular, + +00:07:12.260 --> 00:07:17.539 +polyexistentials naturally exist in multiples. + +00:07:17.540 --> 00:07:19.559 +What is abundant in nature + +00:07:19.560 --> 00:07:22.599 +is being made artificially scarce + +00:07:22.600 --> 00:07:25.399 +through man-made ownership rules + +00:07:25.400 --> 00:07:28.599 +called copyright and patents. + +00:07:28.600 --> 00:07:31.239 +These mistaken ownership rules, + +00:07:31.240 --> 00:07:34.959 +the so called Western IPR regime, + +00:07:34.960 --> 00:07:37.319 +has immense ramifications + +00:07:37.320 --> 00:07:38.839 +on the shape and the direction + +00:07:38.840 --> 00:07:42.619 +of the American Digital Ecosystem. + +00:07:42.620 --> 00:07:45.119 +It would be an understatement to say + +00:07:45.120 --> 00:07:47.779 +that the American Digital Ecosystem + +00:07:47.780 --> 00:07:50.599 +has put humanity in danger. + +00:07:50.600 --> 00:07:53.099 +Two parts of the book, in particular + +00:07:53.100 --> 00:07:55.679 +are of immediate relevance. + +00:07:55.680 --> 00:07:58.219 +Part III, the ethics layer, + +00:07:58.220 --> 00:08:01.119 +focuses on contours of cures. + +00:08:01.120 --> 00:08:02.839 +Having dismissed the Western + +00:08:02.840 --> 00:08:06.119 +intellectual property rights (IPR) regime + +00:08:06.120 --> 00:08:11.739 +as an erroneous governance model for polyexistentials, + +00:08:11.740 --> 00:08:14.319 +I propose the Libre-Halaal model + +00:08:14.320 --> 00:08:17.199 +of governance of polyexistentials + +00:08:17.200 --> 00:08:22.779 +towards facilitating conviviality of tools. + +00:08:22.780 --> 00:08:25.359 +Part IV, the engineering layer, + +00:08:25.360 --> 00:08:29.599 +introduces the Libre-Halaal ByStar Digital Ecosystem. + +00:08:29.600 --> 00:08:32.399 +as an ethical alternative + +00:08:32.400 --> 00:08:34.239 +to the prevailing proprietary + +00:08:34.240 --> 00:08:37.499 +American digital ecosystem. + +00:08:37.500 --> 00:08:40.479 +The book also provides additional details + +00:08:40.480 --> 00:08:42.919 +about the content generation + +00:08:42.920 --> 00:08:44.919 +and publication facilities + +00:08:44.920 --> 00:08:46.839 +that I am presenting here. + +00:08:46.840 --> 00:08:50.079 +And the book itself, as content, + +00:08:50.080 --> 00:08:53.439 +was generated and published + +00:08:53.440 --> 00:08:55.319 +using the facilities + +00:08:55.320 --> 00:08:57.239 +that I am presenting here. + +00:08:57.240 --> 00:08:59.199 +You can think of this book + +00:08:59.200 --> 00:09:01.159 +as being in two volumes. + +00:09:01.160 --> 00:09:05.919 +Our focus are Blee and BISOS in Volume II. + +00:09:05.920 --> 00:09:10.239 +Volume I deals with the general concept + +00:09:10.240 --> 00:09:13.879 +of polyexistence and invalidity + +00:09:13.880 --> 00:09:18.679 +of IPR and our terminoloy of Libre-Halaal--- + +00:09:18.680 --> 00:09:23.519 +instead of the common but ill directed vocabulary + +00:09:23.520 --> 00:09:28.239 +of Free Software and Open-Source and FOSS. + +00:09:28.240 --> 00:09:31.239 +In Chapter 11, I introduce + +00:09:31.240 --> 00:09:34.759 +the very sensitive and potent vocabulary + +00:09:34.760 --> 00:09:37.719 +of Halaal and Libre-Halaal. + +00:09:37.720 --> 00:09:39.079 +The contents of this book + +00:09:39.080 --> 00:09:41.659 +belong to all of humanity + +00:09:41.660 --> 00:09:45.519 +and verbatim copying of it is unrestricted. + +00:09:45.520 --> 00:09:49.479 +If you want to read it, this book is yours. + +00:09:49.480 --> 00:09:51.839 +The "Nature of Polyexistentials" book + +00:09:51.840 --> 00:09:56.659 +is available both online and in print. + +00:09:56.660 --> 00:09:59.439 +This book is available as two editions. + +00:09:59.440 --> 00:10:03.819 +The US Edition and the International edition. + +00:10:03.820 --> 00:10:05.959 +The US Edition is written + +00:10:05.960 --> 00:10:10.079 +with a slightly milder Western unfriendly tone, + +00:10:10.080 --> 00:10:12.399 +while the International Edition + +00:10:12.400 --> 00:10:17.619 +includes additional original content in Farsi. + +00:10:17.620 --> 00:10:20.399 +I consider the International Edition + +00:10:20.400 --> 00:10:22.979 +to be the authoritative version. + +00:10:22.980 --> 00:10:25.319 +However, many readers in + +00:10:25.320 --> 00:10:27.319 +the US and Western countries + +00:10:27.320 --> 00:10:31.199 +may prefer the US Edition. + +00:10:31.200 --> 00:10:33.999 +I maintain separate Git repositories + +00:10:34.000 --> 00:10:36.039 +for each edition on GitHub: + +00:10:36.040 --> 00:10:42.839 +US Edition is at bxplpc/120033 + +00:10:42.840 --> 00:10:51.419 +and International Edition: bxplpc/120074 + +00:10:51.420 --> 00:10:53.679 +Cloning these repositories + +00:10:53.680 --> 00:10:56.399 +will give you access to the book + +00:10:56.400 --> 00:11:00.039 +in PDF format (suitable for both + +00:11:00.040 --> 00:11:04.039 +A4 and US Letter printing) + +00:11:04.040 --> 00:11:06.379 +and in EPUB format. + +00:11:06.380 --> 00:11:08.559 +Alternatively, the content + +00:11:08.560 --> 00:11:12.039 +can be downloaded directly from your browser + +00:11:12.040 --> 00:11:17.259 +without needing to clone the repositories. + +00:11:17.260 --> 00:11:19.079 +To ensure broader online + +00:11:19.080 --> 00:11:21.899 +availability and stability, + +00:11:21.900 --> 00:11:26.159 +I have also published the book on Zenodo, + +00:11:26.160 --> 00:11:31.779 +complete with a DOI (Digital Object Identifier). + +00:11:31.780 --> 00:11:34.439 +You can download both the A4 + +00:11:34.440 --> 00:11:39.639 +and 8.5 x 11 PDFs from there as well. + +00:11:39.640 --> 00:11:44.119 +The book is also available in print on Amazon + +00:11:44.120 --> 00:11:46.239 +and at most major bookstores + +00:11:46.240 --> 00:11:49.379 +in the US and Western regions. + +00:11:49.380 --> 00:11:51.519 +The ISBNs for both editions + +00:11:51.520 --> 00:11:54.139 +are included in this slide. + +00:11:54.140 --> 00:11:56.319 +Additionally, I have published + +00:11:56.320 --> 00:12:00.719 +this book in Iran through Jangal Publishers. + +00:12:00.720 --> 00:12:03.079 +I did not write this book for profit. + +00:12:03.080 --> 00:12:05.359 +My aim is to share my thoughts + +00:12:05.360 --> 00:12:10.599 +and encourage readers to engage with my views and ideas. + +00:12:10.600 --> 00:12:12.499 +Your feedback is welcome, + +00:12:12.500 --> 00:12:14.119 +and I am genuinely interested + +00:12:14.120 --> 00:12:17.199 +in hearing your perspectives. + +00:12:17.200 --> 00:12:20.879 +In Western markets, I have priced the print edition + +00:12:20.880 --> 00:12:24.339 +somewhat above production costs. + +00:12:24.340 --> 00:12:26.639 +If you find value in the book + +00:12:26.640 --> 00:12:28.599 +and the ByStar project, + +00:12:28.600 --> 00:12:32.759 +purchasing a copy will help support my work. + +00:12:32.760 --> 00:12:37.459 +Thanks in advance for your support. + +00:12:37.460 --> 00:12:39.479 +And here are the same links + +00:12:39.480 --> 00:12:42.179 +as a native Reveal slide. + +00:12:42.180 --> 00:12:43.839 +If instead of a video, + +00:12:43.840 --> 00:12:47.759 +you are viewing this presentation as a Reveal web page, + +00:12:47.760 --> 00:12:52.639 +you can just click on the pointers and URLs. + +NOTE Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB) + +00:12:52.640 --> 00:12:55.079 +Instead of the traditional model + +00:12:55.080 --> 00:12:59.559 +of giving you recipes in a DIY context + +00:12:59.560 --> 00:13:01.479 +towards the goal of creating + +00:13:01.480 --> 00:13:04.559 +content processing capabilities + +00:13:04.560 --> 00:13:07.659 +on top of what you may already have, + +00:13:07.660 --> 00:13:09.959 +I am doing the opposite. + +00:13:09.960 --> 00:13:15.159 +I am saying: take this whole BISOS and Blee thing, + +00:13:15.160 --> 00:13:17.559 +and in there you will also have + +00:13:17.560 --> 00:13:20.239 +the content processing capabilities + +00:13:20.240 --> 00:13:22.579 +that I am speaking of here. + +00:13:22.580 --> 00:13:24.919 +So, at the top level we have + +00:13:24.920 --> 00:13:27.519 +our own autonomy and privacy + +00:13:27.520 --> 00:13:30.199 +directed digital ecosystem, + +00:13:30.200 --> 00:13:32.839 +which in contrast to the center oriented + +00:13:32.840 --> 00:13:35.659 +American digital ecosystem, + +00:13:35.660 --> 00:13:38.479 +is edge oriented. + +00:13:38.480 --> 00:13:40.919 +We call it: "The Libre-Halaal + +00:13:40.920 --> 00:13:43.919 +ByStar Digital Ecosystem". + +00:13:43.920 --> 00:13:45.799 +All the systems in ByStar, + +00:13:45.800 --> 00:13:50.699 +run BISOS (By* Internet Services OS), + +00:13:50.700 --> 00:13:53.759 +which is a layer on top of Debian. + +00:13:53.760 --> 00:13:58.199 +The usage environment of ByStar and BISOS is Blee + +00:13:58.200 --> 00:14:01.579 +which is a layer on top of Emacs. + +00:14:01.580 --> 00:14:04.919 +With those in place, we then create + +00:14:04.920 --> 00:14:10.139 +a capability bundle called Blee-LCNT. + +00:14:10.140 --> 00:14:13.039 +So, when you buy into Blee and BISOS, + +00:14:13.040 --> 00:14:15.199 +you will naturally also get + +00:14:15.200 --> 00:14:18.719 +these content processing capabilities--- + +00:14:18.720 --> 00:14:23.119 +without a need for any recipies or DIY effort. + +NOTE ByStar containment hierarchy and ByStar capability bundles + +00:14:23.120 --> 00:14:24.879 +If you were to look at the model + +00:14:24.880 --> 00:14:29.119 +that I introduced as containment hierarchies, + +00:14:29.120 --> 00:14:31.279 +it would look like this. + +NOTE Aggregated conviviality of ByStar capabilities + +00:14:31.280 --> 00:14:33.779 +We love Emacs and we love Unix + +00:14:33.780 --> 00:14:36.759 +because their design is convivial. + +00:14:36.760 --> 00:14:39.199 +By convivial, I am referring + +00:14:39.200 --> 00:14:40.759 +to Ivan Illich's concept + +00:14:40.760 --> 00:14:45.319 +and terminology of "Tools for Conviviality". + +00:14:45.320 --> 00:14:48.679 +It was first published in 1973. + +00:14:48.680 --> 00:14:50.959 +It's a must read. + +00:14:50.960 --> 00:14:52.639 +A goal of the design + +00:14:52.640 --> 00:14:54.799 +of the ByStar Digital Ecosystem + +00:14:54.800 --> 00:14:57.479 +is to enlarge the aggregated + +00:14:57.480 --> 00:15:01.719 +conviviality of its capabilities. + +00:15:01.720 --> 00:15:04.719 +What distinguishes Blee-LCNT + +00:15:04.720 --> 00:15:08.959 +from other content processing tools and frameworks, + +00:15:08.960 --> 00:15:12.439 +is our emphasis on enhancing + +00:15:12.440 --> 00:15:15.659 +the aggregated conviviality. + +00:15:15.660 --> 00:15:19.259 +These tools let you express yourself. + +00:15:19.260 --> 00:15:21.999 +They let you be in charge. + +NOTE Parts list: integrated components + +00:15:22.000 --> 00:15:24.499 +Here is our parts list. + +00:15:24.500 --> 00:15:25.839 +These are the components + +00:15:25.840 --> 00:15:27.959 +that we have chosen to bring together + +00:15:27.960 --> 00:15:32.779 +towards our goal of creating convivial tools. + +00:15:32.780 --> 00:15:36.039 +In this slide, we are using black ink + +00:15:36.040 --> 00:15:38.519 +to denote exisiting tools + +00:15:38.520 --> 00:15:41.339 +and we use violet ink + +00:15:41.340 --> 00:15:44.419 +to denote pieces that we have developed + +00:15:44.420 --> 00:15:47.100 +towards cohesive integration. + +00:15:46.560 --> 00:15:47.867 +[This] video, + +NOTE Resulting contents - output forms and formats + +00:15:47.868 --> 00:15:51.479 +the video is just one of the outputs. + +00:15:51.480 --> 00:15:54.499 +There are other outputs as well. + +00:15:54.500 --> 00:15:56.359 +In this figure, the outputs + +00:15:56.360 --> 00:15:58.859 +are shown in the top layer. + +00:15:58.860 --> 00:16:02.279 +Using this video as an example, + +00:16:02.280 --> 00:16:05.599 +this presentation's output also include + +00:16:05.600 --> 00:16:07.599 +the "Presentation Form" + +00:16:07.600 --> 00:16:10.999 +and the "Article-Presentation Form". + +00:16:11.000 --> 00:16:13.719 +Let's look at these more closely. + +00:16:13.720 --> 00:16:17.259 +For Presentations, there are 3 different forms. + +00:16:17.260 --> 00:16:19.559 +The Video Form, the Presentation From + +00:16:19.560 --> 00:16:22.819 +and the Article-Presentation Form. + +00:16:22.820 --> 00:16:27.439 +The Presentation Form produces both a pdf output + +00:16:27.440 --> 00:16:29.079 +and Reveal output. + +00:16:29.080 --> 00:16:32.879 +Next we will walkthrough some of the benefits + +00:16:32.880 --> 00:16:35.519 +that availability of these forms + +00:16:35.520 --> 00:16:38.099 +and formats provide. + +00:16:38.100 --> 00:16:41.959 +The video presentation that you are watching + +00:16:41.960 --> 00:16:44.599 +is just one of the outputs + +00:16:44.600 --> 00:16:48.479 +of the Blee-LCNT machinery. + +00:16:48.480 --> 00:16:52.679 +There are two PDF format outputs + +00:16:52.680 --> 00:16:56.439 +and two HTML outputs + +00:16:56.440 --> 00:16:58.859 +that are also quite useful. + +00:16:58.860 --> 00:17:02.119 +The primary output of Beamer + +00:17:02.120 --> 00:17:04.239 +is a set of slides + +00:17:04.240 --> 00:17:10.439 +that people use to give their talks with. + +00:17:10.440 --> 00:17:12.479 +Typically that's done live. + +00:17:12.480 --> 00:17:19.179 +In my case I dissect the images of each frame + +00:17:19.180 --> 00:17:21.639 +and do a voiceover on it + +00:17:21.640 --> 00:17:28.839 +and then dispense it through reveal. + +00:17:28.840 --> 00:17:33.379 +In a second, you will see that as well. + +00:17:33.380 --> 00:17:36.959 +This PDF output is very useful. + +00:17:36.960 --> 00:17:39.279 +You get the table of contents, of course, + +00:17:39.280 --> 00:17:42.207 +and in addition to that, + +00:17:42.208 --> 00:17:46.319 +Beamer generates navigations for you + +00:17:46.320 --> 00:17:49.599 +where on any part you get + +00:17:49.600 --> 00:17:51.839 +a small table of content as well. + +00:17:51.840 --> 00:17:57.119 +This is heavily used amongst academics, + +00:17:57.120 --> 00:18:00.959 +and it's a good output on its own, + +00:18:00.960 --> 00:18:03.319 +and I'm augmenting it + +00:18:03.320 --> 00:18:05.399 +in a variety of ways. + +00:18:05.400 --> 00:18:09.719 +In addition to the presentation PDF format, + +00:18:09.720 --> 00:18:15.359 +there is also an article-presentation PDF format + +00:18:15.360 --> 00:18:18.799 +which gives you the same content, + +00:18:18.800 --> 00:18:25.159 +but it gives it to you in a textual form + +00:18:25.160 --> 00:18:30.939 +with the table of content and the rest. + +00:18:30.940 --> 00:18:34.759 +This is a good form to use + +00:18:34.760 --> 00:18:39.919 +when you are giving, for example, class lectures, + +00:18:39.920 --> 00:18:45.719 +and the students often prefer this format. + +NOTE reveal.js + +00:18:45.720 --> 00:18:51.839 +Now for the HTML format output, the most relevant, + +00:18:51.840 --> 00:18:55.599 +of course, is the reveal itself. + +00:18:55.600 --> 00:19:05.679 +If you have not used reveal before, + +00:19:05.680 --> 00:19:10.559 +in my view, it's a HTML slide dispenser. + +00:19:10.560 --> 00:19:15.479 +I don't look at it as a presentation framework. + +00:19:15.480 --> 00:19:22.599 +I use, as you are seeing, we use Beamer to feed into it + +00:19:22.600 --> 00:19:25.759 +and we use it to dispense the information. + +00:19:25.760 --> 00:19:33.439 +It has all the typical navigation + +00:19:33.440 --> 00:19:39.959 +capabilities that you would expect, + +00:19:39.960 --> 00:19:44.319 +and most of what I have as slides are images, + +00:19:44.320 --> 00:19:48.239 +but occasionally, particularly when there is a need + +00:19:48.240 --> 00:19:52.999 +to provide pointers, HTML pointers, + +00:19:53.000 --> 00:20:01.439 +I then also include a textual output. + +00:20:01.440 --> 00:20:05.559 +This is also produced + +00:20:05.560 --> 00:20:09.839 +from the Beamer LaTeX source, + +00:20:09.840 --> 00:20:14.959 +but it's HTML through textual HTML, + +00:20:14.960 --> 00:20:19.019 +through HeVeA, not the image. + +00:20:19.020 --> 00:20:22.499 +You can... you get a table of contents. + +00:20:22.500 --> 00:20:24.574 +You can navigate + +00:20:24.575 --> 00:20:28.079 +and there are a whole lot of other features + +00:20:28.080 --> 00:20:31.979 +that reveal also provides. + +NOTE Generating the video + +00:20:31.980 --> 00:20:35.879 +So to generate the video, + +00:20:35.880 --> 00:20:40.980 +what I do is I come to + +00:20:40.981 --> 00:20:49.459 +the very beginning of the presentation. + +00:20:49.460 --> 00:20:51.519 +I turn on the screen capture recorder, + +00:20:51.520 --> 00:20:54.159 +and then I start playing + +00:20:54.160 --> 00:20:58.239 +the voiceover for each slide + +00:20:58.240 --> 00:21:02.519 +and at the very end, you get a video, + +00:21:02.520 --> 00:21:08.759 +but what you just did is you dispensed every frame, + +00:21:08.760 --> 00:21:11.279 +one at a time, through reveal. + +00:21:11.280 --> 00:21:15.319 +In addition to this HTML form, + +00:21:15.320 --> 00:21:22.239 +you also get an article presentation form of it, + +00:21:22.240 --> 00:21:24.159 +with a full table of contents + +00:21:24.160 --> 00:21:27.759 +and the videos are there, and the notes are there, + +00:21:27.760 --> 00:21:33.479 +and this is also quite useful. + +NOTE A unified single input -- a sequencef of frames + +00:21:33.480 --> 00:21:36.519 +Now, let's look at the one single input file + +00:21:36.520 --> 00:21:38.879 +that produced all of the outputs + +00:21:38.880 --> 00:21:39.879 +that we just saw. + +00:21:39.880 --> 00:21:43.079 +I have put both the input file + +00:21:43.080 --> 00:21:45.119 +and some of the output files + +00:21:45.120 --> 00:21:48.299 +for this presentation on Github. + +00:21:48.300 --> 00:21:49.839 +Here are some links + +00:21:49.840 --> 00:21:51.679 +to these repos and files. + +00:21:51.680 --> 00:21:54.679 +And here are the same links + +00:21:54.680 --> 00:21:57.119 +as a native Reveal slide. + +00:21:57.120 --> 00:21:59.879 +This figure gives us an overview + +00:21:59.880 --> 00:22:02.759 +of how one set of inputs + +00:22:02.760 --> 00:22:04.959 +encapsulted in a single file + +00:22:04.960 --> 00:22:08.759 +can produce all of the outputs that we saw. + +00:22:08.760 --> 00:22:11.439 +The main TeX file shown at the bottom + +00:22:11.440 --> 00:22:15.659 +is processed by both XeLaTeX and by HeVeA. + +00:22:15.660 --> 00:22:18.279 +That main TeX file, in addition + +00:22:18.280 --> 00:22:19.679 +to LaTeX syntax, + +00:22:19.680 --> 00:22:22.999 +also include org-mode constructs + +00:22:23.000 --> 00:22:27.039 +that facilitate addition of audio and video files. + +00:22:27.040 --> 00:22:34.879 +Later, I'll walkthrough the bodyPresArtEnFa.tex file + +00:22:34.880 --> 00:22:39.179 +that generated this very presentation with you. + +NOTE Abstractions to keep in mind + +00:22:39.180 --> 00:22:42.679 +When you construct that primary TeX file, + +00:22:42.680 --> 00:22:44.679 +there are several abstractions + +00:22:44.680 --> 00:22:46.899 +that you need to keep in mind. + +00:22:46.900 --> 00:22:49.119 +Is my presentation going to go + +00:22:49.120 --> 00:22:52.739 +from Left-To-Right or from Right-To-Left? + +00:22:52.740 --> 00:22:57.039 +Perso-Arabic presentations go from Right-To-Left. + +00:22:57.040 --> 00:22:59.679 +Another consideration is the types + +00:22:59.680 --> 00:23:03.119 +of forms of results that you want. + +00:23:03.120 --> 00:23:05.019 +Just the presentation + +00:23:05.020 --> 00:23:08.999 +or Article-Presentation as well? + +00:23:09.000 --> 00:23:10.879 +With those choices in place + +00:23:10.880 --> 00:23:13.399 +you can produce condition based text + +00:23:13.400 --> 00:23:16.199 +for each of your desired outputs. + +NOTE Frame control types + +00:23:16.200 --> 00:23:18.919 +Think of this video presentation + +00:23:18.920 --> 00:23:20.879 +as a sequence of frames. + +00:23:20.880 --> 00:23:26.119 +Each frame is controlled by an org-mode dynamic block. + +00:23:26.120 --> 00:23:29.039 +This table lists available dblocks + +00:23:29.040 --> 00:23:31.559 +from which you can choose. + +00:23:31.560 --> 00:23:34.039 +For example, this particular frame + +00:23:34.040 --> 00:23:34.839 +that we are watching + +00:23:34.840 --> 00:23:41.979 +is controlled by b:lcnt:pres:frame/derivedImage. + +00:23:41.980 --> 00:23:44.639 +Beamer creates a pdf file + +00:23:44.640 --> 00:23:47.879 +that includes the image of this slide. + +00:23:47.880 --> 00:23:51.459 +That image is then injected into Reveal. + +00:23:51.460 --> 00:23:55.359 +And in the end, a video of that image is produced + +00:23:55.360 --> 00:23:57.239 +with the narrations + +00:23:57.240 --> 00:23:59.259 +that I am uttering right now. + +00:23:59.260 --> 00:24:02.199 +All of this has similarly been applied + +00:24:02.200 --> 00:24:03.599 +to each and every frame + +00:24:03.600 --> 00:24:05.919 +that you have been watching. + +00:24:05.920 --> 00:24:08.399 +Similar to Frame Controls, + +00:24:08.400 --> 00:24:10.719 +there are org-mode dynamic blocks + +00:24:10.720 --> 00:24:13.519 +for "Frame Body Types". + +00:24:13.520 --> 00:24:15.839 +You can easily insert an image + +00:24:15.840 --> 00:24:19.639 +which is typically created by OpenOffice Draw + +00:24:19.640 --> 00:24:21.619 +into a frame. + +00:24:21.620 --> 00:24:24.359 +Same with say a screen capture video. + +NOTE How outputs are generate from the inputs + +00:24:24.360 --> 00:24:29.319 +Now that we have looked at the "Outputs" and the "Inputs", + +00:24:29.320 --> 00:24:31.679 +let's look at how the Outputs + +00:24:31.680 --> 00:24:35.919 +are generated from the Inputs. + +00:24:35.920 --> 00:24:39.399 +Let's bootstrap Raw-BISOS and Raw-Blee. + +00:24:39.400 --> 00:24:41.719 +Starting from scratch, + +00:24:41.720 --> 00:24:45.799 +get yourself a fresh copy of Debian 12. + +00:24:45.800 --> 00:24:52.719 +Then go to https://github.com/bxGenesis/start . + +00:24:52.720 --> 00:24:55.079 +The README.org file + +00:24:55.080 --> 00:24:57.119 +of that github repo + +00:24:57.120 --> 00:24:58.639 +is same as Chapter 18, + +00:24:58.640 --> 00:25:01.959 +"Engineering Adoption of BISOS and ByStar" of the book. + +00:25:01.960 --> 00:25:05.359 +We will next run "raw-bisos.sh", + +00:25:05.360 --> 00:25:09.959 +but prior to that, let's take a quick look. + +00:25:09.960 --> 00:25:14.759 +This bootstrap scripts will do a lot as root + +00:25:14.760 --> 00:25:16.479 +on your Fresh-Debian. + +00:25:16.480 --> 00:25:18.599 +It is best to first try it + +00:25:18.600 --> 00:25:21.179 +on a disposable VM. + +00:25:21.180 --> 00:25:27.159 +raw-bisos.sh adds the current debian user to sudoers. + +00:25:27.160 --> 00:25:30.399 +Then it installs pipx. + +00:25:30.400 --> 00:25:34.199 +And then with pipx it installs + +00:25:34.200 --> 00:25:37.999 +from PyPI bisos.provision. + +00:25:38.000 --> 00:25:43.279 +bisos.provision includes additional bash scripts + +00:25:43.280 --> 00:25:45.359 +that are then executed. + +00:25:45.360 --> 00:25:48.159 +Full installation involves + +00:25:48.160 --> 00:25:51.039 +setting up various accounts, groups, + +00:25:51.040 --> 00:25:53.279 +various directory hierarchies, + +00:25:53.280 --> 00:25:55.439 +lots of apt packages + +00:25:55.440 --> 00:25:57.979 +and lots of python packages + +00:25:57.980 --> 00:26:01.499 +from the bisos namespace. + +00:26:01.500 --> 00:26:03.879 +If you are ready, copy and paste + +00:26:03.880 --> 00:26:06.599 +this line and run it. + +00:26:06.600 --> 00:26:08.039 +You will be prompted + +00:26:08.040 --> 00:26:09.619 +for the root password. + +00:26:09.620 --> 00:26:11.279 +Then be patient. + +00:26:11.280 --> 00:26:12.559 +Full installation + +00:26:12.560 --> 00:26:14.519 +can take 15 minutes or so. + +00:26:14.520 --> 00:26:17.079 +The logs of this script + +00:26:17.080 --> 00:26:18.519 +are also captured + +00:26:18.520 --> 00:26:25.199 +in ~/raw-bisos-${dateTag}-log.org + +NOTE Context for unified source walkthrough + +00:26:25.200 --> 00:26:28.959 +Now that we have Raw-BISOS and Raw-Blee installed, + +00:26:28.960 --> 00:26:31.039 +we are ready to walk through + +00:26:31.040 --> 00:26:32.319 +the unified source + +00:26:32.320 --> 00:26:34.439 +of the very presentation + +00:26:34.440 --> 00:26:36.259 +that you are watching. + +00:26:36.260 --> 00:26:40.959 +The "bodyPresArtEnFa.tex" file + +00:26:40.960 --> 00:26:42.439 +that we will visit + +00:26:42.440 --> 00:26:45.059 +is in COMEEGA-LaTeX syntax + +00:26:45.060 --> 00:26:47.699 +with lots of org-mode dblocks + +00:26:47.700 --> 00:26:50.479 +which generate Beamer-LaTeX frames + +00:26:50.480 --> 00:26:54.139 +and conditioned LaTeX bodies. + +00:26:54.140 --> 00:26:55.599 +After the walkthrough, + +00:26:55.600 --> 00:27:00.359 +I'll describe dblocks and COMEEGA in more detail. + +00:27:00.360 --> 00:27:02.239 +At the tail end of the walkthrough, + +00:27:02.240 --> 00:27:05.319 +we will also go through the generation process + +00:27:05.320 --> 00:27:10.859 +which runs XeLaTeX and HeVeA and a lot more. + +00:27:10.860 --> 00:27:13.619 +Let's look at our input file. + +00:27:13.620 --> 00:27:17.019 +It's a LaTeX file in LaTeX mode, + +00:27:17.020 --> 00:27:24.279 +and it has org syntax org-mode included in it, + +00:27:24.280 --> 00:27:29.559 +and I can toggle between LaTeX and org-mode. + +00:27:29.560 --> 00:27:33.599 +So, now I'm gonna be in org-mode, + +00:27:33.600 --> 00:27:37.839 +and org-mode gives me everything + +00:27:37.840 --> 00:27:39.399 +that org has to offer, + +00:27:39.400 --> 00:27:46.479 +including a very convenient navigation framework. + +NOTE One slide + +00:27:46.480 --> 00:27:54.279 +Let's take one slide and take a look at how it was done. + +00:27:54.280 --> 00:27:58.679 +So I would come to this scope slide + +00:27:58.680 --> 00:28:03.999 +and while I am there, I'm going to click on N. + +00:28:04.000 --> 00:28:09.759 +N takes me to the native LaTeX form back, + +00:28:09.760 --> 00:28:16.359 +so that I'll be looking at it not in org, but in LaTeX. + +00:28:16.360 --> 00:28:22.906 +So we're back in LaTeX, and as you can see + +00:28:22.907 --> 00:28:25.999 +it uses a dynamic block + +00:28:26.000 --> 00:28:30.799 +starting with the comments and the BEGIN, + +00:28:30.800 --> 00:28:34.839 +and it uses a dynamic block + +00:28:34.840 --> 00:28:38.079 +named a framedDrive image, + +00:28:38.080 --> 00:28:45.399 +which means the content of this frame + +00:28:45.400 --> 00:28:50.439 +will be dispensed as an image, not as text, + +00:28:50.440 --> 00:28:56.899 +and it also automatically creates for me + +00:28:56.900 --> 00:29:00.439 +a name, a label, that can be used + +00:29:00.440 --> 00:29:05.119 +for voiceover augmentation. + +00:29:05.120 --> 00:29:08.119 +So a file in the audio directory + +00:29:08.120 --> 00:29:13.039 +called ScopeOfBleeLcnt.mp3 + +00:29:13.040 --> 00:29:19.319 +is this audio that will come on top of this slide + +00:29:19.320 --> 00:29:24.079 +and then the rest is the LaTeX itself. + +NOTE Dynamic blocks + +00:29:24.080 --> 00:29:29.679 +The concept of "Org Dynamic Blocks" + +00:29:29.680 --> 00:29:31.519 +is very powerful. + +00:29:31.520 --> 00:29:33.599 +I think of them as universal + +00:29:33.600 --> 00:29:35.179 +visible macros. + +00:29:35.180 --> 00:29:41.359 +But, why should they be primarily used in just Org-Mode? + +00:29:41.360 --> 00:29:43.639 +I say, let's generalize them + +00:29:43.640 --> 00:29:46.059 +to "Emacs Dynamic Blocks". + +00:29:46.060 --> 00:29:49.959 +Have defaults for org-dblock-start-re + +00:29:49.960 --> 00:29:52.159 +in every relevant mode + +00:29:52.160 --> 00:29:55.099 +and use them everywhere. + +00:29:55.100 --> 00:29:56.319 +Blee does that. + +00:29:56.320 --> 00:30:01.719 +In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls + +00:30:01.720 --> 00:30:05.519 +and insert Image and Video contents. + +00:30:05.520 --> 00:30:07.519 +Much of Blee and BISOS + +00:30:07.520 --> 00:30:09.959 +are implemented in COMEEGA. + +00:30:09.960 --> 00:30:13.599 +Almost all of our Elisp, Python, Bash + +00:30:13.600 --> 00:30:17.199 +and LaTeX work uses COMEEGA. + +00:30:17.200 --> 00:30:19.299 +COMEEGA stands for Collaborative + +00:30:19.300 --> 00:30:21.679 +Org-Mode + +00:30:21.680 --> 00:30:24.759 +Enhanced Emacs Generalized Authorship. + +00:30:24.760 --> 00:30:27.879 +It is the inverse of org-babel. + +00:30:27.880 --> 00:30:29.999 +COMEEGA adds org-mode + +00:30:30.000 --> 00:30:33.099 +to your programming mode. + +00:30:33.100 --> 00:30:35.079 +Full and proper use of COMEEGA, + +00:30:35.080 --> 00:30:38.299 +requires Polymode. + +00:30:38.300 --> 00:30:41.359 +Let's call that Poly-COMEEGA. + +00:30:41.360 --> 00:30:43.319 +But Emacs's Polymode + +00:30:43.320 --> 00:30:45.679 +is work-in-progress, + +00:30:45.680 --> 00:30:49.199 +particularly now with the new tree-sitter. + +00:30:49.200 --> 00:30:53.199 +So, in the interim, my usage of COMEEGA + +00:30:53.200 --> 00:30:55.919 +has been in the form of Toggle-COMEEGA. + +00:30:55.920 --> 00:30:59.479 +Where I manually switch between + +00:30:59.480 --> 00:31:02.359 +the programming-mode and org-mode. + +00:31:02.360 --> 00:31:04.199 +For me this has proved to be + +00:31:04.200 --> 00:31:05.799 +a fine interim solution. + +NOTE Internationalization - a non-Americanist perspective + +00:31:05.800 --> 00:31:09.679 +Naturally, content processing + +00:31:09.680 --> 00:31:11.239 +should be multi-lingual + +00:31:11.240 --> 00:31:14.159 +and internationalized. + +00:31:14.160 --> 00:31:15.839 +Let's look at that dimension. + +00:31:15.840 --> 00:31:21.019 +I am Iranian and much of what I write is in Farsi. + +00:31:21.020 --> 00:31:23.519 +Getting Perso-Arabic text right + +00:31:23.520 --> 00:31:25.519 +is often a challenge, + +00:31:25.520 --> 00:31:30.059 +as it involves Bi-Directional text (BIDI) + +00:31:30.060 --> 00:31:32.999 +and shaping of characters. + +00:31:33.000 --> 00:31:36.039 +In the context of our content generation + +00:31:36.040 --> 00:31:39.819 +these need to span all relevant tools, + +00:31:39.820 --> 00:31:41.759 +not just emacs. + +00:31:41.760 --> 00:31:43.759 +For emacs, I have created + +00:31:43.760 --> 00:31:46.239 +my own input method + +00:31:46.240 --> 00:31:49.419 +called farsi-transliterate-banan. + +00:31:49.420 --> 00:31:54.139 +My EmacsConf 2021 talk was about that. + +00:31:54.140 --> 00:31:57.199 +Now let's look at some examples + +00:31:57.200 --> 00:32:01.699 +and spice it up a bit with semantics. + +00:32:01.700 --> 00:32:05.279 +As an example of proper BIDI text, + +00:32:05.280 --> 00:32:07.899 +here is the orignal Farsi text + +00:32:07.900 --> 00:32:10.359 +along with English translation + +00:32:10.360 --> 00:32:12.519 +of Imam Khomeini's text + +00:32:12.520 --> 00:32:15.479 +with respect to invalidity + +00:32:15.480 --> 00:32:20.399 +of Western Intellectual Proprty Rights regime. + +00:32:20.400 --> 00:32:23.039 +And as another example + +00:32:23.040 --> 00:32:24.479 +of proper BIDI text, + +00:32:24.480 --> 00:32:29.919 +here is Ayatollah Mothari's take on Western IPR + +00:32:29.920 --> 00:32:35.159 +not being private property. Note that these predate + +00:32:35.160 --> 00:32:36.919 +by more than half a century + +00:32:36.920 --> 00:32:43.239 +Jack Dorsey and Elon Musk's tweets of April 11, 2025 + +00:32:43.240 --> 00:32:47.199 +saying "Delete all IP law". + +00:32:47.200 --> 00:32:49.159 +This topic is too important + +00:32:49.160 --> 00:32:50.399 +and too sensitive + +00:32:50.400 --> 00:32:53.639 +to be left to American billionaires + +00:32:53.640 --> 00:32:55.639 +and their tweets. + +00:32:55.640 --> 00:32:58.199 +Let me again refer you to the logic + +00:32:58.200 --> 00:33:00.599 +of polyexistentials in my book. + +00:33:00.600 --> 00:33:06.359 +Chapter 14 of the book is dedicated to + +00:33:06.360 --> 00:33:08.579 +Ethics and ownership in Religions. + +00:33:08.580 --> 00:33:10.919 +With respect to my preference + +00:33:10.920 --> 00:33:12.719 +for Ethics over Freedom, + +00:33:12.720 --> 00:33:16.519 +let me refer you to Section 12.4 + +00:33:16.520 --> 00:33:19.079 +"A Cynical Perspective + +00:33:19.080 --> 00:33:22.859 +on Freedom Orientation of Americans" + +00:33:22.860 --> 00:33:25.999 +in which I describe where the FOSS labels + +00:33:26.000 --> 00:33:29.039 +and the likes of Stallman, Raymond, + +00:33:29.040 --> 00:33:31.599 +Moglen and Lessig have gone wrong. + +00:33:31.600 --> 00:33:34.239 +If you are one of their followers, + +00:33:34.240 --> 00:33:36.599 +perhaps Chapter 12 is for you. + +00:33:36.600 --> 00:33:42.279 +My emphasis thus far has been on content generation. + +NOTE Autonomous self-publication and federated re-publications + +00:33:42.280 --> 00:33:44.999 +Let's very briefly also look at + +00:33:45.000 --> 00:33:47.159 +Autonomous Self-Publication + +00:33:47.160 --> 00:33:52.279 +and Federated Re-Publications of our content. + +00:33:52.280 --> 00:33:55.759 +From the very beginning the Debian folks + +00:33:55.760 --> 00:33:59.039 +understood the importance of "Universality" + +00:33:59.040 --> 00:34:03.359 +and coined the "Universal Debian" label. + +00:34:03.360 --> 00:34:05.919 +This means that we can base + +00:34:05.920 --> 00:34:08.619 +our entire digital ecosystem + +00:34:08.620 --> 00:34:13.499 +on just the Libre-Halaal Debian distro. + +00:34:13.500 --> 00:34:17.299 +And that is what we have done with ByStar. + +00:34:17.300 --> 00:34:20.039 +In ByStar, everything is based on + +00:34:20.040 --> 00:34:24.119 +just the Universal Debian everywhere. + +00:34:24.120 --> 00:34:26.999 +This has made our Usage Environment + +00:34:27.000 --> 00:34:31.319 +totally harmonious with our Service Environment + +00:34:31.320 --> 00:34:38.059 +allowing for very powerful software-service continuums. + +00:34:38.060 --> 00:34:41.479 +Of course, all of this is immediately applicable + +00:34:41.480 --> 00:34:46.019 +to our ByStar Content Bundle as well. + +00:34:46.020 --> 00:34:50.519 +Some have asked, why don't you also include Ubuntu? + +00:34:50.520 --> 00:34:53.679 +I think the opposite makes more sense. + +00:34:53.680 --> 00:34:56.699 +Ubuntu should converge with Debian. + +00:34:56.700 --> 00:34:59.639 +I tried to explain this to Mark Shuttleworth + +00:34:59.640 --> 00:35:02.479 +in an email a while back. + +00:35:02.480 --> 00:35:04.119 +I have included that email + +00:35:04.120 --> 00:35:07.719 +in Section 12.1.5. + +NOTE Ingredients of BISOS platforms and their progression + +00:35:07.720 --> 00:35:10.439 +In this presentation, we have stopped + +00:35:10.440 --> 00:35:13.159 +at the "Raw-BISOS" stage. + +00:35:13.160 --> 00:35:15.759 +We can further evolve Raw-BISOS + +00:35:15.760 --> 00:35:17.959 +and make it be "Sited" + +00:35:17.960 --> 00:35:22.239 +and provide autonomous publication services. + +00:35:22.240 --> 00:35:25.679 +But here by going through EmacsConf and youtube + +00:35:25.680 --> 00:35:30.959 +we are using the "Federated Re-Publications" model. + +00:35:30.960 --> 00:35:32.479 +Something this large, + +00:35:32.480 --> 00:35:35.479 +should be well documented. + +00:35:35.480 --> 00:35:37.079 +In Emacs, the way that + +00:35:37.080 --> 00:35:39.319 +we have been dealing with documentation + +00:35:39.320 --> 00:35:43.439 +and information retrieval is archaic. + +00:35:43.440 --> 00:35:46.079 +Man-pages, TeXInfo, Helpful-Mode + +00:35:46.080 --> 00:35:51.599 +and convention based Doc-Strings are old and limited. + +00:35:51.600 --> 00:35:55.279 +In BISOS and Blee, we use Blee-Panels + +00:35:55.280 --> 00:35:57.739 +for all kinds of documentation. + +00:35:57.740 --> 00:36:02.559 +Let me show you some examples. + +NOTE Moving forward + +00:36:02.560 --> 00:36:05.199 +So, what next? + +00:36:05.200 --> 00:36:10.599 +If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials + +00:36:10.600 --> 00:36:14.159 +and these Content Processing capabilities + +00:36:14.160 --> 00:36:16.639 +have piqued your interest, + +00:36:16.640 --> 00:36:19.379 +please feel welcome to contact me. + +00:36:19.380 --> 00:36:22.239 +These Emacs Conferences have proven + +00:36:22.240 --> 00:36:25.379 +to be very useful and productive. + +00:36:25.380 --> 00:36:27.199 +I look forward to your thoughts, + +00:36:27.200 --> 00:36:29.599 +feedback and questions. + +00:36:29.600 --> 00:36:35.359 +I want to thank all the EmacsConf 2025 Organizers + +00:36:35.360 --> 00:36:37.199 +for their great work, + +00:36:37.200 --> 00:36:41.640 +and Sacha in particular. diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt new file mode 100644 index 00000000..f3af8a6f --- /dev/null +++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt @@ -0,0 +1,41 @@ +WEBVTT + + +00:00:03.620 --> 00:02:36.639 +Introduction + +00:02:36.640 --> 00:04:54.279 +What is Calc? + +00:04:54.280 --> 00:06:37.398 +calc-algebraic-entry + +00:06:37.399 --> 00:08:07.759 +calc-roll-down + +00:08:07.760 --> 00:08:58.179 +Advanced functions + +00:08:58.180 --> 00:09:54.719 +Solving equations with calc-solve-for + +00:09:54.720 --> 00:12:00.079 +Systems of equations + +00:12:00.080 --> 00:12:39.959 +calc-find-root + +00:12:39.960 --> 00:14:17.539 +Derivatives and integrals + +00:14:17.540 --> 00:18:12.159 +Programmable functions + +00:18:12.160 --> 00:20:08.799 +Plotting + +00:20:08.800 --> 00:22:38.599 +Wish list + +00:22:38.600 --> 00:23:35.920 +Wrapping up diff --git a/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt new file mode 100644 index 00000000..f0bf2d2a --- /dev/null +++ b/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt @@ -0,0 +1,888 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:03.620 --> 00:00:08.799 +Hello, my name is Christopher Howard and welcome to my talk. + +00:00:08.800 --> 00:00:11.319 +This is basically an introduction + +00:00:11.320 --> 00:00:15.119 +to the built-in Emacs calculator, + +00:00:15.120 --> 00:00:18.319 +properly known as Emacs Calc, + +00:00:18.320 --> 00:00:21.439 +particularly from the perspective of someone + +00:00:21.440 --> 00:00:27.559 +with a technical background such as engineering or electronics. + +00:00:27.560 --> 00:00:32.879 +I will say, though, my personal interest is not really + +00:00:32.880 --> 00:00:37.839 +in digital computing or digital calculators, + +00:00:37.840 --> 00:00:42.519 +but lately has been focused more on analog computing. + +00:00:42.520 --> 00:00:46.799 +I have, for example, been working to master + +00:00:46.800 --> 00:00:50.839 +the venerable slide rule, a mechanical computer + +00:00:50.840 --> 00:00:57.319 +that calculates multiplication powers and logarithms. + +00:00:57.320 --> 00:01:02.199 +Here's a picture of one. + +00:01:02.200 --> 00:01:06.799 +It's a physical tool that was used for hundreds of years + +00:01:06.800 --> 00:01:08.999 +for this sort of thing + +00:01:09.000 --> 00:01:16.679 +before the handheld calculator was made popular. + +00:01:16.680 --> 00:01:18.639 +And I also had a project that I did + +00:01:18.640 --> 00:01:21.119 +for a while to several months + +00:01:21.120 --> 00:01:33.119 +to build an electronic analog computer. + +00:01:33.120 --> 00:01:38.679 +A rudimentary attempt of mine, but it's functional, + +00:01:38.680 --> 00:01:43.399 +and it's basically a 1960s or 1970s style + +00:01:43.400 --> 00:01:48.839 +electronic analog computer built very much on a budget, + +00:01:48.840 --> 00:01:52.559 +but the box in the middle is the computer proper + +00:01:52.560 --> 00:01:55.719 +which has most of the components inside of it + +00:01:55.720 --> 00:02:00.199 +as well as the potentiometers for setting values, + +00:02:00.200 --> 00:02:02.039 +and an operation switch. + +00:02:02.040 --> 00:02:04.399 +There's a patch panel on the left + +00:02:04.400 --> 00:02:07.119 +for connecting the different integrators, + +00:02:07.120 --> 00:02:11.319 +amplifiers, multipliers, and so forth together. + +00:02:11.320 --> 00:02:16.919 +Then the output of the simulation is displayed + +00:02:16.920 --> 00:02:19.799 +on the oscilloscope on the right side, + +00:02:19.800 --> 00:02:25.479 +which is a digital oscilloscope. + +00:02:25.480 --> 00:02:28.439 +To be honest, I think that a talk about analog computing + +00:02:28.440 --> 00:02:30.199 +would be much more interesting + +00:02:30.200 --> 00:02:32.039 +than the talk that I'm about to give, + +00:02:32.040 --> 00:02:36.639 +but unfortunately that would be out of scope for EmacsConf. + +NOTE What is Calc? + +00:02:36.640 --> 00:02:39.919 +So instead I will talk about Emacs Calc, + +00:02:39.920 --> 00:02:43.359 +the digital calculator built into Emacs. + +00:02:43.360 --> 00:02:47.519 +Emacs Calc, while not being a replacement for software + +00:02:47.520 --> 00:02:51.479 +like GNU Octave, does have advanced calculator functionality + +00:02:51.480 --> 00:02:55.039 +that can be useful in engineering, electronics, + +00:02:55.040 --> 00:03:00.759 +or other technical applications. So I don't want to oversell it, + +00:03:00.760 --> 00:03:06.479 +but I think functionality-wise, Calc is somewhere in between + +00:03:06.480 --> 00:03:12.239 +what you'd expect of a decent scientific calculator + +00:03:12.240 --> 00:03:23.939 +and an advanced graphics calculator. + +00:03:23.940 --> 00:03:28.839 +So this talk I'll mention is not intended to be a tutorial + +00:03:28.840 --> 00:03:33.839 +but only a brief introduction to Calc. + +00:03:33.840 --> 00:03:37.439 +Please refer to the built-in Calc info manual + +00:03:37.440 --> 00:03:46.739 +for detailed instructions on how to complete operations. + +00:03:46.740 --> 00:04:01.479 +Turn off my volume here. + +00:04:01.480 --> 00:04:05.719 +The documentation for Emacs Calc is built-in, + +00:04:05.720 --> 00:04:10.439 +although on some distributions you may have to install + +00:04:10.440 --> 00:04:24.479 +the Emacs documentation separately for licensing reasons. + +00:04:24.480 --> 00:04:28.599 +Calc presents itself as a stack-based calculator + +00:04:28.600 --> 00:04:31.599 +where entries are dropped onto a stack + +00:04:31.600 --> 00:04:36.739 +and then an operation is performed on the stack entries. + +00:04:36.740 --> 00:04:42.899 +For example, I can drop 1.23 onto the stack, + +00:04:42.900 --> 00:04:54.279 +and then 8.56, and then multiply them together. + +NOTE calc-algebraic-entry + +00:04:54.280 --> 00:05:01.559 +It may present itself as a stack-based calculator, + +00:05:01.560 --> 00:05:05.399 +but indeed, Calc is also capable of accepting input + +00:05:05.400 --> 00:05:07.739 +in the more well-known algebraic format + +00:05:07.740 --> 00:05:10.759 +by using the calc-algebraic-entry command, + +00:05:10.760 --> 00:05:14.999 +which by default is bound to the apostrophe (') key. + +00:05:15.000 --> 00:05:19.759 +So you type the apostrophe key, enter the algebraic input, + +00:05:19.760 --> 00:05:22.759 +including parentheses as needed. + +00:05:22.760 --> 00:05:28.199 +For example, here's a calculation of the resonance frequency + +00:05:28.200 --> 00:05:35.039 +of a coil which has an inductance of 250 microhenries + +00:05:35.040 --> 00:05:41.059 +and 160 picofarads, taken from one of my electronics handbooks. + +00:05:41.060 --> 00:05:50.019 +The formula for that is 1 over 2 pi + +00:05:50.020 --> 00:05:57.439 +and then the square root of our inductance + +00:05:57.440 --> 00:06:06.279 +which is in this case 250 microfarads - excuse me, microhenries + +00:06:06.280 --> 00:06:19.399 +and then the capacitance is 160 picofarads. + +00:06:19.400 --> 00:06:24.399 +Small typo here. + +00:06:24.400 --> 00:06:26.639 +Now I need to evaluate that one more time, + +00:06:26.640 --> 00:06:30.919 +because pi is a symbol. + +00:06:30.920 --> 00:06:37.398 +I get about 800 kHz resonant frequency. + +NOTE calc-roll-down + +00:06:37.399 --> 00:06:41.679 +The command calc-roll-down, + +00:06:41.680 --> 00:06:44.199 +which by default is bound to the TAB key, + +00:06:44.200 --> 00:06:47.919 +will swap the top two stack entries, + +00:06:47.920 --> 00:06:51.559 +which is sometimes useful if you need to manipulate something + +00:06:51.560 --> 00:06:56.999 +that's further down the stack. + +00:06:57.000 --> 00:07:02.039 +So I can swap this around and say multiply by two + +00:07:02.040 --> 00:07:05.479 +and then put it back where it was. + +00:07:05.480 --> 00:07:14.039 +This command is also capable of rolling the entire stack. + +00:07:14.040 --> 00:07:18.899 +Say I want to shift them all around. + +00:07:18.900 --> 00:07:21.399 +This can be done by passing extra arguments + +00:07:21.400 --> 00:07:23.559 +to the calc-roll-down function. + +00:07:23.560 --> 00:07:28.279 +That's a little bit inconvenient to do manually, + +00:07:28.280 --> 00:07:40.079 +so in my init file, I defined here a key definition + +00:07:40.080 --> 00:07:45.759 +that passes in those arguments correctly. + +00:07:45.760 --> 00:07:49.179 +I attached this to shift-tab, + +00:07:49.180 --> 00:07:52.319 +so this way, I can roll the entire stack. + +00:07:52.320 --> 00:07:56.159 +Then I could change one entry here + +00:07:56.160 --> 00:08:03.459 +and then put it back where it was. + +00:08:03.460 --> 00:08:07.759 +So Calc does algebraic input. + +NOTE Advanced functions + +00:08:07.760 --> 00:08:10.159 +It also does advanced functions + +00:08:10.160 --> 00:08:15.599 +that you would expect any handheld scientific calculator, + +00:08:15.600 --> 00:08:19.159 +including trigonometric functions. + +00:08:19.160 --> 00:08:25.319 +For example, we can get the sine of a number. + +00:08:25.320 --> 00:08:30.719 +Now I'll mention here that Calc has multiple modes. + +00:08:30.720 --> 00:08:32.319 +Right now it's in degree mode. + +00:08:32.320 --> 00:08:38.159 +You can switch over to radian mode if you want. + +00:08:38.160 --> 00:08:42.799 +I'm going to put it back in degrees. + +00:08:42.800 --> 00:08:49.799 +Drop 12 degrees on the stack, and then get the sine of that. + +00:08:49.800 --> 00:08:58.179 +And then with the inverse sine function, I can put it back. + +NOTE Solving equations with calc-solve-for + +00:08:58.180 --> 00:09:07.519 +Calc also has the nifty ability to solve equations for you + +00:09:07.520 --> 00:09:13.919 +so long as the equation is not too complicated. + +00:09:13.920 --> 00:09:19.959 +This is using the calc-solve-for function. + +00:09:19.960 --> 00:09:31.699 +For example, we could enter in an equation algebraically, + +00:09:31.700 --> 00:09:36.679 +then run calc-solve-for, and we just have to tell it + +00:09:36.680 --> 00:09:40.999 +what variable we want to solve for. And there we go. + +00:09:41.000 --> 00:09:43.199 +We can do this manually as well + +00:09:43.200 --> 00:09:54.719 +just so you can see that we get the same result. + +NOTE Systems of equations + +00:09:54.720 --> 00:09:57.959 +Calc is also able to solve systems of equations. + +00:09:57.960 --> 00:10:03.439 +We can put more than one equation on the stack, + +00:10:03.440 --> 00:10:08.959 +and then solve for several variables. + +00:10:08.960 --> 00:10:13.319 +To give a technical example for this, + +00:10:13.320 --> 00:10:30.659 +I'll show you a resistor network scribble that I did recently. + +00:10:30.660 --> 00:10:32.819 +Hopefully you can see that. Basically, + +00:10:32.820 --> 00:10:38.719 +it's fairly simple, a pretty simple resistor network + +00:10:38.720 --> 00:10:42.159 +with 1 kilo ohm and 10 kilo ohm resistors, + +00:10:42.160 --> 00:10:48.959 +and using the loop methods, we are calculating the currents, + +00:10:48.960 --> 00:10:52.759 +the current in each loop, and then that current can be used + +00:10:52.760 --> 00:10:58.839 +to solve for the voltage of each individual resistor + +00:10:58.840 --> 00:11:06.199 +if we want to. So at the bottom there we have the equations + +00:11:06.200 --> 00:11:11.519 +that we come up with as we work through each loop. + +00:11:11.520 --> 00:11:19.579 +And I'm going to paste that into Calc. + +00:11:19.580 --> 00:11:22.719 +To save some time, I'm going to copy and paste that + +00:11:22.720 --> 00:11:34.259 +from my notes instead of typing it out. + +00:11:34.260 --> 00:11:38.259 +So we have two equations there on the stack + +00:11:38.260 --> 00:11:44.719 +in one stack entry. We run that calc-solve-for function again, + +00:11:44.720 --> 00:11:49.899 +and we tell it which variables we want to solve for. + +00:11:49.900 --> 00:11:51.959 +And voila! Those are our currents, + +00:11:51.960 --> 00:11:55.719 +which we can then use to get the voltages + +00:11:55.720 --> 00:12:00.079 +for the individual resistors. + +NOTE calc-find-root + +00:12:00.080 --> 00:12:01.999 +I'll just briefly mention + +00:12:02.000 --> 00:12:05.839 +that if Calc is not able to solve an equation + +00:12:05.840 --> 00:12:07.779 +with calc-solve-for, + +00:12:07.780 --> 00:12:10.279 +then you might be helped by another calc function + +00:12:10.280 --> 00:12:11.559 +called calc-find-root. + +00:12:11.560 --> 00:12:14.439 +This function basically does a manual search + +00:12:14.440 --> 00:12:30.199 +for a numerical solution to the equation. + +00:12:30.200 --> 00:12:39.959 +And there's the documentation page on that. + +NOTE Derivatives and integrals + +00:12:39.960 --> 00:12:44.039 +Calc can also solve or find derivatives of functions, + +00:12:44.040 --> 00:12:47.579 +at least the more straightforward functions. + +00:12:47.580 --> 00:12:49.839 +For a simple example, + +00:12:49.840 --> 00:13:00.559 +we can get the derivative of that + +00:13:00.560 --> 00:13:11.979 +with the derivative function. + +00:13:11.980 --> 00:13:17.159 +On the other hand, Calc is also capable of figuring out + +00:13:17.160 --> 00:13:22.099 +indefinite integrals. + +00:13:22.100 --> 00:13:26.859 +Say we put that function back on the stack, + +00:13:26.860 --> 00:13:32.559 +and this time, we call the integral function. + +00:13:32.560 --> 00:13:35.079 +There you go. Of course, you have to add + +00:13:35.080 --> 00:13:39.819 +your own constant of integration. + +00:13:39.820 --> 00:13:43.399 +For integrals that Calc cannot figure out symbolically, + +00:13:43.400 --> 00:13:46.079 +a numerical integration method is available + +00:13:46.080 --> 00:13:59.998 +through the calc-num-integral command, which is documented... + +00:13:59.999 --> 00:14:17.539 +The function documentation is available here, more or less. + +NOTE Programmable functions + +00:14:17.540 --> 00:14:20.399 +I definitely need to mention + +00:14:20.400 --> 00:14:24.759 +that Calc is capable of doing programmable functions. + +00:14:24.760 --> 00:14:29.619 +That is to say, you can program your own functions into Calc. + +00:14:29.620 --> 00:14:32.239 +There are three separate ways to do this. + +00:14:32.240 --> 00:14:36.279 +One is through a macro method + +00:14:36.280 --> 00:14:41.539 +similar to Emacs's usual keyboard macros. + +00:14:41.540 --> 00:14:46.519 +The second method is to transform an algebraic function + +00:14:46.520 --> 00:14:50.859 +into a stored function definition. + +00:14:50.860 --> 00:14:54.059 +And the third is to use Elisp directly. + +00:14:54.060 --> 00:14:56.599 +Personally, I find that the second method + +00:14:56.600 --> 00:15:01.799 +is the most practical, the most convenient and practical + +00:15:01.800 --> 00:15:08.059 +in my opinion. So I'll give a quick example of that. + +00:15:08.060 --> 00:15:14.159 +So I could... Let's say I wanted to have a function + +00:15:14.160 --> 00:15:20.699 +for calculating capacitive reactance. + +00:15:20.700 --> 00:15:28.899 +I'll define that in algebraic mode first. + +00:15:28.900 --> 00:15:33.639 +The function for that is 1 over 2 pi + +00:15:33.640 --> 00:15:41.599 +the frequency and the capacitance. + +00:15:41.600 --> 00:15:44.959 +Drop that on the stack. You see, it does automatically + +00:15:44.960 --> 00:15:52.079 +get simplified a little bit, but it's the same function. + +00:15:52.080 --> 00:15:58.839 +And then I press letters Z and F. Do that again. + +00:15:58.840 --> 00:16:06.239 +Z and F to start transforming that into a stored function. + +00:16:06.240 --> 00:16:11.039 +It asks me to select a user key, a single key press. + +00:16:11.040 --> 00:16:15.479 +I'll use the letter c. + +00:16:15.480 --> 00:16:19.079 +Then it's going to ask for a longer command name. + +00:16:19.080 --> 00:16:24.639 +I've actually defined this once before, so it prefilled in + +00:16:24.640 --> 00:16:38.339 +that command name. + +00:16:38.340 --> 00:16:42.999 +Then I need to enter which variables in the formula + +00:16:43.000 --> 00:16:46.559 +are actual arguments, rather than just symbols + +00:16:46.560 --> 00:16:52.559 +to be evaluated later. I prefer to put this in with frequency + +00:16:52.560 --> 00:16:54.279 +and the capacitance after that, + +00:16:54.280 --> 00:16:57.799 +but actually in this particular case, + +00:16:57.800 --> 00:17:07.339 +it doesn't matter at all to the mathematics. + +00:17:07.340 --> 00:17:11.399 +So, now all I have to do, that this is defined, + +00:17:11.400 --> 00:17:15.199 +is I can drop the frequency on the stack, + +00:17:15.200 --> 00:17:24.399 +which we'll say, for this example, will be 4.5 MHz, + +00:17:24.400 --> 00:17:32.279 +and then drop on the capacitance, which in this example + +00:17:32.280 --> 00:17:40.319 +will be 22 pF. + +00:17:40.320 --> 00:17:42.439 +Then I'll call the function that I just defined. + +00:17:42.440 --> 00:17:45.239 +I don't really like having to try to remember + +00:17:45.240 --> 00:17:48.679 +the short letters that I've come up with, + +00:17:48.680 --> 00:17:57.839 +so I'll just use the longer name. + +00:17:57.840 --> 00:17:59.799 +I need to evaluate one more time + +00:17:59.800 --> 00:18:05.619 +because the symbol pi is in there and not yet evaluated. + +00:18:05.620 --> 00:18:07.539 +And so if I've done that right, + +00:18:07.540 --> 00:18:12.159 +we have a capacitive reactance of about 1600 ohms. + +NOTE Plotting + +00:18:12.160 --> 00:18:16.839 +As the last feature that I'll mention here, + +00:18:16.840 --> 00:18:24.059 +Emacs Calc does have an interface with gnuplot, + +00:18:24.060 --> 00:18:30.799 +if you want to have Calc work as your graphing calculator. + +00:18:30.800 --> 00:18:33.159 +I do need to be honest and mention + +00:18:33.160 --> 00:18:35.579 +that I don't generally use it myself + +00:18:35.580 --> 00:18:39.719 +because there's another program in GNOME + +00:18:39.720 --> 00:18:43.499 +that I've found to be generally more convenient + +00:18:43.500 --> 00:18:47.399 +for the things that I want to graph quickly. + +00:18:47.400 --> 00:18:53.399 +But I think I can give you a simple example. + +00:18:53.400 --> 00:19:00.339 +So first, we need to drop a range on the stack. + +00:19:00.340 --> 00:19:06.619 +Let's say 0 to 10. + +00:19:06.620 --> 00:19:11.639 +And then we need to drop the function on the stack. + +00:19:11.640 --> 00:19:17.839 +And then I believe it's the letters g and f that graph this. + +00:19:17.840 --> 00:19:22.319 +Let's see. Yep, there we go. + +00:19:22.320 --> 00:19:25.059 +So there's our function and it looks nice. + +00:19:25.060 --> 00:19:26.659 +That was pretty easy. + +00:19:26.660 --> 00:19:29.019 +That's the fast way to do it. + +00:19:29.020 --> 00:19:32.839 +I will, as a disclaimer, mention that + +00:19:32.840 --> 00:19:34.159 +using this quick approach, + +00:19:34.160 --> 00:19:38.759 +that sometimes more complicated graphs + +00:19:38.760 --> 00:19:39.999 +will not turn out nicely, + +00:19:40.000 --> 00:19:44.339 +because by default, the resolution will be pretty low. + +00:19:44.340 --> 00:19:48.119 +That is to say it's... gnuplot is going to be + +00:19:48.120 --> 00:19:49.899 +skipping a lot of points + +00:19:49.900 --> 00:19:52.039 +and so you'll have to learn a bit more + +00:19:52.040 --> 00:19:55.319 +about how to use the interface, + +00:19:55.320 --> 00:19:59.519 +what parameters to pass if you want all your graphs + +00:19:59.520 --> 00:20:03.699 +to come out looking nice. + +00:20:03.700 --> 00:20:08.799 +So that covers all the features that I wanted to cover. + +NOTE Wish list + +00:20:08.800 --> 00:20:13.279 +I wanted to briefly mention a wish list of items + +00:20:13.280 --> 00:20:16.679 +that I'd like to see in Calc. + +00:20:16.680 --> 00:20:23.639 +One of them would be improper integrals. + +00:20:23.640 --> 00:20:25.159 +So that's like our definite integrals + +00:20:25.160 --> 00:20:32.859 +except for where a limit of integration is infinity. + +00:20:32.860 --> 00:20:38.559 +That's something that can be useful in a few applications. + +00:20:38.560 --> 00:20:41.079 +Something else that would be neat to have would be + +00:20:41.080 --> 00:20:45.679 +annotations for row entries. So for example + +00:20:45.680 --> 00:20:48.819 +if I was putting together a sum of numbers + +00:20:48.820 --> 00:20:53.279 +for, say, my monthly budget, + +00:20:53.280 --> 00:20:57.479 +let's say I was paying $2,000 for my rent + +00:20:57.480 --> 00:21:03.831 +and let's say $800 a month for my groceries, + +00:21:03.832 --> 00:21:07.931 +(a lot of kids to feed there) + +00:21:07.932 --> 00:21:14.565 +and then say another $60 for dining out, and so on, + +00:21:14.566 --> 00:21:18.259 +it would be nice if there was some way + +00:21:18.260 --> 00:21:21.319 +to put a little annotation next to each number + +00:21:21.320 --> 00:21:23.399 +so that you could remember + +00:21:23.400 --> 00:21:27.039 +what the meaning of that number was more easily. + +00:21:27.040 --> 00:21:31.199 +I actually looked into programming this into Calc myself, + +00:21:31.200 --> 00:21:35.919 +but discovered that it would require reprogramming + +00:21:35.920 --> 00:21:41.839 +quite a bit of Calc to make that work well + +00:21:41.840 --> 00:21:43.479 +across all calc functionality, + +00:21:43.480 --> 00:21:46.939 +and so, eventually, I gave up. + +00:21:46.940 --> 00:21:51.139 +But I'd still really like to have that feature. + +00:21:51.140 --> 00:21:52.039 +The final thing, though + +00:21:52.040 --> 00:21:54.579 +I think this would not necessarily belong in Calc, + +00:21:54.580 --> 00:21:57.919 +I think it would be cool if Emacs had some way + +00:21:57.920 --> 00:22:00.599 +to run numerical solutions + +00:22:00.600 --> 00:22:02.599 +for systems of differential equations, + +00:22:02.600 --> 00:22:06.019 +also known as a differential analyzer. + +00:22:06.020 --> 00:22:09.279 +So this would allow you to be able to set up simulation models + +00:22:09.280 --> 00:22:11.679 +involving systems of differential equations, + +00:22:11.680 --> 00:22:14.879 +for example, a spring mass system, or pressure temperature, + +00:22:14.880 --> 00:22:18.039 +or what have you, and then run the simulation + +00:22:18.040 --> 00:22:22.119 +using numerical approximation. + +00:22:22.120 --> 00:22:24.079 +Maybe it would be silly + +00:22:24.080 --> 00:22:25.999 +to actually put that in Calc itself, + +00:22:26.000 --> 00:22:30.339 +but a nice interface maybe to some other software, + +00:22:30.340 --> 00:22:33.299 +simple software that did that, + +00:22:33.300 --> 00:22:35.779 +an easy to use interface for that + +00:22:35.780 --> 00:22:38.599 +would be really great. + +NOTE Wrapping up + +00:22:38.600 --> 00:22:41.800 +So that's my entire talk. + +00:22:41.801 --> 00:22:44.534 +I'll just mention some information. + +00:22:44.535 --> 00:22:48.365 +If you want to learn more about me + +00:22:48.366 --> 00:22:50.119 +or things that I'm interested in, + +00:22:50.120 --> 00:22:57.779 +I do not any longer have a web presence. + +00:22:57.780 --> 00:22:59.659 +I don't have a website anymore, + +00:22:59.660 --> 00:23:03.359 +but I do have a Gemini capsule + +00:23:03.360 --> 00:23:07.139 +that I post to all the time. + +00:23:07.140 --> 00:23:13.879 +And if you can install, if you're willing to install the... + +00:23:13.880 --> 00:23:19.079 +Gemini browser known as Elpher + +00:23:19.080 --> 00:23:23.698 +into Emacs, which is available from ELPA, + +00:23:23.699 --> 00:23:27.359 +then you can browse directly to it + +00:23:27.360 --> 00:23:31.439 +and look around my Gemini capsule. + +00:23:31.440 --> 00:23:35.920 +Thank you very much. diff --git a/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt new file mode 100644 index 00000000..2ad2f285 --- /dev/null +++ b/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt @@ -0,0 +1,1260 @@ +WEBVTT captioned by jay_bird + +NOTE Introduction + +00:00:00.000 --> 00:00:07.119 +Hey, everyone. This talk is on this tradition, + +00:00:07.120 --> 00:00:10.639 +intelligent agents in Emacs + +00:00:10.640 --> 00:00:13.799 +using my Leonardo software individuals, + +00:00:13.800 --> 00:00:16.919 +which I've mistyped as I just wrote here, I see. + +00:00:16.920 --> 00:00:20.159 +Thank you to Sacha and everyone + +00:00:20.160 --> 00:00:25.239 +at EmacsConf and Emacs, I guess. + +00:00:25.240 --> 00:00:26.599 +Sorry that I was running late. + +00:00:26.600 --> 00:00:29.759 +I'm screwlisp.small-web.org. + +00:00:29.760 --> 00:00:33.999 +I run those one or two weekly shows for a long time, + +00:00:34.000 --> 00:00:35.599 +the Lispy Gopher Climate. + +00:00:35.600 --> 00:00:42.199 +I'm active on the Mastodon at @screwlisp@gamerplus.org. + +00:00:42.200 --> 00:00:46.719 +I'm screwtape on lambda.moo.mud.org. + +00:00:46.720 --> 00:00:50.474 +And I ported, over the last kind of year, + +00:00:50.475 --> 00:00:58.499 +years, to some extent, I ported Eric Sandewall's system + +00:00:58.500 --> 00:01:01.519 +for developing intelligent software agents, + +00:01:01.520 --> 00:01:04.879 +which he finished working on in 2014. + +00:01:04.880 --> 00:01:10.119 +I got it working again around 2025. + +00:01:10.120 --> 00:01:14.199 +First, we're going to take a long arc. + +00:01:14.200 --> 00:01:16.759 +We're going to motivate... This is the idea. + +00:01:16.760 --> 00:01:18.119 +You can see I'm using Org Mode, + +00:01:18.120 --> 00:01:19.959 +which I hope provides a good example + +00:01:19.960 --> 00:01:25.359 +for all the Org-Mode-oriented talks this conference. + +00:01:25.360 --> 00:01:26.399 +But you can also see + +00:01:26.400 --> 00:01:33.107 +that I'm using Eduardo Ochs's eev minor mode with Org. + +00:01:33.108 --> 00:01:35.640 +But we can see a little bit of the difference + +00:01:35.641 --> 00:01:39.207 +between these two, and that will kind of evolve into + +00:01:39.208 --> 00:01:45.259 +my style with the agent communication in Emacs. + +00:01:45.260 --> 00:01:52.999 +So you can see I used eev anchors as my Emacs headings. + +00:01:53.000 --> 00:01:56.839 +In eev, you just evaluate Elisp expressions + +00:01:56.840 --> 00:01:58.679 +as links to places. + +00:01:58.680 --> 00:02:01.679 +An anchor will link you somewhere else in the document. + +00:02:01.680 --> 00:02:04.807 +So my table of contents links to my talk, I guess. + +00:02:04.808 --> 00:02:07.507 +Anchors come in two halves, + +00:02:07.508 --> 00:02:12.940 +so that's why I built that unique table of contents + +00:02:12.941 --> 00:02:21.479 +experience there. What else am I going to say? + +NOTE Totally normal computing + +00:02:21.480 --> 00:02:24.174 +So first, let's just do some totally normal computing + +00:02:24.175 --> 00:02:27.140 +because intelligence is going to be difficult to describe. + +00:02:27.141 --> 00:02:31.100 +Let's just try and compute normally in Emacs in Org Mode + +00:02:31.101 --> 00:02:34.359 +and then segue more so into eev, + +00:02:34.360 --> 00:02:38.359 +and then maybe I would like if an agent was intelligent, + +00:02:38.360 --> 00:02:40.839 +I would think that an intelligent agent + +00:02:40.840 --> 00:02:43.319 +would do something like what I'm doing. + +00:02:43.320 --> 00:02:47.239 +It should be recognizably similar to what I do myself. + +00:02:47.240 --> 00:02:52.399 +I don't think the word intelligence is relevant + +00:02:52.400 --> 00:02:55.679 +if it's not related to something I'm not familiar with. + +NOTE Using Emacs as a human + +00:02:55.680 --> 00:03:00.999 +Using Emacs as a human, reading headings from my article, + +00:03:01.000 --> 00:03:03.919 +using Common Lisp. Right, my friend jeremy_list + +00:03:03.920 --> 00:03:06.879 +wrote actually a big project, + +00:03:06.880 --> 00:03:09.799 +but part of it was base64 encoding, + +00:03:09.800 --> 00:03:17.439 +and I just yoinked his C code for base64 encoding, I think. + +00:03:17.440 --> 00:03:20.759 +This is just clearly some C-based 64 encoding. + +00:03:20.760 --> 00:03:24.279 +If you go to my blog, his project is actually a C++ project + +00:03:24.280 --> 00:03:29.579 +and you can see me doing this with C++ rather than C. + +00:03:29.580 --> 00:03:33.319 +But basically, you can go to my blog articles + +00:03:33.320 --> 00:03:40.299 +if you want more detail to read something instead. + +00:03:40.300 --> 00:03:42.433 +And then here's some embeddable Common Lisp, + +00:03:42.434 --> 00:03:48.439 +Jack Daniel's ECL ANSI Common Lisp compiler I guess. + +00:03:48.440 --> 00:03:49.639 +This is just what it looks like. + +00:03:49.640 --> 00:03:52.239 +You can see I'm using Org Mode trickily, + +00:03:52.240 --> 00:03:56.119 +using noweb to put the lines of the C source block + +00:03:56.120 --> 00:04:00.279 +in this one. We're tangling it to this file + +00:04:00.280 --> 00:04:01.919 +rather than evaluating it. + +00:04:01.920 --> 00:04:05.279 +So, you know, literate programming, tangle and weave. + +00:04:05.280 --> 00:04:06.999 +We're just using Org Mode + +00:04:07.000 --> 00:04:09.197 +like the other Org Mode people + +00:04:09.198 --> 00:04:12.079 +are all showing us this conference, I guess. + +00:04:12.080 --> 00:04:13.399 +Then we have to compile it. + +00:04:13.400 --> 00:04:16.039 +It's always hard to remember these invocations for me. + +00:04:16.040 --> 00:04:20.159 +Results file. The file is my .fas file, + +00:04:20.160 --> 00:04:24.559 +because the way ECL's C and C++ integration works + +00:04:24.560 --> 00:04:30.519 +is that it just has to be seen by compile-file in Lisp. + +00:04:30.520 --> 00:04:32.119 +I cached this earlier. + +00:04:32.120 --> 00:04:36.199 +Oh, I should actually start Lisp, actually, shouldn't I? + +00:04:36.200 --> 00:04:39.639 +How are we going to do this? + +00:04:39.640 --> 00:04:47.099 +(setq inferior-lisp-program "ecl"). We could M-x slime. + +00:04:47.100 --> 00:04:48.919 +Because... we better actually load this. + +00:04:48.920 --> 00:04:54.119 +I did a dry run before. + +00:04:54.120 --> 00:04:58.259 +I think we can just load this, because I already did it. + +00:04:58.260 --> 00:05:04.079 +But I cached it. Let's nuke the cache. + +00:05:04.080 --> 00:05:06.599 +Okay, I'm going to say that that probably worked. + +00:05:06.600 --> 00:05:09.319 +Now, as you saw, that base64 encoding + +00:05:09.320 --> 00:05:13.619 +was just, I guess, number to character code + +00:05:13.620 --> 00:05:19.140 +to other character code. So I wrote this higher-level Lisp one, + +00:05:19.141 --> 00:05:20.599 +but that's not really the point. + +00:05:20.600 --> 00:05:26.199 +Obviously, Emacs also has Base64 encoding. + +00:05:26.200 --> 00:05:27.979 +It's just a point that we might have + +00:05:27.980 --> 00:05:29.959 +C++ and C external programs + +00:05:29.960 --> 00:05:31.239 +that we'd like to be integrating + +00:05:31.240 --> 00:05:37.139 +into our Emacs agents capabilities. + +00:05:37.140 --> 00:05:46.474 +Here we can see a normal named Org Mode source block. + +00:05:46.475 --> 00:05:50.474 +that calls that function, then an Org Mode source block + +00:05:50.475 --> 00:05:56.299 +that calls Emacs's base64-decode-string as a way of + +00:05:56.300 --> 00:05:57.940 +validating it, I guess. + +00:05:57.941 --> 00:06:00.140 +We go to Org, so we can see... + +00:06:00.141 --> 00:06:04.407 +I have a named call to that function calling the Lisp function + +00:06:04.408 --> 00:06:07.040 +Org is just kind of like this. + +00:06:07.041 --> 00:06:11.559 +It's cached but I don't seem to have run it before. + +00:06:11.560 --> 00:06:13.574 +Then I do the Emacs decode. + +00:06:13.575 --> 00:06:15.974 +So if we just run this using C-c C-c, + +00:06:15.975 --> 00:06:17.240 +and we can kind of see + +00:06:17.241 --> 00:06:22.179 +what Org Mode is like a little bit here. + +00:06:22.180 --> 00:06:24.319 +All right, yes, so as we can see, + +00:06:24.320 --> 00:06:27.659 +oh hang on, let's run this as well actually. + +00:06:27.660 --> 00:06:32.193 +So the C embeddable Common Lisp + +00:06:32.194 --> 00:06:35.199 +base64 encoding gets us this. + +00:06:35.200 --> 00:06:38.079 +And then Emacs is decoding and gets us back, + +00:06:38.080 --> 00:06:40.319 +kind of validates it. I think I'm missing some things. + +00:06:40.320 --> 00:06:43.079 +I don't pad characters out to the correct byte lengths, + +00:06:43.080 --> 00:06:45.399 +that kind of thing, but it's fine. + +NOTE using this via eev as a human + +00:06:45.400 --> 00:06:48.719 +And then I kind of contrast that to, + +00:06:48.720 --> 00:06:53.179 +I really like what my friend mdhughes.tech, + +00:06:53.180 --> 00:06:57.319 +game dev of the ages, calls REPL-driven development, + +00:06:57.320 --> 00:07:06.139 +which he says is kind of the opposite of literate coding. + +00:07:06.140 --> 00:07:08.940 +I think eev, at least for me, + +00:07:08.941 --> 00:07:11.079 +is kind of like REPL-driven development. + +00:07:11.080 --> 00:07:16.159 +So in eev, if you just press F8, the thing happens. + +00:07:16.160 --> 00:07:17.479 +And if it's a red star line, + +00:07:17.480 --> 00:07:19.439 +the thing is an Emacs Lisp thing, + +00:07:19.440 --> 00:07:22.999 +and otherwise it goes to the eepitch target. + +00:07:23.000 --> 00:07:26.719 +So if I do this, great, now I'm pitching to that slime + +00:07:26.720 --> 00:07:32.759 +REPL ECL I made. And then I pressed F8. Press F8 again. + +00:07:32.760 --> 00:07:34.480 +The string got coerced to a list. + +00:07:34.481 --> 00:07:38.359 +F8. Now it's car codified. + +00:07:38.360 --> 00:07:41.319 +I quite like this, because this looks like something I can do + +00:07:41.320 --> 00:07:44.239 +and understand doing and reason about doing. + +00:07:44.240 --> 00:07:49.519 +Then I form a command to send from Lisp to Emacs. + +00:07:49.520 --> 00:07:52.599 +Then I do it and I recover the string from the beginning. + +00:07:52.600 --> 00:07:56.119 +I guess I had one of these here. Oh, by the way, look at + +00:07:56.120 --> 00:07:59.159 +What Org Mode did with an eev source block. + +00:07:59.160 --> 00:08:00.999 +And then when I close the source block + +00:08:01.000 --> 00:08:02.679 +using C-c ', + +00:08:02.680 --> 00:08:05.319 +it brings me back to the Org doc, + +00:08:05.320 --> 00:08:09.159 +which was a cool synergy between the eev minor mode + +00:08:09.160 --> 00:08:16.019 +and eev source blocks in Org Mode that I noticed. + +00:08:16.020 --> 00:08:22.599 +And so I kind of want my agents to be like this eev usage. + +00:08:22.600 --> 00:08:25.159 +Clearly, Org is super powerful, + +00:08:25.160 --> 00:08:28.159 +but I don't even like writing calls like this, + +00:08:28.160 --> 00:08:32.079 +where you write the function that will happen last first, + +00:08:32.080 --> 00:08:39.039 +so you're kind of writing right to left, first to last. + +00:08:39.040 --> 00:08:41.239 +Whereas in REPL-driven development, + +00:08:41.240 --> 00:08:43.199 +I guess I'm writing top to bottom, + +00:08:43.200 --> 00:08:46.979 +and eev, I guess, executable logs + +00:08:46.980 --> 00:08:48.599 +are logs that are like that. + +00:08:48.600 --> 00:08:52.378 +So I kind of like eev's view for reasoning + +00:08:52.379 --> 00:08:54.399 +more than Org's Tangle. + +00:08:54.400 --> 00:08:57.319 +Obviously, Tangle is trying to do tricky things, + +00:08:57.320 --> 00:09:01.359 +but maybe they have different specializations, + +00:09:01.360 --> 00:09:04.879 +and eev's one is more close + +00:09:04.880 --> 00:09:07.799 +to my own version of intelligence, maybe. + +NOTE Software individuals using eev in Emacs like a human + +00:09:07.800 --> 00:09:13.539 +Software individuals using eev in Emacs like a human. + +00:09:13.540 --> 00:09:17.279 +Yeah, you can always visit my blog post for more detail. + +00:09:17.280 --> 00:09:20.039 +Right, I made a CLOS object + +00:09:20.040 --> 00:09:22.519 +in Common Lisp to wrap doing this. + +00:09:22.520 --> 00:09:23.639 +It's not really the topic. + +00:09:23.640 --> 00:09:27.959 +It's in the appendix somewhere if you need it. + +00:09:27.960 --> 00:09:29.559 +So I've just executed that. + +00:09:29.560 --> 00:09:32.079 +You can look at the appendix in your own time. + +NOTE Sandewall's leonardo system + +00:09:32.080 --> 00:09:33.959 +Jumping over to actually starting + +00:09:33.960 --> 00:09:36.319 +our hypothetical intelligent agent. + +00:09:36.320 --> 00:09:38.239 +I guess we're doing eev here. + +00:09:38.240 --> 00:09:46.759 +So if we open this, press F8 a bunch of times. + +00:09:46.760 --> 00:09:49.199 +Oh, and if you were cloning it yourself, + +00:09:49.200 --> 00:09:56.719 +I guess that's what you would do. setq eepitch-buffer-name. + +00:09:56.720 --> 00:10:00.319 +Oh yeah, if you went to an eepitch shell and then came back. + +00:10:00.320 --> 00:10:01.679 +You would have had to do that, but I didn't. + +00:10:01.680 --> 00:10:04.239 +I didn't, so I didn't need to. + +00:10:04.240 --> 00:10:07.279 +Sandewall's style is to use relative paths + +00:10:07.280 --> 00:10:11.974 +to tell which agent is acting inside a software individual. + +00:10:11.975 --> 00:10:13.359 +Remembering a software individual + +00:10:13.360 --> 00:10:15.239 +is potentially a bunch of agents. + +00:10:15.240 --> 00:10:18.479 +And we load... So one individual, + +00:10:18.480 --> 00:10:21.919 +all the agents in each individual share a kernel. + +00:10:21.920 --> 00:10:25.599 +So only one agent in one software individual + +00:10:25.600 --> 00:10:28.279 +is active at any given time, but the agents are separate. + +00:10:28.280 --> 00:10:31.279 +They just all have to share the kernel resource, + +00:10:31.280 --> 00:10:38.319 +which is the Remus agent. Oh, I got rid of this. + +00:10:38.320 --> 00:10:43.279 +And start the CLE is the thing. + +00:10:43.280 --> 00:10:46.119 +Oh, I did need to have an EmacsConf knowledge base. + +00:10:46.120 --> 00:10:48.959 +Well, let's just keep eepitching for a little bit. + +00:10:48.960 --> 00:10:55.259 +So I think I made... I'm going to call it emacsconf-kb. + +00:10:55.260 --> 00:10:59.679 +Right, that looks likely. And I think that the agent... + +00:10:59.680 --> 00:11:03.479 +I can check this. I could have checked that. + +00:11:03.480 --> 00:11:12.699 +I could have done something like (get emacsconf-kb contents). + +00:11:12.700 --> 00:11:13.479 +Yeah, and you can see + +00:11:13.480 --> 00:11:15.879 +there's a location inside it which is agent1, + +00:11:15.880 --> 00:11:17.519 +which I assume is an entity file + +00:11:17.520 --> 00:11:20.599 +that I was working with before. + +00:11:20.600 --> 00:11:21.919 +And then what were we going to do? + +00:11:21.920 --> 00:11:28.279 +Oh yeah, back to the embeddable Common Lisp image. + +00:11:28.280 --> 00:11:36.099 +So if I just press our button back to there... + +NOTE Start a loop for one leonardo software individual + +00:11:36.100 --> 00:11:41.119 +And so my idea is that for an Emacs agent, + +00:11:41.120 --> 00:11:46.999 +basically, I'd like to have an Emacs Lisp list. + +00:11:47.000 --> 00:11:49.640 +And just when stuff gets into that list, + +00:11:49.641 --> 00:11:53.239 +the agent which is always running, but running slowly, + +00:11:53.240 --> 00:11:58.359 +will incrementally just do the stuff it finds in that list. + +00:11:58.360 --> 00:12:00.759 +Populating that list probably gets into stuff + +00:12:00.760 --> 00:12:03.199 +like your Beliefs, Desires, Intents framework + +00:12:03.200 --> 00:12:06.159 +and those kind of well-known and well-studied algorithms. + +00:12:06.160 --> 00:12:07.799 +That's not the point here. + +00:12:07.800 --> 00:12:14.259 +I just want to have a list in Emacs that my ECL... + +00:12:14.260 --> 00:12:16.079 +I'm just going to run a loop in ECL, + +00:12:16.080 --> 00:12:18.319 +and the ECL is going to keep sending + +00:12:18.320 --> 00:12:22.399 +anything it finds in that Emacs Lisp list + +00:12:22.400 --> 00:12:25.399 +to the software agent. The agent is also in Emacs, + +00:12:25.400 --> 00:12:28.759 +so it would be able to populate its own list itself + +00:12:28.760 --> 00:12:36.159 +if it had an idea of evaluating desires and chances to improve + +00:12:36.160 --> 00:12:37.559 +whatever it wants to improve + +00:12:37.560 --> 00:12:39.999 +and chances to avoid whatever it wants to avoid. + +00:12:40.000 --> 00:12:47.599 +We talked a little bit too much. Let's just start this. + +00:12:47.600 --> 00:12:51.539 +Sorry that I'm manually setting up my screen. + +00:12:51.540 --> 00:12:55.499 +Then let's put CLisp over here. + +00:12:55.500 --> 00:12:58.679 +Right, we could work with this, right? + +00:12:58.680 --> 00:13:00.099 +This loop isn't very important. + +00:13:00.100 --> 00:13:04.919 +It's just a Common Lisp loop. I copy my friend jmbr's style + +00:13:04.920 --> 00:13:08.199 +of using Lisp machine-style keyword arguments + +00:13:08.200 --> 00:13:12.119 +instead of symbols like cl-loop, + +00:13:12.120 --> 00:13:16.719 +the compatibility thing in Emacs Lisp does. + +00:13:16.720 --> 00:13:28.139 +I'd never initialized that. Well, let's do that. + +00:13:28.140 --> 00:13:30.679 +Okay, now we have the list. + +00:13:30.680 --> 00:13:35.019 +And just every 30, let's turn it down to every 20 seconds. + +00:13:35.020 --> 00:13:37.159 +Hypothetically, it's going to put + +00:13:37.160 --> 00:13:39.999 +whatever it finds in there, into there. + +00:13:40.000 --> 00:13:46.239 +And so, I think, yeah, and now... Great. + +00:13:46.240 --> 00:13:50.099 +So here I'm just going to fill it with stuff. + +00:13:50.100 --> 00:13:54.839 +And this is quite interesting, I think. + +00:13:54.840 --> 00:13:58.479 +It just shows I can put a whole bunch of stuff into that list. + +00:13:58.480 --> 00:14:01.199 +Ideally, the agent would populate it itself + +00:14:01.200 --> 00:14:03.359 +with a BDI algorithm or something. + +00:14:03.360 --> 00:14:04.919 +But if we just put some stuff in there, + +00:14:04.920 --> 00:14:07.799 +we'll see that it will all get sent + +00:14:07.800 --> 00:14:14.799 +basically using Eduardo's eepitch internal machinery, at least. + +00:14:14.800 --> 00:14:17.479 +And hence, it meets my requirement + +00:14:17.480 --> 00:14:20.779 +that it works exactly like I work. + +00:14:20.780 --> 00:14:25.859 +And then in eev, I just have to press M-e. + +00:14:25.860 --> 00:14:31.479 +Oh, it works via Emacs server, and I didn't start that, + +00:14:31.480 --> 00:14:39.719 +so if we server-start, hopefully... + +00:14:39.720 --> 00:14:42.799 +And then, ideally, things will just begin happening + +00:14:42.800 --> 00:14:53.119 +in this slime-repl C/Lisp agent. + +00:14:53.120 --> 00:15:05.419 +Oh, if this was still running. + +00:15:05.420 --> 00:15:07.199 +Okay, well we got at least one, + +00:15:07.200 --> 00:15:09.639 +but hypothetically lots of these will happen. + +00:15:09.640 --> 00:15:13.699 +So, show agent, I guess, + +00:15:13.700 --> 00:15:17.039 +happened over here. I put a whole bunch of "sleep-for"s in, + +00:15:17.040 --> 00:15:19.719 +because I thought that going slowly + +00:15:19.720 --> 00:15:21.319 +would make it seem more human. + +00:15:21.320 --> 00:15:24.639 +Like I saw in Eduardo's talk last year + +00:15:24.640 --> 00:15:29.099 +which is where I learned about eev. + +00:15:29.100 --> 00:15:32.319 +The system is a little fragile. + +00:15:32.320 --> 00:15:41.079 +Hypothetically, we have a whole bunch of agents. + +00:15:41.080 --> 00:15:43.039 +I guess every time it gets sent, + +00:15:43.040 --> 00:15:44.999 +it checks that we're in the right agent. + +00:15:45.000 --> 00:15:46.999 +And it's not actually just sending a string, + +00:15:47.000 --> 00:15:52.799 +it's sending a sequence of string actions over there. + +00:15:52.800 --> 00:15:57.479 +And so we see Emacs Lisp hypothetically put, + +00:15:57.480 --> 00:16:06.859 +I guess it put this "foo bar baz!" into an entity, message-1, + +00:16:06.860 --> 00:16:11.899 +which should be of type message, I guess, conceivably. + +00:16:11.900 --> 00:16:13.319 +I forget if I set that up earlier. + +00:16:13.320 --> 00:16:14.719 +It's in the appendix somewhere. + +00:16:14.720 --> 00:16:17.999 +And then it just called, it did a sequence of actions + +00:16:18.000 --> 00:16:21.319 +which was really just one action of showing that. + +00:16:21.320 --> 00:16:26.399 +And then I called b64-encode on message1, + +00:16:26.400 --> 00:16:30.599 +which I believe will have set message-1 encoded. + +00:16:30.600 --> 00:16:37.242 +Can I check that manually while it's happening? + +00:16:37.243 --> 00:16:51.499 +Disaster. Well that's what it should have been. + +00:16:51.500 --> 00:16:54.940 +Well, I did mention it was a little bit fragile. + +00:16:54.941 --> 00:17:03.279 +What if we put... Can we kind of rescue this? + +00:17:03.280 --> 00:17:07.239 +I don't want to try redoing this. It's slightly fragile. + +00:17:07.240 --> 00:17:12.639 +What it would do, we can see the actions are kind of getting there, + +00:17:12.640 --> 00:17:16.719 +but somehow my message didn't end up getting encoded + +00:17:16.720 --> 00:17:18.119 +by that sequence of actions. + +00:17:18.120 --> 00:17:23.279 +So this decode will have also made the decoded one be null. + +NOTE Let's do it manually + +00:17:23.280 --> 00:17:26.239 +Let's just do it manually. Should have worked. + +00:17:26.240 --> 00:17:30.559 +b64-encode, which calls out to Emacs + +00:17:30.560 --> 00:17:37.299 +to get everything actually done. + +00:17:37.300 --> 00:17:41.519 +Oh, I got interrupted by the agent. + +00:17:41.520 --> 00:17:43.320 +Well, if I do it manually, it worked. + +00:17:43.321 --> 00:17:53.519 +Hypothetically, the queue thing should have worked. Great. + +00:17:53.520 --> 00:17:56.840 +Well, you can see it's kind of working. + +00:17:56.841 --> 00:17:57.440 +Could be more robust. + +00:17:57.441 --> 00:18:03.640 +The reason is that I think what I did is a bit fragile, + +00:18:03.641 --> 00:18:07.107 +but the intent is that FIPA, + +00:18:07.108 --> 00:18:09.307 +Foundation for Intelligent Physical Agents's + +00:18:09.308 --> 00:18:15.639 +SL standard has tools for reliability + +00:18:15.640 --> 00:18:19.919 +through repetition and checking outcomes and that kind of thing. + +00:18:19.920 --> 00:18:22.959 +So I would use those. I'm not putting too much work + +00:18:22.960 --> 00:18:26.679 +into being ultra-reliable right now, but it kind of worked. + +00:18:26.680 --> 00:18:29.759 +We saw, I guess, at least Embeddable Common Lisp + +00:18:29.760 --> 00:18:35.599 +believed it used emacsclient externally, asynchronously, + +00:18:35.600 --> 00:18:38.359 +to send these to Emacs within Emacs. + +00:18:38.360 --> 00:18:41.599 +I put a whole bunch of sleeps into its thing + +00:18:41.600 --> 00:18:44.999 +to make it look slow and human-like, kind of happened + +00:18:45.000 --> 00:18:52.719 +because Emacs' model is that it's kind of single-threaded. + +00:18:52.720 --> 00:18:59.639 +Can I just... I bet if we run this again + +00:18:59.640 --> 00:19:02.119 +It'll at least look like it's succeeding + +00:19:02.120 --> 00:19:05.039 +because I fixed the base64 encoding + +00:19:05.040 --> 00:19:11.399 +and so forth in the background. I wonder if it will. + +NOTE Wrapping up + +00:19:11.400 --> 00:19:15.559 +In the meantime, let's wrap up this talk to some extent. + +00:19:15.560 --> 00:19:18.799 +Then I'm just kind of saying what I'm expecting to happen. + +00:19:18.800 --> 00:19:20.479 +I took out next action. + +00:19:20.480 --> 00:19:25.279 +Originally, I was keeping the list inside of the agent. + +00:19:25.280 --> 00:19:27.879 +Then I decided to keep the list inside Emacs + +00:19:27.880 --> 00:19:31.679 +because I have kind of first class Emacs is my IDE, + +00:19:31.680 --> 00:19:37.607 +so I have better access to what's going on in my IDE. + +NOTE Intelligence + +00:19:37.608 --> 00:19:39.559 +Then I wanted to talk about intelligence a little bit + +00:19:39.560 --> 00:19:41.199 +in whatever my remaining time is. + +00:19:41.200 --> 00:19:43.039 +I just have these great bullet points + +00:19:43.040 --> 00:19:45.559 +of nosrednA yduJ and Eric Sandewall. + +00:19:45.560 --> 00:19:50.039 +So nosrednA yduJ, when she was on the show quite a long time ago, + +00:19:50.040 --> 00:19:55.559 +she... I keep describing things as expert systems + +00:19:55.560 --> 00:19:57.039 +and she wanted to know what I meant + +00:19:57.040 --> 00:19:58.359 +when I said expert systems, + +00:19:58.360 --> 00:20:00.199 +and I gave her a Lisp software example + +00:20:00.200 --> 00:20:02.618 +and she said she personally wrote + +00:20:02.619 --> 00:20:06.279 +that software in the 80s that I was referring to + +00:20:06.280 --> 00:20:08.239 +and she wanted to know how it was an expert system. + +00:20:08.240 --> 00:20:10.039 +What I mean when I say expert system + +00:20:10.040 --> 00:20:19.839 +is a system that works kind of like I do and eev's eepitch does. + +00:20:19.840 --> 00:20:21.999 +It's where we can really reason + +00:20:22.000 --> 00:20:24.199 +in a very human-relatable way + +00:20:24.200 --> 00:20:26.479 +about what the inputs to the program is. + +00:20:26.480 --> 00:20:31.399 +And also a program should be exposed to other programs + +00:20:31.400 --> 00:20:36.559 +in terms of like a well-structured transfer of knowledge as inputs, + +00:20:36.560 --> 00:20:38.010 +and it should have a well-structured + +00:20:38.011 --> 00:20:41.939 +transfer of knowledge kind of outputs. + +00:20:41.940 --> 00:20:47.159 +I don't know why this b64-encode message wasn't working. + +00:20:47.160 --> 00:20:49.999 +Then we kind of faked it into working. + +00:20:50.000 --> 00:20:52.399 +It's going to be embarrassing for me + +00:20:52.400 --> 00:20:58.739 +if anybody watches this. But yeah, so yduJ's thing... + +00:20:58.740 --> 00:20:59.959 +And then I was going to also build + +00:20:59.960 --> 00:21:02.679 +that into Eric Sandewall's one. + +00:21:02.680 --> 00:21:05.639 +So this is my vision of expert systems + +00:21:05.640 --> 00:21:07.779 +as kind of maybe this is an important + +00:21:07.780 --> 00:21:11.679 +general style loosely associated with Lisp. + +00:21:11.680 --> 00:21:14.399 +Same as the Lisp editor Emacs. + +00:21:14.400 --> 00:21:17.665 +So Eric Sandewall's description of intelligence + +00:21:17.666 --> 00:21:21.159 +was that his grandchildren were intelligent. + +00:21:21.160 --> 00:21:26.439 +So if we had software agents that were intelligent, + +00:21:26.440 --> 00:21:32.439 +this would be true if and maybe only if they were similar + +00:21:32.440 --> 00:21:33.719 +to his grandchildren + +00:21:33.720 --> 00:21:36.319 +who were a good reference for intelligence. + +00:21:36.320 --> 00:21:39.199 +And grandchildren live for a really long time. + +00:21:39.200 --> 00:21:42.879 +They kind of learn gradually. + +00:21:42.880 --> 00:21:46.879 +They don't run on GPUs for a few minutes + +00:21:46.880 --> 00:21:51.879 +and then get thrown out forever, something like that. + +00:21:51.880 --> 00:21:54.959 +And so this is the kind of vision of, I guess, + +00:21:54.960 --> 00:21:57.919 +the Leonardo system software individual stuff. + +00:21:57.920 --> 00:22:03.946 +You can see we kind of faked it into... + +00:22:03.947 --> 00:22:06.320 +at least the show get message one decoded bits were working. + +00:22:06.321 --> 00:22:07.300 +I'm not sure what was happening + +00:22:07.301 --> 00:22:12.674 +with the Elisp ones that worked interactively, + +00:22:12.675 --> 00:22:18.607 +but then they didn't work in my loopy thing. + +00:22:18.608 --> 00:22:21.307 +Oh yeah, and then so I mentioned + +00:22:21.308 --> 00:22:24.640 +thank you to Sacha at the start of this talk. + +00:22:24.641 --> 00:22:26.974 +And so Eric Sandewall's emphasis + +00:22:26.975 --> 00:22:31.340 +that you'd really like intelligent software agents, + +00:22:31.341 --> 00:22:34.174 +Leonardo system agents, to be like your grandchildren. + +00:22:34.175 --> 00:22:40.659 +And I was talking to somebody, maybe to Ramin Honary + +00:22:40.660 --> 00:22:44.959 +who's doing the schemacs talk this year + +00:22:44.960 --> 00:22:46.874 +about Sacha's writing. + +00:22:46.875 --> 00:22:48.840 +A lot of Sacha's writing is about + +00:22:48.841 --> 00:22:51.774 +her experiences of life and technology, + +00:22:51.775 --> 00:22:54.374 +and especially raising A* + +00:22:54.375 --> 00:22:59.740 +and her observations of her progeny A*'s + +00:22:59.741 --> 00:23:05.319 +experiences of life and technology, + +00:23:05.320 --> 00:23:07.874 +I would say as well as being + +00:23:07.875 --> 00:23:18.039 +the Emacs News and Emacs conf doer that she is. + +00:23:18.040 --> 00:23:22.740 +Yeah, and so I think a lot of what Sacha is seen doing + +00:23:22.741 --> 00:23:25.840 +and concerned with are specifically what Eric Sandewall + +00:23:25.841 --> 00:23:31.207 +identifies as the study of intelligence as such, + +00:23:31.208 --> 00:23:36.479 +as should apply to computing as well. That was my thought + +00:23:36.480 --> 00:23:42.979 +on Sacha, Eric Sandewall, intelligence, and yduJ. + +00:23:42.980 --> 00:23:44.240 +I have this note from pizzapal... + +00:23:44.241 --> 00:23:46.274 +I didn't realize that Microsoft had announced + +00:23:46.275 --> 00:23:49.679 +that 2025 was going to be the year of the software agent. + +00:23:49.680 --> 00:23:51.199 +I only found this out in hindsight + +00:23:51.200 --> 00:23:54.199 +when I saw people crowing on the Mastodon + +00:23:54.200 --> 00:23:58.079 +about how Microsoft had basically declared + +00:23:58.080 --> 00:24:00.779 +that their Year of the Agent marketing campaign + +00:24:00.780 --> 00:24:04.459 +was a failure + +00:24:04.460 --> 00:24:09.279 +where basically people didn't like the same old web services + +00:24:09.280 --> 00:24:11.359 +but now while you're accessing, + +00:24:11.360 --> 00:24:15.239 +while you're formally kind of accessing a web service, + +00:24:15.240 --> 00:24:16.959 +the kind of web service that used to be called + +00:24:16.960 --> 00:24:19.279 +serverless web services, this kind of thing, + +00:24:19.280 --> 00:24:23.879 +but you're just being gibbered at by Microsoft Copilot + +00:24:23.880 --> 00:24:27.119 +while you're trying to use regular services. + +00:24:27.120 --> 00:24:29.279 +And people turned out not to like this. + +00:24:29.280 --> 00:24:32.399 +I think that, as we can see in this agent, + +00:24:32.400 --> 00:24:36.374 +the agent really needs to be running on its own clock + +00:24:36.375 --> 00:24:37.907 +and independently of you. + +00:24:37.908 --> 00:24:42.279 +Like if you imagine your body is getting + +00:24:42.280 --> 00:24:46.074 +novel, slightly speculative instructions from your brain + +00:24:46.075 --> 00:24:50.680 +constantly throughout your entire waking day, quite slowly, + +00:24:50.681 --> 00:24:54.974 +this is what an agent should be like. + +00:24:54.975 --> 00:24:59.540 +And it should be... Sandewall wrote about this. + +00:24:59.541 --> 00:25:01.540 +Basically, computer programs + +00:25:01.541 --> 00:25:04.840 +aren't going to want to use human natural language with each other. + +00:25:04.841 --> 00:25:06.674 +There's nothing desirable about that, + +00:25:06.675 --> 00:25:10.674 +so you wouldn't have two hypothetical Microsoft agents, + +00:25:10.675 --> 00:25:13.399 +which are just regular web services with + +00:25:13.400 --> 00:25:16.340 +a GPT model gibbering at you + +00:25:16.341 --> 00:25:19.839 +while you're trying to use the web service. + +00:25:19.840 --> 00:25:22.539 +I think we can see... + +00:25:22.540 --> 00:25:26.740 +Microsoft did the wrong thing with the word agent, + +00:25:26.741 --> 00:25:30.707 +allowing that agent is an overloaded term like static. + +00:25:30.708 --> 00:25:34.256 +I'm going to stop this. I'm not going to try and fix this. + +00:25:34.257 --> 00:25:36.313 +Sorry, everybody. Thank you. Talk to you on the Mastodon. + +00:25:36.314 --> 00:25:37.919 +Hopefully, see you on the show. + +00:25:37.920 --> 00:25:40.399 +See you at your conference talks. + +00:25:40.400 --> 00:25:45.599 +My blog has writing and examples of this with multi-agents, + +00:25:45.600 --> 00:25:50.819 +more C and C++ stuff, Lisp things. + +00:25:50.820 --> 00:25:53.439 +You're welcome to come on my show to be interviewed, + +00:25:53.440 --> 00:25:56.640 +however formally we do that. See everybody next time. diff --git a/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt new file mode 100644 index 00000000..333eb857 --- /dev/null +++ b/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt @@ -0,0 +1,4 @@ +WEBVTT captioned by sachac + +00:00:00.000 --> 00:22:15.777 +[ This video has no audio. ] diff --git a/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt new file mode 100644 index 00000000..780ff013 --- /dev/null +++ b/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt @@ -0,0 +1,223 @@ +WEBVTT captioned by sachac + +NOTE Introduction + +00:00:01.460 --> 00:00:03.785 +Hi, I'm Yuval Langer. + +00:00:03.786 --> 00:00:09.479 +Some may know me as cow_2001 on IRC. + +00:00:09.480 --> 00:00:12.119 +I'd like to tell you about greader mode, + +00:00:12.120 --> 00:00:14.519 +a versatile text-to-speech package + +00:00:14.520 --> 00:00:18.399 +written by Michelangelo Rodriguez. + +00:00:18.400 --> 00:00:20.399 +Sometimes you want to read a bunch + +00:00:20.400 --> 00:00:23.039 +and cannot be bothered, right? + +00:00:23.040 --> 00:00:25.079 +You'd rather plop on your chair + +00:00:25.080 --> 00:00:27.519 +and let the words come to you. + +00:00:27.520 --> 00:00:31.157 +You can do it using greader Mode. + +NOTE What is greader mode? + +00:00:31.158 --> 00:00:33.119 +What is greader mode? + +00:00:33.120 --> 00:00:36.319 +Greader mode is a text-to-speech minor mode + +00:00:36.320 --> 00:00:40.399 +with which you can read any buffer using the point. + +00:00:40.400 --> 00:00:41.602 +You move your point + +00:00:41.603 --> 00:00:43.559 +right before the text you want to read + +00:00:43.560 --> 00:00:47.639 +and run greader-read command. + +00:00:47.640 --> 00:00:50.839 +You can then use the left and right arrow keys + +00:00:50.840 --> 00:00:56.599 +to jump to the previous sentence or the next sentence. + +NOTE Installing Greader + +00:00:56.600 --> 00:00:59.143 +Installing GReader: + +00:00:59.144 --> 00:01:05.439 +Greader is available on the GNU Emacs app store + +00:01:05.440 --> 00:01:07.285 +and its copyright assigned to + +00:01:07.286 --> 00:01:10.959 +the Free Software Foundation. + +00:01:10.960 --> 00:01:12.857 +To install Greader, + +00:01:12.858 --> 00:01:19.279 +you can run M-x list-packages RET. + +00:01:19.280 --> 00:01:23.099 +look it up with C-s greader, + +00:01:23.100 --> 00:01:26.679 +press i to mark it for installation, + +00:01:26.680 --> 00:01:31.759 +and then press x to execute the installation. + +NOTE Basic usage + +00:01:31.760 --> 00:01:33.211 +Basic usage: + +00:01:33.212 --> 00:01:37.559 +We can now open a text file and start reading. + +00:01:37.560 --> 00:01:42.599 +Let's open The Willows by Algernon Blackwood. + +00:01:42.600 --> 00:01:44.479 +I've never read the story, + +00:01:44.480 --> 00:01:48.279 +but HP Lovecraft said it was the best horror story + +00:01:48.280 --> 00:01:52.959 +he had ever read, so it is in my reading list. + +00:01:52.960 --> 00:02:01.519 +Now load greader using M-x greader-mode. + +00:02:01.520 --> 00:02:08.139 +To start reading, press C-r SPC. + +00:02:08.140 --> 00:02:10.559 +The Project Gutenberg ebook of The willows. + +00:02:10.560 --> 00:02:14.079 +This will run the greader-read command. + +00:02:14.080 --> 00:02:16.799 +To stop, press the SPC key. + +00:02:16.800 --> 00:02:20.819 +This will run the greader-stop command. + +NOTE Navigation + +00:02:20.820 --> 00:02:22.359 +Navigation: + +00:02:22.360 --> 00:02:24.679 +You can navigate like you normally do, + +00:02:24.680 --> 00:02:27.559 +but using the left or right arrow keys + +00:02:27.560 --> 00:02:30.199 +will move the point between sentences + +00:02:30.200 --> 00:02:33.087 +instead of characters. + +00:02:33.088 --> 00:02:36.639 +So... This ebook is... + +00:02:36.640 --> 00:02:38.095 +You may copy it, give it away, + +00:02:38.096 --> 00:02:41.479 +or reuse it if you are not. + +00:02:41.480 --> 00:02:43.580 +Let's move to the start of the story. + +00:02:57.040 --> 00:02:58.088 +"After leaving Vienna, + +00:02:58.089 --> 00:02:59.839 +and long before you come to Budapest, + +00:02:59.840 --> 00:03:00.919 +the Danube enters a region + +00:03:00.920 --> 00:03:02.919 +of singular loneliness and desolation, + +00:03:02.920 --> 00:03:04.879 +where its waters spread away on all sides, + +00:03:04.880 --> 00:03:06.199 +regardless of a main channel, + +00:03:06.200 --> 00:03:08.799 +and the country becomes a swamp for miles upon miles, + +00:03:08.800 --> 00:03:11.759 +covered by a vast sea of low willow bushes." + +NOTE Reading rate + +00:03:12.380 --> 00:03:15.839 +Reading rate: this reading rate is rather slow. + +00:03:15.840 --> 00:03:19.519 +Let's pick up the pace using the plus key. + +00:03:19.520 --> 00:03:23.519 +This will run the greader-inc-rate command. + +00:03:23.520 --> 00:03:26.780 +You must do that while greader is reading. + +00:03:37.885 --> 00:03:39.779 +Now it is too fast. + +00:03:39.780 --> 00:03:44.679 +We can slow down using the - key. + +00:03:44.680 --> 00:03:52.485 +This will run the greader-dec-rate command. + +00:03:54.560 --> 00:03:59.384 +"In high flood this great acreage + +00:03:59.385 --> 00:04:01.239 +of sand, shingle-beds, and willow-grown islands + +00:04:01.240 --> 00:04:02.439 +is almost topped by the water, + +00:04:02.440 --> 00:04:03.609 +but in normal seasons the bushes + +00:04:03.610 --> 00:04:04.919 +bend and rustle in the free winds, + +00:04:04.920 --> 00:04:06.399 +showing their silver leaves to the sunshine + +00:04:06.400 --> 00:04:08.320 +in an ever-moving plain of bewildering beauty." diff --git a/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt new file mode 100644 index 00000000..ea969e1e --- /dev/null +++ b/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt @@ -0,0 +1,1069 @@ +WEBVTT captioned by amitav + +NOTE Introduction + +00:00:01.040 --> 00:00:03.079 +Hi, I'm Andrew Hyatt. + +00:00:03.080 --> 00:00:09.399 +I'm going to talk to you today about Emacs and AI, + +00:00:09.400 --> 00:00:10.879 +and where things are right now + +00:00:10.880 --> 00:00:12.119 +in the world of Emacs and AI, + +00:00:12.120 --> 00:00:14.159 +via large language models, + +00:00:14.160 --> 00:00:16.999 +and where things might be going, + +00:00:17.000 --> 00:00:22.699 +and what it means for the future of Emacs. + +00:00:22.700 --> 00:00:27.279 +I think what we're seeing with Emacs is interesting. + +00:00:27.280 --> 00:00:29.399 +We've seen a lot of different things + +00:00:29.400 --> 00:00:31.559 +come around in the past year, + +00:00:31.560 --> 00:00:33.119 +in the past several years. + +00:00:33.120 --> 00:00:35.079 +There's lots of different solutions. + +00:00:35.080 --> 00:00:36.759 +But in the past year, things have been very interesting. + +00:00:36.760 --> 00:00:39.679 +I think there's new and interesting questions + +00:00:39.680 --> 00:00:43.279 +about what does it mean to use Emacs? + +00:00:43.280 --> 00:00:45.479 +What does it mean to use any editor? + +00:00:45.480 --> 00:00:47.279 +I'm going to be talking about Emacs, + +00:00:47.280 --> 00:00:50.359 +and I'm going to show you various Emacs packages + +00:00:50.360 --> 00:00:53.079 +as demonstrations of these ideas. + +00:00:53.080 --> 00:00:59.839 +But there's the general question of + +00:00:59.840 --> 00:01:03.719 +what does it mean to use any editor, not just Emacs? + +00:01:03.720 --> 00:01:06.239 +What does it mean to do work? + +00:01:06.240 --> 00:01:10.719 +And I think the industry in general is facing these challenges + +00:01:10.720 --> 00:01:13.279 +of we don't really know where things are going to end up, + +00:01:13.280 --> 00:01:16.919 +but we do know the direction they're going. + +00:01:16.920 --> 00:01:20.039 +Emacs is a reflection of that. + +00:01:20.040 --> 00:01:23.239 +I think the answer for Emacs might be + +00:01:23.240 --> 00:01:25.719 +a little bit different than everything else, + +00:01:25.720 --> 00:01:28.599 +but I do want to show you what's out there + +00:01:28.600 --> 00:01:33.319 +so we can explore what are the possibilities + +00:01:33.320 --> 00:01:41.119 +of Emacs, AI, and generally how we get things done. + +00:01:41.120 --> 00:01:44.719 +Thanks. Let's dive right into it. + +NOTE Copilot + +00:01:44.720 --> 00:01:48.079 +We're going to start by showing you + +00:01:48.080 --> 00:01:51.039 +some things that are pretty well integrated, + +00:01:51.040 --> 00:01:55.279 +that look a lot like what you see in Emacs + +00:01:55.280 --> 00:01:58.679 +and fit in with the kinds of editing + +00:01:58.680 --> 00:02:02.639 +that you normally do in Emacs. + +00:02:02.640 --> 00:02:06.579 +So this is just kind of like, it's well integrated. + +00:02:06.580 --> 00:02:08.779 +So we're going to talk about Copilot and Semext. + +00:02:08.780 --> 00:02:12.679 +Copilot is by Microsoft via GitHub, + +00:02:12.680 --> 00:02:14.759 +and Semext is just my personal demo, + +00:02:14.760 --> 00:02:18.039 +but they're both showing you, you know, + +00:02:18.040 --> 00:02:24.399 +this kind of thing. Let's start with Copilot. + +00:02:24.400 --> 00:02:31.919 +Let's try out Copilot on just a standard bit of Elisp. + +00:02:31.920 --> 00:02:38.439 +We're going to write a Fibonacci function. + +00:02:38.440 --> 00:02:43.079 +Let's try out Emacs on a standard bit of Elisp. + +00:02:43.080 --> 00:02:49.279 +We're going to write a Fibonacci function. + +00:02:49.280 --> 00:02:53.159 +And you can see like as soon as we even start typing it, + +00:02:53.160 --> 00:02:56.339 +we get everything as a completion. + +00:02:56.340 --> 00:02:59.879 +So you can just press Tab here, + +00:02:59.880 --> 00:03:02.159 +and you've just completed + +00:03:02.160 --> 00:03:06.799 +a significant bunch of Emacs Lisp code. + +00:03:06.800 --> 00:03:09.919 +It will do this no matter where you are. + +00:03:09.920 --> 00:03:14.799 +So, pretty useful. It will just keep suggesting things. + +00:03:14.800 --> 00:03:16.439 +Do you want to do this? + +00:03:16.440 --> 00:03:17.479 +I'm not sure. + +00:03:17.480 --> 00:03:22.839 +But it usually is offering pretty reasonable things. + +00:03:22.840 --> 00:03:29.299 +So you could do this with code, + +00:03:29.300 --> 00:03:32.119 +of course, any code. + +00:03:32.120 --> 00:03:33.919 +You don't really even have to have a mode for it, right? + +00:03:33.920 --> 00:03:36.679 +That's kind of the beauty of AI is that + +00:03:36.680 --> 00:03:38.519 +you don't need any Emacs functionality for this, + +00:03:38.520 --> 00:03:39.519 +except for Copilot. + +00:03:39.520 --> 00:03:41.679 +It doesn't need to know the structure of your code. + +00:03:41.680 --> 00:03:45.279 +It doesn't need anything except for the text itself + +00:03:45.280 --> 00:03:51.239 +and whatever AI integration that this is. + +00:03:51.240 --> 00:03:53.739 +We can look at, you can do the same thing with Org-mode. + +00:03:53.740 --> 00:03:57.999 +So we could say create, no, + +00:03:58.000 --> 00:04:02.919 +how about let's, let's do, you know, spring cleaning. + +00:04:02.920 --> 00:04:10.839 +It's actually the fall, but still we'll say spring cleaning. + +00:04:10.840 --> 00:04:12.767 +And it'll start suggesting things that, you know, + +00:04:12.768 --> 00:04:15.439 +maybe at first, it doesn't really know what to do to + +00:04:15.440 --> 00:04:16.433 +clean up all code. + +00:04:16.434 --> 00:04:18.400 +It thinks I need to clean up code, but no, + +00:04:18.401 --> 00:04:21.839 +this is going to be actual, you know, + +00:04:21.840 --> 00:04:31.567 +clean hood over range. Clean out pantry. + +00:04:31.568 --> 00:04:33.879 +These are all really reasonable suggestions. + +00:04:33.880 --> 00:04:38.319 +You just keep going here. + +NOTE Semext + +00:04:38.320 --> 00:04:40.559 +I'm going to demonstrate Semext, + +00:04:40.560 --> 00:04:43.879 +which is a package I have on GNU Elpa, + +00:04:43.880 --> 00:04:48.719 +that is designed to integrate AI in a very Emacs-like way. + +00:04:48.720 --> 00:04:50.999 +And so what you could do is you could do a + +00:04:51.000 --> 00:04:54.799 +semext-search-forward. + +00:04:54.800 --> 00:04:58.719 +The UI looks just like other Emacs commands, + +00:04:58.720 --> 00:05:02.379 +but you can search for anything. + +00:05:02.380 --> 00:05:06.279 +There's really no way to express what I'm about to, + +00:05:06.280 --> 00:05:08.679 +what I'm trying to demonstrate + +00:05:08.680 --> 00:05:12.359 +in Emacs's normal search commands. + +00:05:12.360 --> 00:05:15.399 +You could really ask for anything. + +00:05:15.400 --> 00:05:18.759 +And it takes a little while, which is not Emacs-like, + +00:05:18.760 --> 00:05:20.033 +but everything else is sort of like + +00:05:20.034 --> 00:05:21.719 +it's designed to be like Emacs, + +00:05:21.720 --> 00:05:23.519 +except way more powerful. + +00:05:23.520 --> 00:05:27.119 +You don't need any mode to be active for this. + +00:05:27.120 --> 00:05:32.039 +You just need the library + +00:05:32.040 --> 00:05:34.759 +and an AI provider of some sort, either locally + +00:05:34.760 --> 00:05:41.199 +or, you know, your favorite cloud provider. + +NOTE Integrated AI experiences: gptel, ellama, chatgpt-shell, etc. + +00:05:41.200 --> 00:05:43.679 +Now we're going to move on to a different way + +00:05:43.680 --> 00:05:46.399 +of interacting with AI and Emacs. + +00:05:46.400 --> 00:05:52.319 +This way is less like the normal editing experience. + +00:05:52.320 --> 00:05:56.999 +So you lose some familiarity. However, in exchange, + +00:05:57.000 --> 00:05:58.079 +it is a lot more powerful. + +00:05:58.080 --> 00:06:00.119 +And there's a whole suite of these tools. + +00:06:00.120 --> 00:06:02.479 +I'm going to demonstrate gptel, + +00:06:02.480 --> 00:06:05.779 +which is the most popular one. + +00:06:05.780 --> 00:06:06.399 +But there are many. + +00:06:06.400 --> 00:06:08.479 +And I think different people have + +00:06:08.480 --> 00:06:11.759 +their own preferences of what they like to use. + +00:06:11.760 --> 00:06:12.999 +We're going to try now something + +00:06:13.000 --> 00:06:15.079 +that is a step away from just editing. + +00:06:15.080 --> 00:06:19.839 +And we're going to, I'm actually using gptel. + +00:06:19.840 --> 00:06:22.799 +There are several packages that are going to be + +00:06:22.800 --> 00:06:25.959 +doing the same sort of thing as I'm going to show you. + +00:06:25.960 --> 00:06:29.999 +gptel has sort of become the most popular one. + +00:06:30.000 --> 00:06:32.199 +So that's why I'm showing that to you. + +00:06:32.200 --> 00:06:39.319 +But let's just highlight everything and say gptel rewrite. + +00:06:39.320 --> 00:06:42.399 +And gptel basically just has a few things. + +00:06:42.400 --> 00:06:45.119 +There's different ways of thinking about this. + +00:06:45.120 --> 00:06:49.999 +With just a few very configurable menus, + +00:06:50.000 --> 00:06:53.959 +you can do a large variety of things. + +00:06:53.960 --> 00:06:59.819 +So let's give rewrite instructions. + +00:06:59.820 --> 00:07:06.600 +"Turn this into an iterative program + +00:07:06.601 --> 00:07:12.199 +instead of a recursive program." + +00:07:12.200 --> 00:07:17.799 +In Elisp, you really should not be using recursion. + +00:07:17.800 --> 00:07:20.359 +So we could say "return to be ready". + +00:07:20.360 --> 00:07:21.119 +Do we accept it? + +00:07:21.120 --> 00:07:24.519 +Yes, we accept it. Or we could iterate and say, no, no, + +00:07:24.520 --> 00:07:26.799 +that's not what we meant. We meant something else. + +00:07:26.800 --> 00:07:29.159 +Or you did something a little something wrong. + +00:07:29.160 --> 00:07:29.879 +Please fix it. + +00:07:29.880 --> 00:07:31.879 +So this is all very powerful. + +00:07:31.880 --> 00:07:33.799 +Is this editing? + +00:07:33.800 --> 00:07:40.279 +Well, it's in the editor. + +00:07:40.280 --> 00:07:42.759 +You could do this while editing, while deleting, + +00:07:42.760 --> 00:07:44.959 +you could be doing some sort of traditional editing. + +00:07:44.960 --> 00:07:47.679 +And then this, which is editing + +00:07:47.680 --> 00:07:48.919 +in the sense that it's in your editor, + +00:07:48.920 --> 00:07:51.039 +you might have to highlight + +00:07:51.040 --> 00:07:52.799 +some parts of the file and do things, + +00:07:52.800 --> 00:07:54.719 +but generally you don't even need to, + +00:07:54.720 --> 00:07:59.879 +or you go to a spot and you say, put code at this spot. + +00:07:59.880 --> 00:08:01.959 +It's kind of like editing. + +00:08:01.960 --> 00:08:05.839 +I would say it's not exactly editing, + +00:08:05.840 --> 00:08:10.159 +but it's at least something that must happen in an editor + +00:08:10.160 --> 00:08:12.359 +and it's well integrated into Emacs. + +00:08:12.360 --> 00:08:14.759 +As you can tell, it used very sort of + +00:08:14.760 --> 00:08:18.239 +modern standard Emacs UI paradigms + +00:08:18.240 --> 00:08:20.759 +and it's all written in Elisp. + +00:08:20.760 --> 00:08:23.779 +Everything is happening in Elisp here. + +00:08:23.780 --> 00:08:25.959 +So this is just very much an Emacs experience. + +00:08:25.960 --> 00:08:27.679 +It's just not exactly editing + +00:08:27.680 --> 00:08:29.879 +because the thing doing the editing + +00:08:29.880 --> 00:08:32.519 +is the AI and not you. + +00:08:32.520 --> 00:08:36.039 +You're just kind of telling it what to do. + +NOTE Outside the editor + +00:08:36.040 --> 00:08:41.119 +Now we're going to go and look at a way of interaction + +00:08:41.120 --> 00:08:43.239 +that's even more powerful + +00:08:43.240 --> 00:08:46.279 +and even more disconnected from the normal editing experience. + +00:08:46.280 --> 00:08:47.919 +In fact, it's so disconnected + +00:08:47.920 --> 00:08:52.399 +that most people are using this without an editor. + +00:08:52.400 --> 00:08:57.879 +These are things like Claude Code + +00:08:57.880 --> 00:09:01.079 +or the sort of open source equivalent, Aider. + +00:09:01.080 --> 00:09:05.039 +There's a few other things that follow this pattern as well. + +00:09:05.040 --> 00:09:07.479 +But it's very interesting in the sense + +00:09:07.480 --> 00:09:09.839 +that while you can integrate these with the editors, + +00:09:09.840 --> 00:09:12.039 +and I'm going to show you an Emacs integration, + +00:09:12.040 --> 00:09:13.519 +you don't need to. + +00:09:13.520 --> 00:09:16.939 +And that's not the way most people are using them. + +00:09:16.940 --> 00:09:19.759 +And I find it very interesting that sort of + +00:09:19.760 --> 00:09:23.719 +we're going back kind of full circle where, you know, + +00:09:23.720 --> 00:09:31.959 +in the 1960s or 70s, we were using Ed from the terminal + +00:09:31.960 --> 00:09:35.639 +to edit files, but then we created editors, + +00:09:35.640 --> 00:09:37.959 +and that was a really good idea. + +00:09:37.960 --> 00:09:40.167 +It is a lot easier to edit files + +00:09:40.168 --> 00:09:42.499 +when you have an actual UI. + +00:09:42.500 --> 00:09:46.879 +But now it's 2025, and we're back in the terminal, + +00:09:46.880 --> 00:09:50.799 +and we're editing files through the terminal, + +00:09:50.800 --> 00:09:53.599 +and you know what, it's great, + +00:09:53.600 --> 00:09:56.899 +but I think it's even better with Emacs. + +00:09:56.900 --> 00:10:00.279 +On the other hand, it comes with some trade-offs, + +00:10:00.280 --> 00:10:04.733 +as you can see, as we will see. + +NOTE Outside Experiences: claude-code.el, aidermacs, eca + +00:10:04.734 --> 00:10:07.467 +Okay, we're going to look at + +00:10:07.468 --> 00:10:20.320 +[audio glitch] Claude Code IDE, aidermacs, ECA. + +00:10:20.321 --> 00:10:22.639 +Last time, I didn't show you all the variants. + +00:10:22.640 --> 00:10:26.839 +I do want to show you eca, which points to, + +00:10:26.840 --> 00:10:29.799 +it is a very similar tool in what it does, + +00:10:29.800 --> 00:10:32.739 +but does have a different + +00:10:32.740 --> 00:10:37.239 +and I think better type of Emacs integration. + +00:10:37.240 --> 00:10:42.599 +All right, we're going to demonstrate Claude Code IDE, + +00:10:42.600 --> 00:10:46.839 +which is one of three Claude Code packages. + +00:10:46.840 --> 00:10:47.719 +It's a bit confusing. + +00:10:47.720 --> 00:10:52.039 +One of them will be demoed by another presenter + +00:10:52.040 --> 00:10:54.639 +at the Emacs conference, so stay tuned for that. + +00:10:54.640 --> 00:10:56.439 +Here I'm just going to give you a little taste + +00:10:56.440 --> 00:10:58.759 +of what these packages look like. + +00:10:58.760 --> 00:11:03.339 +So if we say Claude Code IDE, + +00:11:03.340 --> 00:11:06.839 +it presents us with basically + +00:11:06.840 --> 00:11:09.039 +almost exactly what you would get + +00:11:09.040 --> 00:11:11.519 +when you're running this in the terminal. + +00:11:11.520 --> 00:11:13.933 +And essentially there's a terminal interface. + +00:11:13.934 --> 00:11:16.659 +You can see that there's a vterm. + +00:11:16.660 --> 00:11:20.699 +But here we're going to say, "In scratch.el"... + +00:11:20.700 --> 00:11:23.400 +let's say what we want to happen. + +00:11:23.401 --> 00:11:32.133 +[In scratch.el, there is a fibonacci function. + +00:11:32.134 --> 00:11:39.567 +Can you add all normal elisp headers + +00:11:39.568 --> 00:11:43.859 +and footers to this file?] + +00:11:43.860 --> 00:11:45.840 +So, we just say what's going to happen, + +00:11:45.841 --> 00:11:48.399 +and this is going to do things in the background. + +00:11:48.400 --> 00:11:50.979 +It's not going to do things through Emacs. + +00:11:50.980 --> 00:11:54.079 +That said, there is an integration with Emacs, + +00:11:54.080 --> 00:12:00.659 +so that it can do things like show you these nice ediffs. + +00:12:00.660 --> 00:12:03.199 +My screen is not really wide enough + +00:12:03.200 --> 00:12:04.699 +to show you a really great ediff here, + +00:12:04.700 --> 00:12:06.239 +but you can kind of see what it's doing, + +00:12:06.240 --> 00:12:09.079 +and you can see, yeah, that looks good, + +00:12:09.080 --> 00:12:14.120 +so you could say yes, yes, accept the changes, + +00:12:14.121 --> 00:12:25.299 +and if we... Just need to revert the buffer. + +00:12:25.300 --> 00:12:28.459 +We can quit the printout of this. + +00:12:28.460 --> 00:12:33.019 +We see that it just did everything I asked it to. + +00:12:33.020 --> 00:12:36.139 +Is everything exactly right? + +00:12:36.140 --> 00:12:39.159 +Probably not. It's reasonable for a start though. + +00:12:39.160 --> 00:12:40.959 +But you could ask it to do anything. + +00:12:40.960 --> 00:12:45.339 +You could say, write unit tests for this, and it will. + +00:12:45.340 --> 00:12:49.019 +You could say, write me a suite of functions + +00:12:49.020 --> 00:12:52.579 +like Fibonacci, and it'll probably do something reasonable. + +00:12:52.580 --> 00:12:54.900 +But you can see this is not editing. + +00:12:54.901 --> 00:12:58.659 +There's nothing editing-like about this. + +00:12:58.660 --> 00:13:07.159 +That said, there is something that is editing. + +00:13:07.160 --> 00:13:08.599 +You need to give it instructions. + +00:13:08.600 --> 00:13:10.959 +You need to tell it what to do. + +NOTE Org files + +00:13:10.960 --> 00:13:19.619 +And what you could do is... You could have a project.org, + +00:13:19.620 --> 00:13:23.899 +and what you could do is you could have functions. + +00:13:23.900 --> 00:13:26.659 +The way I've done things often is .... + +00:13:26.660 --> 00:13:28.439 +You could say something like, + +00:13:28.440 --> 00:13:36.199 +unit tests for Fibonacci. How do you spell Fibonacci? + +00:13:36.200 --> 00:13:40.479 +I don't remember. But then you could say that this is, + +00:13:40.480 --> 00:13:47.159 +you could clock it, basically. org-clock. + +00:13:47.160 --> 00:13:48.879 +What I've done is... + +00:13:48.880 --> 00:13:50.399 +You could add custom commands to Claude Code, + +00:13:50.400 --> 00:13:53.119 +and you could just say, look, here's my Org file, + +00:13:53.120 --> 00:13:57.879 +read it and do the thing that I'm clocked in as. + +00:13:57.880 --> 00:14:01.159 +And then you can write a bunch of instructions here, like, + +00:14:01.160 --> 00:14:07.039 +I like to use ert for tests. Tests should, like, whatever. + +00:14:07.040 --> 00:14:08.639 +You should just say... everything + +00:14:08.640 --> 00:14:10.999 +you need to kind of specify. + +00:14:11.000 --> 00:14:13.199 +As you get to more complicated tasks, + +00:14:13.200 --> 00:14:16.679 +it's harder and harder to give it all the context + +00:14:16.680 --> 00:14:17.799 +it needs for a task, + +00:14:17.800 --> 00:14:22.299 +and Org Mode is actually a pretty good way to do this. + +00:14:22.300 --> 00:14:24.079 +I find that this works pretty well, + +00:14:24.080 --> 00:14:26.699 +and you can even have it instruct Claude + +00:14:26.700 --> 00:14:29.333 +to just mark things done in your Org file + +00:14:29.334 --> 00:14:30.679 +when they're done. + +00:14:30.680 --> 00:14:32.867 +And it knows how to do this, of course. + +00:14:32.868 --> 00:14:37.959 +So, let's just clock out. + +00:14:37.960 --> 00:14:45.239 +That's one way to do things. + +NOTE ECA + +00:14:45.240 --> 00:14:49.499 +So one other thing I'd like to show you is eca, + +00:14:49.500 --> 00:14:52.879 +which, compared to Claude Code, ECA is open source. + +00:14:52.880 --> 00:14:54.239 +It's very nice in that respect. + +00:14:54.240 --> 00:14:57.839 +It doesn't have to use Anthropic's models. + +00:14:57.840 --> 00:15:00.279 +You can use local models, + +00:15:00.280 --> 00:15:07.619 +but it has the advantage of integrating very well with Emacs. + +00:15:07.620 --> 00:15:08.559 +I'm not going to demonstrate it, + +00:15:08.560 --> 00:15:11.159 +because it works essentially the same thing you could do + +00:15:11.160 --> 00:15:14.119 +approximately the same kinds of things + +00:15:14.120 --> 00:15:15.479 +you could do with Claude Code. + +00:15:15.480 --> 00:15:17.439 +You just write what you want to happen + +00:15:17.440 --> 00:15:18.639 +and it will make it happen. + +00:15:18.640 --> 00:15:21.879 +It again does not do this through Emacs, + +00:15:21.880 --> 00:15:23.039 +but what it does do is + +00:15:23.040 --> 00:15:25.119 +it gives you a much better Emacs interface + +00:15:25.120 --> 00:15:26.919 +that's not terminal-based, + +00:15:26.920 --> 00:15:29.639 +because you're not using it through the terminal, + +00:15:29.640 --> 00:15:31.239 +or not even through comint, + +00:15:31.240 --> 00:15:35.599 +you are using it through a backend + +00:15:35.600 --> 00:15:37.499 +that is exchanging structured information + +00:15:37.500 --> 00:15:40.999 +with this process that is doing all the work. + +00:15:41.000 --> 00:15:41.900 +But other than that, + +00:15:41.901 --> 00:15:44.519 +it's the same model as Claude Code + +00:15:44.520 --> 00:15:52.059 +and projects of that nature. + +NOTE Editing + +00:15:52.060 --> 00:15:56.159 +We've seen in the demos that I gave + +00:15:56.160 --> 00:15:58.639 +that there are AI experiences + +00:15:58.640 --> 00:16:01.279 +that are very natural in the world of editing. + +00:16:01.280 --> 00:16:05.339 +because they, like Copilot, just offers completion, + +00:16:05.340 --> 00:16:09.479 +it fits very well with what we all do in Emacs. + +00:16:09.480 --> 00:16:14.279 +And it's truly, yes, it's kind of a cheat in a sense + +00:16:14.280 --> 00:16:15.639 +for editing experiences, + +00:16:15.640 --> 00:16:20.159 +because it can do so much, but it's just editing. + +00:16:20.160 --> 00:16:25.259 +Whereas things like gptel and those kinds of tools, + +00:16:25.260 --> 00:16:29.799 +they are clearly in an editor and using editor, + +00:16:29.800 --> 00:16:35.319 +they're using Emacs, but they represent sort of like, well, + +00:16:35.320 --> 00:16:37.759 +you can edit for a while, then you could use these tools + +00:16:37.760 --> 00:16:39.479 +to do something that is not editing, + +00:16:39.480 --> 00:16:45.899 +this AI just changing the buffer for you. And that's fine. + +00:16:45.900 --> 00:16:48.399 +It's still... It may not be editing, + +00:16:48.400 --> 00:16:52.033 +but it's still clearly something that + +00:16:52.034 --> 00:16:55.567 +is useful to do in Emacs + +00:16:55.568 --> 00:16:57.039 +and belongs in Emacs. + +00:16:57.040 --> 00:17:01.859 +But the new tools like Claude Code and things like that + +00:17:01.860 --> 00:17:02.639 +are kind of different. + +00:17:02.640 --> 00:17:06.639 +Yes, they will get better integrated with Emacs, + +00:17:06.640 --> 00:17:11.639 +but it's not clear that they really need to. + +00:17:11.640 --> 00:17:15.479 +They can do a lot of things without editing. + +00:17:15.480 --> 00:17:19.239 +In a sense, editing is obsolete in some sense. + +00:17:19.240 --> 00:17:23.459 +For as many tasks, you don't need to edit anymore. + +00:17:23.460 --> 00:17:26.439 +And that's a nice thing. + +00:17:26.440 --> 00:17:30.579 +No one really knows when all this will end, + +00:17:30.580 --> 00:17:36.879 +how far things will go. It could be that in a decade or so, + +00:17:36.880 --> 00:17:41.039 +no one's really editing for work anymore. + +00:17:41.040 --> 00:17:43.159 +Maybe you're just writing instructions. + +00:17:43.160 --> 00:17:44.319 +You could do that with anything. + +00:17:44.320 --> 00:17:47.439 +You don't need Emacs or any special editor. + +00:17:47.440 --> 00:17:50.439 +We could all be using Notepad. That would be bad. + +00:17:50.440 --> 00:17:58.039 +But... I think it could go that far, + +00:17:58.040 --> 00:18:01.839 +but it could be that, well, for many specialized things, + +00:18:01.840 --> 00:18:04.359 +people are still using editing for certain tasks, + +00:18:04.360 --> 00:18:07.000 +but most tasks are getting fed to just... + +00:18:07.001 --> 00:18:08.839 +AI is just doing those things. + +00:18:08.840 --> 00:18:15.759 +In any case, I think it's clear that editing is diminishing, + +00:18:15.760 --> 00:18:17.959 +the need for editing itself is diminishing. + +00:18:17.960 --> 00:18:21.879 +And in such a world, It's interesting to think + +00:18:21.880 --> 00:18:24.799 +where Emacs is headed, especially in relation to + +00:18:24.800 --> 00:18:26.359 +all the other editors. + +00:18:26.360 --> 00:18:28.599 +I think people will use Emacs less. + +00:18:28.600 --> 00:18:31.639 +But I think other editors, like VS Code, + +00:18:31.640 --> 00:18:37.999 +may simply disappear or be a relatively fringe tool. + +00:18:38.000 --> 00:18:42.719 +And Emacs is going to follow its own path. + +00:18:42.720 --> 00:18:44.679 +It's very extensible. It could do anything. + +00:18:44.680 --> 00:18:47.919 +If there's one thing Emacs can do, it's adapt. + +00:18:47.920 --> 00:18:51.679 +Emacs has been around for a long time. + +00:18:51.680 --> 00:18:54.799 +It's pretty clear that Emacs will be around for a long time. + +00:18:54.800 --> 00:18:58.879 +It might be that in the future, + +00:18:58.880 --> 00:19:04.339 +editing is some sort of like an artisanal activity that we do. + +00:19:04.340 --> 00:19:05.599 +It's kind of weird to think about it. + +00:19:05.600 --> 00:19:07.679 +It's not like baking bread. + +00:19:07.680 --> 00:19:10.079 +But it is the sense that AI might be + +00:19:10.080 --> 00:19:12.399 +churning out code in the way, you know, + +00:19:12.400 --> 00:19:14.199 +the factories are turning out bread, + +00:19:14.200 --> 00:19:17.139 +but if you really want the good stuff, + +00:19:17.140 --> 00:19:20.999 +you'll have to do it yourself. + +00:19:21.000 --> 00:19:23.959 +I don't know if it'll be exactly like that, + +00:19:23.960 --> 00:19:29.519 +but it could be that Emacs survives and thrives + +00:19:29.520 --> 00:19:33.559 +in a very kind of specialized ecosystem of people + +00:19:33.560 --> 00:19:35.599 +who contribute and use it in the way + +00:19:35.600 --> 00:19:39.539 +it has survived and thrive right now. + +00:19:39.540 --> 00:19:46.139 +And I think that's a really nice way for all this to end up. + +00:19:46.140 --> 00:19:48.719 +There's the whole sense of how society will end up + +00:19:48.720 --> 00:19:50.759 +if all this happens. I don't know, + +00:19:50.760 --> 00:19:54.639 +but Emacs will be there for us when whatever happens. + +00:19:54.640 --> 00:20:00.079 +So thank you, and let's help make Emacs the best it can be + +00:20:00.080 --> 00:20:04.880 +to survive and thrive in the next decade. diff --git a/2025/info/blee-lcnt-after.md b/2025/info/blee-lcnt-after.md index 34b771d7..8983bcf5 100644 --- a/2025/info/blee-lcnt-after.md +++ b/2025/info/blee-lcnt-after.md @@ -1,6 +1,707 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="blee-lcnt-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Greetings. Salaam.""" start="00:00:05.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is Mohsen Banan.""" start="00:00:08.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am a software and internet engineer.""" start="00:00:10.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The title of this presentation""" start="00:00:12.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is "Blee-LCNT: An Emacs Centered""" start="00:00:14.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Content Production and Self-Publication Framework".""" start="00:00:18.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Blee stands for""" start="00:00:23.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Libre-Halaal Emacs Environment.""" start="00:00:25.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In last year's EmacsConf,""" start="00:00:29.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I introduced Blee, BISOS and ByStar""" start="00:00:31.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as concepts and as foundations.""" start="00:00:36.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This year I want to focus""" start="00:00:39.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on one concrete capability.""" start="00:00:41.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Content Production and Self-Publication""" start="00:00:43.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is a foundational Blee and BISOS Capability Bundle.""" start="00:00:47.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Both this presentation""" start="00:00:54.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the Nature of Polyexistentials book""" start="00:00:55.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""were developed with Blee-LCNT.""" start="00:00:59.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this presentation I want to look at Emacs""" start="00:01:02.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a central ingredient""" start="00:01:06.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for a usage environment""" start="00:01:08.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we can use to orchestrate production of""" start="00:01:10.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""quite fancy multi-media presentations.""" start="00:01:14.920" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Scope: A complete multi-media content processing framework""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's consider two different scopes.""" start="00:01:20.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""First, the scope of Blee-LCNT Capabilities Bundle,""" start="00:01:23.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is that of a complete""" start="00:01:27.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""multi-media content authorship,""" start="00:01:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""generation, publication""" start="00:01:32.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and distribution framework.""" start="00:01:34.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That complete scope is presented in this slide""" start="00:01:37.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it spans both black ink""" start="00:01:41.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and violet ink.""" start="00:01:44.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Second, the scope of this presentation,""" start="00:01:46.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is more limited.""" start="00:01:49.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this presentation I confine myself""" start="00:01:52.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to the bullets is violet ink.""" start="00:01:54.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here, I focus on presentation""" start="00:01:58.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and video as content types""" start="00:02:01.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their authorship and generation""" start="00:02:03.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their federated re-publication.""" start="00:02:06.000" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Prior art and similar art""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This is a common topic.""" start="00:02:10.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It makes good sense for us to start with""" start="00:02:12.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a review of prior art and similar art.""" start="00:02:14.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I went through the past EmacsConf talks""" start="00:02:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and found a good number of them""" start="00:02:21.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that also deal with the topic""" start="00:02:23.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of content generation.""" start="00:02:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A few of these are included""" start="00:02:28.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in black ink in this slide.""" start="00:02:30.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Many of these have chosen the Babel,""" start="00:02:33.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in other words Org-Mode+LaTeX as primary input.""" start="00:02:35.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I prefer the inverse of that.""" start="00:02:40.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I also looked for past talks""" start="00:02:43.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which have used Reveal.js and LaTeX-Beamer.""" start="00:02:45.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For example, Sacha's use of Reveal.js""" start="00:02:50.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is shown in violet inK.""" start="00:02:53.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And Ihor's use of Beamer is in teal ink.""" start="00:02:56.960" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""LaTeX-Beamer + Reveal.js with Blee and BISOS""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""This presentation is about a combination""" start="00:03:02.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Reveal.js and LaTeX-Beamer.""" start="00:03:05.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For those who may not be familiar""" start="00:03:08.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with Beamer and Reveal,""" start="00:03:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is a quick intro.""" start="00:03:12.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Among academics, LaTeX-Beamer is the go-to tool""" start="00:03:14.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for producing presentations.""" start="00:03:19.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Reveal.js is recognized""" start="00:03:22.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as the best of breed""" start="00:03:24.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for dispensing HTML slide decks.""" start="00:03:25.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For many, Reveal and Beamer""" start="00:03:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""live in different universes.""" start="00:03:32.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer is pdf oriented""" start="00:03:35.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal is html oriented.""" start="00:03:38.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Combining two powerful tools""" start="00:03:42.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""makes for an even more powerful tool.""" start="00:03:44.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This Blee-LCNT Presentations combines""" start="00:03:48.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the best of LaTeX-Beamer with Reveal.js.""" start="00:03:51.880" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Blee-LCNT novel concepts""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Beamer primarily functions as producer""" start="00:03:57.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal functions as dispenser""" start="00:04:00.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and multi-media enhancer.""" start="00:04:03.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here is how the combination works.""" start="00:04:05.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""LaTeX Beamer pdf result""" start="00:04:08.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is dissected into named frame images""" start="00:04:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which can then be inserted in Reveal.js.""" start="00:04:13.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""LaTeX Beamer frames can also be""" start="00:04:18.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""translated into html with HeVeA""" start="00:04:21.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which can also be inserted in Reveal.js.""" start="00:04:24.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Voice-overs for Beamer frames""" start="00:04:29.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be correlated to frame names""" start="00:04:31.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and applied to image or html frames.""" start="00:04:34.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Screen captures and image narrations as videos""" start="00:04:37.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be directly dispensed""" start="00:04:42.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through Reveal.""" start="00:04:44.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are various additional novel concepts""" start="00:04:46.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with regard to the way""" start="00:04:49.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we have integrated all of this together.""" start="00:04:50.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Instead of Org-Mode+LaTeX,""" start="00:04:54.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we do LaTeX+Org-Mode.""" start="00:04:57.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Instead of Babel, we do COMEEGA,""" start="00:05:01.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""instead of the Literate model""" start="00:05:04.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we introduce the Surrounded model.""" start="00:05:06.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You shall see various examples""" start="00:05:08.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of these shortly.""" start="00:05:10.840" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Part of a bigger picture - part of a series""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""All of this is part of a bigger picture.""" start="00:05:12.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A much bigger picture.""" start="00:05:15.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My talks at EmacsConf 2021, 2022""" start="00:05:17.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and 2024 are related.""" start="00:05:23.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This 2025 talk builds on those.""" start="00:05:26.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Last year's talk "About Blee:""" start="00:05:31.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""enveloping our own autonomy""" start="00:05:34.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""directed digital ecosystem""" start="00:05:36.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with Emacs" in particular,""" start="00:05:39.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""lays the foundations for this talk.""" start="00:05:42.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you have not seen that,""" start="00:05:44.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it would make good sense to review it.""" start="00:05:47.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In my previous talks I have been criticized""" start="00:05:51.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of having a "prophetic" style.""" start="00:05:54.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The scope of ByStar is lofty and immense.""" start="00:05:58.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In many ways it is unbelievable.""" start="00:06:02.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And EmacsConf talks are meant to be short.""" start="00:06:04.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, as a result, sometimes""" start="00:06:09.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I end up being cryptic.""" start="00:06:11.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Having accepted the "prophetic" criticism""" start="00:06:13.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as legitimate,""" start="00:06:17.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I now need to put a book on the table.""" start="00:06:19.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With that book in place, moving forward,""" start="00:06:23.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""when needing to be cryptic,""" start="00:06:26.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I shall cite Chapter and Verse.""" start="00:06:29.340" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Nature of polyexistentials""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""I am delighted to announce""" start="00:06:32.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the availability of my recent book,""" start="00:06:34.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""Nature of Polyexistentials".""" start="00:06:37.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The full title of my book is:""" start="00:06:40.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Nature Of Polyexistentials---""" start="00:06:42.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Basis For Abolishment Of The Western""" start="00:06:45.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Intellectual Property Rights Regime---""" start="00:06:48.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And Introduction Of The Libre-Halaal""" start="00:06:51.220" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Digital Ecosystem.""" start="00:06:53.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Knowledge, know-how, uses of know-how,""" start="00:06:57.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ideas, formulas, software and information""" start="00:06:59.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are inherently non-scarce.""" start="00:07:02.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""They are \*polyexistentials\*.""" start="00:07:05.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Unlike monoexistentials""" start="00:07:08.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which exist in singular,""" start="00:07:10.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""polyexistentials naturally exist in multiples.""" start="00:07:12.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""What is abundant in nature""" start="00:07:17.540" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is being made artificially scarce""" start="00:07:19.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through man-made ownership rules""" start="00:07:22.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called copyright and patents.""" start="00:07:25.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These mistaken ownership rules,""" start="00:07:28.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the so called Western IPR regime,""" start="00:07:31.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has immense ramifications""" start="00:07:34.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on the shape and the direction""" start="00:07:37.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the American Digital Ecosystem.""" start="00:07:38.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It would be an understatement to say""" start="00:07:42.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that the American Digital Ecosystem""" start="00:07:45.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has put humanity in danger.""" start="00:07:47.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Two parts of the book, in particular""" start="00:07:50.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are of immediate relevance.""" start="00:07:53.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Part III, the ethics layer,""" start="00:07:55.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""focuses on contours of cures.""" start="00:07:58.220" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Having dismissed the Western""" start="00:08:01.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""intellectual property rights (IPR) regime""" start="00:08:02.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as an erroneous governance model for polyexistentials,""" start="00:08:06.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I propose the Libre-Halaal model""" start="00:08:11.740" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of governance of polyexistentials""" start="00:08:14.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards facilitating conviviality of tools.""" start="00:08:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Part IV, the engineering layer,""" start="00:08:22.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""introduces the Libre-Halaal ByStar Digital Ecosystem.""" start="00:08:25.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as an ethical alternative""" start="00:08:29.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to the prevailing proprietary""" start="00:08:32.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""American digital ecosystem.""" start="00:08:34.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The book also provides additional details""" start="00:08:37.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""about the content generation""" start="00:08:40.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and publication facilities""" start="00:08:42.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am presenting here.""" start="00:08:44.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And the book itself, as content,""" start="00:08:46.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""was generated and published""" start="00:08:50.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""using the facilities""" start="00:08:53.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am presenting here.""" start="00:08:55.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can think of this book""" start="00:08:57.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as being in two volumes.""" start="00:08:59.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Our focus are Blee and BISOS in Volume II.""" start="00:09:01.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Volume I deals with the general concept""" start="00:09:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of polyexistence and invalidity""" start="00:09:10.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of IPR and our terminoloy of Libre-Halaal---""" start="00:09:13.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""instead of the common but ill directed vocabulary""" start="00:09:18.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Free Software and Open-Source and FOSS.""" start="00:09:23.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Chapter 11, I introduce""" start="00:09:28.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the very sensitive and potent vocabulary""" start="00:09:31.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Halaal and Libre-Halaal.""" start="00:09:34.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The contents of this book""" start="00:09:37.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""belong to all of humanity""" start="00:09:39.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and verbatim copying of it is unrestricted.""" start="00:09:41.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you want to read it, this book is yours.""" start="00:09:45.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The "Nature of Polyexistentials" book""" start="00:09:49.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is available both online and in print.""" start="00:09:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This book is available as two editions.""" start="00:09:56.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The US Edition and the International edition.""" start="00:09:59.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The US Edition is written""" start="00:10:03.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with a slightly milder Western unfriendly tone,""" start="00:10:05.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""while the International Edition""" start="00:10:10.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""includes additional original content in Farsi.""" start="00:10:12.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I consider the International Edition""" start="00:10:17.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be the authoritative version.""" start="00:10:20.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""However, many readers in""" start="00:10:22.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the US and Western countries""" start="00:10:25.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""may prefer the US Edition.""" start="00:10:27.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I maintain separate Git repositories""" start="00:10:31.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for each edition on GitHub:""" start="00:10:34.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""US Edition is at bxplpc/120033""" start="00:10:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and International Edition: bxplpc/120074""" start="00:10:42.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Cloning these repositories""" start="00:10:51.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""will give you access to the book""" start="00:10:53.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in PDF format (suitable for both""" start="00:10:56.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A4 and US Letter printing)""" start="00:11:00.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in EPUB format.""" start="00:11:04.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Alternatively, the content""" start="00:11:06.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can be downloaded directly from your browser""" start="00:11:08.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""without needing to clone the repositories.""" start="00:11:12.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""To ensure broader online""" start="00:11:17.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""availability and stability,""" start="00:11:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have also published the book on Zenodo,""" start="00:11:21.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""complete with a DOI (Digital Object Identifier).""" start="00:11:26.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can download both the A4""" start="00:11:31.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and 8.5 x 11 PDFs from there as well.""" start="00:11:34.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The book is also available in print on Amazon""" start="00:11:39.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and at most major bookstores""" start="00:11:44.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in the US and Western regions.""" start="00:11:46.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The ISBNs for both editions""" start="00:11:49.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are included in this slide.""" start="00:11:51.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Additionally, I have published""" start="00:11:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this book in Iran through Jangal Publishers.""" start="00:11:56.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I did not write this book for profit.""" start="00:12:00.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My aim is to share my thoughts""" start="00:12:03.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and encourage readers to engage with my views and ideas.""" start="00:12:05.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Your feedback is welcome,""" start="00:12:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I am genuinely interested""" start="00:12:12.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in hearing your perspectives.""" start="00:12:14.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Western markets, I have priced the print edition""" start="00:12:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""somewhat above production costs.""" start="00:12:20.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you find value in the book""" start="00:12:24.340" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the ByStar project,""" start="00:12:26.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""purchasing a copy will help support my work.""" start="00:12:28.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Thanks in advance for your support.""" start="00:12:32.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And here are the same links""" start="00:12:37.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a native Reveal slide.""" start="00:12:39.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If instead of a video,""" start="00:12:42.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you are viewing this presentation as a Reveal web page,""" start="00:12:43.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you can just click on the pointers and URLs.""" start="00:12:47.760" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB)""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Instead of the traditional model""" start="00:12:52.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of giving you recipes in a DIY context""" start="00:12:55.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards the goal of creating""" start="00:12:59.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""content processing capabilities""" start="00:13:01.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on top of what you may already have,""" start="00:13:04.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am doing the opposite.""" start="00:13:07.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am saying: take this whole BISOS and Blee thing,""" start="00:13:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in there you will also have""" start="00:13:15.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the content processing capabilities""" start="00:13:17.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am speaking of here.""" start="00:13:20.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, at the top level we have""" start="00:13:22.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""our own autonomy and privacy""" start="00:13:24.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""directed digital ecosystem,""" start="00:13:27.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which in contrast to the center oriented""" start="00:13:30.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""American digital ecosystem,""" start="00:13:32.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is edge oriented.""" start="00:13:35.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We call it: "The Libre-Halaal""" start="00:13:38.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""ByStar Digital Ecosystem".""" start="00:13:40.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""All the systems in ByStar,""" start="00:13:43.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""run BISOS (By\* Internet Services OS),""" start="00:13:45.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is a layer on top of Debian.""" start="00:13:50.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The usage environment of ByStar and BISOS is Blee""" start="00:13:53.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is a layer on top of Emacs.""" start="00:13:58.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With those in place, we then create""" start="00:14:01.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a capability bundle called Blee-LCNT.""" start="00:14:04.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, when you buy into Blee and BISOS,""" start="00:14:10.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you will naturally also get""" start="00:14:13.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""these content processing capabilities---""" start="00:14:15.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""without a need for any recipies or DIY effort.""" start="00:14:18.720" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""ByStar containment hierarchy and ByStar capability bundles""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""If you were to look at the model""" start="00:14:23.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I introduced as containment hierarchies,""" start="00:14:24.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it would look like this.""" start="00:14:29.120" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Aggregated conviviality of ByStar capabilities""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""We love Emacs and we love Unix""" start="00:14:31.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""because their design is convivial.""" start="00:14:33.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""By convivial, I am referring""" start="00:14:36.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to Ivan Illich's concept""" start="00:14:39.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and terminology of "Tools for Conviviality".""" start="00:14:40.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It was first published in 1973.""" start="00:14:45.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It's a must read.""" start="00:14:48.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""A goal of the design""" start="00:14:50.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the ByStar Digital Ecosystem""" start="00:14:52.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is to enlarge the aggregated""" start="00:14:54.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""conviviality of its capabilities.""" start="00:14:57.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""What distinguishes Blee-LCNT""" start="00:15:01.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from other content processing tools and frameworks,""" start="00:15:04.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is our emphasis on enhancing""" start="00:15:08.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the aggregated conviviality.""" start="00:15:12.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These tools let you express yourself.""" start="00:15:15.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""They let you be in charge.""" start="00:15:19.260" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Parts list: integrated components""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Here is our parts list.""" start="00:15:22.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These are the components""" start="00:15:24.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we have chosen to bring together""" start="00:15:25.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards our goal of creating convivial tools.""" start="00:15:27.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this slide, we are using black ink""" start="00:15:32.780" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to denote exisiting tools""" start="00:15:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and we use violet ink""" start="00:15:38.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to denote pieces that we have developed""" start="00:15:41.340" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""towards cohesive integration.""" start="00:15:44.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""[This] video,""" start="00:15:46.560" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Resulting contents - output forms and formats""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""the video is just one of the outputs.""" start="00:15:47.868" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are other outputs as well.""" start="00:15:51.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In this figure, the outputs""" start="00:15:54.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are shown in the top layer.""" start="00:15:56.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Using this video as an example,""" start="00:15:58.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this presentation's output also include""" start="00:16:02.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the "Presentation Form"""" start="00:16:05.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the "Article-Presentation Form".""" start="00:16:07.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at these more closely.""" start="00:16:11.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For Presentations, there are 3 different forms.""" start="00:16:13.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The Video Form, the Presentation From""" start="00:16:17.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the Article-Presentation Form.""" start="00:16:19.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The Presentation Form produces both a pdf output""" start="00:16:22.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Reveal output.""" start="00:16:27.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Next we will walkthrough some of the benefits""" start="00:16:29.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that availability of these forms""" start="00:16:32.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and formats provide.""" start="00:16:35.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The video presentation that you are watching""" start="00:16:38.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is just one of the outputs""" start="00:16:41.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the Blee-LCNT machinery.""" start="00:16:44.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""There are two PDF format outputs""" start="00:16:48.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and two HTML outputs""" start="00:16:52.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that are also quite useful.""" start="00:16:56.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The primary output of Beamer""" start="00:16:58.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is a set of slides""" start="00:17:02.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that people use to give their talks with.""" start="00:17:04.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Typically that's done live.""" start="00:17:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In my case I dissect the images of each frame""" start="00:17:12.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and do a voiceover on it""" start="00:17:19.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then dispense it through reveal.""" start="00:17:21.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In a second, you will see that as well.""" start="00:17:28.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This PDF output is very useful.""" start="00:17:33.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You get the table of contents, of course,""" start="00:17:36.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and in addition to that,""" start="00:17:39.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer generates navigations for you""" start="00:17:42.208" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""where on any part you get""" start="00:17:46.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a small table of content as well.""" start="00:17:49.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is heavily used amongst academics,""" start="00:17:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it's a good output on its own,""" start="00:17:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I'm augmenting it""" start="00:18:00.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in a variety of ways.""" start="00:18:03.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In addition to the presentation PDF format,""" start="00:18:05.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there is also an article-presentation PDF format""" start="00:18:09.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which gives you the same content,""" start="00:18:15.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but it gives it to you in a textual form""" start="00:18:18.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with the table of content and the rest.""" start="00:18:25.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is a good form to use""" start="00:18:30.940" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""when you are giving, for example, class lectures,""" start="00:18:34.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the students often prefer this format.""" start="00:18:39.920" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""reveal.js""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now for the HTML format output, the most relevant,""" start="00:18:45.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of course, is the reveal itself.""" start="00:18:51.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you have not used reveal before,""" start="00:18:55.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in my view, it's a HTML slide dispenser.""" start="00:19:05.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I don't look at it as a presentation framework.""" start="00:19:10.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I use, as you are seeing, we use Beamer to feed into it""" start="00:19:15.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and we use it to dispense the information.""" start="00:19:22.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It has all the typical navigation""" start="00:19:25.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""capabilities that you would expect,""" start="00:19:33.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and most of what I have as slides are images,""" start="00:19:39.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but occasionally, particularly when there is a need""" start="00:19:44.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to provide pointers, HTML pointers,""" start="00:19:48.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I then also include a textual output.""" start="00:19:53.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This is also produced""" start="00:20:01.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from the Beamer LaTeX source,""" start="00:20:05.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but it's HTML through textual HTML,""" start="00:20:09.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""through HeVeA, not the image.""" start="00:20:14.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can... you get a table of contents.""" start="00:20:19.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can navigate""" start="00:20:22.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and there are a whole lot of other features""" start="00:20:24.575" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that reveal also provides.""" start="00:20:28.080" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Generating the video""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So to generate the video,""" start="00:20:31.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""what I do is I come to""" start="00:20:35.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the very beginning of the presentation.""" start="00:20:40.981" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I turn on the screen capture recorder,""" start="00:20:49.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then I start playing""" start="00:20:51.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the voiceover for each slide""" start="00:20:54.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and at the very end, you get a video,""" start="00:20:58.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but what you just did is you dispensed every frame,""" start="00:21:02.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""one at a time, through reveal.""" start="00:21:08.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In addition to this HTML form,""" start="00:21:11.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you also get an article presentation form of it,""" start="00:21:15.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with a full table of contents""" start="00:21:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the videos are there, and the notes are there,""" start="00:21:24.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and this is also quite useful.""" start="00:21:27.760" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""A unified single input -- a sequencef of frames""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now, let's look at the one single input file""" start="00:21:33.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that produced all of the outputs""" start="00:21:36.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we just saw.""" start="00:21:38.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have put both the input file""" start="00:21:39.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and some of the output files""" start="00:21:43.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for this presentation on Github.""" start="00:21:45.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Here are some links""" start="00:21:48.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to these repos and files.""" start="00:21:49.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And here are the same links""" start="00:21:51.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a native Reveal slide.""" start="00:21:54.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This figure gives us an overview""" start="00:21:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of how one set of inputs""" start="00:21:59.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""encapsulted in a single file""" start="00:22:02.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can produce all of the outputs that we saw.""" start="00:22:04.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The main TeX file shown at the bottom""" start="00:22:08.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is processed by both XeLaTeX and by HeVeA.""" start="00:22:11.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That main TeX file, in addition""" start="00:22:15.660" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to LaTeX syntax,""" start="00:22:18.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""also include org-mode constructs""" start="00:22:19.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that facilitate addition of audio and video files.""" start="00:22:23.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Later, I'll walkthrough the bodyPresArtEnFa.tex file""" start="00:22:27.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that generated this very presentation with you.""" start="00:22:34.880" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Abstractions to keep in mind""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""When you construct that primary TeX file,""" start="00:22:39.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there are several abstractions""" start="00:22:42.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you need to keep in mind.""" start="00:22:44.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Is my presentation going to go""" start="00:22:46.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from Left-To-Right or from Right-To-Left?""" start="00:22:49.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Perso-Arabic presentations go from Right-To-Left.""" start="00:22:52.740" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Another consideration is the types""" start="00:22:57.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of forms of results that you want.""" start="00:22:59.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Just the presentation""" start="00:23:03.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""or Article-Presentation as well?""" start="00:23:05.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With those choices in place""" start="00:23:09.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""you can produce condition based text""" start="00:23:10.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for each of your desired outputs.""" start="00:23:13.400" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Frame control types""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Think of this video presentation""" start="00:23:16.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as a sequence of frames.""" start="00:23:18.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Each frame is controlled by an org-mode dynamic block.""" start="00:23:20.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This table lists available dblocks""" start="00:23:26.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from which you can choose.""" start="00:23:29.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For example, this particular frame""" start="00:23:31.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we are watching""" start="00:23:34.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is controlled by b:lcnt:pres:frame/derivedImage.""" start="00:23:34.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Beamer creates a pdf file""" start="00:23:41.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that includes the image of this slide.""" start="00:23:44.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""That image is then injected into Reveal.""" start="00:23:47.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And in the end, a video of that image is produced""" start="00:23:51.460" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with the narrations""" start="00:23:55.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that I am uttering right now.""" start="00:23:57.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""All of this has similarly been applied""" start="00:23:59.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to each and every frame""" start="00:24:02.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you have been watching.""" start="00:24:03.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Similar to Frame Controls,""" start="00:24:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""there are org-mode dynamic blocks""" start="00:24:08.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for "Frame Body Types".""" start="00:24:10.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You can easily insert an image""" start="00:24:13.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which is typically created by OpenOffice Draw""" start="00:24:15.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""into a frame.""" start="00:24:19.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Same with say a screen capture video.""" start="00:24:21.620" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""How outputs are generate from the inputs""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have looked at the "Outputs" and the "Inputs",""" start="00:24:24.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""let's look at how the Outputs""" start="00:24:29.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are generated from the Inputs.""" start="00:24:31.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's bootstrap Raw-BISOS and Raw-Blee.""" start="00:24:35.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Starting from scratch,""" start="00:24:39.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""get yourself a fresh copy of Debian 12.""" start="00:24:41.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then go to https://github.com/bxGenesis/start .""" start="00:24:45.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The README.org file""" start="00:24:52.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of that github repo""" start="00:24:55.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is same as Chapter 18,""" start="00:24:57.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""Engineering Adoption of BISOS and ByStar" of the book.""" start="00:24:58.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We will next run "raw-bisos.sh",""" start="00:25:01.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""but prior to that, let's take a quick look.""" start="00:25:05.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This bootstrap scripts will do a lot as root""" start="00:25:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on your Fresh-Debian.""" start="00:25:14.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It is best to first try it""" start="00:25:16.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on a disposable VM.""" start="00:25:18.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""raw-bisos.sh adds the current debian user to sudoers.""" start="00:25:21.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then it installs pipx.""" start="00:25:27.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And then with pipx it installs""" start="00:25:30.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from PyPI bisos.provision.""" start="00:25:34.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""bisos.provision includes additional bash scripts""" start="00:25:38.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that are then executed.""" start="00:25:43.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full installation involves""" start="00:25:45.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""setting up various accounts, groups,""" start="00:25:48.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""various directory hierarchies,""" start="00:25:51.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""lots of apt packages""" start="00:25:53.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and lots of python packages""" start="00:25:55.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""from the bisos namespace.""" start="00:25:57.980" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you are ready, copy and paste""" start="00:26:01.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""this line and run it.""" start="00:26:03.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""You will be prompted""" start="00:26:06.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for the root password.""" start="00:26:08.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Then be patient.""" start="00:26:09.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full installation""" start="00:26:11.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""can take 15 minutes or so.""" start="00:26:12.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The logs of this script""" start="00:26:14.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are also captured""" start="00:26:17.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in ~/raw-bisos-${dateTag}-log.org""" start="00:26:18.520" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Context for unified source walkthrough""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Now that we have Raw-BISOS and Raw-Blee installed,""" start="00:26:25.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we are ready to walk through""" start="00:26:28.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the unified source""" start="00:26:31.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of the very presentation""" start="00:26:32.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that you are watching.""" start="00:26:34.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""The "bodyPresArtEnFa.tex" file""" start="00:26:36.260" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that we will visit""" start="00:26:40.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is in COMEEGA-LaTeX syntax""" start="00:26:42.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with lots of org-mode dblocks""" start="00:26:45.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which generate Beamer-LaTeX frames""" start="00:26:47.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and conditioned LaTeX bodies.""" start="00:26:50.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""After the walkthrough,""" start="00:26:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I'll describe dblocks and COMEEGA in more detail.""" start="00:26:55.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""At the tail end of the walkthrough,""" start="00:27:00.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we will also go through the generation process""" start="00:27:02.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which runs XeLaTeX and HeVeA and a lot more.""" start="00:27:05.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at our input file.""" start="00:27:10.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It's a LaTeX file in LaTeX mode,""" start="00:27:13.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it has org syntax org-mode included in it,""" start="00:27:17.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and I can toggle between LaTeX and org-mode.""" start="00:27:24.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, now I'm gonna be in org-mode,""" start="00:27:29.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and org-mode gives me everything""" start="00:27:33.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""that org has to offer,""" start="00:27:37.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""including a very convenient navigation framework.""" start="00:27:39.400" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""One slide""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's take one slide and take a look at how it was done.""" start="00:27:46.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So I would come to this scope slide""" start="00:27:54.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and while I am there, I'm going to click on N.""" start="00:27:58.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""N takes me to the native LaTeX form back,""" start="00:28:04.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""so that I'll be looking at it not in org, but in LaTeX.""" start="00:28:09.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So we're back in LaTeX, and as you can see""" start="00:28:16.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""it uses a dynamic block""" start="00:28:22.907" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""starting with the comments and the BEGIN,""" start="00:28:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it uses a dynamic block""" start="00:28:30.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""named a framedDrive image,""" start="00:28:34.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""which means the content of this frame""" start="00:28:38.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""will be dispensed as an image, not as text,""" start="00:28:45.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and it also automatically creates for me""" start="00:28:50.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a name, a label, that can be used""" start="00:28:56.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for voiceover augmentation.""" start="00:29:00.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So a file in the audio directory""" start="00:29:05.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called ScopeOfBleeLcnt.mp3""" start="00:29:08.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is this audio that will come on top of this slide""" start="00:29:13.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and then the rest is the LaTeX itself.""" start="00:29:19.320" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Dynamic blocks""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""The concept of "Org Dynamic Blocks"""" start="00:29:24.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is very powerful.""" start="00:29:29.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I think of them as universal""" start="00:29:31.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""visible macros.""" start="00:29:33.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But, why should they be primarily used in just Org-Mode?""" start="00:29:35.180" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I say, let's generalize them""" start="00:29:41.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to "Emacs Dynamic Blocks".""" start="00:29:43.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Have defaults for org-dblock-start-re""" start="00:29:46.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in every relevant mode""" start="00:29:49.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and use them everywhere.""" start="00:29:52.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Blee does that.""" start="00:29:55.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In COMEEGA-LaTeX, Dynamic Blocks create Frame Controls""" start="00:29:56.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and insert Image and Video contents.""" start="00:30:01.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Much of Blee and BISOS""" start="00:30:05.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""are implemented in COMEEGA.""" start="00:30:07.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Almost all of our Elisp, Python, Bash""" start="00:30:09.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and LaTeX work uses COMEEGA.""" start="00:30:13.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""COMEEGA stands for Collaborative""" start="00:30:17.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Org-Mode""" start="00:30:19.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Enhanced Emacs Generalized Authorship.""" start="00:30:21.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""It is the inverse of org-babel.""" start="00:30:24.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""COMEEGA adds org-mode""" start="00:30:27.880" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to your programming mode.""" start="00:30:30.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Full and proper use of COMEEGA,""" start="00:30:33.100" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""requires Polymode.""" start="00:30:35.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's call that Poly-COMEEGA.""" start="00:30:38.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But Emacs's Polymode""" start="00:30:41.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is work-in-progress,""" start="00:30:43.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""particularly now with the new tree-sitter.""" start="00:30:45.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""So, in the interim, my usage of COMEEGA""" start="00:30:49.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""has been in the form of Toggle-COMEEGA.""" start="00:30:53.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Where I manually switch between""" start="00:30:55.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""the programming-mode and org-mode.""" start="00:30:59.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For me this has proved to be""" start="00:31:02.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""a fine interim solution.""" start="00:31:04.200" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Internationalization - a non-Americanist perspective""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Naturally, content processing""" start="00:31:05.800" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""should be multi-lingual""" start="00:31:09.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and internationalized.""" start="00:31:11.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let's look at that dimension.""" start="00:31:14.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I am Iranian and much of what I write is in Farsi.""" start="00:31:15.840" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Getting Perso-Arabic text right""" start="00:31:21.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""is often a challenge,""" start="00:31:23.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""as it involves Bi-Directional text (BIDI)""" start="00:31:25.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and shaping of characters.""" start="00:31:30.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In the context of our content generation""" start="00:31:33.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""these need to span all relevant tools,""" start="00:31:36.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""not just emacs.""" start="00:31:39.820" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""For emacs, I have created""" start="00:31:41.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""my own input method""" start="00:31:43.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""called farsi-transliterate-banan.""" start="00:31:46.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My EmacsConf 2021 talk was about that.""" start="00:31:49.420" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Now let's look at some examples""" start="00:31:54.140" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and spice it up a bit with semantics.""" start="00:31:57.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""As an example of proper BIDI text,""" start="00:32:01.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is the orignal Farsi text""" start="00:32:05.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""along with English translation""" start="00:32:07.900" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Imam Khomeini's text""" start="00:32:10.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""with respect to invalidity""" start="00:32:12.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of Western Intellectual Proprty Rights regime.""" start="00:32:15.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And as another example""" start="00:32:20.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of proper BIDI text,""" start="00:32:23.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""here is Ayatollah Mothari's take on Western IPR""" start="00:32:24.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""not being private property. Note that these predate""" start="00:32:29.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""by more than half a century""" start="00:32:35.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Jack Dorsey and Elon Musk's tweets of April 11, 2025""" start="00:32:36.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""saying "Delete all IP law".""" start="00:32:43.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This topic is too important""" start="00:32:47.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and too sensitive""" start="00:32:49.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be left to American billionaires""" start="00:32:50.400" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and their tweets.""" start="00:32:53.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let me again refer you to the logic""" start="00:32:55.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""of polyexistentials in my book.""" start="00:32:58.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Chapter 14 of the book is dedicated to""" start="00:33:00.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Ethics and ownership in Religions.""" start="00:33:06.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""With respect to my preference""" start="00:33:08.580" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for Ethics over Freedom,""" start="00:33:10.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""let me refer you to Section 12.4""" start="00:33:12.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text=""""A Cynical Perspective""" start="00:33:16.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on Freedom Orientation of Americans"""" start="00:33:19.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in which I describe where the FOSS labels""" start="00:33:22.860" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and the likes of Stallman, Raymond,""" start="00:33:26.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Moglen and Lessig have gone wrong.""" start="00:33:29.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If you are one of their followers,""" start="00:33:31.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""perhaps Chapter 12 is for you.""" start="00:33:34.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""My emphasis thus far has been on content generation.""" start="00:33:36.600" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Autonomous self-publication and federated re-publications""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""Let's very briefly also look at""" start="00:33:42.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Autonomous Self-Publication""" start="00:33:45.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Federated Re-Publications of our content.""" start="00:33:47.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""From the very beginning the Debian folks""" start="00:33:52.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""understood the importance of "Universality"""" start="00:33:55.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and coined the "Universal Debian" label.""" start="00:33:59.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This means that we can base""" start="00:34:03.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""our entire digital ecosystem""" start="00:34:05.920" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""on just the Libre-Halaal Debian distro.""" start="00:34:08.620" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""And that is what we have done with ByStar.""" start="00:34:13.500" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In ByStar, everything is based on""" start="00:34:17.300" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""just the Universal Debian everywhere.""" start="00:34:20.040" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""This has made our Usage Environment""" start="00:34:24.120" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""totally harmonious with our Service Environment""" start="00:34:27.000" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""allowing for very powerful software-service continuums.""" start="00:34:31.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Of course, all of this is immediately applicable""" start="00:34:38.060" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to our ByStar Content Bundle as well.""" start="00:34:41.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Some have asked, why don't you also include Ubuntu?""" start="00:34:46.020" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I think the opposite makes more sense.""" start="00:34:50.520" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Ubuntu should converge with Debian.""" start="00:34:53.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I tried to explain this to Mark Shuttleworth""" start="00:34:56.700" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in an email a while back.""" start="00:34:59.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I have included that email""" start="00:35:02.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""in Section 12.1.5.""" start="00:35:04.120" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Ingredients of BISOS platforms and their progression""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""In this presentation, we have stopped""" start="00:35:07.720" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""at the "Raw-BISOS" stage.""" start="00:35:10.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""We can further evolve Raw-BISOS""" start="00:35:13.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and make it be "Sited"""" start="00:35:15.760" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and provide autonomous publication services.""" start="00:35:17.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""But here by going through EmacsConf and youtube""" start="00:35:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we are using the "Federated Re-Publications" model.""" start="00:35:25.680" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Something this large,""" start="00:35:30.960" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""should be well documented.""" start="00:35:32.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In Emacs, the way that""" start="00:35:35.480" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""we have been dealing with documentation""" start="00:35:37.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and information retrieval is archaic.""" start="00:35:39.320" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Man-pages, TeXInfo, Helpful-Mode""" start="00:35:43.440" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and convention based Doc-Strings are old and limited.""" start="00:35:46.080" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""In BISOS and Blee, we use Blee-Panels""" start="00:35:51.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for all kinds of documentation.""" start="00:35:55.280" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""Let me show you some examples.""" start="00:35:57.740" video="mainVideo-blee-lcnt" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Moving forward""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]]</div>[[!template text="""So, what next?""" start="00:36:02.560" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""If Blee, BISOS, ByStar, Libre-Halaal, Polyexistentials""" start="00:36:05.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and these Content Processing capabilities""" start="00:36:10.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""have piqued your interest,""" start="00:36:14.160" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""please feel welcome to contact me.""" start="00:36:16.640" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""These Emacs Conferences have proven""" start="00:36:19.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""to be very useful and productive.""" start="00:36:22.240" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I look forward to your thoughts,""" start="00:36:25.380" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""feedback and questions.""" start="00:36:27.200" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""I want to thank all the EmacsConf 2025 Organizers""" start="00:36:29.600" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""for their great work,""" start="00:36:35.360" video="mainVideo-blee-lcnt" id="subtitle"]] +[[!template text="""and Sacha in particular.""" start="00:36:37.200" video="mainVideo-blee-lcnt" id="subtitle"]] + +</div> + +Captioner: mohsen + Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20blee-lcnt%3A%20Blee-LCNT%3A%20An%20Emacs-centered%20content%20production%20and%20self-publication%20framework) diff --git a/2025/info/blee-lcnt-before.md b/2025/info/blee-lcnt-before.md index 1fb81a7a..d53fb065 100644 --- a/2025/info/blee-lcnt-before.md +++ b/2025/info/blee-lcnt-before.md @@ -8,12 +8,39 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 37-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html> Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt> Etherpad: <https://pad.emacsconf.org/2025-blee-lcnt> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T18:35:00Z" end="2025-12-06T19:15:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:35 PM - 2:15 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:35 PM - 1:15 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:35 AM - 12:15 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:35 AM - 11:15 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:35 PM - 7:15 PM UTC <br />Saturday, Dec 6 2025, ~7:35 PM - 8:15 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:35 PM - 9:15 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~12:05 AM - 12:45 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:35 AM - 3:15 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:35 AM - 4:15 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-blee-lcnt"><source src="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-blee-lcnt" data=""" +00:05.760 Introduction +01:20.080 Scope: A complete multi-media content processing framework +02:10.320 Prior art and similar art +03:02.420 LaTeX-Beamer + Reveal.js with Blee and BISOS +03:57.160 Blee-LCNT novel concepts +05:12.520 Part of a bigger picture - part of a series +06:32.560 Nature of polyexistentials +12:52.640 Content processing - a ByStar/BISOS/Blee Capability Bundle (BCB) +14:23.120 ByStar containment hierarchy and ByStar capability bundles +14:31.280 Aggregated conviviality of ByStar capabilities +15:22.000 Parts list: integrated components +15:47.868 Resulting contents - output forms and formats +18:45.720 reveal.js +20:31.980 Generating the video +21:33.480 A unified single input -- a sequencef of frames +22:39.180 Abstractions to keep in mind +23:16.200 Frame control types +24:24.360 How outputs are generate from the inputs +26:25.200 Context for unified source walkthrough +27:46.480 One slide +29:24.080 Dynamic blocks +31:05.800 Internationalization - a non-Americanist perspective +33:42.280 Autonomous self-publication and federated re-publications +35:07.720 Ingredients of BISOS platforms and their progression +36:02.560 Moving forward +"""]]<div></div>Duration: 36:41 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-blee-lcnt">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.opus">Download --main.opus (32MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--main.webm">Download --main.webm (97MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--script.txt">Download --script.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.txt">Download --split.txt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-blee-lcnt--bleelcnt-an-emacscentered-content-production-and-selfpublication-framework--mohsen-banan--split.vtt">Download --split.vtt</a></li><li><a href="https://youtu.be/49e0ES-nk0k">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/calc-after.md b/2025/info/calc-after.md index 3dbaf680..7c0f6ebf 100644 --- a/2025/info/calc-after.md +++ b/2025/info/calc-after.md @@ -1,6 +1,313 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="calc-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Hello, my name is Christopher Howard and welcome to my talk.""" start="00:00:03.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This is basically an introduction""" start="00:00:08.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to the built-in Emacs calculator,""" start="00:00:11.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""properly known as Emacs Calc,""" start="00:00:15.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""particularly from the perspective of someone""" start="00:00:18.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with a technical background such as engineering or electronics.""" start="00:00:21.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I will say, though, my personal interest is not really""" start="00:00:27.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in digital computing or digital calculators,""" start="00:00:32.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but lately has been focused more on analog computing.""" start="00:00:37.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I have, for example, been working to master""" start="00:00:42.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the venerable slide rule, a mechanical computer""" start="00:00:46.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that calculates multiplication powers and logarithms.""" start="00:00:50.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Here's a picture of one.""" start="00:00:57.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""It's a physical tool that was used for hundreds of years""" start="00:01:02.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for this sort of thing""" start="00:01:06.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""before the handheld calculator was made popular.""" start="00:01:09.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And I also had a project that I did""" start="00:01:16.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for a while to several months""" start="00:01:18.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to build an electronic analog computer.""" start="00:01:21.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""A rudimentary attempt of mine, but it's functional,""" start="00:01:33.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and it's basically a 1960s or 1970s style""" start="00:01:38.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""electronic analog computer built very much on a budget,""" start="00:01:43.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but the box in the middle is the computer proper""" start="00:01:48.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which has most of the components inside of it""" start="00:01:52.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""as well as the potentiometers for setting values,""" start="00:01:55.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and an operation switch.""" start="00:02:00.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There's a patch panel on the left""" start="00:02:02.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for connecting the different integrators,""" start="00:02:04.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""amplifiers, multipliers, and so forth together.""" start="00:02:07.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then the output of the simulation is displayed""" start="00:02:11.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""on the oscilloscope on the right side,""" start="00:02:16.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is a digital oscilloscope.""" start="00:02:19.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To be honest, I think that a talk about analog computing""" start="00:02:25.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""would be much more interesting""" start="00:02:28.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""than the talk that I'm about to give,""" start="00:02:30.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but unfortunately that would be out of scope for EmacsConf.""" start="00:02:32.040" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What is Calc?""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So instead I will talk about Emacs Calc,""" start="00:02:36.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the digital calculator built into Emacs.""" start="00:02:39.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Emacs Calc, while not being a replacement for software""" start="00:02:43.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""like GNU Octave, does have advanced calculator functionality""" start="00:02:47.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that can be useful in engineering, electronics,""" start="00:02:51.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or other technical applications. So I don't want to oversell it,""" start="00:02:55.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but I think functionality-wise, Calc is somewhere in between""" start="00:03:00.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what you'd expect of a decent scientific calculator""" start="00:03:06.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and an advanced graphics calculator.""" start="00:03:12.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So this talk I'll mention is not intended to be a tutorial""" start="00:03:23.940" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but only a brief introduction to Calc.""" start="00:03:28.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Please refer to the built-in Calc info manual""" start="00:03:33.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for detailed instructions on how to complete operations.""" start="00:03:37.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Turn off my volume here.""" start="00:03:46.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The documentation for Emacs Calc is built-in,""" start="00:04:01.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""although on some distributions you may have to install""" start="00:04:05.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the Emacs documentation separately for licensing reasons.""" start="00:04:10.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Calc presents itself as a stack-based calculator""" start="00:04:24.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""where entries are dropped onto a stack""" start="00:04:28.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then an operation is performed on the stack entries.""" start="00:04:31.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, I can drop 1.23 onto the stack,""" start="00:04:36.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then 8.56, and then multiply them together.""" start="00:04:42.900" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-algebraic-entry""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It may present itself as a stack-based calculator,""" start="00:04:54.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but indeed, Calc is also capable of accepting input""" start="00:05:01.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in the more well-known algebraic format""" start="00:05:05.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""by using the calc-algebraic-entry command,""" start="00:05:07.740" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which by default is bound to the apostrophe (') key.""" start="00:05:10.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So you type the apostrophe key, enter the algebraic input,""" start="00:05:15.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""including parentheses as needed.""" start="00:05:19.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, here's a calculation of the resonance frequency""" start="00:05:22.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""of a coil which has an inductance of 250 microhenries""" start="00:05:28.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and 160 picofarads, taken from one of my electronics handbooks.""" start="00:05:35.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The formula for that is 1 over 2 pi""" start="00:05:41.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then the square root of our inductance""" start="00:05:50.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is in this case 250 microfarads - excuse me, microhenries""" start="00:05:57.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then the capacitance is 160 picofarads.""" start="00:06:06.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Small typo here.""" start="00:06:19.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Now I need to evaluate that one more time,""" start="00:06:24.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because pi is a symbol.""" start="00:06:26.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I get about 800 kHz resonant frequency.""" start="00:06:30.920" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-roll-down""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""The command calc-roll-down,""" start="00:06:37.399" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which by default is bound to the TAB key,""" start="00:06:41.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will swap the top two stack entries,""" start="00:06:44.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which is sometimes useful if you need to manipulate something""" start="00:06:47.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that's further down the stack.""" start="00:06:51.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So I can swap this around and say multiply by two""" start="00:06:57.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then put it back where it was.""" start="00:07:02.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This command is also capable of rolling the entire stack.""" start="00:07:05.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Say I want to shift them all around.""" start="00:07:14.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This can be done by passing extra arguments""" start="00:07:18.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to the calc-roll-down function.""" start="00:07:21.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's a little bit inconvenient to do manually,""" start="00:07:23.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so in my init file, I defined here a key definition""" start="00:07:28.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that passes in those arguments correctly.""" start="00:07:40.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I attached this to shift-tab,""" start="00:07:45.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so this way, I can roll the entire stack.""" start="00:07:49.180" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I could change one entry here""" start="00:07:52.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then put it back where it was.""" start="00:07:56.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So Calc does algebraic input.""" start="00:08:03.460" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""It also does advanced functions""" start="00:08:07.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that you would expect any handheld scientific calculator,""" start="00:08:10.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""including trigonometric functions.""" start="00:08:15.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, we can get the sine of a number.""" start="00:08:19.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Now I'll mention here that Calc has multiple modes.""" start="00:08:25.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Right now it's in degree mode.""" start="00:08:30.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""You can switch over to radian mode if you want.""" start="00:08:32.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'm going to put it back in degrees.""" start="00:08:38.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Drop 12 degrees on the stack, and then get the sine of that.""" start="00:08:42.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then with the inverse sine function, I can put it back.""" start="00:08:49.800" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Solving equations with calc-solve-for""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc also has the nifty ability to solve equations for you""" start="00:08:58.180" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so long as the equation is not too complicated.""" start="00:09:07.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This is using the calc-solve-for function.""" start="00:09:13.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For example, we could enter in an equation algebraically,""" start="00:09:19.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then run calc-solve-for, and we just have to tell it""" start="00:09:31.700" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what variable we want to solve for. And there we go.""" start="00:09:36.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""We can do this manually as well""" start="00:09:41.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""just so you can see that we get the same result.""" start="00:09:43.200" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Systems of equations""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc is also able to solve systems of equations.""" start="00:09:54.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""We can put more than one equation on the stack,""" start="00:09:57.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then solve for several variables.""" start="00:10:03.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To give a technical example for this,""" start="00:10:08.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll show you a resistor network scribble that I did recently.""" start="00:10:13.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Hopefully you can see that. Basically,""" start="00:10:30.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it's fairly simple, a pretty simple resistor network""" start="00:10:32.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with 1 kilo ohm and 10 kilo ohm resistors,""" start="00:10:38.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and using the loop methods, we are calculating the currents,""" start="00:10:42.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the current in each loop, and then that current can be used""" start="00:10:48.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to solve for the voltage of each individual resistor""" start="00:10:52.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if we want to. So at the bottom there we have the equations""" start="00:10:58.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that we come up with as we work through each loop.""" start="00:11:06.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And I'm going to paste that into Calc.""" start="00:11:11.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""To save some time, I'm going to copy and paste that""" start="00:11:19.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""from my notes instead of typing it out.""" start="00:11:22.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So we have two equations there on the stack""" start="00:11:34.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in one stack entry. We run that calc-solve-for function again,""" start="00:11:38.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and we tell it which variables we want to solve for.""" start="00:11:44.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And voila! Those are our currents,""" start="00:11:49.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which we can then use to get the voltages""" start="00:11:51.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for the individual resistors.""" start="00:11:55.720" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""calc-find-root""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I'll just briefly mention""" start="00:12:00.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that if Calc is not able to solve an equation""" start="00:12:02.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with calc-solve-for,""" start="00:12:05.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then you might be helped by another calc function""" start="00:12:07.780" video="mainVideo-calc" id="subtitle"]] +[[!template text="""called calc-find-root.""" start="00:12:10.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""This function basically does a manual search""" start="00:12:11.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for a numerical solution to the equation.""" start="00:12:14.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And there's the documentation page on that.""" start="00:12:30.200" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Derivatives and integrals""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""Calc can also solve or find derivatives of functions,""" start="00:12:39.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""at least the more straightforward functions.""" start="00:12:44.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For a simple example,""" start="00:12:47.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""we can get the derivative of that""" start="00:12:49.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""with the derivative function.""" start="00:13:00.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""On the other hand, Calc is also capable of figuring out""" start="00:13:11.980" video="mainVideo-calc" id="subtitle"]] +[[!template text="""indefinite integrals.""" start="00:13:17.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Say we put that function back on the stack,""" start="00:13:22.100" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and this time, we call the integral function.""" start="00:13:26.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There you go. Of course, you have to add""" start="00:13:32.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""your own constant of integration.""" start="00:13:35.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""For integrals that Calc cannot figure out symbolically,""" start="00:13:39.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""a numerical integration method is available""" start="00:13:43.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""through the calc-num-integral command, which is documented...""" start="00:13:46.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The function documentation is available here, more or less.""" start="00:13:59.999" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Programmable functions""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I definitely need to mention""" start="00:14:17.540" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that Calc is capable of doing programmable functions.""" start="00:14:20.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That is to say, you can program your own functions into Calc.""" start="00:14:24.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""There are three separate ways to do this.""" start="00:14:29.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""One is through a macro method""" start="00:14:32.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""similar to Emacs's usual keyboard macros.""" start="00:14:36.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The second method is to transform an algebraic function""" start="00:14:41.540" video="mainVideo-calc" id="subtitle"]] +[[!template text="""into a stored function definition.""" start="00:14:46.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And the third is to use Elisp directly.""" start="00:14:50.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Personally, I find that the second method""" start="00:14:54.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""is the most practical, the most convenient and practical""" start="00:14:56.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""in my opinion. So I'll give a quick example of that.""" start="00:15:01.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So I could... Let's say I wanted to have a function""" start="00:15:08.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for calculating capacitive reactance.""" start="00:15:14.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll define that in algebraic mode first.""" start="00:15:20.700" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The function for that is 1 over 2 pi""" start="00:15:28.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the frequency and the capacitance.""" start="00:15:33.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Drop that on the stack. You see, it does automatically""" start="00:15:41.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""get simplified a little bit, but it's the same function.""" start="00:15:44.960" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then I press letters Z and F. Do that again.""" start="00:15:52.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Z and F to start transforming that into a stored function.""" start="00:15:58.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""It asks me to select a user key, a single key press.""" start="00:16:06.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll use the letter c.""" start="00:16:11.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then it's going to ask for a longer command name.""" start="00:16:15.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I've actually defined this once before, so it prefilled in""" start="00:16:19.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that command name.""" start="00:16:24.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I need to enter which variables in the formula""" start="00:16:38.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""are actual arguments, rather than just symbols""" start="00:16:43.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to be evaluated later. I prefer to put this in with frequency""" start="00:16:46.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and the capacitance after that,""" start="00:16:52.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but actually in this particular case,""" start="00:16:54.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it doesn't matter at all to the mathematics.""" start="00:16:57.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So, now all I have to do, that this is defined,""" start="00:17:07.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""is I can drop the frequency on the stack,""" start="00:17:11.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""which we'll say, for this example, will be 4.5 MHz,""" start="00:17:15.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then drop on the capacitance, which in this example""" start="00:17:24.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will be 22 pF.""" start="00:17:32.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Then I'll call the function that I just defined.""" start="00:17:40.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I don't really like having to try to remember""" start="00:17:42.440" video="mainVideo-calc" id="subtitle"]] +[[!template text="""the short letters that I've come up with,""" start="00:17:45.240" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so I'll just use the longer name.""" start="00:17:48.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I need to evaluate one more time""" start="00:17:57.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because the symbol pi is in there and not yet evaluated.""" start="00:17:59.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And so if I've done that right,""" start="00:18:05.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""we have a capacitive reactance of about 1600 ohms.""" start="00:18:07.540" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Plotting""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""As the last feature that I'll mention here,""" start="00:18:12.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Emacs Calc does have an interface with gnuplot,""" start="00:18:16.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if you want to have Calc work as your graphing calculator.""" start="00:18:24.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I do need to be honest and mention""" start="00:18:30.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I don't generally use it myself""" start="00:18:33.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because there's another program in GNOME""" start="00:18:35.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I've found to be generally more convenient""" start="00:18:39.720" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for the things that I want to graph quickly.""" start="00:18:43.500" video="mainVideo-calc" id="subtitle"]] +[[!template text="""But I think I can give you a simple example.""" start="00:18:47.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So first, we need to drop a range on the stack.""" start="00:18:53.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Let's say 0 to 10.""" start="00:19:00.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then we need to drop the function on the stack.""" start="00:19:06.620" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And then I believe it's the letters g and f that graph this.""" start="00:19:11.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Let's see. Yep, there we go.""" start="00:19:17.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So there's our function and it looks nice.""" start="00:19:22.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That was pretty easy.""" start="00:19:25.060" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's the fast way to do it.""" start="00:19:26.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I will, as a disclaimer, mention that""" start="00:19:29.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""using this quick approach,""" start="00:19:32.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that sometimes more complicated graphs""" start="00:19:34.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""will not turn out nicely,""" start="00:19:38.760" video="mainVideo-calc" id="subtitle"]] +[[!template text="""because by default, the resolution will be pretty low.""" start="00:19:40.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That is to say it's... gnuplot is going to be""" start="00:19:44.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""skipping a lot of points""" start="00:19:48.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and so you'll have to learn a bit more""" start="00:19:49.900" video="mainVideo-calc" id="subtitle"]] +[[!template text="""about how to use the interface,""" start="00:19:52.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what parameters to pass if you want all your graphs""" start="00:19:55.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to come out looking nice.""" start="00:19:59.520" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So that covers all the features that I wanted to cover.""" start="00:20:03.700" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wish list""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""I wanted to briefly mention a wish list of items""" start="00:20:08.800" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I'd like to see in Calc.""" start="00:20:13.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""One of them would be improper integrals.""" start="00:20:16.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So that's like our definite integrals""" start="00:20:23.640" video="mainVideo-calc" id="subtitle"]] +[[!template text="""except for where a limit of integration is infinity.""" start="00:20:25.160" video="mainVideo-calc" id="subtitle"]] +[[!template text="""That's something that can be useful in a few applications.""" start="00:20:32.860" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Something else that would be neat to have would be""" start="00:20:38.560" video="mainVideo-calc" id="subtitle"]] +[[!template text="""annotations for row entries. So for example""" start="00:20:41.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""if I was putting together a sum of numbers""" start="00:20:45.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for, say, my monthly budget,""" start="00:20:48.820" video="mainVideo-calc" id="subtitle"]] +[[!template text="""let's say I was paying $2,000 for my rent""" start="00:20:53.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and let's say $800 a month for my groceries,""" start="00:20:57.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""(a lot of kids to feed there)""" start="00:21:03.832" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and then say another $60 for dining out, and so on,""" start="00:21:07.932" video="mainVideo-calc" id="subtitle"]] +[[!template text="""it would be nice if there was some way""" start="00:21:14.566" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to put a little annotation next to each number""" start="00:21:18.260" video="mainVideo-calc" id="subtitle"]] +[[!template text="""so that you could remember""" start="00:21:21.320" video="mainVideo-calc" id="subtitle"]] +[[!template text="""what the meaning of that number was more easily.""" start="00:21:23.400" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I actually looked into programming this into Calc myself,""" start="00:21:27.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but discovered that it would require reprogramming""" start="00:21:31.200" video="mainVideo-calc" id="subtitle"]] +[[!template text="""quite a bit of Calc to make that work well""" start="00:21:35.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""across all calc functionality,""" start="00:21:41.840" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and so, eventually, I gave up.""" start="00:21:43.480" video="mainVideo-calc" id="subtitle"]] +[[!template text="""But I'd still really like to have that feature.""" start="00:21:46.940" video="mainVideo-calc" id="subtitle"]] +[[!template text="""The final thing, though""" start="00:21:51.140" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I think this would not necessarily belong in Calc,""" start="00:21:52.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I think it would be cool if Emacs had some way""" start="00:21:54.580" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to run numerical solutions""" start="00:21:57.920" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for systems of differential equations,""" start="00:22:00.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""also known as a differential analyzer.""" start="00:22:02.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""So this would allow you to be able to set up simulation models""" start="00:22:06.020" video="mainVideo-calc" id="subtitle"]] +[[!template text="""involving systems of differential equations,""" start="00:22:09.280" video="mainVideo-calc" id="subtitle"]] +[[!template text="""for example, a spring mass system, or pressure temperature,""" start="00:22:11.680" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or what have you, and then run the simulation""" start="00:22:14.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""using numerical approximation.""" start="00:22:18.040" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Maybe it would be silly""" start="00:22:22.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""to actually put that in Calc itself,""" start="00:22:24.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but a nice interface maybe to some other software,""" start="00:22:26.000" video="mainVideo-calc" id="subtitle"]] +[[!template text="""simple software that did that,""" start="00:22:30.340" video="mainVideo-calc" id="subtitle"]] +[[!template text="""an easy to use interface for that""" start="00:22:33.300" video="mainVideo-calc" id="subtitle"]] +[[!template text="""would be really great.""" start="00:22:35.780" video="mainVideo-calc" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]]</div>[[!template text="""So that's my entire talk.""" start="00:22:38.600" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I'll just mention some information.""" start="00:22:41.801" video="mainVideo-calc" id="subtitle"]] +[[!template text="""If you want to learn more about me""" start="00:22:44.535" video="mainVideo-calc" id="subtitle"]] +[[!template text="""or things that I'm interested in,""" start="00:22:48.366" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I do not any longer have a web presence.""" start="00:22:50.120" video="mainVideo-calc" id="subtitle"]] +[[!template text="""I don't have a website anymore,""" start="00:22:57.780" video="mainVideo-calc" id="subtitle"]] +[[!template text="""but I do have a Gemini capsule""" start="00:22:59.660" video="mainVideo-calc" id="subtitle"]] +[[!template text="""that I post to all the time.""" start="00:23:03.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""And if you can install, if you're willing to install the...""" start="00:23:07.140" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Gemini browser known as Elpher""" start="00:23:13.880" video="mainVideo-calc" id="subtitle"]] +[[!template text="""into Emacs, which is available from ELPA,""" start="00:23:19.080" video="mainVideo-calc" id="subtitle"]] +[[!template text="""then you can browse directly to it""" start="00:23:23.699" video="mainVideo-calc" id="subtitle"]] +[[!template text="""and look around my Gemini capsule.""" start="00:23:27.360" video="mainVideo-calc" id="subtitle"]] +[[!template text="""Thank you very much.""" start="00:23:31.440" video="mainVideo-calc" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [christopher@librehacker.com](mailto:christopher@librehacker.com?subject=Comment%20for%20EmacsConf%202023%20calc%3A%20Basic%20Calc%20functionality%20for%20engineering%20or%20electronics) diff --git a/2025/info/calc-before.md b/2025/info/calc-before.md index ae994a76..28465a83 100644 --- a/2025/info/calc-before.md +++ b/2025/info/calc-before.md @@ -8,12 +8,27 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 24-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-calc> Etherpad: <https://pad.emacsconf.org/2025-calc> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T18:00:00Z" end="2025-12-06T18:25:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:00 PM - 12:25 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:00 PM - 6:25 PM UTC <br />Saturday, Dec 6 2025, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Saturday, Dec 6 2025, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-calc"><source src="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt" default />"""<track kind="chapters" label="Chapters" src="/2025/captions/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt" /><p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video>[[!template id="chapters" vidid="mainVideo-calc" data=""" +00:03.620 Introduction +02:36.640 What is Calc? +04:54.280 calc-algebraic-entry +06:37.399 calc-roll-down +08:07.760 Advanced functions +08:58.180 Solving equations with calc-solve-for +09:54.720 Systems of equations +12:00.080 calc-find-root +12:39.960 Derivatives and integrals +14:17.540 Programmable functions +18:12.160 Plotting +20:08.800 Wish list +22:38.600 Wrapping up +"""]]<div></div>Duration: 23:35 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-calc">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main--chapters.vtt">Download --main--chapters.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.opus">Download --main.opus (20MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-calc--basic-calc-functionality-for-engineering-or-electronics--christopher-howard--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/MAc6gCUHjOw">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/commonlisp-after.md b/2025/info/commonlisp-after.md index ac9eae20..01819fdc 100644 --- a/2025/info/commonlisp-after.md +++ b/2025/info/commonlisp-after.md @@ -1,6 +1,436 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="commonlisp-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Hey, everyone. This talk is on this tradition,""" start="00:00:00.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""intelligent agents in Emacs""" start="00:00:07.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using my Leonardo software individuals,""" start="00:00:10.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I've mistyped as I just wrote here, I see.""" start="00:00:13.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Thank you to Sacha and everyone""" start="00:00:16.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""at EmacsConf and Emacs, I guess.""" start="00:00:20.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry that I was running late.""" start="00:00:25.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm screwlisp.small-web.org.""" start="00:00:26.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I run those one or two weekly shows for a long time,""" start="00:00:29.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Lispy Gopher Climate.""" start="00:00:34.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm active on the Mastodon at @screwlisp@gamerplus.org.""" start="00:00:35.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm screwtape on lambda.moo.mud.org.""" start="00:00:42.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And I ported, over the last kind of year,""" start="00:00:46.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""years, to some extent, I ported Eric Sandewall's system""" start="00:00:50.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""for developing intelligent software agents,""" start="00:00:58.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which he finished working on in 2014.""" start="00:01:01.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I got it working again around 2025.""" start="00:01:04.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""First, we're going to take a long arc.""" start="00:01:10.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We're going to motivate... This is the idea.""" start="00:01:14.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see I'm using Org Mode,""" start="00:01:16.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I hope provides a good example""" start="00:01:18.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""for all the Org-Mode-oriented talks this conference.""" start="00:01:19.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But you can also see""" start="00:01:25.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that I'm using Eduardo Ochs's eev minor mode with Org.""" start="00:01:26.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But we can see a little bit of the difference""" start="00:01:33.108" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""between these two, and that will kind of evolve into""" start="00:01:35.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""my style with the agent communication in Emacs.""" start="00:01:39.208" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So you can see I used eev anchors as my Emacs headings.""" start="00:01:45.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""In eev, you just evaluate Elisp expressions""" start="00:01:53.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as links to places.""" start="00:01:56.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""An anchor will link you somewhere else in the document.""" start="00:01:58.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So my table of contents links to my talk, I guess.""" start="00:02:01.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Anchors come in two halves,""" start="00:02:04.808" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so that's why I built that unique table of contents""" start="00:02:07.508" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""experience there. What else am I going to say?""" start="00:02:12.941" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""So first, let's just do some totally normal computing""" start="00:02:21.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because intelligence is going to be difficult to describe.""" start="00:02:24.175" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Let's just try and compute normally in Emacs in Org Mode""" start="00:02:27.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then segue more so into eev,""" start="00:02:31.101" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then maybe I would like if an agent was intelligent,""" start="00:02:34.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I would think that an intelligent agent""" start="00:02:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""would do something like what I'm doing.""" start="00:02:40.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It should be recognizably similar to what I do myself.""" start="00:02:43.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't think the word intelligence is relevant""" start="00:02:47.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if it's not related to something I'm not familiar with.""" start="00:02:52.400" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Using Emacs as a human""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Using Emacs as a human, reading headings from my article,""" start="00:02:55.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using Common Lisp. Right, my friend jeremy_list""" start="00:03:01.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""wrote actually a big project,""" start="00:03:03.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but part of it was base64 encoding,""" start="00:03:06.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and I just yoinked his C code for base64 encoding, I think.""" start="00:03:09.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This is just clearly some C-based 64 encoding.""" start="00:03:17.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""If you go to my blog, his project is actually a C++ project""" start="00:03:20.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and you can see me doing this with C++ rather than C.""" start="00:03:24.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But basically, you can go to my blog articles""" start="00:03:29.580" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if you want more detail to read something instead.""" start="00:03:33.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then here's some embeddable Common Lisp,""" start="00:03:40.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Jack Daniel's ECL ANSI Common Lisp compiler I guess.""" start="00:03:42.434" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This is just what it looks like.""" start="00:03:48.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see I'm using Org Mode trickily,""" start="00:03:49.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using noweb to put the lines of the C source block""" start="00:03:52.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in this one. We're tangling it to this file""" start="00:03:56.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""rather than evaluating it.""" start="00:04:00.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So, you know, literate programming, tangle and weave.""" start="00:04:01.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We're just using Org Mode""" start="00:04:05.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""like the other Org Mode people""" start="00:04:07.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""are all showing us this conference, I guess.""" start="00:04:09.198" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then we have to compile it.""" start="00:04:12.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's always hard to remember these invocations for me.""" start="00:04:13.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Results file. The file is my .fas file,""" start="00:04:16.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because the way ECL's C and C++ integration works""" start="00:04:20.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is that it just has to be seen by compile-file in Lisp.""" start="00:04:24.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I cached this earlier.""" start="00:04:30.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I should actually start Lisp, actually, shouldn't I?""" start="00:04:32.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""How are we going to do this?""" start="00:04:36.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""(setq inferior-lisp-program "ecl"). We could M-x slime.""" start="00:04:39.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Because... we better actually load this.""" start="00:04:47.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I did a dry run before.""" start="00:04:48.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think we can just load this, because I already did it.""" start="00:04:54.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But I cached it. Let's nuke the cache.""" start="00:04:58.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, I'm going to say that that probably worked.""" start="00:05:04.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Now, as you saw, that base64 encoding""" start="00:05:06.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was just, I guess, number to character code""" start="00:05:09.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to other character code. So I wrote this higher-level Lisp one,""" start="00:05:13.620" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but that's not really the point.""" start="00:05:19.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Obviously, Emacs also has Base64 encoding.""" start="00:05:20.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's just a point that we might have""" start="00:05:26.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""C++ and C external programs""" start="00:05:27.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that we'd like to be integrating""" start="00:05:29.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""into our Emacs agents capabilities.""" start="00:05:31.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Here we can see a normal named Org Mode source block.""" start="00:05:37.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that calls that function, then an Org Mode source block""" start="00:05:46.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that calls Emacs's base64-decode-string as a way of""" start="00:05:50.475" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""validating it, I guess.""" start="00:05:56.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We go to Org, so we can see...""" start="00:05:57.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I have a named call to that function calling the Lisp function""" start="00:06:00.141" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Org is just kind of like this.""" start="00:06:04.408" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's cached but I don't seem to have run it before.""" start="00:06:07.041" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I do the Emacs decode.""" start="00:06:11.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we just run this using C-c C-c,""" start="00:06:13.575" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and we can kind of see""" start="00:06:15.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""what Org Mode is like a little bit here.""" start="00:06:17.241" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""All right, yes, so as we can see,""" start="00:06:22.180" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""oh hang on, let's run this as well actually.""" start="00:06:24.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So the C embeddable Common Lisp""" start="00:06:27.660" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""base64 encoding gets us this.""" start="00:06:32.194" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then Emacs is decoding and gets us back,""" start="00:06:35.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""kind of validates it. I think I'm missing some things.""" start="00:06:38.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't pad characters out to the correct byte lengths,""" start="00:06:40.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that kind of thing, but it's fine.""" start="00:06:43.080" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""using this via eev as a human""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And then I kind of contrast that to,""" start="00:06:45.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I really like what my friend mdhughes.tech,""" start="00:06:48.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""game dev of the ages, calls REPL-driven development,""" start="00:06:53.180" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which he says is kind of the opposite of literate coding.""" start="00:06:57.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think eev, at least for me,""" start="00:07:06.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is kind of like REPL-driven development.""" start="00:07:08.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So in eev, if you just press F8, the thing happens.""" start="00:07:11.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And if it's a red star line,""" start="00:07:16.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the thing is an Emacs Lisp thing,""" start="00:07:17.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and otherwise it goes to the eepitch target.""" start="00:07:19.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if I do this, great, now I'm pitching to that slime""" start="00:07:23.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""REPL ECL I made. And then I pressed F8. Press F8 again.""" start="00:07:26.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The string got coerced to a list.""" start="00:07:32.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""F8. Now it's car codified.""" start="00:07:34.481" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I quite like this, because this looks like something I can do""" start="00:07:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and understand doing and reason about doing.""" start="00:07:41.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I form a command to send from Lisp to Emacs.""" start="00:07:44.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I do it and I recover the string from the beginning.""" start="00:07:49.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess I had one of these here. Oh, by the way, look at""" start="00:07:52.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What Org Mode did with an eev source block.""" start="00:07:56.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then when I close the source block""" start="00:07:59.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""using C-c ',""" start="00:08:01.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it brings me back to the Org doc,""" start="00:08:02.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which was a cool synergy between the eev minor mode""" start="00:08:05.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev source blocks in Org Mode that I noticed.""" start="00:08:09.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so I kind of want my agents to be like this eev usage.""" start="00:08:16.020" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Clearly, Org is super powerful,""" start="00:08:22.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but I don't even like writing calls like this,""" start="00:08:25.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""where you write the function that will happen last first,""" start="00:08:28.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so you're kind of writing right to left, first to last.""" start="00:08:32.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Whereas in REPL-driven development,""" start="00:08:39.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess I'm writing top to bottom,""" start="00:08:41.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev, I guess, executable logs""" start="00:08:43.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""are logs that are like that.""" start="00:08:46.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I kind of like eev's view for reasoning""" start="00:08:48.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""more than Org's Tangle.""" start="00:08:52.379" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Obviously, Tangle is trying to do tricky things,""" start="00:08:54.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but maybe they have different specializations,""" start="00:08:57.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and eev's one is more close""" start="00:09:01.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to my own version of intelligence, maybe.""" start="00:09:04.880" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Software individuals using eev in Emacs like a human""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Software individuals using eev in Emacs like a human.""" start="00:09:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, you can always visit my blog post for more detail.""" start="00:09:13.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, I made a CLOS object""" start="00:09:17.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in Common Lisp to wrap doing this.""" start="00:09:20.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's not really the topic.""" start="00:09:22.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's in the appendix somewhere if you need it.""" start="00:09:23.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I've just executed that.""" start="00:09:27.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can look at the appendix in your own time.""" start="00:09:29.560" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Sandewall's leonardo system""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Jumping over to actually starting""" start="00:09:32.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""our hypothetical intelligent agent.""" start="00:09:33.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess we're doing eev here.""" start="00:09:36.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we open this, press F8 a bunch of times.""" start="00:09:38.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, and if you were cloning it yourself,""" start="00:09:46.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess that's what you would do. setq eepitch-buffer-name.""" start="00:09:49.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, if you went to an eepitch shell and then came back.""" start="00:09:56.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You would have had to do that, but I didn't.""" start="00:10:00.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I didn't, so I didn't need to.""" start="00:10:01.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sandewall's style is to use relative paths""" start="00:10:04.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to tell which agent is acting inside a software individual.""" start="00:10:07.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Remembering a software individual""" start="00:10:11.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is potentially a bunch of agents.""" start="00:10:13.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And we load... So one individual,""" start="00:10:15.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""all the agents in each individual share a kernel.""" start="00:10:18.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So only one agent in one software individual""" start="00:10:21.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is active at any given time, but the agents are separate.""" start="00:10:25.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They just all have to share the kernel resource,""" start="00:10:28.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which is the Remus agent. Oh, I got rid of this.""" start="00:10:31.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And start the CLE is the thing.""" start="00:10:38.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I did need to have an EmacsConf knowledge base.""" start="00:10:43.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, let's just keep eepitching for a little bit.""" start="00:10:46.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I think I made... I'm going to call it emacsconf-kb.""" start="00:10:48.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, that looks likely. And I think that the agent...""" start="00:10:55.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I can check this. I could have checked that.""" start="00:10:59.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I could have done something like (get emacsconf-kb contents).""" start="00:11:03.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, and you can see""" start="00:11:12.700" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""there's a location inside it which is agent1,""" start="00:11:13.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I assume is an entity file""" start="00:11:15.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that I was working with before.""" start="00:11:17.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then what were we going to do?""" start="00:11:20.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, back to the embeddable Common Lisp image.""" start="00:11:21.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if I just press our button back to there...""" start="00:11:28.280" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Start a loop for one leonardo software individual""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""And so my idea is that for an Emacs agent,""" start="00:11:36.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""basically, I'd like to have an Emacs Lisp list.""" start="00:11:41.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And just when stuff gets into that list,""" start="00:11:47.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the agent which is always running, but running slowly,""" start="00:11:49.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""will incrementally just do the stuff it finds in that list.""" start="00:11:53.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Populating that list probably gets into stuff""" start="00:11:58.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""like your Beliefs, Desires, Intents framework""" start="00:12:00.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and those kind of well-known and well-studied algorithms.""" start="00:12:03.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""That's not the point here.""" start="00:12:06.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I just want to have a list in Emacs that my ECL...""" start="00:12:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm just going to run a loop in ECL,""" start="00:12:14.260" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and the ECL is going to keep sending""" start="00:12:16.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""anything it finds in that Emacs Lisp list""" start="00:12:18.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to the software agent. The agent is also in Emacs,""" start="00:12:22.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so it would be able to populate its own list itself""" start="00:12:25.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if it had an idea of evaluating desires and chances to improve""" start="00:12:28.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""whatever it wants to improve""" start="00:12:36.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and chances to avoid whatever it wants to avoid.""" start="00:12:37.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We talked a little bit too much. Let's just start this.""" start="00:12:40.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry that I'm manually setting up my screen.""" start="00:12:47.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then let's put CLisp over here.""" start="00:12:51.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Right, we could work with this, right?""" start="00:12:55.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""This loop isn't very important.""" start="00:12:58.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's just a Common Lisp loop. I copy my friend jmbr's style""" start="00:13:00.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""of using Lisp machine-style keyword arguments""" start="00:13:04.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""instead of symbols like cl-loop,""" start="00:13:08.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the compatibility thing in Emacs Lisp does.""" start="00:13:12.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'd never initialized that. Well, let's do that.""" start="00:13:16.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, now we have the list.""" start="00:13:28.140" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And just every 30, let's turn it down to every 20 seconds.""" start="00:13:30.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, it's going to put""" start="00:13:35.020" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""whatever it finds in there, into there.""" start="00:13:37.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so, I think, yeah, and now... Great.""" start="00:13:40.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So here I'm just going to fill it with stuff.""" start="00:13:46.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And this is quite interesting, I think.""" start="00:13:50.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It just shows I can put a whole bunch of stuff into that list.""" start="00:13:54.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Ideally, the agent would populate it itself""" start="00:13:58.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""with a BDI algorithm or something.""" start="00:14:01.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""But if we just put some stuff in there,""" start="00:14:03.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""we'll see that it will all get sent""" start="00:14:04.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""basically using Eduardo's eepitch internal machinery, at least.""" start="00:14:07.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And hence, it meets my requirement""" start="00:14:14.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that it works exactly like I work.""" start="00:14:17.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then in eev, I just have to press M-e.""" start="00:14:20.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, it works via Emacs server, and I didn't start that,""" start="00:14:25.860" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so if we server-start, hopefully...""" start="00:14:31.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then, ideally, things will just begin happening""" start="00:14:39.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in this slime-repl C/Lisp agent.""" start="00:14:42.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, if this was still running.""" start="00:14:53.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Okay, well we got at least one,""" start="00:15:05.420" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but hypothetically lots of these will happen.""" start="00:15:07.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So, show agent, I guess,""" start="00:15:09.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""happened over here. I put a whole bunch of "sleep-for"s in,""" start="00:15:13.700" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I thought that going slowly""" start="00:15:17.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""would make it seem more human.""" start="00:15:19.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Like I saw in Eduardo's talk last year""" start="00:15:21.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which is where I learned about eev.""" start="00:15:24.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The system is a little fragile.""" start="00:15:29.100" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, we have a whole bunch of agents.""" start="00:15:32.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess every time it gets sent,""" start="00:15:41.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it checks that we're in the right agent.""" start="00:15:43.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And it's not actually just sending a string,""" start="00:15:45.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""it's sending a sequence of string actions over there.""" start="00:15:47.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so we see Emacs Lisp hypothetically put,""" start="00:15:52.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I guess it put this "foo bar baz!" into an entity, message-1,""" start="00:15:57.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which should be of type message, I guess, conceivably.""" start="00:16:06.860" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I forget if I set that up earlier.""" start="00:16:11.900" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's in the appendix somewhere.""" start="00:16:13.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then it just called, it did a sequence of actions""" start="00:16:14.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which was really just one action of showing that.""" start="00:16:18.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then I called b64-encode on message1,""" start="00:16:21.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which I believe will have set message-1 encoded.""" start="00:16:26.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Can I check that manually while it's happening?""" start="00:16:30.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Disaster. Well that's what it should have been.""" start="00:16:37.243" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, I did mention it was a little bit fragile.""" start="00:16:51.500" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What if we put... Can we kind of rescue this?""" start="00:16:54.941" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't want to try redoing this. It's slightly fragile.""" start="00:17:03.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What it would do, we can see the actions are kind of getting there,""" start="00:17:07.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but somehow my message didn't end up getting encoded""" start="00:17:12.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""by that sequence of actions.""" start="00:17:16.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So this decode will have also made the decoded one be null.""" start="00:17:18.120" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Let's do it manually""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Let's just do it manually. Should have worked.""" start="00:17:23.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""b64-encode, which calls out to Emacs""" start="00:17:26.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to get everything actually done.""" start="00:17:30.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh, I got interrupted by the agent.""" start="00:17:37.300" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, if I do it manually, it worked.""" start="00:17:41.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hypothetically, the queue thing should have worked. Great.""" start="00:17:43.321" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Well, you can see it's kind of working.""" start="00:17:53.520" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Could be more robust.""" start="00:17:56.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""The reason is that I think what I did is a bit fragile,""" start="00:17:57.441" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but the intent is that FIPA,""" start="00:18:03.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Foundation for Intelligent Physical Agents's""" start="00:18:07.108" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""SL standard has tools for reliability""" start="00:18:09.308" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""through repetition and checking outcomes and that kind of thing.""" start="00:18:15.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So I would use those. I'm not putting too much work""" start="00:18:19.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""into being ultra-reliable right now, but it kind of worked.""" start="00:18:22.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""We saw, I guess, at least Embeddable Common Lisp""" start="00:18:26.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""believed it used emacsclient externally, asynchronously,""" start="00:18:29.760" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to send these to Emacs within Emacs.""" start="00:18:35.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I put a whole bunch of sleeps into its thing""" start="00:18:38.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to make it look slow and human-like, kind of happened""" start="00:18:41.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because Emacs' model is that it's kind of single-threaded.""" start="00:18:45.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Can I just... I bet if we run this again""" start="00:18:52.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It'll at least look like it's succeeding""" start="00:18:59.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I fixed the base64 encoding""" start="00:19:02.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and so forth in the background. I wonder if it will.""" start="00:19:05.040" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Wrapping up""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""In the meantime, let's wrap up this talk to some extent.""" start="00:19:11.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I'm just kind of saying what I'm expecting to happen.""" start="00:19:15.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I took out next action.""" start="00:19:18.800" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Originally, I was keeping the list inside of the agent.""" start="00:19:20.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then I decided to keep the list inside Emacs""" start="00:19:25.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""because I have kind of first class Emacs is my IDE,""" start="00:19:27.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so I have better access to what's going on in my IDE.""" start="00:19:31.680" video="mainVideo-commonlisp" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Intelligence""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]]</div>[[!template text="""Then I wanted to talk about intelligence a little bit""" start="00:19:37.608" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in whatever my remaining time is.""" start="00:19:39.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I just have these great bullet points""" start="00:19:41.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""of nosrednA yduJ and Eric Sandewall.""" start="00:19:43.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So nosrednA yduJ, when she was on the show quite a long time ago,""" start="00:19:45.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""she... I keep describing things as expert systems""" start="00:19:50.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she wanted to know what I meant""" start="00:19:55.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""when I said expert systems,""" start="00:19:57.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and I gave her a Lisp software example""" start="00:19:58.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she said she personally wrote""" start="00:20:00.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that software in the 80s that I was referring to""" start="00:20:02.619" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and she wanted to know how it was an expert system.""" start="00:20:06.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""What I mean when I say expert system""" start="00:20:08.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""is a system that works kind of like I do and eev's eepitch does.""" start="00:20:10.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's where we can really reason""" start="00:20:19.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in a very human-relatable way""" start="00:20:22.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about what the inputs to the program is.""" start="00:20:24.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And also a program should be exposed to other programs""" start="00:20:26.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""in terms of like a well-structured transfer of knowledge as inputs,""" start="00:20:31.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and it should have a well-structured""" start="00:20:36.560" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""transfer of knowledge kind of outputs.""" start="00:20:38.011" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I don't know why this b64-encode message wasn't working.""" start="00:20:41.940" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Then we kind of faked it into working.""" start="00:20:47.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""It's going to be embarrassing for me""" start="00:20:50.000" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""if anybody watches this. But yeah, so yduJ's thing...""" start="00:20:52.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And then I was going to also build""" start="00:20:58.740" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that into Eric Sandewall's one.""" start="00:20:59.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So this is my vision of expert systems""" start="00:21:02.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as kind of maybe this is an important""" start="00:21:05.640" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""general style loosely associated with Lisp.""" start="00:21:07.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Same as the Lisp editor Emacs.""" start="00:21:11.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So Eric Sandewall's description of intelligence""" start="00:21:14.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was that his grandchildren were intelligent.""" start="00:21:17.666" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""So if we had software agents that were intelligent,""" start="00:21:21.160" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""this would be true if and maybe only if they were similar""" start="00:21:26.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""to his grandchildren""" start="00:21:32.440" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""who were a good reference for intelligence.""" start="00:21:33.720" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And grandchildren live for a really long time.""" start="00:21:36.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They kind of learn gradually.""" start="00:21:39.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""They don't run on GPUs for a few minutes""" start="00:21:42.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and then get thrown out forever, something like that.""" start="00:21:46.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so this is the kind of vision of, I guess,""" start="00:21:51.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Leonardo system software individual stuff.""" start="00:21:54.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You can see we kind of faked it into...""" start="00:21:57.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""at least the show get message one decoded bits were working.""" start="00:22:03.947" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm not sure what was happening""" start="00:22:06.321" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""with the Elisp ones that worked interactively,""" start="00:22:07.301" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but then they didn't work in my loopy thing.""" start="00:22:12.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Oh yeah, and then so I mentioned""" start="00:22:18.608" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""thank you to Sacha at the start of this talk.""" start="00:22:21.308" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And so Eric Sandewall's emphasis""" start="00:22:24.641" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that you'd really like intelligent software agents,""" start="00:22:26.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Leonardo system agents, to be like your grandchildren.""" start="00:22:31.341" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And I was talking to somebody, maybe to Ramin Honary""" start="00:22:34.175" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""who's doing the schemacs talk this year""" start="00:22:40.660" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about Sacha's writing.""" start="00:22:44.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""A lot of Sacha's writing is about""" start="00:22:46.875" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""her experiences of life and technology,""" start="00:22:48.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and especially raising A\*""" start="00:22:51.775" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and her observations of her progeny A\*'s""" start="00:22:54.375" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""experiences of life and technology,""" start="00:22:59.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I would say as well as being""" start="00:23:05.320" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the Emacs News and Emacs conf doer that she is.""" start="00:23:07.875" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Yeah, and so I think a lot of what Sacha is seen doing""" start="00:23:18.040" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and concerned with are specifically what Eric Sandewall""" start="00:23:22.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""identifies as the study of intelligence as such,""" start="00:23:25.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""as should apply to computing as well. That was my thought""" start="00:23:31.208" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""on Sacha, Eric Sandewall, intelligence, and yduJ.""" start="00:23:36.480" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I have this note from pizzapal...""" start="00:23:42.980" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I didn't realize that Microsoft had announced""" start="00:23:44.241" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that 2025 was going to be the year of the software agent.""" start="00:23:46.275" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I only found this out in hindsight""" start="00:23:49.680" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""when I saw people crowing on the Mastodon""" start="00:23:51.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""about how Microsoft had basically declared""" start="00:23:54.200" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""that their Year of the Agent marketing campaign""" start="00:23:58.080" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""was a failure""" start="00:24:00.780" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""where basically people didn't like the same old web services""" start="00:24:04.460" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but now while you're accessing,""" start="00:24:09.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're formally kind of accessing a web service,""" start="00:24:11.360" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the kind of web service that used to be called""" start="00:24:15.240" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""serverless web services, this kind of thing,""" start="00:24:16.960" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""but you're just being gibbered at by Microsoft Copilot""" start="00:24:19.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're trying to use regular services.""" start="00:24:23.880" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And people turned out not to like this.""" start="00:24:27.120" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think that, as we can see in this agent,""" start="00:24:29.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""the agent really needs to be running on its own clock""" start="00:24:32.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""and independently of you.""" start="00:24:36.375" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Like if you imagine your body is getting""" start="00:24:37.908" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""novel, slightly speculative instructions from your brain""" start="00:24:42.280" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""constantly throughout your entire waking day, quite slowly,""" start="00:24:46.075" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""this is what an agent should be like.""" start="00:24:50.681" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""And it should be... Sandewall wrote about this.""" start="00:24:54.975" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Basically, computer programs""" start="00:24:59.541" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""aren't going to want to use human natural language with each other.""" start="00:25:01.541" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""There's nothing desirable about that,""" start="00:25:04.841" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""so you wouldn't have two hypothetical Microsoft agents,""" start="00:25:06.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""which are just regular web services with""" start="00:25:10.675" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""a GPT model gibbering at you""" start="00:25:13.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""while you're trying to use the web service.""" start="00:25:16.341" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I think we can see...""" start="00:25:19.840" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Microsoft did the wrong thing with the word agent,""" start="00:25:22.540" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""allowing that agent is an overloaded term like static.""" start="00:25:26.741" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""I'm going to stop this. I'm not going to try and fix this.""" start="00:25:30.708" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Sorry, everybody. Thank you. Talk to you on the Mastodon.""" start="00:25:34.257" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""Hopefully, see you on the show.""" start="00:25:36.314" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""See you at your conference talks.""" start="00:25:37.920" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""My blog has writing and examples of this with multi-agents,""" start="00:25:40.400" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""more C and C++ stuff, Lisp things.""" start="00:25:45.600" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""You're welcome to come on my show to be interviewed,""" start="00:25:50.820" video="mainVideo-commonlisp" id="subtitle"]] +[[!template text="""however formally we do that. See everybody next time.""" start="00:25:53.440" video="mainVideo-commonlisp" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20commonlisp%3A%20Common%20Lisp%20images%20communicating%20like-a-human%20through%20shared%20Emacs%20slime%20and%20eev) diff --git a/2025/info/commonlisp-before.md b/2025/info/commonlisp-before.md index 19927326..67deb710 100644 --- a/2025/info/commonlisp-before.md +++ b/2025/info/commonlisp-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 26-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev> Etherpad: <https://pad.emacsconf.org/2025-commonlisp> Etherpad: <https://pad.emacsconf.org/2025-commonlisp> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Quality check +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T19:25:00Z" end="2025-12-06T19:55:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~2:25 PM - 2:55 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~1:25 PM - 1:55 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~12:25 PM - 12:55 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~11:25 AM - 11:55 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~7:25 PM - 7:55 PM UTC <br />Saturday, Dec 6 2025, ~8:25 PM - 8:55 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~9:25 PM - 9:55 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~12:55 AM - 1:25 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~3:25 AM - 3:55 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~4:25 AM - 4:55 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/dev/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-commonlisp"><source src="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 25:56 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-commonlisp">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--debugged.png">Download --debugged.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.opus">Download --main.opus (23MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.org">Download --main.org</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-commonlisp--common-lisp-images-communicating-likeahuman-through-shared-emacs-slime-and-eev--screwlisp--main.webm">Download --main.webm (63MB)</a></li><li><a href="https://youtu.be/hy5i6Qb6fYE">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/graphics-after.md b/2025/info/graphics-after.md index a7fca344..e3eda455 100644 --- a/2025/info/graphics-after.md +++ b/2025/info/graphics-after.md @@ -1,6 +1,14 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="graphics-mainVideo-transcript"></a><h1>Transcript</h1> + +[[!template text="""[ This video has no audio. ]""" start="00:00:00.000" video="mainVideo-graphics" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [incal@dataswamp.org](mailto:incal@dataswamp.org?subject=Comment%20for%20EmacsConf%202023%20graphics%3A%20Modern%20Emacs%2FElisp%20hardware%2Fsoftware%20accelerated%20graphics) diff --git a/2025/info/graphics-before.md b/2025/info/graphics-before.md index f45a797a..4d861de0 100644 --- a/2025/info/graphics-before.md +++ b/2025/info/graphics-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 23-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-graphics.html> Etherpad: <https://pad.emacsconf.org/2025-graphics> Etherpad: <https://pad.emacsconf.org/2025-graphics> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T20:05:00Z" end="2025-12-06T20:30:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~3:05 PM - 3:30 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~2:05 PM - 2:30 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~1:05 PM - 1:30 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~12:05 PM - 12:30 PM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~8:05 PM - 8:30 PM UTC <br />Saturday, Dec 6 2025, ~9:05 PM - 9:30 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~10:05 PM - 10:30 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~1:35 AM - 2:00 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~4:05 AM - 4:30 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~5:05 AM - 5:30 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/dev/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-graphics"><source src="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 22:15 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-graphics">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-graphics--modern-emacselisp-hardwaresoftware-accelerated-graphics--emanuel-berg--main.webm">Download --main.webm (56MB)</a></li><li><a href="https://youtu.be/RVoGcLNalJw">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/greader-after.md b/2025/info/greader-after.md index 9156645a..ae172158 100644 --- a/2025/info/greader-after.md +++ b/2025/info/greader-after.md @@ -1,6 +1,89 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="greader-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Hi, I'm Yuval Langer.""" start="00:00:01.460" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Some may know me as cow_2001 on IRC.""" start="00:00:03.786" video="mainVideo-greader" id="subtitle"]] +[[!template text="""I'd like to tell you about greader mode,""" start="00:00:09.480" video="mainVideo-greader" id="subtitle"]] +[[!template text="""a versatile text-to-speech package""" start="00:00:12.120" video="mainVideo-greader" id="subtitle"]] +[[!template text="""written by Michelangelo Rodriguez.""" start="00:00:14.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Sometimes you want to read a bunch""" start="00:00:18.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and cannot be bothered, right?""" start="00:00:20.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You'd rather plop on your chair""" start="00:00:23.040" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and let the words come to you.""" start="00:00:25.080" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can do it using greader Mode.""" start="00:00:27.520" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""What is greader mode?""" start="00:00:31.158" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Greader mode is a text-to-speech minor mode""" start="00:00:33.120" video="mainVideo-greader" id="subtitle"]] +[[!template text="""with which you can read any buffer using the point.""" start="00:00:36.320" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You move your point""" start="00:00:40.400" video="mainVideo-greader" id="subtitle"]] +[[!template text="""right before the text you want to read""" start="00:00:41.603" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and run greader-read command.""" start="00:00:43.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can then use the left and right arrow keys""" start="00:00:47.640" video="mainVideo-greader" id="subtitle"]] +[[!template text="""to jump to the previous sentence or the next sentence.""" start="00:00:50.840" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Installing Greader""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Installing GReader:""" start="00:00:56.600" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Greader is available on the GNU Emacs app store""" start="00:00:59.144" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and its copyright assigned to""" start="00:01:05.440" video="mainVideo-greader" id="subtitle"]] +[[!template text="""the Free Software Foundation.""" start="00:01:07.286" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To install Greader,""" start="00:01:10.960" video="mainVideo-greader" id="subtitle"]] +[[!template text="""you can run M-x list-packages RET.""" start="00:01:12.858" video="mainVideo-greader" id="subtitle"]] +[[!template text="""look it up with C-s greader,""" start="00:01:19.280" video="mainVideo-greader" id="subtitle"]] +[[!template text="""press i to mark it for installation,""" start="00:01:23.100" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and then press x to execute the installation.""" start="00:01:26.680" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Basic usage""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Basic usage:""" start="00:01:31.760" video="mainVideo-greader" id="subtitle"]] +[[!template text="""We can now open a text file and start reading.""" start="00:01:33.212" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's open The Willows by Algernon Blackwood.""" start="00:01:37.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""I've never read the story,""" start="00:01:42.600" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but HP Lovecraft said it was the best horror story""" start="00:01:44.480" video="mainVideo-greader" id="subtitle"]] +[[!template text="""he had ever read, so it is in my reading list.""" start="00:01:48.280" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Now load greader using M-x greader-mode.""" start="00:01:52.960" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To start reading, press C-r SPC.""" start="00:02:01.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""The Project Gutenberg ebook of The willows.""" start="00:02:08.140" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-read command.""" start="00:02:10.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""To stop, press the SPC key.""" start="00:02:14.080" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-stop command.""" start="00:02:16.800" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Navigation""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Navigation:""" start="00:02:20.820" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You can navigate like you normally do,""" start="00:02:22.360" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but using the left or right arrow keys""" start="00:02:24.680" video="mainVideo-greader" id="subtitle"]] +[[!template text="""will move the point between sentences""" start="00:02:27.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""instead of characters.""" start="00:02:30.200" video="mainVideo-greader" id="subtitle"]] +[[!template text="""So... This ebook is...""" start="00:02:33.088" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You may copy it, give it away,""" start="00:02:36.640" video="mainVideo-greader" id="subtitle"]] +[[!template text="""or reuse it if you are not.""" start="00:02:38.096" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's move to the start of the story.""" start="00:02:41.480" video="mainVideo-greader" id="subtitle"]] +[[!template text=""""After leaving Vienna,""" start="00:02:57.040" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and long before you come to Budapest,""" start="00:02:58.089" video="mainVideo-greader" id="subtitle"]] +[[!template text="""the Danube enters a region""" start="00:02:59.840" video="mainVideo-greader" id="subtitle"]] +[[!template text="""of singular loneliness and desolation,""" start="00:03:00.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""where its waters spread away on all sides,""" start="00:03:02.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""regardless of a main channel,""" start="00:03:04.880" video="mainVideo-greader" id="subtitle"]] +[[!template text="""and the country becomes a swamp for miles upon miles,""" start="00:03:06.200" video="mainVideo-greader" id="subtitle"]] +[[!template text="""covered by a vast sea of low willow bushes."""" start="00:03:08.800" video="mainVideo-greader" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Reading rate""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]]</div>[[!template text="""Reading rate: this reading rate is rather slow.""" start="00:03:12.380" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Let's pick up the pace using the plus key.""" start="00:03:15.840" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-inc-rate command.""" start="00:03:19.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""You must do that while greader is reading.""" start="00:03:23.520" video="mainVideo-greader" id="subtitle"]] +[[!template text="""Now it is too fast.""" start="00:03:37.885" video="mainVideo-greader" id="subtitle"]] +[[!template text="""We can slow down using the - key.""" start="00:03:39.780" video="mainVideo-greader" id="subtitle"]] +[[!template text="""This will run the greader-dec-rate command.""" start="00:03:44.680" video="mainVideo-greader" id="subtitle"]] +[[!template text=""""In high flood this great acreage""" start="00:03:54.560" video="mainVideo-greader" id="subtitle"]] +[[!template text="""of sand, shingle-beds, and willow-grown islands""" start="00:03:59.385" video="mainVideo-greader" id="subtitle"]] +[[!template text="""is almost topped by the water,""" start="00:04:01.240" video="mainVideo-greader" id="subtitle"]] +[[!template text="""but in normal seasons the bushes""" start="00:04:02.440" video="mainVideo-greader" id="subtitle"]] +[[!template text="""bend and rustle in the free winds,""" start="00:04:03.610" video="mainVideo-greader" id="subtitle"]] +[[!template text="""showing their silver leaves to the sunshine""" start="00:04:04.920" video="mainVideo-greader" id="subtitle"]] +[[!template text="""in an ever-moving plain of bewildering beauty."""" start="00:04:06.400" video="mainVideo-greader" id="subtitle"]] + +</div> + +Captioner: sachac + Questions or comments? Please e-mail [yuval.langer@gmail.com](mailto:yuval.langer@gmail.com?subject=Comment%20for%20EmacsConf%202023%20greader%3A%20GNU%20Emacs%20Greader%20%28Gnam%C3%B9%20Reader%29%20mode%20is%20the%20best%20Emacs%20mode%20in%20existence) diff --git a/2025/info/greader-before.md b/2025/info/greader-before.md index edf36aea..314519a4 100644 --- a/2025/info/greader-before.md +++ b/2025/info/greader-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 5-min talk ; Q&A: IRC <https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen> Etherpad: <https://pad.emacsconf.org/2025-greader> Etherpad: <https://pad.emacsconf.org/2025-greader> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T19:35:00Z" end="2025-12-06T19:40:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~2:35 PM - 2:40 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~1:35 PM - 1:40 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~12:35 PM - 12:40 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~11:35 AM - 11:40 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~7:35 PM - 7:40 PM UTC <br />Saturday, Dec 6 2025, ~8:35 PM - 8:40 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~9:35 PM - 9:40 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~1:05 AM - 1:10 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~3:35 AM - 3:40 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~4:35 AM - 4:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-greader"><source src="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 04:08 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-greader">Open Etherpad</a></li><li><a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.opus">Download --main.opus (3.5MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--main.webm">Download --main.webm (10MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-greader--gnu-emacs-greader-gnam-reader-mode-is-the-best-emacs-mode-in-existence--yuval-langer--split.txt">Download --split.txt</a></li><li><a href="https://youtu.be/q1gmFAKYWBk">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/llm-after.md b/2025/info/llm-after.md index b83899b2..91904dd7 100644 --- a/2025/info/llm-after.md +++ b/2025/info/llm-after.md @@ -1,6 +1,372 @@ <!-- Automatically generated by emacsconf-publish-after-page --> +<div class="transcript transcript-mainVideo"><a name="llm-mainVideo-transcript"></a><h1>Transcript</h1> + + +<div class="transcript-heading">[[!template new="1" text="""Introduction""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Hi, I'm Andrew Hyatt.""" start="00:00:01.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to talk to you today about Emacs and AI,""" start="00:00:03.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and where things are right now""" start="00:00:09.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the world of Emacs and AI,""" start="00:00:10.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""via large language models,""" start="00:00:12.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and where things might be going,""" start="00:00:14.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and what it means for the future of Emacs.""" start="00:00:17.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think what we're seeing with Emacs is interesting.""" start="00:00:22.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We've seen a lot of different things""" start="00:00:27.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""come around in the past year,""" start="00:00:29.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the past several years.""" start="00:00:31.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's lots of different solutions.""" start="00:00:33.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But in the past year, things have been very interesting.""" start="00:00:35.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think there's new and interesting questions""" start="00:00:36.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""about what does it mean to use Emacs?""" start="00:00:39.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What does it mean to use any editor?""" start="00:00:43.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to be talking about Emacs,""" start="00:00:45.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I'm going to show you various Emacs packages""" start="00:00:47.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as demonstrations of these ideas.""" start="00:00:50.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But there's the general question of""" start="00:00:53.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what does it mean to use any editor, not just Emacs?""" start="00:00:59.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What does it mean to do work?""" start="00:01:03.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think the industry in general is facing these challenges""" start="00:01:06.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of we don't really know where things are going to end up,""" start="00:01:10.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but we do know the direction they're going.""" start="00:01:13.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs is a reflection of that.""" start="00:01:16.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think the answer for Emacs might be""" start="00:01:20.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a little bit different than everything else,""" start="00:01:23.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but I do want to show you what's out there""" start="00:01:25.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so we can explore what are the possibilities""" start="00:01:28.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of Emacs, AI, and generally how we get things done.""" start="00:01:33.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Thanks. Let's dive right into it.""" start="00:01:41.120" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Copilot""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We're going to start by showing you""" start="00:01:44.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""some things that are pretty well integrated,""" start="00:01:48.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that look a lot like what you see in Emacs""" start="00:01:51.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and fit in with the kinds of editing""" start="00:01:55.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that you normally do in Emacs.""" start="00:01:58.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is just kind of like, it's well integrated.""" start="00:02:02.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we're going to talk about Copilot and Semext.""" start="00:02:06.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Copilot is by Microsoft via GitHub,""" start="00:02:08.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and Semext is just my personal demo,""" start="00:02:12.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but they're both showing you, you know,""" start="00:02:14.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this kind of thing. Let's start with Copilot.""" start="00:02:18.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's try out Copilot on just a standard bit of Elisp.""" start="00:02:24.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to write a Fibonacci function.""" start="00:02:31.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Let's try out Emacs on a standard bit of Elisp.""" start="00:02:38.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to write a Fibonacci function.""" start="00:02:43.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And you can see like as soon as we even start typing it,""" start="00:02:49.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we get everything as a completion.""" start="00:02:53.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you can just press Tab here,""" start="00:02:56.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you've just completed""" start="00:02:59.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""a significant bunch of Emacs Lisp code.""" start="00:03:02.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It will do this no matter where you are.""" start="00:03:06.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, pretty useful. It will just keep suggesting things.""" start="00:03:09.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Do you want to do this?""" start="00:03:14.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm not sure.""" start="00:03:16.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it usually is offering pretty reasonable things.""" start="00:03:17.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you could do this with code,""" start="00:03:22.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of course, any code.""" start="00:03:29.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't really even have to have a mode for it, right?""" start="00:03:32.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's kind of the beauty of AI is that""" start="00:03:33.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you don't need any Emacs functionality for this,""" start="00:03:36.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""except for Copilot.""" start="00:03:38.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't need to know the structure of your code.""" start="00:03:39.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't need anything except for the text itself""" start="00:03:41.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and whatever AI integration that this is.""" start="00:03:45.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We can look at, you can do the same thing with Org-mode.""" start="00:03:51.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we could say create, no,""" start="00:03:53.740" video="mainVideo-llm" id="subtitle"]] +[[!template text="""how about let's, let's do, you know, spring cleaning.""" start="00:03:58.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's actually the fall, but still we'll say spring cleaning.""" start="00:04:02.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it'll start suggesting things that, you know,""" start="00:04:10.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""maybe at first, it doesn't really know what to do to""" start="00:04:12.768" video="mainVideo-llm" id="subtitle"]] +[[!template text="""clean up all code.""" start="00:04:15.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It thinks I need to clean up code, but no,""" start="00:04:16.434" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this is going to be actual, you know,""" start="00:04:18.401" video="mainVideo-llm" id="subtitle"]] +[[!template text="""clean hood over range. Clean out pantry.""" start="00:04:21.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are all really reasonable suggestions.""" start="00:04:31.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just keep going here.""" start="00:04:33.880" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Semext""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""I'm going to demonstrate Semext,""" start="00:04:38.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is a package I have on GNU Elpa,""" start="00:04:40.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is designed to integrate AI in a very Emacs-like way.""" start="00:04:43.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And so what you could do is you could do a""" start="00:04:48.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""semext-search-forward.""" start="00:04:51.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""The UI looks just like other Emacs commands,""" start="00:04:54.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you can search for anything.""" start="00:04:58.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's really no way to express what I'm about to,""" start="00:05:02.380" video="mainVideo-llm" id="subtitle"]] +[[!template text="""what I'm trying to demonstrate""" start="00:05:06.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in Emacs's normal search commands.""" start="00:05:08.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could really ask for anything.""" start="00:05:12.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it takes a little while, which is not Emacs-like,""" start="00:05:15.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but everything else is sort of like""" start="00:05:18.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's designed to be like Emacs,""" start="00:05:20.034" video="mainVideo-llm" id="subtitle"]] +[[!template text="""except way more powerful.""" start="00:05:21.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't need any mode to be active for this.""" start="00:05:23.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just need the library""" start="00:05:27.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and an AI provider of some sort, either locally""" start="00:05:32.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or, you know, your favorite cloud provider.""" start="00:05:34.760" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Integrated AI experiences: gptel, ellama, chatgpt-shell, etc.""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to move on to a different way""" start="00:05:41.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of interacting with AI and Emacs.""" start="00:05:43.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""This way is less like the normal editing experience.""" start="00:05:46.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So you lose some familiarity. However, in exchange,""" start="00:05:52.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it is a lot more powerful.""" start="00:05:57.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And there's a whole suite of these tools.""" start="00:05:58.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm going to demonstrate gptel,""" start="00:06:00.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is the most popular one.""" start="00:06:02.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But there are many.""" start="00:06:05.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think different people have""" start="00:06:06.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""their own preferences of what they like to use.""" start="00:06:08.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We're going to try now something""" start="00:06:11.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is a step away from just editing.""" start="00:06:13.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And we're going to, I'm actually using gptel.""" start="00:06:15.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There are several packages that are going to be""" start="00:06:19.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""doing the same sort of thing as I'm going to show you.""" start="00:06:22.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""gptel has sort of become the most popular one.""" start="00:06:25.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So that's why I'm showing that to you.""" start="00:06:30.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But let's just highlight everything and say gptel rewrite.""" start="00:06:32.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And gptel basically just has a few things.""" start="00:06:39.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's different ways of thinking about this.""" start="00:06:42.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""With just a few very configurable menus,""" start="00:06:45.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can do a large variety of things.""" start="00:06:50.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So let's give rewrite instructions.""" start="00:06:53.960" video="mainVideo-llm" id="subtitle"]] +[[!template text=""""Turn this into an iterative program""" start="00:06:59.820" video="mainVideo-llm" id="subtitle"]] +[[!template text="""instead of a recursive program."""" start="00:07:06.601" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In Elisp, you really should not be using recursion.""" start="00:07:12.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So we could say "return to be ready".""" start="00:07:17.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Do we accept it?""" start="00:07:20.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Yes, we accept it. Or we could iterate and say, no, no,""" start="00:07:21.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's not what we meant. We meant something else.""" start="00:07:24.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Or you did something a little something wrong.""" start="00:07:26.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Please fix it.""" start="00:07:29.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is all very powerful.""" start="00:07:29.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Is this editing?""" start="00:07:31.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Well, it's in the editor.""" start="00:07:33.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could do this while editing, while deleting,""" start="00:07:40.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could be doing some sort of traditional editing.""" start="00:07:42.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then this, which is editing""" start="00:07:44.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the sense that it's in your editor,""" start="00:07:47.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you might have to highlight""" start="00:07:48.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""some parts of the file and do things,""" start="00:07:51.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but generally you don't even need to,""" start="00:07:52.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or you go to a spot and you say, put code at this spot.""" start="00:07:54.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's kind of like editing.""" start="00:07:59.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I would say it's not exactly editing,""" start="00:08:01.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's at least something that must happen in an editor""" start="00:08:05.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it's well integrated into Emacs.""" start="00:08:10.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""As you can tell, it used very sort of""" start="00:08:12.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""modern standard Emacs UI paradigms""" start="00:08:14.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it's all written in Elisp.""" start="00:08:18.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Everything is happening in Elisp here.""" start="00:08:20.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So this is just very much an Emacs experience.""" start="00:08:23.780" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's just not exactly editing""" start="00:08:25.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because the thing doing the editing""" start="00:08:27.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is the AI and not you.""" start="00:08:29.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You're just kind of telling it what to do.""" start="00:08:32.520" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Outside the editor""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Now we're going to go and look at a way of interaction""" start="00:08:36.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's even more powerful""" start="00:08:41.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and even more disconnected from the normal editing experience.""" start="00:08:43.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In fact, it's so disconnected""" start="00:08:46.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that most people are using this without an editor.""" start="00:08:47.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""These are things like Claude Code""" start="00:08:52.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or the sort of open source equivalent, Aider.""" start="00:08:57.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's a few other things that follow this pattern as well.""" start="00:09:01.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it's very interesting in the sense""" start="00:09:05.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that while you can integrate these with the editors,""" start="00:09:07.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I'm going to show you an Emacs integration,""" start="00:09:09.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you don't need to.""" start="00:09:12.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that's not the way most people are using them.""" start="00:09:13.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I find it very interesting that sort of""" start="00:09:16.940" video="mainVideo-llm" id="subtitle"]] +[[!template text="""we're going back kind of full circle where, you know,""" start="00:09:19.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in the 1960s or 70s, we were using Ed from the terminal""" start="00:09:23.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to edit files, but then we created editors,""" start="00:09:31.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and that was a really good idea.""" start="00:09:35.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It is a lot easier to edit files""" start="00:09:37.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when you have an actual UI.""" start="00:09:40.168" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But now it's 2025, and we're back in the terminal,""" start="00:09:42.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and we're editing files through the terminal,""" start="00:09:46.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you know what, it's great,""" start="00:09:50.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but I think it's even better with Emacs.""" start="00:09:53.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""On the other hand, it comes with some trade-offs,""" start="00:09:56.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""as you can see, as we will see.""" start="00:10:00.280" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Outside Experiences: claude-code.el, aidermacs, eca""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""Okay, we're going to look at""" start="00:10:04.734" video="mainVideo-llm" id="subtitle"]] +[[!template text="""[audio glitch] Claude Code IDE, aidermacs, ECA.""" start="00:10:07.468" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Last time, I didn't show you all the variants.""" start="00:10:20.321" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I do want to show you eca, which points to,""" start="00:10:22.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it is a very similar tool in what it does,""" start="00:10:26.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but does have a different""" start="00:10:29.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and I think better type of Emacs integration.""" start="00:10:32.740" video="mainVideo-llm" id="subtitle"]] +[[!template text="""All right, we're going to demonstrate Claude Code IDE,""" start="00:10:37.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which is one of three Claude Code packages.""" start="00:10:42.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's a bit confusing.""" start="00:10:46.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""One of them will be demoed by another presenter""" start="00:10:47.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""at the Emacs conference, so stay tuned for that.""" start="00:10:52.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Here I'm just going to give you a little taste""" start="00:10:54.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""of what these packages look like.""" start="00:10:56.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So if we say Claude Code IDE,""" start="00:10:58.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it presents us with basically""" start="00:11:03.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""almost exactly what you would get""" start="00:11:06.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when you're running this in the terminal.""" start="00:11:09.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And essentially there's a terminal interface.""" start="00:11:11.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can see that there's a vterm.""" start="00:11:13.934" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But here we're going to say, "In scratch.el"...""" start="00:11:16.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""let's say what we want to happen.""" start="00:11:20.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""[In scratch.el, there is a fibonacci function.""" start="00:11:23.401" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Can you add all normal elisp headers""" start="00:11:32.134" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and footers to this file?]""" start="00:11:39.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, we just say what's going to happen,""" start="00:11:43.860" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and this is going to do things in the background.""" start="00:11:45.841" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not going to do things through Emacs.""" start="00:11:48.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That said, there is an integration with Emacs,""" start="00:11:50.980" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so that it can do things like show you these nice ediffs.""" start="00:11:54.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""My screen is not really wide enough""" start="00:12:00.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to show you a really great ediff here,""" start="00:12:03.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but you can kind of see what it's doing,""" start="00:12:04.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you can see, yeah, that looks good,""" start="00:12:06.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""so you could say yes, yes, accept the changes,""" start="00:12:09.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and if we... Just need to revert the buffer.""" start="00:12:14.121" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We can quit the printout of this.""" start="00:12:25.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We see that it just did everything I asked it to.""" start="00:12:28.460" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Is everything exactly right?""" start="00:12:33.020" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Probably not. It's reasonable for a start though.""" start="00:12:36.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But you could ask it to do anything.""" start="00:12:39.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say, write unit tests for this, and it will.""" start="00:12:40.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say, write me a suite of functions""" start="00:12:45.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""like Fibonacci, and it'll probably do something reasonable.""" start="00:12:49.020" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But you can see this is not editing.""" start="00:12:52.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's nothing editing-like about this.""" start="00:12:54.901" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That said, there is something that is editing.""" start="00:12:58.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You need to give it instructions.""" start="00:13:07.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You need to tell it what to do.""" start="00:13:08.600" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Org files""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""And what you could do is... You could have a project.org,""" start="00:13:10.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and what you could do is you could have functions.""" start="00:13:19.620" video="mainVideo-llm" id="subtitle"]] +[[!template text="""The way I've done things often is ....""" start="00:13:23.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could say something like,""" start="00:13:26.660" video="mainVideo-llm" id="subtitle"]] +[[!template text="""unit tests for Fibonacci. How do you spell Fibonacci?""" start="00:13:28.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't remember. But then you could say that this is,""" start="00:13:36.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could clock it, basically. org-clock.""" start="00:13:40.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""What I've done is...""" start="00:13:47.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could add custom commands to Claude Code,""" start="00:13:48.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you could just say, look, here's my Org file,""" start="00:13:50.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""read it and do the thing that I'm clocked in as.""" start="00:13:53.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And then you can write a bunch of instructions here, like,""" start="00:13:57.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I like to use ert for tests. Tests should, like, whatever.""" start="00:14:01.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You should just say... everything""" start="00:14:07.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you need to kind of specify.""" start="00:14:08.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""As you get to more complicated tasks,""" start="00:14:11.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's harder and harder to give it all the context""" start="00:14:13.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it needs for a task,""" start="00:14:16.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and Org Mode is actually a pretty good way to do this.""" start="00:14:17.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I find that this works pretty well,""" start="00:14:22.300" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and you can even have it instruct Claude""" start="00:14:24.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to just mark things done in your Org file""" start="00:14:26.700" video="mainVideo-llm" id="subtitle"]] +[[!template text="""when they're done.""" start="00:14:29.334" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it knows how to do this, of course.""" start="00:14:30.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So, let's just clock out.""" start="00:14:32.868" video="mainVideo-llm" id="subtitle"]] +[[!template text="""That's one way to do things.""" start="00:14:37.960" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""ECA""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""So one other thing I'd like to show you is eca,""" start="00:14:45.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""which, compared to Claude Code, ECA is open source.""" start="00:14:49.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's very nice in that respect.""" start="00:14:52.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It doesn't have to use Anthropic's models.""" start="00:14:54.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You can use local models,""" start="00:14:57.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it has the advantage of integrating very well with Emacs.""" start="00:15:00.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I'm not going to demonstrate it,""" start="00:15:07.620" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because it works essentially the same thing you could do""" start="00:15:08.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""approximately the same kinds of things""" start="00:15:11.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you could do with Claude Code.""" start="00:15:14.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You just write what you want to happen""" start="00:15:15.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and it will make it happen.""" start="00:15:17.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It again does not do this through Emacs,""" start="00:15:18.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but what it does do is""" start="00:15:21.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it gives you a much better Emacs interface""" start="00:15:23.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that's not terminal-based,""" start="00:15:25.120" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because you're not using it through the terminal,""" start="00:15:26.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""or not even through comint,""" start="00:15:29.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you are using it through a backend""" start="00:15:31.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that is exchanging structured information""" start="00:15:35.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""with this process that is doing all the work.""" start="00:15:37.500" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But other than that,""" start="00:15:41.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it's the same model as Claude Code""" start="00:15:41.901" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and projects of that nature.""" start="00:15:44.520" video="mainVideo-llm" id="subtitle"]] + +<div class="transcript-heading">[[!template new="1" text="""Editing""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]]</div>[[!template text="""We've seen in the demos that I gave""" start="00:15:52.060" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that there are AI experiences""" start="00:15:56.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""that are very natural in the world of editing.""" start="00:15:58.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because they, like Copilot, just offers completion,""" start="00:16:01.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it fits very well with what we all do in Emacs.""" start="00:16:05.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And it's truly, yes, it's kind of a cheat in a sense""" start="00:16:09.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""for editing experiences,""" start="00:16:14.280" video="mainVideo-llm" id="subtitle"]] +[[!template text="""because it can do so much, but it's just editing.""" start="00:16:15.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Whereas things like gptel and those kinds of tools,""" start="00:16:20.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they are clearly in an editor and using editor,""" start="00:16:25.260" video="mainVideo-llm" id="subtitle"]] +[[!template text="""they're using Emacs, but they represent sort of like, well,""" start="00:16:29.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you can edit for a while, then you could use these tools""" start="00:16:35.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to do something that is not editing,""" start="00:16:37.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""this AI just changing the buffer for you. And that's fine.""" start="00:16:39.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's still... It may not be editing,""" start="00:16:45.900" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's still clearly something that""" start="00:16:48.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""is useful to do in Emacs""" start="00:16:52.034" video="mainVideo-llm" id="subtitle"]] +[[!template text="""and belongs in Emacs.""" start="00:16:55.568" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But the new tools like Claude Code and things like that""" start="00:16:57.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""are kind of different.""" start="00:17:01.860" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Yes, they will get better integrated with Emacs,""" start="00:17:02.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it's not clear that they really need to.""" start="00:17:06.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""They can do a lot of things without editing.""" start="00:17:11.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In a sense, editing is obsolete in some sense.""" start="00:17:15.480" video="mainVideo-llm" id="subtitle"]] +[[!template text="""For as many tasks, you don't need to edit anymore.""" start="00:17:19.240" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And that's a nice thing.""" start="00:17:23.460" video="mainVideo-llm" id="subtitle"]] +[[!template text="""No one really knows when all this will end,""" start="00:17:26.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""how far things will go. It could be that in a decade or so,""" start="00:17:30.580" video="mainVideo-llm" id="subtitle"]] +[[!template text="""no one's really editing for work anymore.""" start="00:17:36.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Maybe you're just writing instructions.""" start="00:17:41.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You could do that with anything.""" start="00:17:43.160" video="mainVideo-llm" id="subtitle"]] +[[!template text="""You don't need Emacs or any special editor.""" start="00:17:44.320" video="mainVideo-llm" id="subtitle"]] +[[!template text="""We could all be using Notepad. That would be bad.""" start="00:17:47.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But... I think it could go that far,""" start="00:17:50.440" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it could be that, well, for many specialized things,""" start="00:17:58.040" video="mainVideo-llm" id="subtitle"]] +[[!template text="""people are still using editing for certain tasks,""" start="00:18:01.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but most tasks are getting fed to just...""" start="00:18:04.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""AI is just doing those things.""" start="00:18:07.001" video="mainVideo-llm" id="subtitle"]] +[[!template text="""In any case, I think it's clear that editing is diminishing,""" start="00:18:08.840" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the need for editing itself is diminishing.""" start="00:18:15.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And in such a world, It's interesting to think""" start="00:18:17.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""where Emacs is headed, especially in relation to""" start="00:18:21.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""all the other editors.""" start="00:18:24.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I think people will use Emacs less.""" start="00:18:26.360" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But I think other editors, like VS Code,""" start="00:18:28.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""may simply disappear or be a relatively fringe tool.""" start="00:18:31.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And Emacs is going to follow its own path.""" start="00:18:38.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's very extensible. It could do anything.""" start="00:18:42.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""If there's one thing Emacs can do, it's adapt.""" start="00:18:44.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""Emacs has been around for a long time.""" start="00:18:47.920" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's pretty clear that Emacs will be around for a long time.""" start="00:18:51.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It might be that in the future,""" start="00:18:54.800" video="mainVideo-llm" id="subtitle"]] +[[!template text="""editing is some sort of like an artisanal activity that we do.""" start="00:18:58.880" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's kind of weird to think about it.""" start="00:19:04.340" video="mainVideo-llm" id="subtitle"]] +[[!template text="""It's not like baking bread.""" start="00:19:05.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""But it is the sense that AI might be""" start="00:19:07.680" video="mainVideo-llm" id="subtitle"]] +[[!template text="""churning out code in the way, you know,""" start="00:19:10.080" video="mainVideo-llm" id="subtitle"]] +[[!template text="""the factories are turning out bread,""" start="00:19:12.400" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but if you really want the good stuff,""" start="00:19:14.200" video="mainVideo-llm" id="subtitle"]] +[[!template text="""you'll have to do it yourself.""" start="00:19:17.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""I don't know if it'll be exactly like that,""" start="00:19:21.000" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but it could be that Emacs survives and thrives""" start="00:19:23.960" video="mainVideo-llm" id="subtitle"]] +[[!template text="""in a very kind of specialized ecosystem of people""" start="00:19:29.520" video="mainVideo-llm" id="subtitle"]] +[[!template text="""who contribute and use it in the way""" start="00:19:33.560" video="mainVideo-llm" id="subtitle"]] +[[!template text="""it has survived and thrive right now.""" start="00:19:35.600" video="mainVideo-llm" id="subtitle"]] +[[!template text="""And I think that's a really nice way for all this to end up.""" start="00:19:39.540" video="mainVideo-llm" id="subtitle"]] +[[!template text="""There's the whole sense of how society will end up""" start="00:19:46.140" video="mainVideo-llm" id="subtitle"]] +[[!template text="""if all this happens. I don't know,""" start="00:19:48.720" video="mainVideo-llm" id="subtitle"]] +[[!template text="""but Emacs will be there for us when whatever happens.""" start="00:19:50.760" video="mainVideo-llm" id="subtitle"]] +[[!template text="""So thank you, and let's help make Emacs the best it can be""" start="00:19:54.640" video="mainVideo-llm" id="subtitle"]] +[[!template text="""to survive and thrive in the next decade.""" start="00:20:00.080" video="mainVideo-llm" id="subtitle"]] + +</div> + +Captioner: amitav + Questions or comments? Please e-mail [ahyatt@gmail.com](mailto:ahyatt@gmail.com?subject=Comment%20for%20EmacsConf%202023%20llm%3A%20Emacs%2C%20editors%2C%20and%20LLM%20driven%20workflows) diff --git a/2025/info/llm-before.md b/2025/info/llm-before.md index c2aa1889..f975bb05 100644 --- a/2025/info/llm-before.md +++ b/2025/info/llm-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-llm.html> Etherpad: <https://pad.emacsconf.org/2025-llm> Etherpad: <https://pad.emacsconf.org/2025-llm> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T18:00:00Z" end="2025-12-06T18:25:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:00 PM - 1:25 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:00 PM - 12:25 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:00 AM - 11:25 AM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:00 AM - 10:25 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:00 PM - 6:25 PM UTC <br />Saturday, Dec 6 2025, ~7:00 PM - 7:25 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:00 PM - 8:25 PM EET (Europe/Athens)<br />Saturday, Dec 6 2025, ~11:30 PM - 11:55 PM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:00 AM - 2:25 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:00 AM - 3:25 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/dev/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><video controls preload="none" id="mainVideo-llm"><source src="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2025/captions/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:04 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-llm">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-llm.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.opus">Download --main.opus (17MB)</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.png">Download --main.png</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-llm--emacs-editors-and-llm-driven-workflows--andrew-hyatt--main.webm">Download --main.webm (45MB)</a></li><li><a href="https://youtu.be/U3kbEabBJ_s">View on Youtube</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/open-mic-before.md b/2025/info/open-mic-before.md index 23be470c..ada01e67 100644 --- a/2025/info/open-mic-before.md +++ b/2025/info/open-mic-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 50-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-open-mic.html> Etherpad: <https://pad.emacsconf.org/2025-open-mic> Etherpad: <https://pad.emacsconf.org/2025-open-mic> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T19:50:00Z" end="2025-12-06T20:40:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~2:50 PM - 3:40 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~1:50 PM - 2:40 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~12:50 PM - 1:40 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~11:50 AM - 12:40 PM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~7:50 PM - 8:40 PM UTC <br />Saturday, Dec 6 2025, ~8:50 PM - 9:40 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~9:50 PM - 10:40 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~1:20 AM - 2:10 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~3:50 AM - 4:40 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~4:50 AM - 5:40 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-open-mic">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-open-mic--open-session--participants--intro.webm">Download --intro.webm</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/private-ai-before.md b/2025/info/private-ai-before.md index 8f455e85..9dc6f8dc 100644 --- a/2025/info/private-ai-before.md +++ b/2025/info/private-ai-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 20-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-private-ai.html> Etherpad: <https://pad.emacsconf.org/2025-private-ai> Etherpad: <https://pad.emacsconf.org/2025-private-ai> Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev) -Status: Waiting for video from speaker +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T18:45:00Z" end="2025-12-06T19:05:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~1:45 PM - 2:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~12:45 PM - 1:05 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~11:45 AM - 12:05 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~10:45 AM - 11:05 AM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~6:45 PM - 7:05 PM UTC <br />Saturday, Dec 6 2025, ~7:45 PM - 8:05 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~8:45 PM - 9:05 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~12:15 AM - 12:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~2:45 AM - 3:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~3:45 AM - 4:05 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/dev/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-private-ai">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-private-ai--emacs-and-private-ai-a-great-match--aaron-grothe--slides.pdf">Download --slides.pdf</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/info/sat-close-before.md b/2025/info/sat-close-before.md index 7c3331f8..cffb29ff 100644 --- a/2025/info/sat-close-before.md +++ b/2025/info/sat-close-before.md @@ -8,12 +8,12 @@ The following image shows where the talk is in the schedule for Sat 2025-12-06. Format: 10-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2025/current/bbb-sat-close.html> Etherpad: <https://pad.emacsconf.org/2025-sat-close> Etherpad: <https://pad.emacsconf.org/2025-sat-close> Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Ready to stream +Status: Q&A open for participation <div>Times in different time zones:</div><div class="times" start="2025-12-06T21:00:00Z" end="2025-12-06T21:10:00Z"><div class="conf-time">Saturday, Dec 6 2025, ~4:00 PM - 4:10 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 6 2025, ~3:00 PM - 3:10 PM CST (US/Central)<br />Saturday, Dec 6 2025, ~2:00 PM - 2:10 PM MST (US/Mountain)<br />Saturday, Dec 6 2025, ~1:00 PM - 1:10 PM PST (US/Pacific)<br />Saturday, Dec 6 2025, ~9:00 PM - 9:10 PM UTC <br />Saturday, Dec 6 2025, ~10:00 PM - 10:10 PM CET (Europe/Paris)<br />Saturday, Dec 6 2025, ~11:00 PM - 11:10 PM EET (Europe/Athens)<br />Sunday, Dec 7 2025, ~2:30 AM - 2:40 AM IST (Asia/Kolkata)<br />Sunday, Dec 7 2025, ~5:00 AM - 5:10 AM +08 (Asia/Singapore)<br />Sunday, Dec 7 2025, ~6:00 AM - 6:10 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2025/watch/gen/">Find out how to watch and participate</a></strong></div> - +<div class="vid mainVideo"><div></div><div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2025-sat-close">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2025/emacsconf-2025-sat-close--saturday-closing-remarks--intro.webm">Download --intro.webm</a></li></ul></div></div> # Description <!-- End of emacsconf-publish-before-page -->
\ No newline at end of file diff --git a/2025/schedule-details.md b/2025/schedule-details.md index 5361f271..9e4ab12a 100644 --- a/2025/schedule-details.md +++ b/2025/schedule-details.md @@ -21,14 +21,14 @@ Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">S [[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-gnus.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-gnus""" startutc="""2025-12-06T15:50:00+0000""" endutc="""2025-12-06T16:15:00+0000""" start="""10:50""" end="""11:15""" title="""Reading and writing emails in GNU Emacs with Gnus""" url="""/2025/talks/gnus""" speakers="""Amin Bandali""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""gnus""" note="""captioned, video posted, video: 21:37"""]] [[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-python.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-python""" startutc="""2025-12-06T16:20:00+0000""" endutc="""2025-12-06T16:40:00+0000""" start="""11:20""" end="""11:40""" title="""Interactive Python programming in Emacs""" url="""/2025/talks/python""" speakers="""David Vujic""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""python""" note="""captioned, video posted, video: 19:52"""]] [[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-latex.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-latex""" startutc="""2025-12-06T16:25:00+0000""" endutc="""2025-12-06T16:45:00+0000""" start="""11:25""" end="""11:45""" title="""LaTeX export in org-mode: the overhaul""" url="""/2025/talks/latex""" speakers="""Pedro A. Aranda Gutiérrez""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""latex""" note=""""""]] -[[!template id=sched time="""25""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs or lispmacs[work]</a>""" pad="""https://pad.emacsconf.org/2025-calc""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Basic Calc functionality for engineering or electronics""" url="""/2025/talks/calc""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""calc""" note="""captioned, video: 23:35"""]] -[[!template id=sched time="""25""" q-and-a="""none""" pad="""https://pad.emacsconf.org/2025-llm""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Emacs, editors, and LLM driven workflows""" url="""/2025/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""llm""" note="""captioned, video: 20:04"""]] -[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-blee-lcnt""" startutc="""2025-12-06T18:35:00+0000""" endutc="""2025-12-06T19:15:00+0000""" start="""1:35""" end="""2:15""" title="""Blee-LCNT: An Emacs-centered content production and self-publication framework""" url="""/2025/talks/blee-lcnt""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""blee-lcnt""" note="""captioned, video: 36:41"""]] +[[!template id=sched time="""25""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: lispmacs or lispmacs[work]</a>""" pad="""https://pad.emacsconf.org/2025-calc""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Basic Calc functionality for engineering or electronics""" url="""/2025/talks/calc""" speakers="""Christopher Howard""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""calc""" note="""captioned, video posted, video: 23:35"""]] +[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-llm.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-llm""" startutc="""2025-12-06T18:00:00+0000""" endutc="""2025-12-06T18:25:00+0000""" start="""1:00""" end="""1:25""" title="""Emacs, editors, and LLM driven workflows""" url="""/2025/talks/llm""" speakers="""Andrew Hyatt""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""llm""" note="""captioned, video posted, video: 20:04"""]] +[[!template id=sched time="""40""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-blee-lcnt.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-blee-lcnt""" startutc="""2025-12-06T18:35:00+0000""" endutc="""2025-12-06T19:15:00+0000""" start="""1:35""" end="""2:15""" title="""Blee-LCNT: An Emacs-centered content production and self-publication framework""" url="""/2025/talks/blee-lcnt""" speakers="""Mohsen BANAN""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""blee-lcnt""" note="""captioned, video posted, video: 36:41"""]] [[!template id=sched time="""20""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-private-ai.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-private-ai""" startutc="""2025-12-06T18:45:00+0000""" endutc="""2025-12-06T19:05:00+0000""" start="""1:45""" end="""2:05""" title="""Emacs and private AI: a great match""" url="""/2025/talks/private-ai""" speakers="""Aaron Grothe""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""private-ai""" note=""""""]] -[[!template id=sched time="""30""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: screwlisp</a>""" pad="""https://pad.emacsconf.org/2025-commonlisp""" startutc="""2025-12-06T19:25:00+0000""" endutc="""2025-12-06T19:55:00+0000""" start="""2:25""" end="""2:55""" title="""Common Lisp images communicating like-a-human through shared Emacs slime and eev""" url="""/2025/talks/commonlisp""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""commonlisp""" note="""video: 25:56"""]] -[[!template id=sched time="""5""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cow_2001</a>""" pad="""https://pad.emacsconf.org/2025-greader""" startutc="""2025-12-06T19:35:00+0000""" endutc="""2025-12-06T19:40:00+0000""" start="""2:35""" end="""2:40""" title="""GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence""" url="""/2025/talks/greader""" speakers="""Yuval Langer""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""greader""" note="""video: 04:08"""]] +[[!template id=sched time="""30""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev">#emacsconf-dev, speaker nick: screwlisp</a>""" pad="""https://pad.emacsconf.org/2025-commonlisp""" startutc="""2025-12-06T19:25:00+0000""" endutc="""2025-12-06T19:55:00+0000""" start="""2:25""" end="""2:55""" title="""Common Lisp images communicating like-a-human through shared Emacs slime and eev""" url="""/2025/talks/commonlisp""" speakers="""screwlisp""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""commonlisp""" note="""video posted, video: 25:56"""]] +[[!template id=sched time="""5""" q-and-a="""<a href="https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen">#emacsconf-gen, speaker nick: cow_2001</a>""" pad="""https://pad.emacsconf.org/2025-greader""" startutc="""2025-12-06T19:35:00+0000""" endutc="""2025-12-06T19:40:00+0000""" start="""2:35""" end="""2:40""" title="""GNU Emacs Greader (Gnamù Reader) mode is the best Emacs mode in existence""" url="""/2025/talks/greader""" speakers="""Yuval Langer""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""greader""" note="""video posted, video: 04:08"""]] [[!template id=sched time="""50""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-open-mic.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-open-mic""" startutc="""2025-12-06T19:50:00+0000""" endutc="""2025-12-06T20:40:00+0000""" start="""2:50""" end="""3:40""" title="""Open session""" url="""/2025/talks/open-mic""" speakers="""Participants""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""open-mic""" note=""""""]] -[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">BBB</a>""" note="""This talk has no narration, only music.""" pad="""https://pad.emacsconf.org/2025-graphics""" startutc="""2025-12-06T20:05:00+0000""" endutc="""2025-12-06T20:30:00+0000""" start="""3:05""" end="""3:30""" title="""Modern Emacs/Elisp hardware/software accelerated graphics""" url="""/2025/talks/graphics""" speakers="""Emanuel Berg""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""graphics""" note="""captioned, video: 22:15"""]] +[[!template id=sched time="""25""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-graphics.html">BBB</a>""" note="""This talk has no narration, only music.""" pad="""https://pad.emacsconf.org/2025-graphics""" startutc="""2025-12-06T20:05:00+0000""" endutc="""2025-12-06T20:30:00+0000""" start="""3:05""" end="""3:30""" title="""Modern Emacs/Elisp hardware/software accelerated graphics""" url="""/2025/talks/graphics""" speakers="""Emanuel Berg""" track="""Development""" watch="""https://emacsconf.org/2025/watch/dev""" slug="""graphics""" note="""captioned, video posted, video: 22:15"""]] [[!template id=sched time="""10""" q-and-a="""<a href="https://media.emacsconf.org/2025/current/bbb-sat-close.html">BBB</a>""" pad="""https://pad.emacsconf.org/2025-sat-close""" startutc="""2025-12-06T21:00:00+0000""" endutc="""2025-12-06T21:10:00+0000""" start="""4:00""" end="""4:10""" title="""Saturday closing remarks / open session""" url="""/2025/talks/sat-close""" track="""General""" watch="""https://emacsconf.org/2025/watch/gen""" slug="""sat-close""" note=""""""]]</div> Jump to: <a href="#date-2025-12-06">Sat Dec 6</a> - <a href="#date-2025-12-07">Sun Dec 7</a><a name="date-2025-12-07"></a> diff --git a/2025/talks/weights.md b/2025/talks/weights.md index 06701453..49c5db8b 100644 --- a/2025/talks/weights.md +++ b/2025/talks/weights.md @@ -11,6 +11,8 @@ 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 diff --git a/2025/watch/dev.md b/2025/watch/dev.md index 684f2d95..934fd97b 100644 --- a/2025/watch/dev.md +++ b/2025/watch/dev.md @@ -13,6 +13,7 @@ For better performance, we recommend watching <a href="https://live0.emacsconf.o <li>mpv https://live0.emacsconf.org/dev.webm</li> <li>vlc https://live0.emacsconf.org/dev.webm</li> <li>ffplay https://live0.emacsconf.org/dev.webm</li> +<li>You can also watch it in VLC by choosing menu - Media - Open Network Stream and putting in https://live0.emacsconf.org/dev.webm</li> </ul> If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/dev-480p.webm">https://live0.emacsconf.org/dev-480p.webm</a>. diff --git a/2025/watch/gen.md b/2025/watch/gen.md index dd89243a..73152da1 100644 --- a/2025/watch/gen.md +++ b/2025/watch/gen.md @@ -13,6 +13,7 @@ For better performance, we recommend watching <a href="https://live0.emacsconf.o <li>mpv https://live0.emacsconf.org/gen.webm</li> <li>vlc https://live0.emacsconf.org/gen.webm</li> <li>ffplay https://live0.emacsconf.org/gen.webm</li> +<li>You can also watch it in VLC by choosing menu - Media - Open Network Stream and putting in https://live0.emacsconf.org/gen.webm</li> </ul> If you have limited bandwidth, you can watch the low-res stream <a href="https://live0.emacsconf.org/gen-480p.webm">https://live0.emacsconf.org/gen-480p.webm</a>. |
