diff options
Diffstat (limited to '2022')
2 files changed, 2647 insertions, 0 deletions
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt new file mode 100644 index 00000000..07641cde --- /dev/null +++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt @@ -0,0 +1,890 @@ +WEBVTT captioned by sachac + +1 +00:00:00.000 --> 00:00:06.280 +Hi everyone! I'm Mats Liddell. + +2 +00:00:06.280 --> 00:00:07.320 +In this talk, I will show + +3 +00:00:07.320 --> 00:00:09.040 +how you can link to personal data + +4 +00:00:09.040 --> 00:00:13.960 +using Hyperbole's support for implicit button types. + +5 +00:00:13.960 --> 00:00:16.040 +Before starting, a few words about me. + +6 +00:00:16.040 --> 00:00:18.000 +I work as a software engineer, + +7 +00:00:18.000 --> 00:00:19.200 +and in my spare time + +8 +00:00:19.200 --> 00:00:21.280 +I'm co-maintaining the Hyperbole package + +9 +00:00:21.280 --> 00:00:24.360 +together with the package author Bob Weiner. + +10 +00:00:24.360 --> 00:00:27.240 +Hyperbole dates back to 1993, + +11 +00:00:27.240 --> 00:00:29.680 +and have had some inactive years in the past, + +12 +00:00:29.680 --> 00:00:31.680 +but work is now active again. + +13 +00:00:31.680 --> 00:00:33.080 +The package is available + +14 +00:00:33.080 --> 00:00:36.160 +through the GNU ELPA package archive. + +15 +00:00:36.160 --> 00:00:37.960 +The talk will focus on + +16 +00:00:37.960 --> 00:00:39.600 +creation of implicit button types. + +17 +00:00:39.600 --> 00:00:41.480 +For more info on Hyperbole, + +18 +00:00:41.480 --> 00:00:43.120 +listen to other presentations + +19 +00:00:43.120 --> 00:00:46.360 +and check out the package documentation. + +20 +00:00:46.360 --> 00:00:50.000 +What I want you to take with you from this talk is + +21 +00:00:50.000 --> 00:00:51.640 +that the implicit button types + +22 +00:00:51.640 --> 00:00:54.440 +can make patterns in your files into buttons; + +23 +00:00:54.440 --> 00:00:56.600 +and that new implicit button types + +24 +00:00:56.600 --> 00:00:58.480 +can quickly be created by using + +25 +00:00:58.480 --> 00:01:01.760 +the `defil' and the `defal' macros. + +26 +00:01:01.760 --> 00:01:05.160 +So what is an implicit button type? + +27 +00:01:05.160 --> 00:01:06.800 +I think of it as a text pattern + +28 +00:01:06.800 --> 00:01:08.920 +that has some extended meaning. + +29 +00:01:08.920 --> 00:01:10.760 +When you see the pattern in the text, + +30 +00:01:10.760 --> 00:01:12.800 +you can think of it as a button type. + +31 +00:01:12.800 --> 00:01:13.880 +When you press the button, + +32 +00:01:13.880 --> 00:01:16.880 +something related to that meaning happens. + +33 +00:01:16.880 --> 00:01:19.000 +It can be jumping to some place, + +34 +00:01:19.000 --> 00:01:22.440 +opening an external tool, doing some computation. + +35 +00:01:22.440 --> 00:01:24.160 +So there can be some action + +36 +00:01:24.160 --> 00:01:29.920 +associated with the pattern. + +37 +00:01:29.920 --> 00:01:33.320 +To make it clear, let's look at some examples. + +38 +00:01:33.320 --> 00:01:36.080 +Let's start with something that is maybe so obvious + +39 +00:01:36.080 --> 00:01:39.600 +that you don't even think of it as a pattern: a file name. + +40 +00:01:39.600 --> 00:01:41.360 +When you see such a string in text, + +41 +00:01:41.360 --> 00:01:45.360 +you will naturally associate it with a file on disk, + +42 +00:01:45.360 --> 00:01:46.720 +and if you would click on it, + +43 +00:01:46.720 --> 00:01:52.680 +you would probably expect that file to open. + +44 +00:01:52.680 --> 00:01:55.120 +In the first sentence on the slide, + +45 +00:01:55.120 --> 00:01:56.840 +you might recognize the file name + +46 +00:01:56.840 --> 00:02:01.760 +for the bash initialization file, ~/.bashrc. + +47 +00:02:01.760 --> 00:02:03.840 +Hyperbole comes with built-in support + +48 +00:02:03.840 --> 00:02:06.520 +for recognizing files and directory path names + +49 +00:02:06.520 --> 00:02:08.680 +as implicit button types in text. + +50 +00:02:08.680 --> 00:02:11.760 +For Hyperbole to take action on the button type, + +51 +00:02:11.760 --> 00:02:13.440 +you move the cursor within the button + +52 +00:02:13.440 --> 00:02:16.320 +and press M-RET or use a mouse click. + +53 +00:02:16.320 --> 00:02:22.360 +So let's try that. + +54 +00:02:22.360 --> 00:02:27.720 +Similar for the path, /usr/local in the next sentence. + +55 +00:02:27.720 --> 00:02:29.520 +That will open the corresponding + +56 +00:02:29.520 --> 00:02:37.080 +directory using dired-mode. + +57 +00:02:37.080 --> 00:02:39.760 +Other examples of built-in implicit button types + +58 +00:02:39.760 --> 00:02:43.720 +that Hyperbole recognizes are email addresses, + +59 +00:02:43.720 --> 00:02:47.320 +web addresses, requests for comment documents + +60 +00:02:47.320 --> 00:02:50.120 +in the form of RFC followed by a number, + +61 +00:02:50.120 --> 00:02:53.040 +GNU debbugs issues, plus many more. + +62 +00:02:53.040 --> 00:02:55.360 +These are some examples + +63 +00:02:55.360 --> 00:02:58.080 +of implicit button types with built-in support. + +64 +00:02:58.080 --> 00:02:59.920 +I list them here to give you an idea + +65 +00:02:59.920 --> 00:03:02.480 +how the text pattern in itself is enough + +66 +00:03:02.480 --> 00:03:03.960 +for the system to recognize it + +67 +00:03:03.960 --> 00:03:10.120 +as something actionable. + +68 +00:03:10.120 --> 00:03:12.480 +So as shown, Hyperbole has built-in support + +69 +00:03:12.480 --> 00:03:14.040 +for implicit buttons. + +70 +00:03:14.040 --> 00:03:16.120 +There's only one problem here. + +71 +00:03:16.120 --> 00:03:17.920 +The behavior is predefined. + +72 +00:03:17.920 --> 00:03:20.240 +There is of course a trade off. + +73 +00:03:20.240 --> 00:03:21.560 +It is convenient to get + +74 +00:03:21.560 --> 00:03:23.480 +many button types out of the box + +75 +00:03:23.480 --> 00:03:25.520 +with likely good standard behavior + +76 +00:03:25.520 --> 00:03:27.680 +and that works in many places. + +77 +00:03:27.680 --> 00:03:29.360 +But what if you would want to create + +78 +00:03:29.360 --> 00:03:31.160 +your own completely new mapping, + +79 +00:03:31.160 --> 00:03:32.880 +possibly to your own data? + +80 +00:03:32.880 --> 00:03:38.120 +It is here that Hyperbole's support for creating + +81 +00:03:38.120 --> 00:03:41.280 +new implicit button types comes in. + +82 +00:03:41.280 --> 00:03:43.360 +For the full pattern matching button type, + +83 +00:03:43.360 --> 00:03:46.720 +like for the filename and examples we just looked at, + +84 +00:03:46.720 --> 00:03:48.754 +you need to define the implicit button + +00:03:48.755 --> 00:03:50.920 +using the macro, `defib'. + +85 +00:03:50.920 --> 00:03:53.280 +The downside of that is + +86 +00:03:53.280 --> 00:03:54.920 +you need to code at the elisp level. + +87 +00:03:54.920 --> 00:03:57.240 +However, if you are creating a new pattern + +88 +00:03:57.240 --> 00:03:59.120 +that has well-defined delimiters, + +89 +00:03:59.120 --> 00:04:01.360 +there is support for that in an easier way. + +90 +00:04:01.360 --> 00:04:03.800 +These support functions, or rather macros, + +91 +00:04:03.800 --> 00:04:06.240 +are `defil' and `defal'. + +92 +00:04:06.240 --> 00:04:08.440 +We will look at those macros soon, + +93 +00:04:08.440 --> 00:04:13.400 +but first, my definition of personal data. + +94 +00:04:13.400 --> 00:04:18.200 +I think of personal data as something + +95 +00:04:18.200 --> 00:04:19.680 +that you would like to link to, + +96 +00:04:19.680 --> 00:04:21.440 +but it's not necessarily in a form + +97 +00:04:21.440 --> 00:04:23.360 +supported by any known tool. + +98 +00:04:23.360 --> 00:04:26.920 +It might be stored on a web server, local storage, + +99 +00:04:26.920 --> 00:04:28.680 +or could even be some computation + +100 +00:04:28.680 --> 00:04:29.400 +rather than a link. + +101 +00:04:29.400 --> 00:04:32.200 +What all these cases have in common is that + +102 +00:04:32.200 --> 00:04:34.240 +you want to be able to reference it + +103 +00:04:34.240 --> 00:04:36.640 +in a short, and for you, descriptive way. + +104 +00:04:36.640 --> 00:04:38.960 +So when you write text, you can use + +105 +00:04:38.960 --> 00:04:44.480 +a new implicit type to create the connection. + +106 +00:04:44.480 --> 00:04:46.600 +This might be a bit abstract, + +107 +00:04:46.600 --> 00:04:48.080 +so let's look at an example. + +108 +00:04:48.080 --> 00:04:51.000 +Suppose you have a flat file structure + +109 +00:04:51.000 --> 00:04:52.760 +with some notes in each file. + +110 +00:04:52.760 --> 00:04:54.520 +It can look like this. + +111 +00:04:54.520 --> 00:04:57.400 +In the data folder, we have two files + +112 +00:04:57.400 --> 00:05:00.200 +that represents the notes we have taken. + +113 +00:05:00.200 --> 00:05:02.840 +We now want to be able to link to these notes + +114 +00:05:02.840 --> 00:05:07.120 +from outside of the data folder. + +115 +00:05:07.120 --> 00:05:08.960 +Let's make an implicit button type + +116 +00:05:08.960 --> 00:05:10.920 +that opens a file in this structure. + +117 +00:05:10.920 --> 00:05:13.520 +To make the pattern stand out in text, + +118 +00:05:13.520 --> 00:05:16.640 +we use double braces as start and stop delimiters. + +119 +00:05:16.640 --> 00:05:20.080 +An implicit button instance + +120 +00:05:20.080 --> 00:05:22.760 +would then look like this. + +121 +00:05:22.760 --> 00:05:27.680 +We can create that using the `defil' macro like this. + +122 +00:05:27.680 --> 00:05:31.840 +This invocation of the field + +123 +00:05:31.840 --> 00:05:34.480 +creates a button type "demo-link-to-file" + +124 +00:05:34.480 --> 00:05:37.280 +with the start delimiter of "{{" + +125 +00:05:37.280 --> 00:05:40.560 +and then delimiters of "}}", + +126 +00:05:40.560 --> 00:05:43.320 +the regular expression ".*" pattern + +127 +00:05:43.320 --> 00:05:45.640 +to match everything between the delimiters, + +128 +00:05:45.640 --> 00:05:48.800 +and finally, the action defined by the link expression. + +129 +00:05:48.800 --> 00:05:52.160 +Pattern substitution is performed + +130 +00:05:52.160 --> 00:05:54.440 +on the link expression before evaluation + +131 +00:05:54.440 --> 00:05:57.920 +so that the text that is in between the delimiters + +132 +00:05:57.920 --> 00:06:02.360 +is inserted where the "\\&" is in the link expression. + +134 +00:06:02.360 --> 00:06:07.560 +So all in all, implicit type instance will result in + +135 +00:06:07.560 --> 00:06:11.760 +the link expression of "~/data/FileA", + +136 +00:06:11.760 --> 00:06:14.520 +which we recognize as a file path. + +137 +00:06:14.520 --> 00:06:18.040 +With a single-line expression, + +138 +00:06:18.040 --> 00:06:21.040 +we have created our own hyperbutton syntax + +139 +00:06:21.040 --> 00:06:23.080 +that we can use in any Emacs buffer + +140 +00:06:23.080 --> 00:06:25.560 +to link to this custom set of data. + +141 +00:06:25.560 --> 00:06:30.960 +So let's evaluate the defil and use it. + +142 +00:06:30.960 --> 00:06:33.760 +I have prepared the files so that they already + +143 +00:06:33.760 --> 00:06:36.400 +contain some text and implicit links. + +144 +00:06:36.400 --> 00:06:43.760 +So from the presentation, we can go to FileA, + +145 +00:06:43.760 --> 00:06:48.720 +and from there to fileB. + +146 +00:06:48.720 --> 00:06:51.040 +Since the Hyperbole path expression + +147 +00:06:51.040 --> 00:06:53.640 +supports outline structures, we can, + +148 +00:06:53.640 --> 00:06:55.960 +as an extra bonus, reference directly + +149 +00:06:55.960 --> 00:06:57.560 +the headers in the files, + +150 +00:06:57.560 --> 00:07:00.160 +so we can, for example, link directly + +151 +00:07:00.160 --> 00:07:02.600 +to "More Notes" in FileB. + +152 +00:07:02.600 --> 00:07:10.720 +We have now created a simple info system. + +154 +00:07:10.720 --> 00:07:16.440 +Looking deeper at the link expression, + +155 +00:07:16.440 --> 00:07:19.840 +it can be of four different types: + +156 +00:07:19.840 --> 00:07:22.040 +A file path expression, + +157 +00:07:22.040 --> 00:07:23.520 +as we have already looked at; + +158 +00:07:23.520 --> 00:07:25.960 +a brace-delimited key series, + +159 +00:07:25.960 --> 00:07:27.960 +that is, a series of command keys + +160 +00:07:27.960 --> 00:07:29.480 +for performing some action, + +161 +00:07:29.480 --> 00:07:30.960 +much like a keyboard macro; + +162 +00:07:30.960 --> 00:07:36.240 +An URL; or a function that takes one argument, + +163 +00:07:36.240 --> 00:07:38.640 +which will be given the button text as input. + +164 +00:07:38.640 --> 00:07:42.880 +The URL link expression allows you + +165 +00:07:42.880 --> 00:07:44.480 +to link to web pages. + +166 +00:07:44.480 --> 00:07:46.560 +So if the data you want to link to + +167 +00:07:46.560 --> 00:07:48.640 +is accessible through the Web + +168 +00:07:48.640 --> 00:07:50.880 +and the URL can be constructed + +169 +00:07:50.880 --> 00:07:53.000 +from the button text in a meaningful way, + +170 +00:07:53.000 --> 00:07:54.520 +it is possible to do that. + +171 +00:07:54.520 --> 00:07:56.160 +Let's create the button type + +172 +00:07:56.160 --> 00:07:57.720 +that links to GNU software. + +173 +00:07:57.720 --> 00:08:01.088 +The URL to the GNU software catalog + +00:08:01.089 --> 00:08:04.680 +is www.gnu.org/software, + +174 +00:08:04.680 --> 00:08:07.440 +and with what we know about the field, + +175 +00:08:07.440 --> 00:08:09.640 +it is easy to create the button type for that. + +176 +00:08:09.640 --> 00:08:11.000 +It can look like this. + +177 +00:08:11.000 --> 00:08:16.200 +And here are two possible buttons + +178 +00:08:16.200 --> 00:08:19.320 +linking to Emacs and Hyperbole. + +179 +00:08:19.320 --> 00:08:24.200 +So let's again evaluate the defil and use it. + +180 +00:08:24.200 --> 00:08:28.120 +Please note that not all GNU software + +181 +00:08:28.120 --> 00:08:29.000 +is under that URL, + +182 +00:08:29.000 --> 00:08:31.000 +so this simple definition will not work + +183 +00:08:31.000 --> 00:08:32.200 +to link to everything. + +184 +00:08:32.200 --> 00:08:37.280 +To highlight the fact that the button action + +185 +00:08:37.280 --> 00:08:39.080 +does not have to be a link, + +186 +00:08:39.080 --> 00:08:40.600 +but can be any action, + +187 +00:08:40.600 --> 00:08:42.200 +let's look at a math example. + +188 +00:08:42.200 --> 00:08:44.800 +Here is the button type that does some math + +189 +00:08:44.800 --> 00:08:47.480 +and writes the result in the message area. + +190 +00:08:47.480 --> 00:08:57.160 +Let's evaluate and use it. + +191 +00:08:57.160 --> 00:08:59.760 +Before ending, I would like to mention + +192 +00:08:59.760 --> 00:09:00.760 +the defal macro. + +193 +00:09:00.760 --> 00:09:02.920 +It is similar to the defil macro, + +194 +00:09:02.920 --> 00:09:04.880 +but simpler, since it uses a form + +195 +00:09:04.880 --> 00:09:07.880 +of the implicit button type with no delimiters. + +196 +00:09:07.880 --> 00:09:14.800 +It is simply <TYPE LINK-EXPR>. + +197 +00:09:14.800 --> 00:09:17.920 +So the implicit button type contains the link type + +198 +00:09:17.920 --> 00:09:18.960 +in clear text. + +199 +00:09:18.960 --> 00:09:23.120 +Our recent FSF software button + +200 +00:09:23.120 --> 00:09:24.854 +would be created like this. + +00:09:24.855 --> 00:09:29.760 +And it would be instantiated in text like this. + +202 +00:09:29.760 --> 00:09:34.960 +I have shown how you, + +203 +00:09:34.960 --> 00:09:37.840 +with the help of the defil macro in Hyperbole, + +204 +00:09:37.840 --> 00:09:40.240 +quickly can create implicit buttons. + +205 +00:09:40.240 --> 00:09:41.480 +With those buttons, you can link + +206 +00:09:41.480 --> 00:09:43.160 +to your personal information + +207 +00:09:43.160 --> 00:09:44.160 +in the form it may have. + +208 +00:09:44.160 --> 00:09:47.200 +By the nature of the implicit buttons, + +209 +00:09:47.200 --> 00:09:49.880 +those can be used from any file in Emacs. + +210 +00:09:49.880 --> 00:09:52.640 +The button types can be + +211 +00:09:52.640 --> 00:09:54.640 +created to be used long term, + +212 +00:09:54.640 --> 00:09:57.680 +but even short term use within the session is possible, + +213 +00:09:57.680 --> 00:09:59.880 +since the creation is simple and quick. + +214 +00:09:59.880 --> 00:10:03.400 +Inspired by this, I hope you will find ways + +215 +00:10:03.400 --> 00:10:04.760 +to create implicit buttons + +216 +00:10:04.760 --> 00:10:07.360 +that will support you getting to your information. + +217 +00:10:07.360 --> 00:10:09.240 +For the simplest cases, + +218 +00:10:09.240 --> 00:10:11.400 +the field and the file macros might be enough. + +219 +00:10:11.400 --> 00:10:13.360 +For more complicated cases, + +220 +00:10:13.360 --> 00:10:15.760 +using a tailor-made function can be an option. + +221 +00:10:15.760 --> 00:10:19.480 +If you know Elisp, use the defib macro + +222 +00:10:19.480 --> 00:10:22.240 +which gives you full control over the button type. + +223 +00:10:22.240 --> 00:10:32.000 +Thank you. diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt new file mode 100644 index 00000000..e39711df --- /dev/null +++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt @@ -0,0 +1,1757 @@ +WEBVTT captioned by mohsen + +NOTE Introduction + +00:00:00.000 --> 00:00:09.719 +Greetings. Salaam. This is Mohsen Banan. محسن بنان. + +00:00:09.720 --> 00:00:12.559 +I am a software and internet engineer. + +00:00:12.560 --> 00:00:14.519 +I have been interested in email and + +00:00:14.520 --> 00:00:17.199 +Emacs for a very long time. + +00:00:17.200 --> 00:00:21.159 +My interest in email started with X.400 + +00:00:21.160 --> 00:00:27.599 +and the Red and Blue CCITT books -- circa 1988. + +00:00:27.600 --> 00:00:31.999 +Early on, in the very early 1990s, I jumped ship + +00:00:32.000 --> 00:00:35.279 +and joined the Internet email movement. + +00:00:35.280 --> 00:00:38.399 +I am the primary author of two mobile email + +00:00:38.400 --> 00:00:45.839 +related Internet RFCs, RFC-2188 and RFC-2524. + +00:00:45.840 --> 00:00:49.919 +My interest in Emacs started in 1986 -- + +00:00:49.920 --> 00:00:54.959 +It was Emacs version 17 then. By around 1988 + +00:00:54.960 --> 00:00:58.479 +when Emacs version 18 was well in place, + +00:00:58.480 --> 00:01:01.799 +I started living inside of Emacs. + +00:01:01.800 --> 00:01:06.479 +My primary digital environment has been Emacs ever since. + +00:01:06.480 --> 00:01:11.319 +It has been a good life. + +00:01:11.320 --> 00:01:16.999 +It turns out that Emacs and email mix up really well. + +00:01:17.000 --> 00:01:21.519 +Here, in this presentation and in the context of + +00:01:21.520 --> 00:01:26.799 +Revisiting The Anatomy of Emacs Mail User Agents, + +00:01:26.800 --> 00:01:30.319 +With MARMEE (Multi-Account Resident + +00:01:30.320 --> 00:01:33.399 +Message Exchange Environment) + +00:01:33.400 --> 00:01:35.559 +I am offering my thoughts on this topic + +00:01:35.560 --> 00:01:41.079 +in this Emacs Conference 2022. + +NOTE Mail and the digital ecosystem + +00:01:41.080 --> 00:01:43.359 +Long ago, I asked myself: + +00:01:43.360 --> 00:01:49.119 +"What should my ultimate mail environment be?" + +00:01:49.120 --> 00:01:52.140 +Over the past 20+ years, I have been exploring + +00:01:52.141 --> 00:01:58.519 +the concept of the "Ultimate Mail User Agent (MUA)". + +00:01:58.520 --> 00:02:01.439 +We do care about privacy, autonomy, + +00:02:01.440 --> 00:02:05.039 +morality, ethics, society and philosophy, + +00:02:05.040 --> 00:02:10.679 +so from the get go, proprietary (Haraam) environments + +00:02:10.680 --> 00:02:14.199 +such as Microsoft Office's Outlook + +00:02:14.200 --> 00:02:20.159 +and Google Office's Gmail were non-starters for me. + +00:02:20.160 --> 00:02:23.159 +But these are significant realities + +00:02:23.160 --> 00:02:27.879 +and we need to deal with these realities. + +00:02:27.880 --> 00:02:30.199 +Notice how Microsoft and Google + +00:02:30.200 --> 00:02:36.079 +have both framed their MUAs in the context of "office". + +00:02:36.080 --> 00:02:38.719 +That type of framing is correct. + +00:02:38.720 --> 00:02:41.719 +an MUA must be fully integrated + +00:02:41.720 --> 00:02:46.559 +in the totality of one's digital ecosystem. + +00:02:46.560 --> 00:02:49.759 +So, the Ultimate Mail User Agent + +00:02:49.760 --> 00:02:53.399 +must be part of the Ultimate Usage Environment + +00:02:53.400 --> 00:02:57.599 +of the Ultimate Digital Ecosystem. + +00:02:57.600 --> 00:03:02.799 +In the non-proprietary (Halaal) universe, clearly + +00:03:02.800 --> 00:03:07.199 +the ultimate usage environment is Emacs. + +00:03:07.200 --> 00:03:10.879 +Emacs is today's most potent and convivial + +00:03:10.880 --> 00:03:15.159 +non-proprietary usage environment. + +00:03:15.160 --> 00:03:19.399 +So, clearly, the ultimate Mail User Agent + +00:03:19.400 --> 00:03:22.879 +must be an integral part of Emacs. + +NOTE Emacs and mail + +00:03:22.880 --> 00:03:24.157 +Having reached that conclusion, + +00:03:24.158 --> 00:03:28.124 +we then need to determine the specifics + +00:03:28.125 --> 00:03:33.599 +of the shape and the anatomy of Emacs' MUAs. + +00:03:33.600 --> 00:03:36.039 +We could have arrived at this conclusion + +00:03:36.040 --> 00:03:38.239 +from the reverse direction as well. + +00:03:38.240 --> 00:03:41.599 +Zawinski's Law states: + +00:03:41.600 --> 00:03:46.479 +Every program attempts to expand until it can read mail. + +00:03:46.480 --> 00:03:49.119 +Those programs which cannot so expand + +00:03:49.120 --> 00:03:52.679 +are replaced by ones which can. + +00:03:52.680 --> 00:03:56.719 +Jamie's point is very simple and obvious. + +00:03:56.720 --> 00:03:59.759 +The "App" that you "live in" all day + +00:03:59.760 --> 00:04:05.439 +should be your MUA and mail environment. + +00:04:05.440 --> 00:04:09.559 +I ask those who jumped ship, who abandoned Emacs + +00:04:09.560 --> 00:04:15.879 +in favor of VS Code: What about mail? + +00:04:15.880 --> 00:04:21.279 +Long ago, Emacs expanded to including MUAs. + +00:04:21.280 --> 00:04:27.039 +In fact there are many Emacs MUAs that you can choose from. + +00:04:27.040 --> 00:04:30.599 +If you are already hip with Emacs And Linux, + +00:04:30.600 --> 00:04:34.639 +you should definitely consider doing email in Emacs. + +00:04:34.640 --> 00:04:39.079 +But if you are not already hip with Emacs, + +00:04:39.080 --> 00:04:43.359 +I mean for new Emacs users, unfortunately, + +00:04:43.360 --> 00:04:48.599 +setting up and using email is not straight forward. + +00:04:48.600 --> 00:04:54.519 +We (I mean, Emacs developers) should work on that! + +00:04:54.520 --> 00:04:57.359 +Emacs offers a good number of MUAs with + +00:04:57.360 --> 00:05:01.959 +different characteristics to suit differing tastes. + +00:05:01.960 --> 00:05:06.119 +As of 2022, you can choose from the following MUAs: + +00:05:06.120 --> 00:05:15.079 +Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail. + +00:05:15.080 --> 00:05:17.719 +Over the years I have tried several of these + +00:05:17.720 --> 00:05:20.119 +and eventually landed on Gnus. + +00:05:20.120 --> 00:05:25.519 +The relevance column in this table simply and only + +00:05:25.520 --> 00:05:28.079 +reflects my taste. + +00:05:28.080 --> 00:05:32.399 +Throughout the rest of this presentation, I focus on Gnus. + +NOTE The audience for this presentation + +00:05:32.400 --> 00:05:36.199 +I have 3 types of audiences in mind for this presentation. + +00:05:36.200 --> 00:05:39.959 +First, if you are already using Emacs + +00:05:39.960 --> 00:05:42.439 +as more than an editor, + +00:05:42.440 --> 00:05:47.399 +it makes good sense for you to also use Emacs as your MUA. + +00:05:47.400 --> 00:05:50.759 +There may well be some relevant information here for you + +00:05:50.760 --> 00:05:52.319 +in that situation. + +00:05:52.320 --> 00:05:57.599 +Second, for those interested in philosophy of Emacs, + +00:05:57.600 --> 00:06:00.759 +I go on some bigger picture tangents + +00:06:00.760 --> 00:06:02.839 +that may be of value to you. + +00:06:02.840 --> 00:06:08.839 +Third, I address some Emacs developers with some feedback, + +00:06:08.840 --> 00:06:11.319 +some suggestions, and some requests. + +00:06:11.320 --> 00:06:14.599 +The general model here is that + +00:06:14.600 --> 00:06:17.079 +we would collectively work towards + +00:06:17.080 --> 00:06:19.799 +improving what is on the table. + +NOTE Monolithic mail user agents + +00:06:19.800 --> 00:06:22.719 +When a Mail User Agent is self-contained + +00:06:22.720 --> 00:06:26.519 +and includes implementation of mail protocols, + +00:06:26.520 --> 00:06:29.079 +we call it a Monolithic-MUA. + +00:06:29.080 --> 00:06:33.879 +Just as it is with the physical mail postal service, + +00:06:33.880 --> 00:06:36.919 +sending mail and receiving mail + +00:06:36.920 --> 00:06:40.639 +are fundamentally separate activities. + +00:06:40.640 --> 00:06:42.839 +And then there is mail processing. + +00:06:42.840 --> 00:06:45.959 +Based on these categorizations, + +00:06:45.960 --> 00:06:49.679 +Emacs has a set of mature libraries + +00:06:49.680 --> 00:06:53.359 +for composing mail, sending mail, and receiving mail. + +00:06:53.360 --> 00:06:58.119 +These are all independently well-documented + +00:06:58.120 --> 00:07:02.479 +and are part of the basic emacs Distribution. + +00:07:02.480 --> 00:07:06.239 +Emacs MUAs then use these common libraries + +00:07:06.240 --> 00:07:09.519 +to process mail (each somewhat differently). + +00:07:09.520 --> 00:07:15.399 +The primary benefit of the Monolithic-MUA approach + +00:07:15.400 --> 00:07:19.599 +is that Emacs MUAs then become self-contained + +00:07:19.600 --> 00:07:22.959 +and therefore multi-platform. + +NOTE Split mail user agents + +00:07:22.960 --> 00:07:25.559 +But, when it comes to the question of merits of + +00:07:25.560 --> 00:07:30.559 +implementation of mail protocols in Elisp inside of Emacs, + +00:07:30.560 --> 00:07:33.959 +there is also another approach: + +00:07:33.960 --> 00:07:36.159 +that of a Split-MUA. + +00:07:36.160 --> 00:07:40.559 +Concept of a split-MUA is that of + +00:07:40.560 --> 00:07:44.959 +splitting the MUA into two different parts: + +00:07:44.960 --> 00:07:47.159 +One being the usage environment, + +00:07:47.160 --> 00:07:50.319 +and the other being mail protocols processing. + +00:07:50.320 --> 00:07:54.719 +The interface between these can be either + +00:07:54.720 --> 00:07:57.839 +direct (the upper box) + +00:07:57.840 --> 00:08:00.279 +or through protocols (the lower box). + +00:08:00.280 --> 00:08:05.159 +With Gnus, we primarily use the direct interface. + +00:08:05.160 --> 00:08:09.639 +The split-MUA model has many advantages + +00:08:09.640 --> 00:08:12.599 +over the monolithic-MUA model. + +00:08:12.600 --> 00:08:17.279 +With Split-MUAs, your messages are local, + +00:08:17.280 --> 00:08:19.839 +you can search them privately + +00:08:19.840 --> 00:08:22.319 +and access to your email is faster. + +NOTE Gnus can be both + +00:08:22.320 --> 00:08:28.119 +Gnus can be used as both a Monolithic-MUA + +00:08:28.120 --> 00:08:30.599 +and also as a Split-MUA. + +00:08:30.600 --> 00:08:35.399 +Gnus and other Emacs MUAs are flexible enough + +00:08:35.400 --> 00:08:39.119 +to allow you to create your own split-MUA. + +00:08:39.120 --> 00:08:42.519 +For outgoing mail, Gnus can + +00:08:42.520 --> 00:08:45.119 +invoke a sendmail-like interface program. + +00:08:45.120 --> 00:08:50.007 +For incoming mail, Gnus can access Maildirs directly + +00:08:50.008 --> 00:08:53.724 +and let other programs imap-retrieve + +00:08:53.725 --> 00:08:56.439 +and update into maildirs. + +00:08:56.440 --> 00:08:59.719 +You can then search through your maildirs + +00:08:59.720 --> 00:09:01.374 +locally and privately + +00:09:01.375 --> 00:09:04.559 +with various mail-oriented search engines, + +00:09:04.560 --> 00:09:07.319 +and many have done so. + +00:09:07.320 --> 00:09:11.399 +For example, what we are seeing on this slide + +00:09:11.400 --> 00:09:15.879 +is from a 2014 Do It Yourself (DIY) recipe + +00:09:15.880 --> 00:09:20.319 +that one of our fellow Emacs conference participants, + +00:09:20.320 --> 00:09:24.879 +Adolfo, had published at the mentioned URL. + +00:09:24.880 --> 00:09:29.719 +The recipe in that slide is based on the following tools: + +00:09:29.720 --> 00:09:35.079 +mbsync, mu, mu4e, and msmtp. + +00:09:35.080 --> 00:09:38.279 +All our choices are different. + +00:09:38.280 --> 00:09:42.399 +There are many such recipes out there on the web. + +NOTE Proprietary universes + +00:09:42.400 --> 00:09:46.199 +So, here, I don't want to provide + +00:09:46.200 --> 00:09:50.439 +yet another Emacs Split-MUA recipe. + +00:09:50.440 --> 00:09:51.559 +I want to do more. + +00:09:51.560 --> 00:09:56.679 +Instead, I want to target the contours of the ultimate MUA + +00:09:56.680 --> 00:10:01.319 +in the non-proprietary universe of digital ecosystems. + +00:10:01.320 --> 00:10:05.439 +But, first, let's take a look at what is + +00:10:05.440 --> 00:10:07.479 +happening in the proprietary universe. + +00:10:07.480 --> 00:10:11.439 +The 5 big American proprietary tech companies + +00:10:11.440 --> 00:10:14.399 +(Google, Microsoft, Apple, Facebook and Amazon) + +00:10:14.400 --> 00:10:20.439 +have created 5 competing enclaves as mostly separate + +00:10:20.440 --> 00:10:22.999 +and isolated digital ecosystem. + +00:10:23.000 --> 00:10:27.839 +In this slide, I am focusing on the first 3 + +00:10:27.840 --> 00:10:31.439 +and each of their office and email environments. + +00:10:31.440 --> 00:10:36.319 +Let's clearly recognize that the economic model + +00:10:36.320 --> 00:10:40.159 +of these proprietary digital ecosystems is: + +00:10:40.160 --> 00:10:42.159 +"Surveillance Capitalism". + +00:10:42.160 --> 00:10:45.799 +So, when any of us goes there to get + +00:10:45.800 --> 00:10:47.959 +a free-of-charge email account, + +00:10:47.960 --> 00:10:53.039 +he has chosen to voluntarily forgo much of his privacy. + +00:10:53.040 --> 00:10:55.799 +And many have done so. + +00:10:55.800 --> 00:10:59.919 +Sadly, the rest of the world is becoming + +00:10:59.920 --> 00:11:02.719 +Americanized through the American Internet. + +00:11:02.720 --> 00:11:08.439 +As of 2022, almost %90 of Facebook's + +00:11:08.440 --> 00:11:11.959 +daily active users come from outside of the US. + +00:11:11.960 --> 00:11:17.159 +Also, with respect to email, each of the enclaves + +00:11:17.160 --> 00:11:20.039 +have MUAs that are fully integrated + +00:11:20.040 --> 00:11:22.439 +in their digital ecosystems + +00:11:22.440 --> 00:11:24.599 +in the form of an office environment + +00:11:24.600 --> 00:11:29.839 +comprising of address book, calendar, time management + +00:11:29.840 --> 00:11:33.199 +and planning tools and multi-lingual authoring + +00:11:33.200 --> 00:11:36.239 +and various other integrated tools. + +NOTE Non-proprietary universes + +00:11:36.240 --> 00:11:40.839 +Now, let's focus on the right side of this picture. + +00:11:40.840 --> 00:11:43.519 +On the non-proprietary side, + +00:11:43.520 --> 00:11:46.239 +based on the Western FLOSS model, + +00:11:46.240 --> 00:11:49.479 +we have ended up with lots of components. + +00:11:49.480 --> 00:11:52.239 +We have Debian as a platform, + +00:11:52.240 --> 00:11:58.919 +we have Emacs as an editor-centered office environment + +00:11:58.920 --> 00:12:03.439 +and we have Gnus as an incredibly powerful MUA. + +00:12:03.440 --> 00:12:07.839 +But on the non-proprietary side we don't have anything + +00:12:07.840 --> 00:12:12.079 +that can reasonably be considered a digital ecosystem. + +00:12:12.080 --> 00:12:16.439 +I mean, the services aspect is missing. + +NOTE By* + +00:12:16.440 --> 00:12:20.799 +Over the past two decades I have created + +00:12:20.800 --> 00:12:24.399 +quite an elaborate digital ecosystem for myself. + +00:12:24.400 --> 00:12:26.759 +It is called: By*. + +00:12:26.760 --> 00:12:30.839 +The Libre-Halaal ByStar Digital Ecosystem + +00:12:30.840 --> 00:12:35.439 +is being built to provide autonomy-oriented services + +00:12:35.440 --> 00:12:37.359 +on internet scale. + +00:12:37.360 --> 00:12:42.919 +The * in ByStar stands for Unix's globbing symbol, + +00:12:42.920 --> 00:12:46.919 +signifying that our scope is everything. + +00:12:46.920 --> 00:12:52.039 +Notice in this bigger picture that in the red box, + +00:12:52.040 --> 00:12:58.439 +our focus remains to be Emacs, Gnus and the ultimate MUA. + +00:12:58.440 --> 00:13:03.439 +I am not here to sell you ByStar, but perhaps + +00:13:03.440 --> 00:13:06.239 +you should be in the market for something like that. + +00:13:06.240 --> 00:13:10.879 +We need non-proprietary digital ecosystems. + +00:13:10.880 --> 00:13:13.359 +Very briefly, I'll give you + +00:13:13.360 --> 00:13:16.319 +some pointers to the full ByStar story. + +00:13:16.320 --> 00:13:23.239 +The full ByStar story is a 250 plus pages book titled: + +00:13:23.240 --> 00:13:26.079 +Nature Of Polyexistentials, + +00:13:26.080 --> 00:13:28.399 +Basis For Abolishment Of + +00:13:28.400 --> 00:13:31.319 +The Western Intellectual Property Rights Regime, + +00:13:31.320 --> 00:13:33.479 +And Introduction Of + +00:13:33.480 --> 00:13:36.359 +The Libre-Halaal ByStar Digital Ecosystem. + +00:13:36.360 --> 00:13:42.039 +I have it self-published on my own ByName public web page. + +00:13:42.040 --> 00:13:46.639 +The ByStar story starts with understanding of the + +00:13:46.640 --> 00:13:48.959 +Nature Of Polyexistentials. + +00:13:48.960 --> 00:13:53.839 +Polyexistentials inherently exist in multiples. + +00:13:53.840 --> 00:13:56.959 +Software is a polyexistential. + +00:13:56.960 --> 00:14:01.919 +Polyexistentials are naturally non-scarce, + +00:14:01.920 --> 00:14:06.279 +and making polyexistential artificially scarce, + +00:14:06.280 --> 00:14:08.599 +which is what the Western + +00:14:08.600 --> 00:14:11.119 +intellectual property rights regime does, + +00:14:11.120 --> 00:14:13.599 +is counter to nature. + +00:14:13.600 --> 00:14:17.639 +Polyexistentials are unownable + +00:14:17.640 --> 00:14:20.039 +and should not be considered property. + +00:14:20.040 --> 00:14:25.079 +The Western IPR regime is in conflict with nature. + +00:14:25.080 --> 00:14:29.039 +But, the book is more than just philosophy. + +00:14:29.040 --> 00:14:32.359 +In that book I also cover + +00:14:32.360 --> 00:14:35.799 +the bigger picture of healthy digital ecosystems + +00:14:35.800 --> 00:14:39.359 +which also includes the topic of this presentation. + +00:14:39.360 --> 00:14:43.399 +I'd be interested in your thoughts and your feedback, + +00:14:43.400 --> 00:14:45.679 +if you choose to dig deeper. + +00:14:45.680 --> 00:14:50.999 +And if you want to dig deeper, here are some links. + +00:14:51.000 --> 00:14:55.079 +By* is about re-decentralization + +00:14:55.080 --> 00:14:57.159 +of Internet application services. + +00:14:57.160 --> 00:15:00.759 +Among other things, ByStar provides + +00:15:00.760 --> 00:15:05.159 +complete own-your-email services. I mean, + +00:15:05.160 --> 00:15:10.319 +private Hillary-Clinton-Style mail servers for everyone. + +00:15:10.320 --> 00:15:16.519 +There is an overview of ByStar at by-star.net. + +NOTE Libre-Halaal + +00:15:16.520 --> 00:15:21.199 +You may have noticed that I consistently use + +00:15:21.200 --> 00:15:25.479 +the "Libre-Halaal" label with ByStar. + +00:15:25.480 --> 00:15:28.919 +Halaal is a very sensitive word. + +00:15:28.920 --> 00:15:30.719 +I am a Moslem. + +00:15:30.720 --> 00:15:35.919 +But my use of Halaal is not in a religious context. + +00:15:35.920 --> 00:15:39.079 +It is in a philosphical context. + +00:15:39.080 --> 00:15:42.759 +And the scope of the "Libre-Halaal" label + +00:15:42.760 --> 00:15:46.439 +is manner-of-existence of Software and Services. + +00:15:46.440 --> 00:15:50.599 +It is not about Halaal-ness with respect to + +00:15:50.600 --> 00:15:54.959 +function and use of Software and Services. + +00:15:54.960 --> 00:15:58.239 +Unfortunately, the word Halaal + +00:15:58.240 --> 00:16:02.319 +and the concept of Halaal does not exist in English. + +00:16:02.320 --> 00:16:06.759 +So, first I introduce it into Globish. + +00:16:06.760 --> 00:16:12.799 +I have done so in PLPC-120039. + +00:16:12.800 --> 00:16:18.199 +Further, I explain as to why labels + +00:16:18.200 --> 00:16:22.639 +of Open Source and Free Software are both ill-directed. + +00:16:22.640 --> 00:16:25.839 +We then carefully define + +00:16:25.840 --> 00:16:29.999 +"Libre-Halaal Software" and "Libre-Halaal Services". + +00:16:30.000 --> 00:16:33.919 +Notice that last link. + +00:16:33.920 --> 00:16:36.199 +I bet, this is the first time + +00:16:36.200 --> 00:16:40.679 +that anyone includes a link to his "Open Business Plan" + +00:16:40.680 --> 00:16:43.159 +in an Emacs Conference. + +00:16:43.160 --> 00:16:46.559 +I hope others would do this as well. + +00:16:46.560 --> 00:16:49.679 +There is appetite out there + +00:16:49.680 --> 00:16:53.639 +for privacy- and autonomy-oriented digital ecosystems, + +00:16:53.640 --> 00:16:57.759 +and there is no conflict between honest business, + +00:16:57.760 --> 00:17:01.039 +honest profit, and Libre-Halaal Software + +00:17:01.040 --> 00:17:02.919 +and Libre-Halaal Services. + +00:17:02.920 --> 00:17:08.039 +The sub-title of our open business plan is: + +00:17:08.040 --> 00:17:12.879 +"An Inversion to the Proprietary Internet Services Model". + +00:17:12.880 --> 00:17:20.879 +And here are the same links as a native Reveal slide. + +00:17:20.880 --> 00:17:24.679 +If instead of a video, you are viewing + +00:17:24.680 --> 00:17:27.399 +this presentation as a Reveal web page, + +00:17:27.400 --> 00:17:31.319 +you can just click on the pointers and URLs. + +NOTE The BISOS integration framework + +00:17:31.320 --> 00:17:36.879 +So, what was the point of bringing ByStar + +00:17:36.880 --> 00:17:38.119 +into this presentation? + +00:17:38.120 --> 00:17:42.319 +In tangible terms, what have we gotten out of + +00:17:42.320 --> 00:17:45.639 +the tangent we took on the ByStar bigger picture? + +00:17:45.640 --> 00:17:50.839 +Of course we have the ByStar Digital Ecosystem itself. + +00:17:50.840 --> 00:17:54.879 +But that is not immediately relevant to this presentation. + +00:17:54.880 --> 00:17:59.959 +Here, through BISOS we now have + +00:17:59.960 --> 00:18:04.359 +an integration framework, which we definitely needed. + +00:18:04.360 --> 00:18:07.879 +We now have BISOS-MARMEE, + +00:18:07.880 --> 00:18:11.519 +Multi-Account Resident Mail Exchange Environment, + +00:18:11.520 --> 00:18:13.679 +which is a consistent set + +00:18:13.680 --> 00:18:17.639 +of MUA-related software components --- which we need. + +00:18:17.640 --> 00:18:23.159 +We also needed to augment Emacs in our own terms, + +00:18:23.160 --> 00:18:25.919 +so we have Blee for that, + +00:18:25.920 --> 00:18:29.959 +ByStar Libre-Halaal Emacs Environment, + +00:18:29.960 --> 00:18:32.919 +is ByStar ecosystemized Emacs. + +00:18:32.920 --> 00:18:37.679 +And finally Blee-Gnus, which is + +00:18:37.680 --> 00:18:40.639 +Gnus and MARMEE integrated with Blee. + +00:18:40.640 --> 00:18:46.479 +With these in place, we can now dive deeper into MARMEE. + +00:18:46.480 --> 00:18:53.119 +The idea of MARMEE, is that of packaging together + +00:18:53.120 --> 00:18:56.079 +the mail protocols parts of the Split-MUA. + +00:18:56.080 --> 00:19:00.799 +MARMEE (which is of course in the context of BISOS) + +00:19:00.800 --> 00:19:03.679 +is the green box in this slide. + +00:19:03.680 --> 00:19:08.519 +For outgoing mail, we use an altered qmail. + +00:19:08.520 --> 00:19:12.679 +We will be looking deeper into qmail a bit later. + +00:19:12.680 --> 00:19:17.559 +For incoming mail, we are using offlineimap + +00:19:17.560 --> 00:19:20.119 +which is oauth2 aware. + +NOTE BISOS-MARMEE + +00:19:20.120 --> 00:19:23.439 +Before going into more details, + +00:19:23.440 --> 00:19:26.519 +let's take a look at the parts lists for + +00:19:26.520 --> 00:19:29.359 +BISOS-MARMEE and Blee-Gnus. + +00:19:29.360 --> 00:19:33.719 +MARMEE is a collection of Python-based libraries + +00:19:33.720 --> 00:19:37.479 +and Debian packages that provide for rich sending + +00:19:37.480 --> 00:19:40.279 +and receiving of email outside of Emacs. + +00:19:40.280 --> 00:19:44.239 +Here is our BISOS-MARMEE parts list. + +00:19:44.240 --> 00:19:48.599 +MARMEE features include tracked mail Sending + +00:19:48.600 --> 00:19:51.919 +for confirmed mail communications + +00:19:51.920 --> 00:19:54.599 +and email distribution facilities + +00:19:54.600 --> 00:19:57.559 +(say, similar to Constant Contact). + +00:19:57.560 --> 00:20:02.079 +For Delivery Status Notification (DSN), + +00:20:02.080 --> 00:20:06.039 +we have adopted flufl.bounce. + +00:20:06.040 --> 00:20:10.879 +I'll be touching on everything that is qmail-related, + +00:20:10.880 --> 00:20:17.319 +namely qmail-remote.cs and mailfront, in a separate slide. + +00:20:17.320 --> 00:20:21.759 +notmuch is our choice of mail search engine. + +NOTE Blee-Gnus + +00:20:21.760 --> 00:20:27.319 +Similarly, here is our Blee-Gnus Parts List. + +00:20:27.320 --> 00:20:33.439 +Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee. + +00:20:33.440 --> 00:20:38.599 +Notice mentions of org-msg and polymode here. + +00:20:38.600 --> 00:20:42.879 +Later, I'll expand on these in the context of + +00:20:42.880 --> 00:20:47.679 +transitioning from Message-Mode to Message-Polymode. + +NOTE In combination + +00:20:47.680 --> 00:20:52.199 +With these parts in place, + +00:20:52.200 --> 00:20:55.279 +now let's see how they will all come together. + +00:20:55.280 --> 00:20:59.999 +Gnus is very flexible, and in combination with MARMEE, + +00:21:00.000 --> 00:21:03.639 +it can create an incredibly powerful MUA. + +00:21:03.640 --> 00:21:07.279 +On this slide, note the boxes + +00:21:07.280 --> 00:21:10.319 +that include the FPs label. + +00:21:10.320 --> 00:21:14.839 +FP stand for File Parameters. + +00:21:14.840 --> 00:21:18.519 +It is the basis of BISOS's configuration + +00:21:18.520 --> 00:21:20.039 +and secrets management. + +00:21:20.040 --> 00:21:24.319 +Notice that it has consistent agents + +00:21:24.320 --> 00:21:27.839 +inside of Emacs and on the OS. + +00:21:27.840 --> 00:21:29.919 +This is a big deal + +00:21:29.920 --> 00:21:34.719 +in that it can reduce user visible configuration complexity. + +NOTE X822-Bus + +00:21:34.720 --> 00:21:39.759 +Also, notice the X822-Bus here. + +00:21:39.760 --> 00:21:43.999 +The idea of X822-Bus is that of + +00:21:44.000 --> 00:21:49.839 +allowing for communication among user's preferences, Gnus + +00:21:49.840 --> 00:21:53.599 +and MARMEE-qmail through addition of X- fields + +00:21:53.600 --> 00:21:57.959 +in RFC-822 message headers. + +00:21:57.960 --> 00:22:03.599 +X822-Bus is used for selection of mail sending agents + +00:22:03.600 --> 00:22:08.839 +and specification of delivery status parameters. + +NOTE bystar-qmail + +00:22:08.840 --> 00:22:12.279 +Of key significance in this picture + +00:22:12.280 --> 00:22:15.479 +is our choice of qmail for outgoing mail. + +00:22:15.480 --> 00:22:22.519 +Compared to sendmail, postfix, exim, + +00:22:22.520 --> 00:22:25.399 +and other conventional MTAs; + +00:22:25.400 --> 00:22:31.719 +the qmail ecosystem is far more flexible and potent. + +00:22:31.720 --> 00:22:34.599 +We are not using qmail as is. + +00:22:34.600 --> 00:22:37.999 +Ours is called bystar-qmail. + +00:22:38.000 --> 00:22:41.799 +When we use it as a traditional MTA, + +00:22:41.800 --> 00:22:45.439 +we refer to it as PALS-qmail. + +00:22:45.440 --> 00:22:52.599 +And when we use it on the MUA side, we call it MARMEE-qmail. + +00:22:52.600 --> 00:22:56.599 +Just like Emacs, qmail has + +00:22:56.600 --> 00:22:59.959 +a solid core and a flexible periphery. + +00:22:59.960 --> 00:23:04.479 +All our alterations have been on the periphery. + +00:23:04.480 --> 00:23:07.890 +We have replaced qmail-remote + +00:23:07.891 --> 00:23:14.479 +with our own Python implementation called qmail-remote.cs. + +00:23:14.480 --> 00:23:20.919 +By being in Python, it can do a lot more a lot more easily. + +00:23:20.920 --> 00:23:26.540 +For example, qmail-remote.cs interacts with + +00:23:26.541 --> 00:23:33.079 +Google Oauth2 APIs and allows you to send through Gmail. + +00:23:33.080 --> 00:23:36.399 +This is shown with the red circle. + +00:23:36.400 --> 00:23:43.639 +We have also replaced qmail-smtpd with mailfront, + +00:23:43.640 --> 00:23:46.159 +shown with a blue circle. + +00:23:46.160 --> 00:23:51.359 +This allows us to use MARMEE Split-MUA + +00:23:51.360 --> 00:23:53.999 +through protocol interfaces. + +00:23:54.000 --> 00:23:56.559 +Let's take a look at that. + +NOTE Using MARMEE with other MUAs outside Emacs + +00:23:56.560 --> 00:24:02.719 +Previously we looked at the "Direct Interface" of MARMEE, + +00:24:02.720 --> 00:24:08.479 +specifically, qmail-inject and Maildir for Gnus. + +00:24:08.480 --> 00:24:11.479 +But what if we wanted to use + +00:24:11.480 --> 00:24:15.159 +MARMEE with other MUAs outside of Emacs? + +00:24:15.160 --> 00:24:18.799 +That can be done through the "Protocol Interface". + +00:24:18.800 --> 00:24:22.039 +MARMEE also includes "mailfront" + +00:24:22.040 --> 00:24:27.439 +which can function as an SMTP submit server for localhost. + +00:24:27.440 --> 00:24:30.599 +This way, we can configure + +00:24:30.600 --> 00:24:36.239 +the outgoing mail part of any MUA to point to the localhost + +00:24:36.240 --> 00:24:41.399 +and have MARMEE-qmail function as an outgoing proxy. + +NOTE Incoming mail + +00:24:41.400 --> 00:24:47.919 +For incoming mail, MARMEE-Split-MUA-Protocol-Interface + +00:24:47.920 --> 00:24:51.359 +includes "Courier", which can function + +00:24:51.360 --> 00:24:54.079 +as an IMAP server for localhost. + +00:24:54.080 --> 00:24:58.519 +This way, we can configure the incoming mail part + +00:24:58.520 --> 00:25:02.319 +of any MUA to point to the localhost + +00:25:02.320 --> 00:25:06.519 +and have MARMEE function as an incoming proxy + +00:25:06.520 --> 00:25:10.759 +by serving the local Maildir to the MUA. + +NOTE Licensing and project status + +00:25:10.760 --> 00:25:18.079 +All sources for all of ByStar, BISOS, + +00:25:18.080 --> 00:25:23.439 +Blee and MARMEE are subject to Affero GPL. + +00:25:23.440 --> 00:25:28.319 +The sources and documentation are all republished + +00:25:28.320 --> 00:25:30.559 +under various "Organizations" + +00:25:30.560 --> 00:25:35.439 +under github.com/mohsenBanan + +00:25:35.440 --> 00:25:40.679 +All of ByStar, BISOS, Blee and MARMEE + +00:25:40.680 --> 00:25:42.839 +reflect work in progress, + +00:25:42.840 --> 00:25:46.319 +and we are NOT recruiting users at this time. + +00:25:46.320 --> 00:25:49.279 +For more than two decades, + +00:25:49.280 --> 00:25:53.159 +I have been using these all in that bigger context. + +00:25:53.160 --> 00:25:56.239 +They are mostly real, + +00:25:56.240 --> 00:26:01.399 +but so far, just for myself and a few other engineers. + +00:26:01.400 --> 00:26:06.519 +Our model is similar to God's early days. + +00:26:06.520 --> 00:26:08.319 +You may ask: + +00:26:08.320 --> 00:26:12.119 +"How did God create all of this in just 7 days?" + +00:26:12.120 --> 00:26:17.199 +Well, easy, He did not have an installed base to deal with. + +NOTE Installing MARMEE + +00:26:17.200 --> 00:26:24.519 +You can obtain and install MARMEE in two ways. As is: + +00:26:24.520 --> 00:26:29.439 +as standalone-MARMEE, you can just + +00:26:29.440 --> 00:26:31.919 +pip install bisos.marmee. + +00:26:31.920 --> 00:26:35.879 +For the Gnus part you are completely on your own. + +00:26:35.880 --> 00:26:40.279 +Or on a Debian-11, you can just run + +00:26:40.280 --> 00:26:43.399 +the bisos bootstrap script. + +00:26:43.400 --> 00:26:48.359 +That way you will have all of BISOS, which includes MARMEE + +00:26:48.360 --> 00:26:52.159 +and you will have Blee, which includes Blee-Gnus. + +00:26:52.160 --> 00:26:54.719 +If you plan to do so, + +00:26:54.720 --> 00:26:58.839 +I suggest that you first try it in a disposable VM. + +00:26:58.840 --> 00:27:02.159 +BISOS and Blee are large. + +00:27:02.160 --> 00:27:06.359 +Many apt and pip packages will be installed! + +00:27:06.360 --> 00:27:11.839 +And here are the same links as a native Reveal slide. + +00:27:11.840 --> 00:27:17.519 +If you are viewing this presentation as Reveal.js web page, + +00:27:17.520 --> 00:27:20.479 +you can just click on the pointers and URLs. + +NOTE MARMEE as an Emacs "Common Agent" + +00:27:20.480 --> 00:27:25.359 +Let's consider MARMEE as an Emacs "Common Agent". + +00:27:25.360 --> 00:27:28.919 +By "Common-Agent" I mean a capability + +00:27:28.920 --> 00:27:30.959 +which Emacs builds on + +00:27:30.960 --> 00:27:33.759 +and which other Apps can also use. + +00:27:33.760 --> 00:27:38.479 +Emacs has a very rich applications development framework + +00:27:38.480 --> 00:27:41.119 +for absorbing common-agents. + +00:27:41.120 --> 00:27:45.474 +Consider how magit has absorbed git, + +00:27:45.475 --> 00:27:49.774 +or how flycheck has absorbed mypy + +00:27:49.775 --> 00:27:54.199 +or how EAF does its work outside of Emacs --- + +00:27:54.200 --> 00:27:57.919 +that too can be considered a common-agent. + +00:27:57.920 --> 00:28:02.039 +The common-agent model permits us + +00:28:02.040 --> 00:28:04.599 +to do more outside of Emacs. + +00:28:04.600 --> 00:28:08.639 +Common-agents maximize social benefits + +00:28:08.640 --> 00:28:10.559 +and are more convivial. + +00:28:10.560 --> 00:28:15.479 +For example, any MUA can profit from MARMEE. + +00:28:15.480 --> 00:28:18.439 +But we don't have good ways of + +00:28:18.440 --> 00:28:21.399 +packaging Emacs and its packages + +00:28:21.400 --> 00:28:23.639 +with their common-agents. + +00:28:23.640 --> 00:28:28.359 +Instead, we usually end up with DIY recipes. + +00:28:28.360 --> 00:28:32.479 +This is why I am contextualizing + +00:28:32.480 --> 00:28:35.439 +Emacs inside of Blee and BISOS. + +00:28:35.440 --> 00:28:37.999 +That is what they are for. + +00:28:38.000 --> 00:28:40.424 +And that is why I consider them + +00:28:40.425 --> 00:28:43.199 +immediately relevant to this presentation. + +00:28:43.200 --> 00:28:47.719 +With an incredibly powerful Display Engine, + +00:28:47.720 --> 00:28:51.279 +and an incredibly powerful Elisp Engine, + +00:28:51.280 --> 00:28:55.039 +and an incredibly powerful Input Methods Engine, + +00:28:55.040 --> 00:28:59.559 +and an incredibly powerful Common-Agents paradigm, + +00:28:59.560 --> 00:29:02.707 +Emacs has the potential of being + +00:29:02.708 --> 00:29:06.407 +any non-proprietary digital ecosystem's + +00:29:06.408 --> 00:29:08.879 +preferred usage environment. + +00:29:08.880 --> 00:29:14.090 +I am in favor of putting more around Emacs + +00:29:14.091 --> 00:29:17.440 +and strengthening integration of Emacs + +00:29:17.441 --> 00:29:19.719 +with Debian, explicitly, + +00:29:19.720 --> 00:29:22.839 +perhaps even at the cost of + +00:29:22.840 --> 00:29:26.599 +de-emphasizing its multi-platform attribute. + +00:29:26.600 --> 00:29:30.319 +A smaller Emacs is a better Emacs. + +00:29:30.320 --> 00:29:33.719 +Notice that in this slide, + +00:29:33.720 --> 00:29:37.279 +I have used many arrows in many colors. + +00:29:37.280 --> 00:29:45.599 +Much of Emacs's power comes from its ability + +00:29:45.600 --> 00:29:47.759 +to absorb and to integrate. + +00:29:47.760 --> 00:29:51.919 +Tomohiro is right on the mark when he says, + +00:29:51.920 --> 00:29:55.359 +"The reason why Emacs platform is good + +00:29:55.360 --> 00:29:58.119 +is that it cooperates with OS, + +00:29:58.120 --> 00:30:00.919 +not because it is good by itself." + +00:30:00.920 --> 00:30:03.999 +I am suggesting that we should + +00:30:04.000 --> 00:30:06.519 +raise the bar from the OS + +00:30:06.520 --> 00:30:09.839 +to the entirety of our digital ecosystem. + +00:30:09.840 --> 00:30:13.039 +There are many models + +00:30:13.040 --> 00:30:15.839 +for Emacs to cooperate with the OS + +00:30:15.840 --> 00:30:19.319 +and with applications and with services. + +00:30:19.320 --> 00:30:25.439 +The colors of arrows in the previous slide correspond to + +00:30:25.440 --> 00:30:28.879 +the model of interface of the common-agent: + +00:30:28.880 --> 00:30:33.999 +for example, sub-process invocation, pipe-based + +00:30:34.000 --> 00:30:39.359 +asynchronous interface, or file-based interactions. + +NOTE Consistent configuration + +00:30:39.360 --> 00:30:44.759 +One important aspect of common-agent paradigm is that + +00:30:44.760 --> 00:30:50.399 +both the common-agent and its Emacs App + +00:30:50.400 --> 00:30:53.039 +need to be configured consistently. + +00:30:53.040 --> 00:30:57.959 +In MARMEE and Blee-Gnus, + +00:30:57.960 --> 00:31:01.919 +we use File-Params to accomplish this. + +00:31:01.920 --> 00:31:06.959 +In BISOS, there is a Python interface to File-Params, + +00:31:06.960 --> 00:31:10.239 +there is a Bash interface to File-Params, + +00:31:10.240 --> 00:31:15.719 +and in Blee, there is an Elisp interface to File-Params. + +00:31:15.720 --> 00:31:18.919 +So, configurations are extended. + +00:31:18.920 --> 00:31:23.279 +Furthermore, File-Params can be encrypted, + +00:31:23.280 --> 00:31:26.959 +and credentials can be protected and shared. + +00:31:26.960 --> 00:31:33.919 +This is a significant improvement over .authinfo + +00:31:33.920 --> 00:31:36.959 +and its more recent incarnations. + +NOTE Feedback and requests + +00:31:36.960 --> 00:31:41.199 +EmacsConf could be a great place + +00:31:41.200 --> 00:31:44.374 +for users to provide feedback to developers + +00:31:44.375 --> 00:31:47.879 +and for developers to suggest to developers. + +00:31:47.880 --> 00:31:52.759 +In that spirit, my primary audience in this part + +00:31:52.760 --> 00:31:54.839 +are fellow Emacs developers. + +00:31:54.840 --> 00:32:00.039 +BISOS-MARMEE and Blee-Gnus are starting points. + +00:32:00.040 --> 00:32:02.439 +We can collectively work + +00:32:02.440 --> 00:32:04.679 +towards improving what is in place. + +00:32:04.680 --> 00:32:07.919 +Some such improvements involve + +00:32:07.920 --> 00:32:11.919 +collaboration among various Emacs developers. + +00:32:11.920 --> 00:32:16.599 +Here, I am making some explicit requests + +00:32:16.600 --> 00:32:19.559 +from some of the relevant emacs developers. + +00:32:19.560 --> 00:32:24.159 +At most, these are requests and invitations. + +00:32:24.160 --> 00:32:28.519 +For each of these requests, I am providing links + +00:32:28.520 --> 00:32:30.119 +for additional details. + +00:32:30.120 --> 00:32:33.039 +In due course, I'll follow up + +00:32:33.040 --> 00:32:35.279 +in the Emacs developers mailing list. + +NOTE X-Message-SMTP-Method: qmail + +00:32:35.280 --> 00:32:41.879 +Gnus uses X-Message-SMTP-Method + +00:32:41.880 --> 00:32:45.119 +for selection of Mail-Sending-Agent. + +00:32:45.120 --> 00:32:50.519 +Even though all the qmail injection code is still in Gnus, + +00:32:50.520 --> 00:32:58.279 +support for "X-Message-SMTP-Method: qmail" is missing. + +00:32:58.280 --> 00:33:02.759 +It takes 2 lines of code to revive it. + +00:33:02.760 --> 00:33:07.399 +With regards to (1), qmail was previously supported in Gnus. + +00:33:07.400 --> 00:33:11.319 +Lars, can you please reactivate it? Thanks. + +NOTE X-Message-Send-Method + +00:33:11.320 --> 00:33:16.439 +(2) is a terminology suggestion. + +00:33:16.440 --> 00:33:21.559 +The term X-Message-SMTP-Method violates conceptual layering. + +00:33:21.560 --> 00:33:27.079 +Please consider changing it to X-Message-Send-Method. + +00:33:27.080 --> 00:33:33.719 +In a Split-MUA setup, Gnus need not know about SMTP at all. + +00:33:33.720 --> 00:33:36.599 +We just need to pass information + +00:33:36.600 --> 00:33:39.319 +to a Mail-Sending-Agent selector. + +NOTE Sharing config info and secrets with common agents + +00:33:39.320 --> 00:33:44.439 +(3) is simply a design suggestion for + +00:33:44.440 --> 00:33:46.759 +which I prepared the context. + +00:33:46.760 --> 00:33:51.839 +.authinfo and Emacs auth-source library + +00:33:51.840 --> 00:33:54.199 +are too Emacs-centric. + +00:33:54.200 --> 00:33:57.839 +We need to share config info and secrets + +00:33:57.840 --> 00:34:00.799 +between common-agents and Emacs. + +00:34:00.800 --> 00:34:03.639 +The File Parameters approach + +00:34:03.640 --> 00:34:05.799 +can be a general-purpose solution. + +00:34:05.800 --> 00:34:10.839 +Is it reasonable to extend auth-source library to + +00:34:10.840 --> 00:34:12.719 +support File Params? + +00:34:12.720 --> 00:34:16.519 +I'll cover (4) in the next slide. + +00:34:16.520 --> 00:34:21.159 +(5) is a philosophical common suggestion + +00:34:21.160 --> 00:34:26.439 +to all Emacs developers. We need to better cultivate + +00:34:26.440 --> 00:34:30.879 +the model of Common-Agents integration with Emacs. + +00:34:30.880 --> 00:34:39.599 +And here are the same links as a native Reveal slide. + +NOTE message-polymode + +00:34:39.600 --> 00:34:42.799 +A mail message comprises of + +00:34:42.800 --> 00:34:45.599 +Envelope, Header and BodyParts. + +00:34:45.600 --> 00:34:49.439 +Each of these have their own syntax (their own mode). + +00:34:49.440 --> 00:34:53.639 +Conceivably Each BodyPart has its own mode. + +00:34:53.640 --> 00:34:59.439 +So, we need to evolve Message-Mode into Message-Polymode. + +00:34:59.440 --> 00:35:03.719 +More or less by default, org-mode has become + +00:35:03.720 --> 00:35:08.999 +the beginnings of "Emacs Native Markup Language -- ENML". + +00:35:09.000 --> 00:35:14.399 +With org-msg you can write your emails in org-mode --- + +00:35:14.400 --> 00:35:16.559 +destined as html. + +00:35:16.560 --> 00:35:19.559 +org-msg needs to become + +00:35:19.560 --> 00:35:22.239 +an integral part of Message-Polymode. + +00:35:22.240 --> 00:35:25.119 +It would be heavenly + +00:35:25.120 --> 00:35:29.959 +if Lars, Jérémy and Vitalie could collaborate + +00:35:29.960 --> 00:35:34.079 +and give us the needed Message-Polymode. Thank you. + +NOTE Vertical slice use cases + +00:35:34.080 --> 00:35:38.119 +One way to verify that we have not gone astray + +00:35:38.120 --> 00:35:42.759 +in our horizontal bigger pictures is to verify them + +00:35:42.760 --> 00:35:46.919 +through the concept of "Vertical Slice Use Cases". + +00:35:46.920 --> 00:35:50.799 +Let one use case be reading and writing + +00:35:50.800 --> 00:35:54.639 +of mail on multiple gmail accounts with Gnus. + +00:35:54.640 --> 00:35:59.319 +Google now requires use of oauth2 tokens + +00:35:59.320 --> 00:36:02.439 +which MARMEE can do outside of emacs. + +00:36:02.440 --> 00:36:05.679 +There is a recent email thread + +00:36:05.680 --> 00:36:09.119 +on that in the emacs-devel mailing list. + +00:36:09.120 --> 00:36:14.279 +Let another use case be that of tracking delivery + +00:36:14.280 --> 00:36:18.679 +and non-delivery reports for custom envelope addresses + +00:36:18.680 --> 00:36:26.039 +of byname.net (part of ByStar) autonomous mail services. + +00:36:26.040 --> 00:36:30.319 +I would have loved to walk you through these + +00:36:30.320 --> 00:36:32.959 +vertical slice use cases + +00:36:32.960 --> 00:36:36.439 +as screen captures of my Blee environment. + +00:36:36.440 --> 00:36:40.639 +For that, I need at least another 20 minutes. + +00:36:40.640 --> 00:36:43.079 +But my time is up. + +00:36:43.080 --> 00:36:46.719 +So, let's consider this as the first + +00:36:46.720 --> 00:36:48.919 +in a series of presentations + +00:36:48.920 --> 00:36:51.799 +where next in this series could be + +00:36:51.800 --> 00:36:55.479 +the mentioned two vertical slice use cases. + +00:36:55.480 --> 00:36:59.279 +Perhaps there could be another presentation + +00:36:59.280 --> 00:37:02.879 +on this topic in EmacsConf 2023. + +00:37:02.880 --> 00:37:06.759 +This document was produced entirely with + +00:37:06.760 --> 00:37:10.799 +Libre-Halaal Software, and is published using + +00:37:10.800 --> 00:37:13.079 +Libre-Halaal Internet Services. + +00:37:13.080 --> 00:37:17.959 +I want to thank all the EmacsConf Organizers + +00:37:17.960 --> 00:37:19.519 +for their great work, + +00:37:19.520 --> 00:37:30.960 +and Sacha, Leo, and Amin in particular. |