summaryrefslogtreecommitdiffstats
path: root/2020
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt905
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