WEBVTT 00:00.000 --> 00:01.200 Welcome to my talk, 00:01.200 --> 00:02.680 Moldable Emacs: A Step Towards 00:02.680 --> 00:03.800 Sustainable Software. 00:03.800 --> 00:04.440 Who am I? 00:04.440 --> 00:05.280 I am Andrea. 00:05.280 --> 00:07.120 I work as a Clojure software engineer 00:07.120 --> 00:09.280 somewhere in the middle of the UK. 00:09.280 --> 00:10.880 I inherited my passion for Emacs 00:10.880 --> 00:12.480 from my Ph.D. supervisor, 00:12.480 --> 00:13.880 and from that moment on, 00:13.880 --> 00:14.960 I got in synergy with it. 00:14.960 --> 00:17.480 You can learn more about my interests 00:17.480 --> 00:19.200 and my Emacs adventure 00:19.200 --> 00:22.520 at ag91.github.io. 00:22.520 --> 00:24.360 So let's get in the talk. 00:24.360 --> 00:25.840 Why moldable development? 00:25.840 --> 00:28.400 There is too much information to read it all. 00:28.400 --> 00:30.640 Reading is very difficult. 00:30.640 --> 00:32.320 It's a very slow activity. 00:32.320 --> 00:33.960 You need to go word by word 00:33.960 --> 00:35.520 or paragraph by paragraph, 00:35.520 --> 00:36.400 if you speedread. 00:36.400 --> 00:39.320 But anyway, you take a lot of time 00:39.320 --> 00:40.720 to absorb that information. 00:40.720 --> 00:43.160 And we urgently need 00:43.160 --> 00:44.960 to stand on the shoulders of giants, 00:44.960 --> 00:46.880 so the idea is we should stop 00:46.880 --> 00:48.960 doing always the same errors 00:48.960 --> 00:50.920 and we should be able to 00:50.920 --> 00:53.640 absorb as much of the good ideas 00:53.640 --> 00:56.600 that the bright people around us generate. 00:56.600 --> 00:59.840 For example, if I create 00:59.840 --> 01:04.120 a magnificent program in COBOL, 01:04.120 --> 01:06.000 and nobody knows any more 01:06.000 --> 01:08.000 how to learn or read COBOL, 01:08.000 --> 01:09.120 (and in order to read, 01:09.120 --> 01:10.960 you take a lot of time), 01:10.960 --> 01:13.040 well, that fantastic idea 01:13.040 --> 01:15.360 should be easily translatable 01:15.360 --> 01:19.240 to C, or to Clojure, 01:19.240 --> 01:20.280 or to Common Lisp, 01:20.280 --> 01:22.240 or to a language that will come after. 01:22.240 --> 01:24.080 The idea shouldn't be lost 01:24.080 --> 01:28.400 in a codebase somewhere in an old mainframe. 01:28.400 --> 01:31.080 It should be still accessible. 01:31.080 --> 01:33.920 Let's get in practice. What does it mean? 01:33.920 --> 01:37.840 It means that, for example, 01:37.840 --> 01:40.400 the proponents of moldable development 01:40.400 --> 01:42.440 prepare this slide to give a sense. 01:42.440 --> 01:45.080 So the idea is... Look at this. 01:45.080 --> 01:46.640 What is here? You will see 01:46.640 --> 01:48.680 that all these little things 01:48.680 --> 01:49.680 look like the same. 01:49.680 --> 01:50.680 The first time I looked at it, 01:50.680 --> 01:52.840 this was looking like a class diagram. 01:52.840 --> 01:54.880 This is actually code 01:54.880 --> 01:57.800 describing a little system. 01:57.800 --> 01:59.520 If you look and if you read, 01:59.520 --> 02:01.320 you can see that there is a numerator, 02:01.320 --> 02:03.320 a denominator... So this, you see, 02:03.320 --> 02:05.720 is interactive, because it's code. 02:05.720 --> 02:06.520 It's something that is running, 02:06.520 --> 02:07.280 and it's an object 02:07.280 --> 02:08.560 because this is Smalltalk -- 02:08.560 --> 02:11.440 Pharo, a dialect of Smalltalk -- 02:11.440 --> 02:13.040 but in the next slide, 02:13.040 --> 02:15.160 since this is a moldable tool, 02:15.160 --> 02:16.760 you can see that you can... 02:16.760 --> 02:18.280 there is a representation 02:18.280 --> 02:20.000 of the same software 02:20.000 --> 02:23.520 in a human way. 02:23.520 --> 02:24.640 So, for example, 02:24.640 --> 02:25.880 here you can see 02:25.880 --> 02:27.280 there is a mathematical formula. 02:27.280 --> 02:29.080 The other object, the second one, 02:29.080 --> 02:30.440 was a file system kind of thing. 02:30.440 --> 02:33.880 The third one was an image. 02:33.880 --> 02:36.600 And the last one was sort of a graph. 02:36.600 --> 02:37.640 So you can see that 02:37.640 --> 02:40.840 there is a better way to learn, 02:40.840 --> 02:44.880 to distinguish, to intuitively get a sense. 02:44.880 --> 02:47.200 And there is not only a single way. 02:47.200 --> 02:49.480 It's custom to what you need. 02:49.480 --> 02:51.280 For example, this is 02:51.280 --> 02:52.680 a very general way 02:52.680 --> 02:54.040 to understand what is this object about 02:54.040 --> 02:55.560 and maybe you want to see 02:55.560 --> 02:56.760 some other little things. 02:56.760 --> 02:58.840 For example, the documentation of the code, 02:58.840 --> 03:00.240 because you are interested 03:00.240 --> 03:01.160 in developing with it. 03:01.160 --> 03:03.960 For example, an image, 03:03.960 --> 03:05.240 you can see there's a path 03:05.240 --> 03:06.840 on the filesystem, 03:06.840 --> 03:10.520 or as a hexadecimal representation. 03:10.520 --> 03:12.520 In a sense, there is not only one view. 03:12.520 --> 03:13.840 You need to have the view 03:13.840 --> 03:15.320 that you need at the moment, 03:15.320 --> 03:16.840 and your tool needs to 03:16.840 --> 03:19.680 make this easy for you. 03:19.680 --> 03:22.280 So, why moldable Emacs? 03:22.280 --> 03:24.680 I wanted to bring that idea 03:24.680 --> 03:26.760 of having multiple view representations 03:26.760 --> 03:29.520 of what you need 03:29.520 --> 03:33.280 to understand better in Emacs. 03:33.280 --> 03:36.280 And so I want to create immediate story telling. 03:36.280 --> 03:37.880 Immediate, because it needs to be very quick, 03:37.880 --> 03:38.840 and story telling is 03:38.840 --> 03:40.760 because you want to allow connection 03:40.760 --> 03:42.520 from something that you needed 03:42.520 --> 03:45.520 to develop it into something new. 03:45.520 --> 03:47.160 So you are really telling a story: 03:47.160 --> 03:49.040 what is this mathematical formula 03:49.040 --> 03:51.120 I created because I need this, 03:51.120 --> 03:54.440 or this numerator and denominator 03:54.440 --> 03:55.520 produce this number. 03:55.520 --> 03:58.760 So this is a story that you are telling 03:58.760 --> 03:59.880 in my mind. 03:59.880 --> 04:04.000 And I want multiple views for buffers. 04:04.000 --> 04:05.800 Buffers is the main concept in Emacs, 04:05.800 --> 04:09.160 and so buffers are what I want to 04:09.160 --> 04:11.000 integrate in a story. 04:11.000 --> 04:12.280 I create a buffer 04:12.280 --> 04:15.080 and I start manipulating it, 04:15.080 --> 04:16.920 creating a view and then another view 04:16.920 --> 04:19.520 in order to tell something to myself, 04:19.520 --> 04:20.720 in order to learn, 04:20.720 --> 04:21.880 but also to tell something to others. 04:21.880 --> 04:23.960 So, for example, let's start 04:23.960 --> 04:25.840 from a use case: learning better. 04:25.840 --> 04:29.640 I had, at work, a list of changes 04:29.640 --> 04:31.440 for a pull request, 04:31.440 --> 04:32.040 so a code change, 04:32.040 --> 04:33.920 and I was very tired. 04:33.920 --> 04:34.760 I couldn't understand 04:34.760 --> 04:37.520 what this much text was about. 04:37.520 --> 04:38.920 So what I generate, 04:38.920 --> 04:41.120 I create a value for myself 04:41.120 --> 04:42.720 to understand it easily. 04:42.720 --> 04:45.320 And for me, understanding it easily, 04:45.320 --> 04:49.240 for example, was a little flow diagram. 04:49.240 --> 04:50.963 It showed me, okay, there is first 04:50.963 --> 04:52.320 this, this, and this, 04:52.320 --> 04:54.960 and so I could follow. 04:54.960 --> 04:58.400 having it next to the change. 04:58.400 --> 05:00.600 Having this image next to the change. 05:00.600 --> 05:02.360 And this is describing 05:02.360 --> 05:05.640 an Italian recipe for pasta with butter, 05:05.640 --> 05:07.840 so if you want to try, you're welcome. 05:07.840 --> 05:11.720 It's very tasty. 05:11.720 --> 05:13.840 Anyway, the other thing that we can do 05:13.840 --> 05:17.280 is query text -- structured text. 05:17.280 --> 05:20.680 So for example, this presentation 05:20.680 --> 05:21.960 is an Org Mode buffer. 05:21.960 --> 05:24.040 So when I call the Playground 05:24.040 --> 05:24.960 (that is one of the molds 05:24.960 --> 05:27.640 that lets me write some Elisp to query 05:27.640 --> 05:29.680 the original buffer,) 05:29.680 --> 05:31.640 if I evaluate this, 05:31.640 --> 05:33.280 you will see that 05:33.280 --> 05:33.880 I have just asked 05:33.880 --> 05:35.200 my Org Mode buffer 05:35.200 --> 05:37.400 to tell me the content length 05:37.400 --> 05:38.280 of the headings 05:38.280 --> 05:40.240 with some interesting content. 05:40.240 --> 05:44.280 So all the headings at third-level. 05:44.280 --> 05:48.080 Do you understand? I've just asked a file 05:48.080 --> 05:50.240 to tell me its contents 05:50.240 --> 05:51.240 without reading it. 05:51.240 --> 05:56.320 Or we can do something similar for code. 05:56.320 --> 05:58.840 We can do... I don't know... 05:58.840 --> 06:00.920 No idea what is written there, 06:00.920 --> 06:02.000 but I want to know 06:02.000 --> 06:03.840 which function is the most complex 06:03.840 --> 06:06.800 or is overcomplicated. 06:06.800 --> 06:09.560 I have defined in red, 06:09.560 --> 06:11.600 (so again, I don't need to read the number 06:11.600 --> 06:13.800 to know either what it is about!) 06:13.800 --> 06:15.280 So, I've written in red, 06:15.280 --> 06:18.120 I've shown in red 06:18.120 --> 06:20.320 the function with more complexity, 06:20.320 --> 06:22.560 and I can jump to it. 06:22.560 --> 06:24.160 So everything is very accessible 06:24.160 --> 06:26.280 to facilitate my operation 06:26.280 --> 06:27.160 and my understanding. 06:27.160 --> 06:29.880 Or I can take notes. 06:29.880 --> 06:36.160 For example, I can annotate something, 06:36.160 --> 06:37.240 and you see the note 06:37.240 --> 06:38.920 is again structured text, 06:38.920 --> 06:40.120 because you will know 06:40.120 --> 06:42.320 that I'm going to query my notes 06:42.320 --> 06:43.480 at some point. 06:43.480 --> 06:46.680 For example, I can show all my notes, 06:46.680 --> 06:51.480 for example, by mode, or I can show 06:51.480 --> 06:53.600 all the notes by mode in Org Mode. 06:53.600 --> 06:56.440 Because it's structured text, 06:56.440 --> 06:57.840 I can manipulate it very easily. 06:57.840 --> 07:00.160 So these are all my notes. 07:00.160 --> 07:05.400 Finally, the superpower 07:05.400 --> 07:08.320 of this moldable Emacs 07:08.320 --> 07:10.400 is the fact that you can compose molds. 07:10.400 --> 07:13.000 So, for example, let's go in 07:13.000 --> 07:17.480 showing all my notes. 07:17.480 --> 07:19.040 Let me show you all my notes. 07:19.040 --> 07:21.520 And then let's say that I want to know 07:21.520 --> 07:26.720 how they are... how many lines 07:26.720 --> 07:27.400 are these notes? 07:27.400 --> 07:30.360 Look, this is the answer. 07:30.360 --> 07:31.800 So of all the notes I take, 07:31.800 --> 07:34.200 I can actually query it and say 07:34.200 --> 07:38.360 "What are the lengths?" 07:38.360 --> 07:40.040 But let me show something more. 07:40.040 --> 07:41.680 Which one is the longest note? 07:41.680 --> 07:44.000 Now there are lots of notes in there 07:44.000 --> 07:45.080 so it's difficult to know 07:45.080 --> 07:47.200 but what if I can, in a click, 07:47.200 --> 07:50.440 generate a view that is very immediate? 07:50.440 --> 07:52.240 Look, there is a note that is very long. 07:52.240 --> 07:54.040 It's about 35 lines. 07:54.040 --> 07:55.160 Do you understand? 07:55.160 --> 07:56.760 I didn't read any note. 07:56.760 --> 07:58.400 This is all coming from 07:58.400 --> 08:02.520 being able to query your text 08:02.520 --> 08:06.240 and having multiple representations. 08:06.240 --> 08:08.360 My presentation is very short. 08:08.360 --> 08:09.720 What is next? 08:09.720 --> 08:14.360 Next is to integrate molds with other software 08:14.360 --> 08:15.360 like code-compass. 08:15.360 --> 08:16.720 I did a presentation last year 08:16.720 --> 08:18.640 and I want to make those nice diagrams 08:18.640 --> 08:21.320 available for small molds 08:21.320 --> 08:22.880 so that you can use them, 08:22.880 --> 08:24.760 for example, for notes 08:24.760 --> 08:26.360 or text that you have. 08:26.360 --> 08:28.200 To integrate better 08:28.200 --> 08:30.360 with Nyxt, the Common Lisp browser, 08:30.360 --> 08:32.200 because there's a lot of opportunity there 08:32.200 --> 08:35.320 to make funny things, 08:35.320 --> 08:38.040 a browser accessible for molding, 08:38.040 --> 08:41.240 and then having some interaction with Smalltalk 08:41.240 --> 08:42.840 through Glamorous Toolkit, 08:42.840 --> 08:44.080 so that we can have the best tools, 08:44.080 --> 08:46.800 Emacs and Glamorous Toolkit and Nyxt 08:46.800 --> 08:49.000 and others, to work together 08:49.000 --> 08:50.520 to make our learning easy. 08:50.520 --> 08:52.480 Then... You've seen the tool; 08:52.480 --> 08:53.840 my molds that I have shown 08:53.840 --> 08:56.200 were basically by buffer. 08:56.200 --> 08:58.600 I want project statistics. 08:58.600 --> 09:00.480 What about... Give me the complexity 09:00.480 --> 09:01.800 of all the functions 09:01.800 --> 09:03.480 in a project, 09:03.480 --> 09:06.120 of all the paragraphs, whatever. 09:06.120 --> 09:08.120 And then there is a nice issue on 09:08.120 --> 09:10.880 my issue-tracker for moldable Emacs 09:10.880 --> 09:13.920 is about: "Emacs: tell me how can I 09:13.920 --> 09:15.080 compose the molds that I have 09:15.080 --> 09:17.480 to make new things?" 09:17.480 --> 09:19.400 It is a sort of a research-y thing 09:19.400 --> 09:20.680 that is pretty cool. 09:20.680 --> 09:22.400 So if you want to learn more, 09:22.400 --> 09:25.520 just check out at ag91.github.io, 09:25.520 --> 09:28.000 check out moldable Emacs on GitHub, 09:28.000 --> 09:30.840 and enjoy the rest of the conference. 09:30.840 --> 09:34.200 Bye.