diff options
author | Sacha Chua <sacha@sachachua.com> | 2022-01-19 00:11:31 -0500 |
---|---|---|
committer | Sacha Chua <sacha@sachachua.com> | 2022-01-19 00:11:31 -0500 |
commit | c9a4426b64b70443152218bfbcbbefb198ff8244 (patch) | |
tree | 6198e8477350a85b6064eff57b0009f5db6ad4f8 /2020 | |
parent | 75b1ac1ed57b205624e2747c6fa1742345c3e855 (diff) | |
download | emacsconf-wiki-c9a4426b64b70443152218bfbcbbefb198ff8244.tar.xz emacsconf-wiki-c9a4426b64b70443152218bfbcbbefb198ff8244.zip |
Add clede transcript - thanks Hannah!
Diffstat (limited to '')
-rw-r--r-- | 2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt | 905 |
1 files changed, 427 insertions, 478 deletions
diff --git a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt index 9f4d0e06..55af2c4c 100644 --- a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt +++ b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt @@ -1,733 +1,682 @@ WEBVTT 00:00:01.839 --> 00:00:04.160 -hello EmacsConf +Hello, EmacsConf! -00:00:04.160 --> 00:00:05.759 -thanks very much first of all to the +00:00:04.160 --> 00:00:05.279 +Thanks very much, first of all, -00:00:05.759 --> 00:00:07.200 -organizers of the conference +00:00:05.280 --> 00:00:07.200 +to the organizers of the conference -00:00:07.200 --> 00:00:09.440 -and to the audience who I hope is out +00:00:07.200 --> 00:00:08.800 +and to the audience, -00:00:09.440 --> 00:00:10.480 -there somewhere +00:00:08.801 --> 00:00:10.480 +who I hope is out there somewhere, -00:00:10.480 --> 00:00:12.080 -uh for giving me this chance to talk +00:00:10.480 --> 00:00:11.679 +for giving me this chance -00:00:12.080 --> 00:00:14.240 -about Emacs and some of my uh +00:00:11.680 --> 00:00:12.880 +to talk about Emacs -00:00:14.240 --> 00:00:16.560 -my poking around with Emacs lisp my name +00:00:12.881 --> 00:00:16.240 +and some of my poking around with Emacs Lisp. -00:00:16.560 --> 00:00:18.480 -is eric abrahamson I'm not +00:00:16.241 --> 00:00:17.680 +My name is Eric Abrahamsen. -00:00:18.480 --> 00:00:20.960 -a professional programmer but I use +00:00:17.681 --> 00:00:20.480 +I'm not a professional programmer, -00:00:20.960 --> 00:00:21.920 -Emacs all day +00:00:20.481 --> 00:00:23.039 +but I use Emacs all day, every day, -00:00:21.920 --> 00:00:24.800 -every day for writing for translating +00:00:23.040 --> 00:00:24.800 +for writing, for translating, 00:00:24.800 --> 00:00:26.160 -for project management +for project management, -00:00:26.160 --> 00:00:28.160 -and most importantly for email which +00:00:26.160 --> 00:00:27.920 +and most importantly, for email, -00:00:28.160 --> 00:00:29.199 -will be the +00:00:27.921 --> 00:00:30.640 +which will be the subject of my talk today. -00:00:29.199 --> 00:00:32.480 -subject of my talk today so I'm talking +00:00:30.641 --> 00:00:32.880 +So I'm talking about -00:00:32.480 --> 00:00:35.440 -about object-oriented code in Emacs +00:00:32.881 --> 00:00:34.160 +object-oriented code -00:00:35.440 --> 00:00:38.320 -uh most famous possibly oldest +00:00:34.161 --> 00:00:38.320 +in Emacs' most famous, possibly oldest, -00:00:38.320 --> 00:00:40.160 -definitely most notorious news reader +00:00:38.320 --> 00:00:39.520 +definitely most notorious -00:00:40.160 --> 00:00:41.760 -slash Emacs client +00:00:39.521 --> 00:00:42.800 +news reader / email client, -00:00:41.760 --> 00:00:44.320 -email client so in particular object +00:00:42.801 --> 00:00:44.000 +so, in particular, -00:00:44.320 --> 00:00:45.440 -oriented code +00:00:44.001 --> 00:00:46.000 +object-oriented code in Gnus. -00:00:45.440 --> 00:00:50.239 -in news why object-oriented code +00:00:46.001 --> 00:00:50.239 +Why object-oriented code? -00:00:50.239 --> 00:00:51.920 -the way news works is it started off as +00:00:50.239 --> 00:00:51.199 +The way Gnus works is -00:00:51.920 --> 00:00:53.600 -a news reader so for access +00:00:51.200 --> 00:00:52.480 +it started off as a news reader, -00:00:53.600 --> 00:00:57.039 -accessing nntp servers and later on grew +00:00:52.481 --> 00:00:55.920 +so for accessing NNTP servers -00:00:57.039 --> 00:00:59.120 -a whole bunch of new functionality as a +00:00:55.921 --> 00:00:57.600 +and later on grew a whole bunch -00:00:59.120 --> 00:01:01.039 -mail client so it can talk to imap +00:00:57.601 --> 00:00:59.760 +of new functionality as a mail client, -00:01:01.039 --> 00:01:02.079 -servers +00:00:59.761 --> 00:01:02.079 +so it can talk to IMAP servers, -00:01:02.079 --> 00:01:04.799 -mail dealer directories uh folders on +00:01:02.079 --> 00:01:04.320 +Maildir directories, -00:01:04.799 --> 00:01:06.640 -your file system all kinds of stuff +00:01:04.321 --> 00:01:05.360 +folders on your file system, -00:01:06.640 --> 00:01:08.400 -but it presents a unified interface to +00:01:05.361 --> 00:01:06.640 +all kinds of stuff, -00:01:08.400 --> 00:01:09.760 -all those things so it's basically +00:01:06.640 --> 00:01:08.320 +but it presents a unified interface -00:01:09.760 --> 00:01:11.040 -polymorphism +00:01:08.321 --> 00:01:08.960 +to all those things, -00:01:11.040 --> 00:01:14.000 -one of the the basic fundamental +00:01:08.961 --> 00:01:11.040 +so it's basically polymorphism, -00:01:14.000 --> 00:01:16.400 -principles of object oriented code so +00:01:11.040 --> 00:01:14.560 +one of the the basic fundamental principles -00:01:16.400 --> 00:01:18.720 -it's a good fit second reason is it +00:01:14.561 --> 00:01:15.680 +of object oriented code. -00:01:18.720 --> 00:01:19.920 -already is +00:01:15.681 --> 00:01:17.600 +So it's a good fit. -00:01:19.920 --> 00:01:22.880 -object oriented and I'll get into what +00:01:17.601 --> 00:01:21.439 +Second reason is it already is object-oriented, -00:01:22.880 --> 00:01:23.759 -that means +00:01:21.440 --> 00:01:25.280 +and I'll get into what that means in a second. -00:01:23.759 --> 00:01:27.280 -in a second so +00:01:25.281 --> 00:01:28.479 +So the background that you should know -00:01:27.280 --> 00:01:28.640 -the background that you should know is +00:01:28.480 --> 00:01:30.000 +is that most of this code -00:01:28.640 --> 00:01:30.640 -that most of this code was written in - -00:01:30.640 --> 00:01:32.560 -the 90s +00:01:30.001 --> 00:01:32.560 +was written in the 90s. 00:01:32.560 --> 00:01:34.880 -Emacs lisp has only grown sort of - -00:01:34.880 --> 00:01:36.159 -official +Emacs Lisp has only grown sort of -00:01:36.159 --> 00:01:38.640 -object orientation support libraries +00:01:34.881 --> 00:01:38.640 +official object orientation support libraries 00:01:38.640 --> 00:01:41.200 -over the past 10 years or so - -00:01:41.200 --> 00:01:43.840 -from about 2010 to the present so what - -00:01:43.840 --> 00:01:44.799 -does - -00:01:44.799 --> 00:01:48.640 -news do so the basics of +over the past 10 years or so, -00:01:48.640 --> 00:01:50.560 -object orientation in most languages are +00:01:41.200 --> 00:01:42.799 +from about 2010 to the present. -00:01:50.560 --> 00:01:52.240 -you you define +00:01:42.800 --> 00:01:45.920 +So what does Gnus do? -00:01:52.240 --> 00:01:53.759 -a class of some sort and then you +00:01:45.921 --> 00:01:49.520 +So the basics of object orientation -00:01:53.759 --> 00:01:55.840 -instantiate that class and these +00:01:49.521 --> 00:01:50.560 +in most languages are: -00:01:55.840 --> 00:01:58.079 -class instances have two things they +00:01:50.560 --> 00:01:53.439 +you define a class of some sort, -00:01:58.079 --> 00:02:00.320 -have data attributes or +00:01:53.440 --> 00:01:55.040 +and then you instantiate that class. -00:02:00.320 --> 00:02:01.759 -slots or members or whatever you're +00:01:55.041 --> 00:01:57.920 +These class instances have two things: -00:02:01.759 --> 00:02:04.799 -going to call them and they have +00:01:57.921 --> 00:02:00.719 +they have data attributes (or slots, -00:02:04.799 --> 00:02:07.280 -methods which operate on individual +00:02:00.720 --> 00:02:01.680 +or members, or whatever -00:02:07.280 --> 00:02:08.399 -instances +00:02:01.681 --> 00:02:02.640 +you're going to call them), -00:02:08.399 --> 00:02:11.120 -so you could say that you create or +00:02:02.641 --> 00:02:05.600 +and they have methods -00:02:11.120 --> 00:02:12.879 -instantiate an instance of a class in +00:02:05.601 --> 00:02:08.399 +which operate on individual instances. -00:02:12.879 --> 00:02:13.920 -that instance +00:02:08.399 --> 00:02:10.239 +So you could say that -00:02:13.920 --> 00:02:16.239 -owns two things that owns its set of +00:02:10.240 --> 00:02:11.840 +you create or instantiate -00:02:16.239 --> 00:02:17.120 -attributes +00:02:11.841 --> 00:02:12.800 +an instance of a class, -00:02:17.120 --> 00:02:20.239 -and it owns some methods which +00:02:12.801 --> 00:02:14.800 +and that instance owns two things. -00:02:20.239 --> 00:02:23.280 -also work on the on the instance +00:02:14.801 --> 00:02:17.120 +That owns its set of attributes, -00:02:23.280 --> 00:02:26.720 -so both in nurse's existing code and in +00:02:17.120 --> 00:02:19.520 +and it owns some methods, -00:02:26.720 --> 00:02:29.040 -the more standard object oriented Emacs +00:02:19.521 --> 00:02:23.280 +which also work on the instance. -00:02:29.040 --> 00:02:30.080 -lisp libraries +00:02:23.280 --> 00:02:25.680 +Both in Gnus' existing code -00:02:30.080 --> 00:02:32.480 -this relationship is turned on its head +00:02:25.681 --> 00:02:28.560 +and in the more standard object-oriented -00:02:32.480 --> 00:02:34.080 -a little bit +00:02:28.561 --> 00:02:31.680 +Emacs Lisp libraries, this relationship -00:02:34.080 --> 00:02:37.599 -in that data slots and +00:02:31.681 --> 00:02:34.080 +is turned on its head a little bit, -00:02:37.599 --> 00:02:40.239 -uh and instance methods are defined +00:02:34.080 --> 00:02:39.599 +in that data slots and instance methods -00:02:40.239 --> 00:02:41.360 -outside of the +00:02:39.600 --> 00:02:41.760 +are defined outside of the class -00:02:41.360 --> 00:02:42.959 -class or the instances themselves so +00:02:41.761 --> 00:02:42.959 +or the instances themselves. 00:02:42.959 --> 00:02:45.040 -they are top level definitions +They are top-level definitions. 00:02:45.040 --> 00:02:46.879 -so we'll get to what that means in the +We'll get to what that means -00:02:46.879 --> 00:02:48.319 -in the newer libraries um +00:02:46.879 --> 00:02:48.720 +in the newer libraries in a bit, -00:02:48.319 --> 00:02:49.840 -in a bit but uh first I want to talk +00:02:48.721 --> 00:02:49.920 +but first I want to talk about -00:02:49.840 --> 00:02:51.760 -about how news does this and in order to +00:02:49.921 --> 00:02:51.280 +how Gnus does this. -00:02:51.760 --> 00:02:54.319 -do that we are going to go deep into +00:02:51.281 --> 00:02:52.160 +In order to do that, -00:02:54.319 --> 00:02:57.440 -the darkest corner of the new co source +00:02:52.161 --> 00:02:54.319 +we are going to go deep into -00:02:57.440 --> 00:02:59.879 -code tree to a library called +00:02:54.319 --> 00:02:55.760 +the darkest corner -00:02:59.879 --> 00:03:02.879 -nno.l very cryptically +00:02:55.761 --> 00:02:58.080 +of the Gnus source code tree -00:03:02.879 --> 00:03:05.040 -titled uh library and when we open it up +00:02:58.081 --> 00:03:01.440 +to a library called nnoo.el, -00:03:05.040 --> 00:03:06.800 -we find +00:03:01.441 --> 00:03:04.080 +very cryptically-titled library, -00:03:06.800 --> 00:03:09.519 -a library with no code comments and +00:03:04.081 --> 00:03:06.800 +and when we open it up, we find -00:03:09.519 --> 00:03:11.040 -almost no doc strings +00:03:06.800 --> 00:03:09.280 +a library with no code comments + +00:03:09.281 --> 00:03:11.040 +and almost no doc strings. 00:03:11.040 --> 00:03:12.800 -almost as if lars was a little ashamed +Almost as if Lars was a little ashamed-- 00:03:12.800 --> 00:03:14.159 -not ashamed but knew he was doing +not ashamed, but knew he was doing 00:03:14.159 --> 00:03:16.000 something a little bit crazy -00:03:16.000 --> 00:03:19.040 -and didn't want anyone to see so +00:03:16.000 --> 00:03:18.080 +and didn't want anyone to see. -00:03:19.040 --> 00:03:21.040 -this file contains the the object +00:03:18.081 --> 00:03:20.560 +So this file contains -00:03:21.040 --> 00:03:22.400 -oriented mechanism +00:03:20.561 --> 00:03:22.400 +the object-oriented mechanism -00:03:22.400 --> 00:03:24.480 -whereby you can define different kinds +00:03:22.400 --> 00:03:23.920 +whereby you can define -00:03:24.480 --> 00:03:25.760 -of back ends for news +00:03:23.921 --> 00:03:25.760 +different kinds of backends for Gnus, -00:03:25.760 --> 00:03:27.280 -and then those back ends can be +00:03:25.760 --> 00:03:26.799 +and then those backends -00:03:27.280 --> 00:03:29.760 -instantiated as individual +00:03:26.800 --> 00:03:30.879 +can be instantiated as individual servers. -00:03:29.760 --> 00:03:32.480 -servers and as you define these backends +00:03:30.880 --> 00:03:32.480 +As you define these backends, -00:03:32.480 --> 00:03:33.360 -you're supposed to use +00:03:32.480 --> 00:03:34.319 +you're supposed to use two macros, -00:03:33.360 --> 00:03:36.000 -two macros which you can see here one is +00:03:34.320 --> 00:03:35.680 +which you can see here. -00:03:36.000 --> 00:03:36.640 -called def +00:03:35.681 --> 00:03:37.280 +One is called defvoo, -00:03:36.640 --> 00:03:39.599 -vu and one is called defu and if you +00:03:37.281 --> 00:03:39.440 +and one is called deffoo. -00:03:39.599 --> 00:03:41.280 -look at the definitions the definitions +00:03:39.441 --> 00:03:40.400 +If you look at the definitions, -00:03:41.280 --> 00:03:43.280 -look pretty simple here def vu basically +00:03:40.401 --> 00:03:41.920 +the definitions look pretty simple. -00:03:43.280 --> 00:03:45.440 -turns into a def var +00:03:41.921 --> 00:03:45.440 +Here, defvoo basically turns into a defvar 00:03:45.440 --> 00:03:49.040 -and foo turns into a defund +and foo turns into a defun. 00:03:49.040 --> 00:03:52.239 -and along with those basic definitions +Along with those basic definitions, 00:03:52.239 --> 00:03:55.760 -the library also does some registration +the library also does some registration, 00:03:55.760 --> 00:03:58.720 -memoization caching of those variables - -00:03:58.720 --> 00:04:00.080 -it saves them in the structure - -00:04:00.080 --> 00:04:01.840 -for later use so that we know that those - -00:04:01.840 --> 00:04:03.360 -are meant to be - -00:04:03.360 --> 00:04:05.280 -uh attributes and methods that are used +memoization, caching of those variables. -00:04:05.280 --> 00:04:06.640 -with instances +00:03:58.720 --> 00:04:00.879 +It saves them in the structure for later use, -00:04:06.640 --> 00:04:08.000 -with server instances but you can see +00:04:00.880 --> 00:04:03.360 +so that we know that those are meant to be -00:04:08.000 --> 00:04:09.280 -that there's no server instance +00:04:03.360 --> 00:04:04.799 +attributes and methods -00:04:09.280 --> 00:04:10.560 -definition here there's no +00:04:04.800 --> 00:04:06.640 +that are used with instances, -00:04:10.560 --> 00:04:13.200 -like no nothing these are top level +00:04:06.640 --> 00:04:07.519 +with server instances. -00:04:13.200 --> 00:04:14.239 -these are top level +00:04:07.520 --> 00:04:08.159 +But you can see that -00:04:14.239 --> 00:04:18.160 -definitions so really data attributes +00:04:08.160 --> 00:04:10.000 +there's no server instance definition here. -00:04:18.160 --> 00:04:18.639 -for +00:04:10.001 --> 00:04:12.159 +There's no, like, no nothing. -00:04:18.639 --> 00:04:22.000 -new servers and +00:04:12.160 --> 00:04:14.799 +These are top-level definitions, -00:04:22.000 --> 00:04:23.840 -methods or functions that operate on +00:04:14.800 --> 00:04:20.239 +so really, data attributes for new servers -00:04:23.840 --> 00:04:25.440 -those instances are completely +00:04:20.240 --> 00:04:23.040 +and methods or functions -00:04:25.440 --> 00:04:28.400 -separate mechanisms they don't really +00:04:23.041 --> 00:04:24.639 +that operate on those instances -00:04:28.400 --> 00:04:29.600 -have anything to do with each other they +00:04:24.640 --> 00:04:27.840 +are completely separate mechanisms. -00:04:29.600 --> 00:04:31.680 -don't belong to the same data structures +00:04:27.841 --> 00:04:29.040 +They don't really have anything to do -00:04:31.680 --> 00:04:37.120 -so how do they work follow me +00:04:29.041 --> 00:04:29.520 +with each other. -00:04:37.120 --> 00:04:39.520 -aka methods and attributes these are all +00:04:29.521 --> 00:04:31.680 +They don't belong to the same data structures. -00:04:39.520 --> 00:04:41.360 -the things I just said +00:04:31.680 --> 00:04:34.080 +So how do they work? -00:04:41.360 --> 00:04:44.479 -so when you define a +00:04:34.081 --> 00:04:37.120 +Follow me. deffoo and defvoo, -00:04:44.479 --> 00:04:48.560 -a backend type +00:04:37.120 --> 00:04:38.960 +aka methods and attributes, -00:04:48.560 --> 00:04:51.199 -in noose what you get is this a +00:04:38.961 --> 00:04:41.360 +these are all the things I just said. -00:04:51.199 --> 00:04:52.400 -definition a list +00:04:41.360 --> 00:04:50.240 +So when you define a a backend type in Gnus, -00:04:52.400 --> 00:04:54.080 -and it'll say there is such a back end +00:04:50.241 --> 00:04:52.400 +what you get is this: a definition, a list. -00:04:54.080 --> 00:04:55.520 -as nnml +00:04:52.400 --> 00:04:55.520 +It'll say, there is such a backend as nnml, 00:04:55.520 --> 00:04:58.880 -and these are its uh data attributes +and these are its data attributes -00:04:58.880 --> 00:04:59.520 -that any +00:04:58.880 --> 00:05:01.039 +that any given instance can have, -00:04:59.520 --> 00:05:01.840 -given instance can have and then these +00:05:01.040 --> 00:05:04.720 +and then these are the functions or methods -00:05:01.840 --> 00:05:02.960 -are +00:05:04.721 --> 00:05:06.880 +that are defined to operate on -00:05:02.960 --> 00:05:04.960 -the functions or methods that are +00:05:06.880 --> 00:05:08.240 +an instance of this backend, -00:05:04.960 --> 00:05:06.880 -defined to operate on +00:05:08.241 --> 00:05:09.600 +so a server that belongs to -00:05:06.880 --> 00:05:08.960 -an instance of this backend so a server +00:05:09.601 --> 00:05:12.160 +the nnml backend. -00:05:08.960 --> 00:05:11.440 -that belongs to the nnml +00:05:12.161 --> 00:05:13.600 +So at least we have this data here. -00:05:11.440 --> 00:05:13.360 -backend so at least we have this data +00:05:13.601 --> 00:05:16.080 +That's handy. We don't really touch that. -00:05:13.360 --> 00:05:15.120 -here so that's that's handy we don't you +00:05:16.081 --> 00:05:19.600 +That's, like, very, very, very deep Gnus code -00:05:15.120 --> 00:05:16.880 -don't really touch that that's like very +00:05:19.601 --> 00:05:20.560 +that doesn't really come up -00:05:16.880 --> 00:05:18.000 -very very deep +00:05:20.560 --> 00:05:25.199 +even as a bug squasher or whatever. -00:05:18.000 --> 00:05:20.560 -um use code that doesn't really come up +00:05:25.200 --> 00:05:26.160 +We don't touch that very often, -00:05:20.560 --> 00:05:22.560 -even as a +00:05:26.161 --> 00:05:26.800 +but there they are, -00:05:22.560 --> 00:05:25.280 -even as a bug squasher or whatever we +00:05:26.801 --> 00:05:29.199 +and that's how they work. -00:05:25.280 --> 00:05:26.479 -don't touch that very often but there +00:05:29.200 --> 00:05:31.039 +Now the next thing that obviously -00:05:26.479 --> 00:05:27.280 -they are and that's +00:05:31.040 --> 00:05:32.080 +you want to know is, okay, -00:05:27.280 --> 00:05:30.400 -that's how they work now the next thing +00:05:32.080 --> 00:05:33.759 +where are... if I've started up Gnus, -00:05:30.400 --> 00:05:32.080 -that obviously you want to know is okay +00:05:33.760 --> 00:05:35.039 +where are my servers? -00:05:32.080 --> 00:05:34.000 -where are if I've started up news where +00:05:35.039 --> 00:05:36.880 +Where are these server objects, -00:05:34.000 --> 00:05:35.039 -are my servers +00:05:36.881 --> 00:05:40.479 +since this is object-oriented programming? -00:05:35.039 --> 00:05:37.199 -uh where are these server objects since +00:05:40.480 --> 00:05:41.520 +And the weird thing -00:05:37.199 --> 00:05:39.199 -this is object oriented +00:05:41.521 --> 00:05:43.759 +that you will eventually figure out -00:05:39.199 --> 00:05:41.840 -programming and the weird thing that you +00:05:43.760 --> 00:05:45.680 +(in some cases, after years of poking around) -00:05:41.840 --> 00:05:43.199 -will eventually +00:05:45.681 --> 00:05:46.880 +in the Gnus source code -00:05:43.199 --> 00:05:45.199 -figure out in some cases after years of +00:05:46.880 --> 00:05:48.880 +is that servers do not exist -00:05:45.199 --> 00:05:46.880 -poking around in the new source code +00:05:48.881 --> 00:05:51.360 +in an ontological, philosophical sense, -00:05:46.880 --> 00:05:49.199 -is that servers do not exist in an +00:05:51.361 --> 00:05:55.280 +as objects. The primary data structures of Gnus -00:05:49.199 --> 00:05:50.320 -ontological +00:05:55.281 --> 00:05:58.160 +are groups, and in sort of -00:05:50.320 --> 00:05:53.440 -philosophical sense as objects the +00:05:58.161 --> 00:06:00.560 +an object-oriented hierarchical mindset, -00:05:53.440 --> 00:05:55.440 -primary data structures of noose are +00:06:00.561 --> 00:06:03.039 +you'd think, well, groups belong to servers, -00:05:55.440 --> 00:05:57.039 -groups +00:06:03.040 --> 00:06:05.759 +so servers must exist, but they don't. -00:05:57.039 --> 00:05:58.960 -and in sort of an object-oriented +00:06:05.759 --> 00:06:07.840 +Each group... And here you can see -00:05:58.960 --> 00:06:00.720 -hierarchical you know mindset you'd - -00:06:00.720 --> 00:06:01.759 -think well - -00:06:01.759 --> 00:06:03.759 -groups belong to servers so servers must - -00:06:03.759 --> 00:06:05.759 -exist but they don't - -00:06:05.759 --> 00:06:08.000 -each group and here you can see some - -00:06:08.000 --> 00:06:09.360 -examples of groups +00:06:07.841 --> 00:06:09.360 +some examples of groups... 00:06:09.360 --> 00:06:11.199 -these are basically the data structures +These are basically the data structures -00:06:11.199 --> 00:06:13.039 -that represent a group each group also +00:06:11.199 --> 00:06:12.240 +that represent a group. -00:06:13.039 --> 00:06:14.960 -has a little entry here that +00:06:12.241 --> 00:06:14.160 +Each group also has a little entry here -00:06:14.960 --> 00:06:17.039 -that tells you what server it belongs to +00:06:14.161 --> 00:06:17.039 +that tells you what server it belongs to, -00:06:17.039 --> 00:06:18.000 -and each group +00:06:17.039 --> 00:06:20.080 +and each group replicates that data, -00:06:18.000 --> 00:06:20.479 -replicates that data uh saying which +00:06:20.081 --> 00:06:21.600 +saying which server it belongs to. -00:06:20.479 --> 00:06:23.120 -server it belongs to and so when +00:06:21.601 --> 00:06:24.000 +So when Gnus is going through -00:06:23.120 --> 00:06:24.479 -nurse is going through doing its +00:06:24.001 --> 00:06:25.280 +doing its business, -00:06:24.479 --> 00:06:26.160 -business uh trying to figure out what's +00:06:25.281 --> 00:06:27.039 +trying to figure out updating mail -00:06:26.160 --> 00:06:27.680 -like updating mail from the groups or +00:06:27.040 --> 00:06:28.479 +from the groups or whatever, -00:06:27.680 --> 00:06:29.840 -whatever almost every time +00:06:28.480 --> 00:06:30.960 +almost every time, it will cycle through -00:06:29.840 --> 00:06:31.600 -it will cycle through all the list of - -00:06:31.600 --> 00:06:32.960 -groups it'll +00:06:30.961 --> 00:06:32.960 +all the list of groups. 00:06:32.960 --> 00:06:34.960 -it'll look at all the server definitions - -00:06:34.960 --> 00:06:36.720 -and it will categorize the groups by +It'll look at all the server definitions, -00:06:36.720 --> 00:06:38.160 -server +00:06:34.960 --> 00:06:38.160 +and it will categorize the groups by server, -00:06:38.160 --> 00:06:41.120 -which which is just weird because you're +00:06:38.160 --> 00:06:40.000 +which is just weird, -00:06:41.120 --> 00:06:42.160 -sort of looking for okay where does the +00:06:40.001 --> 00:06:41.680 +because you're sort of looking for... -00:06:42.160 --> 00:06:43.840 -server exist it doesn't exist it's put +00:06:41.681 --> 00:06:42.720 +okay, where does the server exist? -00:06:43.840 --> 00:06:44.479 -together +00:06:42.721 --> 00:06:43.440 +It doesn't exist. -00:06:44.479 --> 00:06:48.319 -every time uh out of out of code +00:06:43.441 --> 00:06:46.240 +It's put together every time -00:06:48.319 --> 00:06:50.400 -elsewhere in the news code base +00:06:46.241 --> 00:06:50.400 +out of code elsewhere in the Gnus code base, -00:06:50.400 --> 00:06:51.840 -specifically from these group +00:06:50.400 --> 00:06:53.599 +specifically from these group definitions. -00:06:51.840 --> 00:06:54.080 -these group definitions and so this is +00:06:53.600 --> 00:06:54.479 +So this is very odd, -00:06:54.080 --> 00:06:55.199 -very odd because +00:06:54.480 --> 00:06:56.319 +because in some sense... -00:06:55.199 --> 00:06:58.080 -in in some sense like here this one its +00:06:56.320 --> 00:06:59.360 +Like here, this one, its server is nnml -00:06:58.080 --> 00:06:58.720 -server is +00:06:59.361 --> 00:07:01.680 +and an empty string, -00:06:58.720 --> 00:07:02.240 -nnml and an empty string so there's a +00:07:01.681 --> 00:07:02.880 +so there's a certain sense here -00:07:02.240 --> 00:07:03.919 -certain sense here in which this server +00:07:02.881 --> 00:07:04.720 +in which this server is not really -00:07:03.919 --> 00:07:04.479 -is not +00:07:04.721 --> 00:07:06.160 +an object at all. What it is -00:07:04.479 --> 00:07:06.400 -really an object at all what it is is a +00:07:06.161 --> 00:07:07.120 +is a set of instructions -00:07:06.400 --> 00:07:07.759 -set of instructions for how to find +00:07:07.121 --> 00:07:08.560 +for how to find messages, -00:07:07.759 --> 00:07:08.560 -messages +00:07:08.560 --> 00:07:10.319 +and this set of instructions is: -00:07:08.560 --> 00:07:11.199 -and this set of instructions is go to +00:07:10.320 --> 00:07:12.000 +go to the default place -00:07:11.199 --> 00:07:12.800 -the default place where the user +00:07:12.001 --> 00:07:14.000 +where the user might have their mail -00:07:12.800 --> 00:07:15.440 -might have their mail and expect to find +00:07:14.001 --> 00:07:16.319 +and expect to find messages there -00:07:15.440 --> 00:07:16.000 -messages +00:07:16.320 --> 00:07:18.479 +in an nnml format, which is basically -00:07:16.000 --> 00:07:18.080 -there in an nml format which is +00:07:18.480 --> 00:07:21.759 +just one message per file. -00:07:18.080 --> 00:07:19.840 -basically just one message per +00:07:21.760 --> 00:07:22.720 +Any number of groups could have -00:07:19.840 --> 00:07:22.479 -um per file and any number of groups +00:07:22.721 --> 00:07:24.400 +those same instructions, but they're not... -00:07:22.479 --> 00:07:23.840 -could have those same instructions uh - -00:07:23.840 --> 00:07:25.440 -but they're not it's not really a thing +00:07:24.401 --> 00:07:25.440 +It's not really a thing. 00:07:25.440 --> 00:07:26.720 -it's really just a +It's really just a... 00:07:26.720 --> 00:07:28.639 -it's more of a procedural instruction - -00:07:28.639 --> 00:07:30.240 -and on the other end of the spectrum you +It's more of a procedural instruction. -00:07:30.240 --> 00:07:31.919 -might have an nni map +00:07:28.639 --> 00:07:30.160 +On the other end of the spectrum, -00:07:31.919 --> 00:07:33.599 -server which very much is a thing it has +00:07:30.161 --> 00:07:32.240 +you might have an nnimap server, -00:07:33.599 --> 00:07:35.840 -its own it has its own server its own +00:07:32.241 --> 00:07:33.280 +which very much is a thing. -00:07:35.840 --> 00:07:37.759 -port its own authentication +00:07:33.281 --> 00:07:36.160 +It has its own server, its own port, -00:07:37.759 --> 00:07:40.240 -system so some of the servers are more +00:07:36.161 --> 00:07:38.960 +its own authentication system. -00:07:40.240 --> 00:07:41.360 -like things some of the servers are more +00:07:38.961 --> 00:07:40.639 +So some of the servers are more like things, -00:07:41.360 --> 00:07:42.400 -like instructions +00:07:40.640 --> 00:07:42.400 +some of the servers are more like instructions. 00:07:42.400 --> 00:07:45.520 -as news works right now um these +As Gnus works right now, 00:07:45.520 --> 00:07:47.280 most of the servers are treated like 00:07:47.280 --> 00:07:48.879 -just instruction sets +just instruction sets, 00:07:48.879 --> 00:07:50.879 -and and there's no place where you can +and there's no place where you can -00:07:50.879 --> 00:07:53.120 -go and find them there's no one central +00:07:50.880 --> 00:07:51.840 +go and find them. -00:07:53.120 --> 00:07:55.360 -uh variable that defines them all so how +00:07:51.841 --> 00:07:53.680 +There's no one central variable -00:07:55.360 --> 00:07:56.160 -do the +00:07:53.681 --> 00:07:56.160 +that defines them all. So how do the... -00:07:56.160 --> 00:07:57.520 -um so we'll talk about the methods in a +00:07:56.160 --> 00:07:57.759 +We'll talk about the methods in a second. -00:07:57.520 --> 00:07:59.520 -second how do the data attributes work +00:07:57.760 --> 00:07:59.520 +How do the data attributes work? 00:07:59.520 --> 00:08:02.639 -uh put very crudely um +Put very crudely, 00:08:02.639 --> 00:08:04.479 -your servers when they're put together +your servers, when they're put together, -00:08:04.479 --> 00:08:05.919 -uh they are okay they are +00:08:04.479 --> 00:08:06.879 +they are kept in a variable, -00:08:05.919 --> 00:08:08.080 -kept in a variable and it's called nno +00:08:06.880 --> 00:08:08.080 +and it's called nnoo 00:08:08.080 --> 00:08:08.960 nno |