WEBVTT 00:00:00.080 --> 00:00:02.639 hi my name is eduardo x I'm this person 00:00:02.639 --> 00:00:03.439 here 00:00:03.439 --> 00:00:06.240 and the title of this talk is on why 00:00:06.240 --> 00:00:07.120 most of 00:00:07.120 --> 00:00:09.519 most of the best features in ev look 00:00:09.519 --> 00:00:11.599 like five minute hacks 00:00:11.599 --> 00:00:13.759 and this is a presentation at the max 00:00:13.759 --> 00:00:15.280 conf 2020 00:00:15.280 --> 00:00:23.199 happening in november 22 28 and 29 2020 00:00:23.199 --> 00:00:25.519 so this is part one of the presentation 00:00:25.519 --> 00:00:27.680 and here I'm going to explain some 00:00:27.680 --> 00:00:29.840 some ideas that are prerequisites for 00:00:29.840 --> 00:00:31.039 understanding the rest of the 00:00:31.039 --> 00:00:32.320 presentation 00:00:32.320 --> 00:00:35.440 the three main keys of ev are matay meta 00:00:35.440 --> 00:00:35.760 k 00:00:35.760 --> 00:00:37.920 and mata j and I'm going to start by 00:00:37.920 --> 00:00:42.079 explaining metae and meta k 00:00:42.079 --> 00:00:44.960 metae is used to follow hyperlink and 00:00:44.960 --> 00:00:46.800 technically it is 00:00:46.800 --> 00:00:49.680 essentially just a ctrl e to move to the 00:00:49.680 --> 00:00:50.879 end of the line and then 00:00:50.879 --> 00:00:54.320 a ctrl x control e to execute this the 00:00:54.320 --> 00:00:58.960 sext before point at the end of the line 00:00:58.960 --> 00:01:00.879 and the thing is that a max comes with 00:01:00.879 --> 00:01:03.120 many functions that can be used as sex 00:01:03.120 --> 00:01:05.040 hyperlinks 00:01:05.040 --> 00:01:07.040 we can consider that they point to 00:01:07.040 --> 00:01:09.040 somewhere I'm going to refer to that as 00:01:09.040 --> 00:01:09.520 the 00:01:09.520 --> 00:01:11.920 target of the hyperlink and if we 00:01:11.920 --> 00:01:12.960 execute this 00:01:12.960 --> 00:01:15.759 sex paper links would go to that target 00:01:15.759 --> 00:01:17.119 for example this one 00:01:17.119 --> 00:01:20.000 is a hyperlink that points to a buffer 00:01:20.000 --> 00:01:22.720 with demand paid for cat 00:01:22.720 --> 00:01:25.040 and usually but not always after 00:01:25.040 --> 00:01:27.040 following the hyperlink we can go back 00:01:27.040 --> 00:01:29.840 by just skilling the the current buffer 00:01:29.840 --> 00:01:30.720 that the hyperlink 00:01:30.720 --> 00:01:34.400 created the target of the hyperlink 00:01:34.400 --> 00:01:38.000 but this example here is badly behaved 00:01:38.000 --> 00:01:41.360 if we execute it it creates a new frame 00:01:41.360 --> 00:01:43.360 and to go back to the previous situation 00:01:43.360 --> 00:01:44.640 we have to either 00:01:44.640 --> 00:01:52.840 click here or type ctrl x50 00:01:52.840 --> 00:01:54.880 uh 00:01:54.880 --> 00:01:57.520 so here are some examples of sex 00:01:57.520 --> 00:02:00.640 hyperlinks using standard max functions 00:02:00.640 --> 00:02:03.600 this third one is uh badly behaved in a 00:02:03.600 --> 00:02:04.880 different way 00:02:04.880 --> 00:02:08.879 if executed we the target is created in 00:02:08.879 --> 00:02:09.840 the same window 00:02:09.840 --> 00:02:13.840 as we are now but it also shows a lot of 00:02:13.840 --> 00:02:16.000 garbage here in the aqua area so 00:02:16.000 --> 00:02:20.840 the the current frame becomes a bit 00:02:20.840 --> 00:02:23.280 messy 00:02:23.280 --> 00:02:26.160 and well one of the first things that I 00:02:26.160 --> 00:02:28.319 did when I was creating av 00:02:28.319 --> 00:02:30.720 many many years ago was that I created 00:02:30.720 --> 00:02:31.680 variants 00:02:31.680 --> 00:02:34.840 of all these functions that were better 00:02:34.840 --> 00:02:36.640 behaved 00:02:36.640 --> 00:02:38.640 and they were better behaved in two 00:02:38.640 --> 00:02:40.480 senses the obvious one 00:02:40.480 --> 00:02:43.040 was that they they all created the 00:02:43.040 --> 00:02:43.680 target 00:02:43.680 --> 00:02:45.840 in the same window as before so I could 00:02:45.840 --> 00:02:48.720 go back by just typing meta k 00:02:48.720 --> 00:02:51.040 which is essentially just killed this 00:02:51.040 --> 00:02:52.879 buffer 00:02:52.879 --> 00:02:55.200 and well but I also implemented 00:02:55.200 --> 00:02:56.480 something extra that 00:02:56.480 --> 00:02:59.040 are the post back lists for example for 00:02:59.040 --> 00:02:59.840 example these 00:02:59.840 --> 00:03:03.599 extra arguments here are a postback list 00:03:03.599 --> 00:03:06.080 and this extra arguments specify 00:03:06.080 --> 00:03:09.599 position and the target buffer 00:03:09.599 --> 00:03:13.040 and in this example this this spot 00:03:13.040 --> 00:03:16.720 spec list means starting from the from 00:03:16.720 --> 00:03:18.239 the beginning of the buffer 00:03:18.239 --> 00:03:20.560 search for the first occurrence of this 00:03:20.560 --> 00:03:22.239 string 00:03:22.239 --> 00:03:24.159 after that after the beginning of the 00:03:24.159 --> 00:03:25.519 buffer and then 00:03:25.519 --> 00:03:28.159 search for the first occurrence of this 00:03:28.159 --> 00:03:29.120 string 00:03:29.120 --> 00:03:33.760 after that 00:03:33.760 --> 00:03:36.560 eev also defines some hyperlinks that do 00:03:36.560 --> 00:03:38.799 not create new buffers 00:03:38.799 --> 00:03:41.280 uh here is the first example if I 00:03:41.280 --> 00:03:41.840 execute 00:03:41.840 --> 00:03:45.920 this one this one is a hyperlink to the 00:03:45.920 --> 00:03:46.959 to the result 00:03:46.959 --> 00:03:50.720 of running this show comment date uh 00:03:50.720 --> 00:03:52.959 but instead of showing the result in the 00:03:52.959 --> 00:03:55.040 new buffer the result is shown 00:03:55.040 --> 00:03:58.959 here so if execute to this type link 00:03:58.959 --> 00:04:01.840 the result of date the output of data is 00:04:01.840 --> 00:04:04.239 shown in the echo area and if executed 00:04:04.239 --> 00:04:07.120 again 00:04:07.120 --> 00:04:09.519 it shows the result again and the result 00:04:09.519 --> 00:04:11.519 changes every second 00:04:11.519 --> 00:04:15.200 and if so this is a variant 00:04:15.200 --> 00:04:18.720 of fine sh 00:04:18.720 --> 00:04:21.840 uh find sh0 is the variant that 00:04:21.840 --> 00:04:24.960 just shows the output in the echo area 00:04:24.960 --> 00:04:28.080 and find sh shows the output in 00:04:28.080 --> 00:04:31.759 a new buffer 00:04:31.759 --> 00:04:35.919 and here is an example of a hyperlink 00:04:35.919 --> 00:04:37.520 that 00:04:37.520 --> 00:04:40.000 calls an external program if execute 00:04:40.000 --> 00:04:41.280 this 00:04:41.280 --> 00:04:43.759 it it calls google chrome to open a 00:04:43.759 --> 00:04:46.639 certain url 00:04:46.639 --> 00:04:51.520 here it is let's go back to mx 00:04:51.520 --> 00:04:55.280 if execute this happening here 00:04:55.280 --> 00:04:58.479 it invokes my favorite pdf viewer which 00:04:58.479 --> 00:04:58.880 is 00:04:58.880 --> 00:05:02.560 xpdf it makes xpdf 00:05:02.560 --> 00:05:07.759 open this pdf page it is pdf 00:05:07.759 --> 00:05:10.880 in this page and this other arguments 00:05:10.880 --> 00:05:15.199 are ignored let me show how it works 00:05:15.199 --> 00:05:19.120 here it is this is a an accept from a 00:05:19.120 --> 00:05:20.160 book 00:05:20.160 --> 00:05:22.639 so page 3 and the pdf corresponds to 00:05:22.639 --> 00:05:23.199 page 00:05:23.199 --> 00:05:26.400 113 in the book and 00:05:26.400 --> 00:05:29.360 this variant here of the hyperlink above 00:05:29.360 --> 00:05:31.759 it opens the pdf in a different way 00:05:31.759 --> 00:05:34.560 it runs a program called pdf to text on 00:05:34.560 --> 00:05:36.479 this pdf here 00:05:36.479 --> 00:05:39.600 and max takes the output of 00:05:39.600 --> 00:05:42.880 run epd after text on this pdf here 00:05:42.880 --> 00:05:46.080 and displays it in a buffer and now this 00:05:46.080 --> 00:05:47.280 postback list 00:05:47.280 --> 00:05:50.000 is interpreted in a different way this 00:05:50.000 --> 00:05:51.280 thing is interpreted 00:05:51.280 --> 00:05:54.400 as a as a number of a page and a max 00:05:54.400 --> 00:05:54.800 goes 00:05:54.800 --> 00:05:57.520 to page three by counting form feeds in 00:05:57.520 --> 00:05:58.240 the 00:05:58.240 --> 00:06:01.440 converted version of the pdf and then it 00:06:01.440 --> 00:06:03.039 searches for this string 00:06:03.039 --> 00:06:06.319 and in this three so let's execute this 00:06:06.319 --> 00:06:08.479 to see what happens 00:06:08.479 --> 00:06:10.800 here it is I opened the same page as 00:06:10.800 --> 00:06:14.800 before 00:06:14.800 --> 00:06:18.400 it starts with lecture one so 00:06:18.400 --> 00:06:20.720 the other hyperlink searched for this 00:06:20.720 --> 00:06:25.520 string and for this string here 00:06:25.520 --> 00:06:28.160 uh and this thing here is a hyperlink to 00:06:28.160 --> 00:06:30.400 video 00:06:30.400 --> 00:06:32.720 and when I executed it's going to open 00:06:32.720 --> 00:06:34.560 this video here 00:06:34.560 --> 00:06:37.759 at this time this time stamp let's see 00:06:37.759 --> 00:06:41.199 one two three one 00:06:41.199 --> 00:06:46.840 two three that's the way to do 00:06:46.840 --> 00:06:49.440 it 00:06:49.440 --> 00:06:52.560 and also some hyperlinks that that I 00:06:52.560 --> 00:06:53.680 defined 00:06:53.680 --> 00:06:56.479 uh they don't work like like usual 00:06:56.479 --> 00:06:58.160 hyperlinks they work more 00:06:58.160 --> 00:07:01.440 like browser buttons 00:07:01.440 --> 00:07:06.240 these buttons that appear in web pages 00:07:06.240 --> 00:07:09.120 in the sense that these buttons usually 00:07:09.120 --> 00:07:11.360 don't open a new page they usually 00:07:11.360 --> 00:07:13.280 just do something to change the current 00:07:13.280 --> 00:07:14.960 page 00:07:14.960 --> 00:07:18.160 if I execute this the action of this 00:07:18.160 --> 00:07:18.880 function 00:07:18.880 --> 00:07:22.240 eek is to uh 00:07:22.240 --> 00:07:24.800 it interprets this string as a series of 00:07:24.800 --> 00:07:25.919 keys and it 00:07:25.919 --> 00:07:28.840 acts as if the user had typed all these 00:07:28.840 --> 00:07:30.319 keys so 00:07:30.319 --> 00:07:33.680 if executed I get a hello in the next 00:07:33.680 --> 00:07:34.400 line 00:07:34.400 --> 00:07:36.639 if executed again I get another hello 00:07:36.639 --> 00:07:39.440 another hello hello hello etc etc 00:07:39.440 --> 00:07:44.319 let me undo this mess oops 00:07:44.319 --> 00:07:47.840 and here is another kind of button 00:07:47.840 --> 00:07:51.440 that defines a new function if I execute 00:07:51.440 --> 00:07:54.879 this sex here at this moment though is 00:07:54.879 --> 00:07:55.759 not defined 00:07:55.759 --> 00:07:57.919 and if I execute this mx is going to 00:07:57.919 --> 00:08:00.000 show me a message saying 00:08:00.000 --> 00:08:03.599 uh symbols function cell is not defined 00:08:03.599 --> 00:08:05.840 something like this 00:08:05.840 --> 00:08:09.520 but if I execute the defund 00:08:09.520 --> 00:08:12.960 this the action of this function o here 00:08:12.960 --> 00:08:16.479 is to run this which opens a certain 00:08:16.479 --> 00:08:18.960 directory 00:08:18.960 --> 00:08:21.840 let me go back and here is another 00:08:21.840 --> 00:08:23.039 button that defines 00:08:23.039 --> 00:08:25.840 several functions at the same time if I 00:08:25.840 --> 00:08:26.479 execute 00:08:26.479 --> 00:08:32.320 this 00:08:32.320 --> 00:08:35.599 note that the the result of executing 00:08:35.599 --> 00:08:36.719 this expression 00:08:36.719 --> 00:08:38.640 is the name of one of the functions that 00:08:38.640 --> 00:08:40.080 it defined 00:08:40.080 --> 00:08:42.800 that is this one here and let me explain 00:08:42.800 --> 00:08:43.360 the 00:08:43.360 --> 00:08:46.959 these examples uh one of the functions 00:08:46.959 --> 00:08:48.800 that this thing here defined 00:08:48.800 --> 00:08:51.839 is called find or git file where 00:08:51.839 --> 00:08:54.640 this or gate in the middle of its name 00:08:54.640 --> 00:08:55.040 is 00:08:55.040 --> 00:08:59.600 exactly this first argument to code cd 00:08:59.600 --> 00:09:02.640 and the action of running find or get 00:09:02.640 --> 00:09:03.120 file 00:09:03.120 --> 00:09:06.399 on a string like this is that 00:09:06.399 --> 00:09:09.680 find or get file takes the string 00:09:09.680 --> 00:09:13.360 and prepends this string to it 00:09:13.360 --> 00:09:15.600 this one here which is the second 00:09:15.600 --> 00:09:17.920 argument to called cd 00:09:17.920 --> 00:09:21.760 and then it executes find flying 00:09:21.760 --> 00:09:25.680 on the result which is this one 00:09:25.680 --> 00:09:28.320 and fine flying is my variant of find 00:09:28.320 --> 00:09:28.800 file 00:09:28.800 --> 00:09:32.080 that supports both spec lists 00:09:32.080 --> 00:09:36.880 and this function here that I'm 00:09:36.880 --> 00:09:39.600 referring to as a button it also defines 00:09:39.600 --> 00:09:41.200 a function called 00:09:41.200 --> 00:09:44.880 find audit node here where the or gate 00:09:44.880 --> 00:09:46.080 is the same string 00:09:46.080 --> 00:09:50.320 as here and this function opens a node 00:09:50.320 --> 00:09:54.160 of of an info manual this one 00:09:54.160 --> 00:09:57.920 this text here opens this node in the 00:09:57.920 --> 00:10:00.080 org manual 00:10:00.080 --> 00:10:03.519 it is equivalent to this text here 00:10:03.519 --> 00:10:06.800 so in the passage from this line to this 00:10:06.800 --> 00:10:08.720 line we prepended 00:10:08.720 --> 00:10:11.920 to the node name the name of the manual 00:10:11.920 --> 00:10:15.040 here and find node is my variant 00:10:15.040 --> 00:10:18.160 of this standard mx function here 00:10:18.160 --> 00:10:20.399 but find node also supports post 00:10:20.399 --> 00:10:23.519 backlists 00:10:23.519 --> 00:10:26.640 eevee also defines some functions that 00:10:26.640 --> 00:10:28.640 define shorter hyperlinks to pdfs and 00:10:28.640 --> 00:10:30.800 videos 00:10:30.800 --> 00:10:32.880 remember that this thing here is a 00:10:32.880 --> 00:10:34.720 shorter hyperlink to a 00:10:34.720 --> 00:10:37.120 to a file and this thing here is a 00:10:37.120 --> 00:10:39.040 shorter hyperlink to a node and 00:10:39.040 --> 00:10:43.200 in an mx menu in an info manual 00:10:43.200 --> 00:10:46.079 uh if we run this thing here this code 00:10:46.079 --> 00:10:47.279 pdf page 00:10:47.279 --> 00:10:50.240 this acts like a button that defines a 00:10:50.240 --> 00:10:52.880 certain function 00:10:52.880 --> 00:10:56.399 and this string this other sex 00:10:56.399 --> 00:10:59.040 here defines another function the first 00:10:59.040 --> 00:11:00.240 one defines 00:11:00.240 --> 00:11:03.040 the function find funcspivac page and 00:11:03.040 --> 00:11:05.360 the second one defines the function find 00:11:05.360 --> 00:11:09.279 from text when we run the 00:11:09.279 --> 00:11:12.240 file when we run findfoxpivotpage it 00:11:12.240 --> 00:11:13.440 opens 00:11:13.440 --> 00:11:17.600 this pdf here the name is 00:11:17.600 --> 00:11:20.640 quite long uh 00:11:20.640 --> 00:11:23.839 this example opens this pdf at page 8 00:11:23.839 --> 00:11:26.079 and searches for the string contents 00:11:26.079 --> 00:11:28.000 oops sorry in this case 00:11:28.000 --> 00:11:31.279 in this case it just ignores this string 00:11:31.279 --> 00:11:33.519 here it only considers 00:11:33.519 --> 00:11:37.360 the number of the page let's try 00:11:37.360 --> 00:11:42.640 ah we got 00:11:42.640 --> 00:11:45.200 here it is uh the contents of a book 00:11:45.200 --> 00:11:46.880 that is freely 00:11:46.880 --> 00:11:50.800 available uh here is another page of the 00:11:50.800 --> 00:11:51.760 book 00:11:51.760 --> 00:11:55.040 and if we execute the this happening 00:11:55.040 --> 00:11:55.519 here 00:11:55.519 --> 00:11:58.399 find funk's pivot text it converts the 00:11:58.399 --> 00:11:59.920 pdf to text 00:11:59.920 --> 00:12:03.040 and it searches for the page eight 00:12:03.040 --> 00:12:05.040 in it and then for the string this 00:12:05.040 --> 00:12:08.079 string here in page eight 00:12:08.079 --> 00:12:12.240 it takes a few seconds 00:12:12.240 --> 00:12:16.160 here it is so this is the 00:12:16.160 --> 00:12:20.320 ascii version of this contents page 00:12:20.320 --> 00:12:25.040 here uh note that this block here 00:12:25.040 --> 00:12:28.800 is a kind of an index to that book 00:12:28.800 --> 00:12:31.680 uh I have the full index somewhere but 00:12:31.680 --> 00:12:33.600 it's very long so I just copied a few 00:12:33.600 --> 00:12:34.959 lines here 00:12:34.959 --> 00:12:38.959 uh so this is a link to the to set 00:12:38.959 --> 00:12:42.160 section one chapter one this is the 00:12:42.160 --> 00:12:45.360 section 1.1 00:12:45.360 --> 00:12:48.959 section 1.1.1 and so on 00:12:48.959 --> 00:12:54.000 and here is a link to the index 00:12:54.000 --> 00:12:58.079 and here is a part of my index 00:12:58.079 --> 00:13:02.800 of positions in the video that we just 00:13:02.800 --> 00:13:03.279 saw 00:13:03.279 --> 00:13:05.760 that I think that are especially 00:13:05.760 --> 00:13:07.360 relevant 00:13:07.360 --> 00:13:10.639 uh so this I believe 00:13:10.639 --> 00:13:12.399 hyperlink is a kind of a button that 00:13:12.399 --> 00:13:14.160 defines this function here 00:13:14.160 --> 00:13:18.839 find punch and punch into the video 00:13:18.839 --> 00:13:27.600 uh 00:13:27.600 --> 00:13:31.440 and we can also use this for video 00:13:31.440 --> 00:13:33.360 tutorials for example 00:13:33.360 --> 00:13:37.200 this is a very good tutorial on on magic 00:13:37.200 --> 00:13:40.880 if we execute this 00:13:40.880 --> 00:13:42.560 then these functions are going to be 00:13:42.560 --> 00:13:44.800 defined and these functions open 00:13:44.800 --> 00:13:48.399 this tutorial on magic 00:13:48.399 --> 00:13:50.079 these are some of the positions in the 00:13:50.079 --> 00:13:51.839 tutorial that I found especially 00:13:51.839 --> 00:13:53.920 especially relevant this is a very dense 00:13:53.920 --> 00:13:55.600 tutorial I had to take notes of 00:13:55.600 --> 00:13:56.480 everything 00:13:56.480 --> 00:13:59.040 and I had to watch everything things 00:13:59.040 --> 00:14:00.800 several times 00:14:00.800 --> 00:14:03.440 and for example this is a link to the 00:14:03.440 --> 00:14:06.480 position in the tutorial that explains 00:14:06.480 --> 00:14:09.600 uh how in space 00:14:09.600 --> 00:14:12.880 space max magic magic 00:14:12.880 --> 00:14:17.600 interprets space gs magic status 00:14:17.600 --> 00:14:20.480 let's see beginners space gs to initiate 00:14:20.480 --> 00:14:22.320 magic's git status 00:14:22.320 --> 00:14:25.600 uh you can also do that's it 00:14:25.600 --> 00:14:28.800 and here are some examples that I 00:14:28.800 --> 00:14:32.160 took from somewhere else the video 00:14:32.160 --> 00:14:34.240 tutorials from 00:14:34.240 --> 00:14:43.519 ralph koenig about org mode 00:14:43.519 --> 00:14:45.519 now let me show how the functions that 00:14:45.519 --> 00:14:47.440 define this router hyperlinks are 00:14:47.440 --> 00:14:48.720 implemented 00:14:48.720 --> 00:14:51.199 the standard ways in max to define 00:14:51.199 --> 00:14:52.480 functions that define 00:14:52.480 --> 00:14:55.760 other functions would be with macros uh 00:14:55.760 --> 00:14:58.320 let's see an example this is a standard 00:14:58.320 --> 00:14:59.040 function that 00:14:59.040 --> 00:15:01.540 defines new functions 00:15:01.540 --> 00:15:02.959 [Music] 00:15:02.959 --> 00:15:06.959 and if we execute it one of the res 00:15:06.959 --> 00:15:09.040 its result is the last function that it 00:15:09.040 --> 00:15:10.160 defined which is 00:15:10.160 --> 00:15:13.920 e-grief which is here 00:15:13.920 --> 00:15:16.959 it's implemented as a macro we can 00:15:16.959 --> 00:15:19.360 look at the result of macro expand which 00:15:19.360 --> 00:15:20.880 is going to show 00:15:20.880 --> 00:15:23.519 show us the result of of this of the 00:15:23.519 --> 00:15:25.519 expansion of this 00:15:25.519 --> 00:15:28.000 instead of expanding and executing it 00:15:28.000 --> 00:15:28.959 just 00:15:28.959 --> 00:15:33.199 expands and shows us the result 00:15:33.199 --> 00:15:36.000 here the result is a bit messy is too 00:15:36.000 --> 00:15:37.600 big for 00:15:37.600 --> 00:15:40.959 humans to understand but we can run 00:15:40.959 --> 00:15:44.240 this or this text here that takes that 00:15:44.240 --> 00:15:47.519 that result and pretty prints it 00:15:47.519 --> 00:15:50.959 so this is the pretty printed version of 00:15:50.959 --> 00:15:54.000 uh this macro here 00:15:54.000 --> 00:15:57.600 we can see that it defines 00:15:57.600 --> 00:16:01.120 several functions here 00:16:01.120 --> 00:16:06.399 for example this one 00:16:06.399 --> 00:16:09.360 and this just as a curiosity is a link 00:16:09.360 --> 00:16:09.920 to 00:16:09.920 --> 00:16:13.839 the definition of cld struct 00:16:13.839 --> 00:16:16.880 and note that the code is huge uh 00:16:16.880 --> 00:16:19.199 well it's very well commented but it's 00:16:19.199 --> 00:16:20.079 it has 00:16:20.079 --> 00:16:23.759 lots of special cases it has uh 00:16:23.759 --> 00:16:26.959 it supports lots of constructions and so 00:16:26.959 --> 00:16:27.920 it's huge and 00:16:27.920 --> 00:16:30.639 it's very difficult to understand I mean 00:16:30.639 --> 00:16:33.360 I found it very difficult to understand 00:16:33.360 --> 00:16:35.040 and here's a link to document the 00:16:35.040 --> 00:16:37.759 documentation of cld struct 00:16:37.759 --> 00:16:42.000 here in the manual for 00:16:42.000 --> 00:16:46.000 cl which is a kind of support for some 00:16:46.000 --> 00:16:50.480 features of common lisp in the max 00:16:50.480 --> 00:16:53.600 so let's compare this standard way of 00:16:53.600 --> 00:16:54.639 defining 00:16:54.639 --> 00:16:56.560 functions that define new functions 00:16:56.560 --> 00:16:58.320 which is with macros 00:16:58.320 --> 00:17:01.680 with this I'm going to use a slogan 00:17:01.680 --> 00:17:04.160 repeatedly the slogan is I am a very bad 00:17:04.160 --> 00:17:06.319 programmer 00:17:06.319 --> 00:17:08.880 I'm a very bad programmer so when I was 00:17:08.880 --> 00:17:10.640 trying to create functions that would 00:17:10.640 --> 00:17:12.240 define new functions 00:17:12.240 --> 00:17:14.480 I found it easier to generally generate 00:17:14.480 --> 00:17:16.400 this code as text 00:17:16.400 --> 00:17:20.559 and then run read and eval in it 00:17:20.559 --> 00:17:23.199 the code cd that we saw in the previous 00:17:23.199 --> 00:17:24.640 section 00:17:24.640 --> 00:17:28.079 we can see the the code that it produces 00:17:28.079 --> 00:17:29.039 by 00:17:29.039 --> 00:17:31.039 making a copy of this line and 00:17:31.039 --> 00:17:33.280 prepending this string here to the name 00:17:33.280 --> 00:17:34.480 of the function 00:17:34.480 --> 00:17:36.720 so instead of running code cd we run 00:17:36.720 --> 00:17:38.400 find code cd 00:17:38.400 --> 00:17:41.280 and it creates a new temporary buffer 00:17:41.280 --> 00:17:44.400 with the code that 00:17:44.400 --> 00:17:47.760 code cd would execute 00:17:47.760 --> 00:17:50.320 so it's a series of the fonts and a few 00:17:50.320 --> 00:17:54.080 set cues and so on 00:17:54.080 --> 00:17:57.600 and this thing is implemented mostly as 00:17:57.600 --> 00:17:59.120 a template 00:17:59.120 --> 00:18:02.160 uh the lola the 00:18:02.160 --> 00:18:04.160 there's an inner function called ee 00:18:04.160 --> 00:18:06.240 called cd base that receives just 00:18:06.240 --> 00:18:08.799 these two arguments and it says 00:18:08.799 --> 00:18:10.640 essentially just runs the function 00:18:10.640 --> 00:18:14.320 e template zero on the string here and 00:18:14.320 --> 00:18:16.480 the things between curly braces are 00:18:16.480 --> 00:18:18.559 substituted by the values 00:18:18.559 --> 00:18:23.600 of these arguments here 00:18:23.600 --> 00:18:25.919 there's one part of the tutorial here 00:18:25.919 --> 00:18:28.480 that explains all these things 00:18:28.480 --> 00:18:31.039 uh except for the rationale for some 00:18:31.039 --> 00:18:32.559 design decisions 00:18:32.559 --> 00:18:35.360 and those design decisions are one of 00:18:35.360 --> 00:18:37.280 the many motivations for this talk but 00:18:37.280 --> 00:18:37.760 um 00:18:37.760 --> 00:18:39.679 we are I'm only going to explain these 00:18:39.679 --> 00:18:42.640 things in detail at the end 00:18:42.640 --> 00:18:48.480 which is kind of so on 00:18:48.480 --> 00:18:50.320 in the beginning I said that the three 00:18:50.320 --> 00:18:51.600 main keys of av 00:18:51.600 --> 00:18:56.000 are meta e meta k and meta j 00:18:56.000 --> 00:19:00.080 let's see now what met what meta j does 00:19:00.080 --> 00:19:01.520 uh but I need to start with some 00:19:01.520 --> 00:19:04.640 motivation uh the motivation is that we 00:19:04.640 --> 00:19:06.559 can define commands with very short 00:19:06.559 --> 00:19:08.240 names and actually I became kind of 00:19:08.240 --> 00:19:10.160 addicted to that 00:19:10.160 --> 00:19:13.200 this is an example of the fund that 00:19:13.200 --> 00:19:15.600 defines a comment with a very short name 00:19:15.600 --> 00:19:18.000 its name is just one letter e 00:19:18.000 --> 00:19:21.200 and I can invoke you invoke it with meta 00:19:21.200 --> 00:19:21.520 x 00:19:21.520 --> 00:19:24.720 e if I type meta xp 00:19:24.720 --> 00:19:27.360 now it opens a latex file that I'm 00:19:27.360 --> 00:19:31.130 working on 00:19:31.130 --> 00:19:32.559 [Music] 00:19:32.559 --> 00:19:35.200 and I create most of my latex files 00:19:35.200 --> 00:19:37.120 using 00:19:37.120 --> 00:19:39.200 template template-based functions like 00:19:39.200 --> 00:19:40.559 the the 00:19:40.559 --> 00:19:43.760 implementation of code cd above and 00:19:43.760 --> 00:19:46.559 this template-based functions create 00:19:46.559 --> 00:19:49.280 files with extension.tag 00:19:49.280 --> 00:19:51.280 that start with a series of the fonts 00:19:51.280 --> 00:19:53.919 and comments for example 00:19:53.919 --> 00:19:56.240 let's look at this example here if I 00:19:56.240 --> 00:19:58.320 execute find the attack links with this 00:19:58.320 --> 00:19:59.440 argument 00:19:59.440 --> 00:20:02.159 uh it's going it's going to do several 00:20:02.159 --> 00:20:03.440 things for creating a 00:20:03.440 --> 00:20:06.880 file called slash tmp slash forward 00:20:06.880 --> 00:20:08.320 attack 00:20:08.320 --> 00:20:11.200 and the header of that file is going to 00:20:11.200 --> 00:20:12.400 be this 00:20:12.400 --> 00:20:16.080 which starts with two and with three 00:20:16.080 --> 00:20:19.280 the fonts with functions with very short 00:20:19.280 --> 00:20:21.919 names and comments 00:20:21.919 --> 00:20:27.520 let's compare with the situation here 00:20:27.520 --> 00:20:32.799 in my file 2020 favorite conventions.tag 00:20:32.799 --> 00:20:34.640 I have this header here in which I 00:20:34.640 --> 00:20:37.039 define six functions with very short 00:20:37.039 --> 00:20:39.360 names 00:20:39.360 --> 00:20:41.919 and in this case here that is even 00:20:41.919 --> 00:20:44.799 explained in the tutorial 00:20:44.799 --> 00:20:48.000 this we have mnemonics for 00:20:48.000 --> 00:20:51.520 these short names here and c is compile 00:20:51.520 --> 00:20:54.799 d is display I mean display the pdf 00:20:54.799 --> 00:20:57.760 and e is added in the sense of make a 00:20:57.760 --> 00:20:58.159 max 00:20:58.159 --> 00:21:02.320 visit that file 00:21:02.320 --> 00:21:05.039 okay now I can explain what is meta j 00:21:05.039 --> 00:21:06.480 itself 00:21:06.480 --> 00:21:08.880 uh we just saw comments with very short 00:21:08.880 --> 00:21:09.600 names 00:21:09.600 --> 00:21:12.320 and the idea is behind meta j is that we 00:21:12.320 --> 00:21:14.840 can define comments with very short 00:21:14.840 --> 00:21:16.480 numbers 00:21:16.480 --> 00:21:19.679 let me explain this uh 00:21:19.679 --> 00:21:22.559 the short explanation for what meta j 00:21:22.559 --> 00:21:23.039 does 00:21:23.039 --> 00:21:25.360 is that it jumps to set certain 00:21:25.360 --> 00:21:27.039 predefined places 00:21:27.039 --> 00:21:29.760 in particular a meta j without a numeric 00:21:29.760 --> 00:21:30.799 argument 00:21:30.799 --> 00:21:33.280 takes us to a buffer with with the basic 00:21:33.280 --> 00:21:34.080 help 00:21:34.080 --> 00:21:37.679 and a list of the current age of targets 00:21:37.679 --> 00:21:39.760 and this is something that is a bit 00:21:39.760 --> 00:21:41.520 simpler to understand 00:21:41.520 --> 00:21:44.559 if we type meta five meta j 00:21:44.559 --> 00:21:47.919 then meta j runs this sex 00:21:47.919 --> 00:21:51.120 here that is associated to 00:21:51.120 --> 00:21:55.440 the argument five I say that the target 00:21:55.440 --> 00:21:59.039 for the argument five is this one 00:21:59.039 --> 00:22:01.520 and if the argument is true then the 00:22:01.520 --> 00:22:03.760 target associated to the to the true 00:22:03.760 --> 00:22:07.039 is this sex here that opens 00:22:07.039 --> 00:22:09.600 well this one opens the main tutorial vv 00:22:09.600 --> 00:22:10.240 and this one 00:22:10.240 --> 00:22:13.679 opens another tutorial 00:22:13.679 --> 00:22:15.679 this is a link to one of the tutorials 00:22:15.679 --> 00:22:20.480 of ev to the part that explains meta j 00:22:20.480 --> 00:22:22.559 I've copied the the main part of the 00:22:22.559 --> 00:22:24.559 text here 00:22:24.559 --> 00:22:28.159 the header the header that meta j shows 00:22:28.159 --> 00:22:31.360 let me show it very quickly here 00:22:31.360 --> 00:22:33.919 here is their header and here is their 00:22:33.919 --> 00:22:36.320 rest 00:22:36.320 --> 00:22:39.039 the header is very beginner friendly and 00:22:39.039 --> 00:22:40.000 if you're a beginner 00:22:40.000 --> 00:22:42.159 who only knows how to use meta e to 00:22:42.159 --> 00:22:44.559 execute and met 00:22:44.559 --> 00:22:46.799 this should be okay and meta k to go 00:22:46.799 --> 00:22:48.240 back 00:22:48.240 --> 00:22:52.320 then you can and should use that header 00:22:52.320 --> 00:22:56.720 I mean this header here 00:22:56.720 --> 00:22:59.360 as your main starting point and every 00:22:59.360 --> 00:23:00.799 time that you feel lost 00:23:00.799 --> 00:23:03.679 you can type meta j and to go back to 00:23:03.679 --> 00:23:04.799 that header 00:23:04.799 --> 00:23:07.039 and you can use its links to navigate to 00:23:07.039 --> 00:23:08.000 the documentation 00:23:08.000 --> 00:23:11.360 for max nav let me explain that 00:23:11.360 --> 00:23:14.799 uh this header here has several ellis 00:23:14.799 --> 00:23:15.679 hyperlinks 00:23:15.679 --> 00:23:19.039 one here one here 00:23:19.039 --> 00:23:22.400 one here one here and so on 00:23:22.400 --> 00:23:25.760 uh these ones are links to the 00:23:25.760 --> 00:23:29.280 to the intros which are the tutorials 00:23:29.280 --> 00:23:30.880 find if you quick enter in the main 00:23:30.880 --> 00:23:32.480 tutorial and find ev 00:23:32.480 --> 00:23:35.760 keys intro is a kind of tutorial that is 00:23:35.760 --> 00:23:36.720 an index of 00:23:36.720 --> 00:23:40.000 the main keys 00:23:40.000 --> 00:23:42.559 and after that we have an explanation of 00:23:42.559 --> 00:23:43.279 what some 00:23:43.279 --> 00:23:46.799 numeric prefixes do so if we type 00:23:46.799 --> 00:23:50.240 met one method j the effect of that is 00:23:50.240 --> 00:23:53.200 exactly the same as executing this and 00:23:53.200 --> 00:23:54.640 we can execute this 00:23:54.640 --> 00:24:00.159 with meta e also 00:24:00.159 --> 00:24:03.679 meta tube meta j runs this sex and 00:24:03.679 --> 00:24:06.960 I can also execute it with meta e 00:24:06.960 --> 00:24:10.559 here it is it's this uh 00:24:10.559 --> 00:24:14.240 intro this uh 00:24:14.240 --> 00:24:18.400 sandbox tutorial and 00:24:18.400 --> 00:24:24.640 here is another sandbox tutorial 00:24:24.640 --> 00:24:27.039 let me go back and then the 00:24:27.039 --> 00:24:28.720 documentation says that 00:24:28.720 --> 00:24:30.880 that header the header that is beginner 00:24:30.880 --> 00:24:31.760 friendly 00:24:31.760 --> 00:24:33.679 is followed by a section that is very 00:24:33.679 --> 00:24:35.520 beginner unfriendly 00:24:35.520 --> 00:24:37.600 that contains a series of the fonts like 00:24:37.600 --> 00:24:40.400 these ones 00:24:40.400 --> 00:24:43.440 here the last line of the header is this 00:24:43.440 --> 00:24:44.640 comment here 00:24:44.640 --> 00:24:46.720 and then we have several defense like 00:24:46.720 --> 00:24:48.559 this 00:24:48.559 --> 00:24:51.440 let me explain how these things work 00:24:51.440 --> 00:24:53.840 technically what happens when we type 00:24:53.840 --> 00:24:57.360 meta j without any arguments is that it 00:24:57.360 --> 00:24:57.840 runs 00:24:57.840 --> 00:25:00.960 eu jump with argument neil and then 00:25:00.960 --> 00:25:04.640 this runs 5 e jumps 00:25:04.640 --> 00:25:06.480 when I run meta j with a numeric 00:25:06.480 --> 00:25:08.000 argument for example 00:25:08.000 --> 00:25:11.120 with argument 5 it runs a jump 00:25:11.120 --> 00:25:14.400 5 and e jump five 00:25:14.400 --> 00:25:17.679 uh concatenates this five one 00:25:17.679 --> 00:25:20.400 to make a name of a function this 00:25:20.400 --> 00:25:21.679 function here 00:25:21.679 --> 00:25:24.320 and it executes this function e jump 00:25:24.320 --> 00:25:24.720 five 00:25:24.720 --> 00:25:28.880 you jump uh dash five 00:25:28.880 --> 00:25:31.919 and eu jump dash five is 00:25:31.919 --> 00:25:35.520 executes find ev equity intro 00:25:35.520 --> 00:25:39.360 if I execute just meta j 00:25:39.360 --> 00:25:41.440 the section that shows the current age 00:25:41.440 --> 00:25:43.919 on targets 00:25:43.919 --> 00:25:47.120 has a line for e job five this is that 00:25:47.120 --> 00:25:48.159 is exactly the 00:25:48.159 --> 00:25:52.400 thing that I was explaining before 00:25:52.400 --> 00:25:54.840 so we can use meta j to navigate the 00:25:54.840 --> 00:25:59.520 tutorials and we can copy the links 00:25:59.520 --> 00:26:03.440 sorry we can copy links to the to 00:26:03.440 --> 00:26:07.919 tutorials to our notes 00:26:07.919 --> 00:26:11.840 oh sorry this has some typos 00:26:11.840 --> 00:26:14.880 for example if I execute this 00:26:14.880 --> 00:26:18.080 I go to a section of this tutorial here 00:26:18.080 --> 00:26:20.640 that explains the main keys of ev 00:26:20.640 --> 00:26:24.320 and these things are hyperlinks I can 00:26:24.320 --> 00:26:26.240 mark a hyperlink like this it is just 00:26:26.240 --> 00:26:27.440 plain text and I 00:26:27.440 --> 00:26:30.559 can copy it to my notes and the idea is 00:26:30.559 --> 00:26:31.760 that every time 00:26:31.760 --> 00:26:33.520 every time that I find something that is 00:26:33.520 --> 00:26:35.520 interesting I can create a hyperlink to 00:26:35.520 --> 00:26:36.240 it 00:26:36.240 --> 00:26:38.720 and I can put these links in my notes so 00:26:38.720 --> 00:26:40.799 I can navigate back 00:26:40.799 --> 00:26:42.960 to all the interesting positions very 00:26:42.960 --> 00:26:48.799 quickly 00:26:48.799 --> 00:26:51.760 okay next feature if we type meta 00:26:51.760 --> 00:26:54.080 uppercase j 00:26:54.080 --> 00:26:57.600 uh then 00:26:57.600 --> 00:27:00.080 this this is a function that transforms 00:27:00.080 --> 00:27:03.679 the current line in a certain way 00:27:03.679 --> 00:27:06.080 let me give an example let me isolate 00:27:06.080 --> 00:27:07.360 this and let me create 00:27:07.360 --> 00:27:09.919 duplicate this line to to make clear 00:27:09.919 --> 00:27:11.039 what happens 00:27:11.039 --> 00:27:14.240 if I type meta uppercase j here 00:27:14.240 --> 00:27:16.880 this line here becomes the fund for a 00:27:16.880 --> 00:27:17.440 jump 00:27:17.440 --> 00:27:21.200 6 and the target of this e-jump 00:27:21.200 --> 00:27:24.799 is exactly this sex here 00:27:24.799 --> 00:27:28.559 let me undo this mess 00:27:28.559 --> 00:27:31.360 and if the first word in the line is not 00:27:31.360 --> 00:27:32.840 a number for example 00:27:32.840 --> 00:27:36.240 here let me do the same thing 00:27:36.240 --> 00:27:39.039 duplicate the line and type meta 00:27:39.039 --> 00:27:41.200 uppercase j 00:27:41.200 --> 00:27:44.240 then mat uppercase j converts that to a 00:27:44.240 --> 00:27:45.600 defund that defines 00:27:45.600 --> 00:27:49.440 a function with a very short name 00:27:49.440 --> 00:27:52.720 and this function with a very short name 00:27:52.720 --> 00:27:56.720 opens this file here in the directory 00:27:56.720 --> 00:27:59.360 with the copy of the the git repository 00:27:59.360 --> 00:28:01.360 for org mode 00:28:01.360 --> 00:28:05.360 let me undo the mass again 00:28:05.360 --> 00:28:09.120 oops 00:28:09.120 --> 00:28:14.640 that's it 00:28:14.640 --> 00:28:17.760 meta uppercase j is a 00:28:17.760 --> 00:28:21.279 particular case of of something that 00:28:21.279 --> 00:28:24.559 I use a lot in eevee I have if he has 00:28:24.559 --> 00:28:25.279 lots of 00:28:25.279 --> 00:28:28.799 comments that sorry key sequences 00:28:28.799 --> 00:28:31.780 that are like meta uppercase letter and 00:28:31.780 --> 00:28:33.200 [Music] 00:28:33.200 --> 00:28:35.279 almost all of them operate on the 00:28:35.279 --> 00:28:37.279 current line and transform the current 00:28:37.279 --> 00:28:38.880 line in certain way 00:28:38.880 --> 00:28:42.000 for example this is a file name 00:28:42.000 --> 00:28:45.360 and if I type meta uppercase f here 00:28:45.360 --> 00:28:48.640 it becomes a link to that file this is 00:28:48.640 --> 00:28:50.000 the name of a month page 00:28:50.000 --> 00:28:53.600 and if I type meta uppercase m here 00:28:53.600 --> 00:28:55.760 it converts that to the link to a month 00:28:55.760 --> 00:28:58.080 page and this is a shell command 00:28:58.080 --> 00:29:01.679 and if I type meta uppercase s here 00:29:01.679 --> 00:29:04.960 it converts that to a link to a 00:29:04.960 --> 00:29:08.720 to find fan shell 00:29:08.720 --> 00:29:11.919 and until a few years ago these 00:29:11.919 --> 00:29:12.960 functions 00:29:12.960 --> 00:29:16.159 with matter uppercase letter were half 00:29:16.159 --> 00:29:18.080 of my main ways of creating sex 00:29:18.080 --> 00:29:18.880 hyperlinks 00:29:18.880 --> 00:29:21.039 with few key strokes in the beginning of 00:29:21.039 --> 00:29:22.399 course I had to create my 00:29:22.399 --> 00:29:25.600 sex pipelines by typing each character 00:29:25.600 --> 00:29:28.640 but uh after some time and decided that 00:29:28.640 --> 00:29:31.520 I needed something more efficient 00:29:31.520 --> 00:29:34.559 so this is end of part one of the two of 00:29:34.559 --> 00:29:34.960 the 00:29:34.960 --> 00:29:38.480 presentation 00:29:38.480 --> 00:29:40.640 so this is part two of the presentation 00:29:40.640 --> 00:29:41.760 and the main theme 00:29:41.760 --> 00:29:44.320 here is the standard describe key 00:29:44.320 --> 00:29:46.320 function that comes with the max 00:29:46.320 --> 00:29:49.200 and my variant of it the thing is that 00:29:49.200 --> 00:29:50.960 the standard described key in max 00:29:50.960 --> 00:29:53.120 is user friendly but it is hacker 00:29:53.120 --> 00:29:55.600 unfriendly well I felt so 00:29:55.600 --> 00:29:58.559 and when I tried to complement it by by 00:29:58.559 --> 00:30:00.799 writing a hacker friendly version of it 00:30:00.799 --> 00:30:03.120 that produced the sex hyperlinks that I 00:30:03.120 --> 00:30:03.919 needed 00:30:03.919 --> 00:30:05.440 I got something that I found really 00:30:05.440 --> 00:30:07.039 lovely and 00:30:07.039 --> 00:30:09.679 several of the main designs design 00:30:09.679 --> 00:30:12.480 decisions of eev can be seen there 00:30:12.480 --> 00:30:14.320 but when I showed my variants to other 00:30:14.320 --> 00:30:15.520 people they hated it 00:30:15.520 --> 00:30:17.760 they felt that it was totally against 00:30:17.760 --> 00:30:19.360 their notions of 00:30:19.360 --> 00:30:23.440 user friendliness 00:30:23.440 --> 00:30:25.760 okay so let's see the standard describe 00:30:25.760 --> 00:30:26.799 key if I run 00:30:26.799 --> 00:30:30.159 this hyperlink here I get 00:30:30.159 --> 00:30:32.399 this the result of running the scribe 00:30:32.399 --> 00:30:34.399 key on the key down 00:30:34.399 --> 00:30:36.399 and this is a big buffer with some 00:30:36.399 --> 00:30:38.080 things in italics 00:30:38.080 --> 00:30:41.360 and some hyperlinks here these 00:30:41.360 --> 00:30:43.120 hyperlinks are standard in the sense 00:30:43.120 --> 00:30:43.679 that 00:30:43.679 --> 00:30:46.240 the targets are not visible and they are 00:30:46.240 --> 00:30:47.760 implemented using 00:30:47.760 --> 00:30:50.799 buttons in a max lisp this section of 00:30:50.799 --> 00:30:51.200 the 00:30:51.200 --> 00:30:53.919 mx list manual describes how buttons 00:30:53.919 --> 00:30:56.799 work 00:30:56.799 --> 00:31:00.640 and the the source code is 00:31:00.640 --> 00:31:03.440 quite difficult I mean when I was 00:31:03.440 --> 00:31:04.240 starting to 00:31:04.240 --> 00:31:06.559 to try to decipher this when I was a 00:31:06.559 --> 00:31:07.600 beginner 00:31:07.600 --> 00:31:11.200 using max 19.34 I felt that this 00:31:11.200 --> 00:31:12.320 described key was 00:31:12.320 --> 00:31:15.519 very difficult to understand uh 00:31:15.519 --> 00:31:20.080 and I felt that the the designers the 00:31:20.080 --> 00:31:22.640 the people who wrote it were sacrificing 00:31:22.640 --> 00:31:23.679 too much of the 00:31:23.679 --> 00:31:26.159 hacker friendliness that I was expecting 00:31:26.159 --> 00:31:31.279 from it to make it beginner friendly 00:31:31.279 --> 00:31:33.600 let me explain what are the the problems 00:31:33.600 --> 00:31:34.799 with the standard 00:31:34.799 --> 00:31:36.559 the describe key if we think that 00:31:36.559 --> 00:31:38.640 hyperlinks are things like this 00:31:38.640 --> 00:31:41.600 with the target and the text then in the 00:31:41.600 --> 00:31:43.600 button hyperlinks of describe key 00:31:43.600 --> 00:31:47.120 this three bad things happen first 00:31:47.120 --> 00:31:49.120 it is hard to extract the target from 00:31:49.120 --> 00:31:51.200 the hyperlink second it is hard to 00:31:51.200 --> 00:31:52.000 recreate 00:31:52.000 --> 00:31:54.480 a list of code that would go to that 00:31:54.480 --> 00:31:55.440 target 00:31:55.440 --> 00:31:57.519 and third it is hard to copy the full 00:31:57.519 --> 00:31:59.840 hyperlink including the targets to other 00:31:59.840 --> 00:32:00.640 buffers 00:32:00.640 --> 00:32:04.960 I only knew how to copy the text 00:32:04.960 --> 00:32:07.279 when I was trying to decipher what 00:32:07.279 --> 00:32:09.039 described key was doing 00:32:09.039 --> 00:32:11.679 I created lots of hyperlinks like this 00:32:11.679 --> 00:32:12.159 to 00:32:12.159 --> 00:32:14.960 inspect the text properties and things 00:32:14.960 --> 00:32:16.159 like that 00:32:16.159 --> 00:32:18.480 for example in the description of the 00:32:18.480 --> 00:32:20.000 key down 00:32:20.000 --> 00:32:23.600 here we have a button that points to 00:32:23.600 --> 00:32:26.799 simple dotel 00:32:26.799 --> 00:32:29.679 the text of that button is simple.l this 00:32:29.679 --> 00:32:31.600 hyperlinks goes to the 00:32:31.600 --> 00:32:34.320 to the middle of this button hyperlink 00:32:34.320 --> 00:32:35.519 here 00:32:35.519 --> 00:32:39.120 uh this hyperlink here 00:32:39.120 --> 00:32:41.919 goes to the middle of the button of this 00:32:41.919 --> 00:32:43.279 button hyperlink 00:32:43.279 --> 00:32:46.240 and then inspects its text properties 00:32:46.240 --> 00:32:47.679 and then goes to 00:32:47.679 --> 00:32:51.679 this section here of the description 00:32:51.679 --> 00:32:53.679 so this is a high level description of 00:32:53.679 --> 00:32:56.159 the text properties 00:32:56.159 --> 00:32:58.000 I mean the text properties that make it 00:32:58.000 --> 00:33:00.000 a button and this is a 00:33:00.000 --> 00:33:02.480 lower level description of the these 00:33:02.480 --> 00:33:04.320 text properties 00:33:04.320 --> 00:33:08.000 and the button that points to 00:33:08.000 --> 00:33:11.440 forward line sorry the the button that 00:33:11.440 --> 00:33:11.919 whose 00:33:11.919 --> 00:33:14.399 text is forward line this one is 00:33:14.399 --> 00:33:16.480 slightly different 00:33:16.480 --> 00:33:19.039 this hyperlink here goes to the middle 00:33:19.039 --> 00:33:21.200 of that button 00:33:21.200 --> 00:33:24.559 and this hyperlink goes to the mid to 00:33:24.559 --> 00:33:25.760 the middle of that button 00:33:25.760 --> 00:33:28.559 inspects its text properties and go to 00:33:28.559 --> 00:33:29.360 the section 00:33:29.360 --> 00:33:32.559 of this button of this help 00:33:32.559 --> 00:33:35.760 uh buffer here that describe the the 00:33:35.760 --> 00:33:36.399 button 00:33:36.399 --> 00:33:39.120 and the lower level view of the text 00:33:39.120 --> 00:33:41.679 properties 00:33:41.679 --> 00:33:45.519 so I started to with things like this 00:33:45.519 --> 00:33:47.519 to understand what these buttons were 00:33:47.519 --> 00:33:50.159 doing and I was able to figure out how 00:33:50.159 --> 00:33:50.960 these things are 00:33:50.960 --> 00:33:53.120 implemented and describe key and then 00:33:53.120 --> 00:33:55.519 similar help functions in max 00:33:55.519 --> 00:33:57.760 and I discovered that one of the main 00:33:57.760 --> 00:34:00.000 lower level functions that a max used 00:34:00.000 --> 00:34:01.360 for this 00:34:01.360 --> 00:34:04.080 is a function called find function no 00:34:04.080 --> 00:34:05.279 select 00:34:05.279 --> 00:34:08.240 if I run find function no select on next 00:34:08.240 --> 00:34:09.929 line 00:34:09.929 --> 00:34:11.200 [Music] 00:34:11.200 --> 00:34:14.240 it returns a pair 00:34:14.240 --> 00:34:18.079 a cons made of a buffer and a position 00:34:18.079 --> 00:34:20.560 so I created functions that would that 00:34:20.560 --> 00:34:21.679 would 00:34:21.679 --> 00:34:24.320 uh follow this that would open that 00:34:24.320 --> 00:34:25.119 buffer 00:34:25.119 --> 00:34:28.320 in that position and then this is a 00:34:28.320 --> 00:34:29.679 postback list 00:34:29.679 --> 00:34:31.679 so we could go to these positions and 00:34:31.679 --> 00:34:33.919 then search for this string and another 00:34:33.919 --> 00:34:36.000 string and another string and so on 00:34:36.000 --> 00:34:40.320 so this goes to the definition of find a 00:34:40.320 --> 00:34:41.040 function 00:34:41.040 --> 00:34:44.159 and then to a to a string 00:34:44.159 --> 00:34:47.919 after it and I use these things to 00:34:47.919 --> 00:34:49.040 implement my own 00:34:49.040 --> 00:34:51.839 functions that pointed to the same the 00:34:51.839 --> 00:34:52.960 same targets 00:34:52.960 --> 00:34:55.440 as the button hyperlinks and describe 00:34:55.440 --> 00:35:00.240 key 00:35:00.240 --> 00:35:03.200 again let me show the comparison this is 00:35:03.200 --> 00:35:05.599 the standard describe key 00:35:05.599 --> 00:35:10.480 here and this is my variant 00:35:10.480 --> 00:35:13.839 uh it creates a buffer with links 00:35:13.839 --> 00:35:17.680 with the list hyperlinks about this key 00:35:17.680 --> 00:35:20.960 we get this so each one of these 00:35:20.960 --> 00:35:22.960 functions is either a blank line 00:35:22.960 --> 00:35:28.720 or a or an ellipse hyperlink 00:35:28.720 --> 00:35:31.760 here is a slight variant of the of the 00:35:31.760 --> 00:35:32.880 function 00:35:32.880 --> 00:35:35.920 find e key links above in this variant 00:35:35.920 --> 00:35:38.079 the argument is a string that has to be 00:35:38.079 --> 00:35:39.280 processed by 00:35:39.280 --> 00:35:42.400 read cbd macro to convert it to the 00:35:42.400 --> 00:35:45.280 lower level format 00:35:45.280 --> 00:35:48.160 and note that these functions here that 00:35:48.160 --> 00:35:49.040 I wrote 00:35:49.040 --> 00:35:51.440 they display temporary buffers with no 00:35:51.440 --> 00:35:53.599 help at all 00:35:53.599 --> 00:35:57.359 uh to be honest there's a link to a 00:35:57.359 --> 00:35:58.560 tutorial here but 00:35:58.560 --> 00:36:01.680 this is a recent edition so let's ignore 00:36:01.680 --> 00:36:03.200 this 00:36:03.200 --> 00:36:06.640 uh they they display temporary buffers 00:36:06.640 --> 00:36:08.320 with no help at all just lots of 00:36:08.320 --> 00:36:09.520 hyperlinks 00:36:09.520 --> 00:36:11.599 and these hyperlinks can be they are 00:36:11.599 --> 00:36:13.359 very hacker friendly in the sense that 00:36:13.359 --> 00:36:15.040 they can be followed with 00:36:15.040 --> 00:36:17.520 metae they can be copied to other 00:36:17.520 --> 00:36:19.920 buffers because they are plain text 00:36:19.920 --> 00:36:23.680 because they are just sex 00:36:23.680 --> 00:36:26.240 and they can be inspected in the sense 00:36:26.240 --> 00:36:28.000 that 00:36:28.000 --> 00:36:32.400 for example here 00:36:32.400 --> 00:36:34.079 we have a hyperlink to a function that 00:36:34.079 --> 00:36:35.520 we 00:36:35.520 --> 00:36:37.599 it may be difficult to figure out what 00:36:37.599 --> 00:36:39.200 this function does 00:36:39.200 --> 00:36:42.320 but we can go to that position and then 00:36:42.320 --> 00:36:45.839 type ctrl h f to see the descript 00:36:45.839 --> 00:36:48.240 description of this function 00:36:48.240 --> 00:36:52.400 and here is a hyperlink to 00:36:52.400 --> 00:36:53.890 the does that 00:36:53.890 --> 00:36:56.000 [Music] 00:36:56.000 --> 00:37:00.160 in my syntax say 00:37:00.160 --> 00:37:02.800 and this list of hyperlinks were 00:37:02.800 --> 00:37:04.480 generated by 00:37:04.480 --> 00:37:08.000 this code here that just just uh 00:37:08.000 --> 00:37:11.119 used a back quote to to generate 00:37:11.119 --> 00:37:14.640 lists of sex 00:37:14.640 --> 00:37:18.240 and I I felt that this function here 00:37:18.240 --> 00:37:21.040 uh that just generated this list was 00:37:21.040 --> 00:37:22.160 very easy to understand 00:37:22.160 --> 00:37:24.960 and to modify so this was hacker 00:37:24.960 --> 00:37:28.480 friendly in the way that I wanted 00:37:28.480 --> 00:37:31.599 and so I started using this 00:37:31.599 --> 00:37:34.079 and this idea of using buffers with sex 00:37:34.079 --> 00:37:36.800 fiber links and no help violated 00:37:36.800 --> 00:37:38.720 all the notions of user friendliness 00:37:38.720 --> 00:37:40.079 that I knew so I was 00:37:40.079 --> 00:37:42.000 exploring some something new at that 00:37:42.000 --> 00:37:46.160 time and this is the end of part two 00:37:46.160 --> 00:37:49.359 part three of this presentation is uh 00:37:49.359 --> 00:37:52.240 about the killer features of ev or why 00:37:52.240 --> 00:37:54.800 everybody should use av or at least have 00:37:54.800 --> 00:37:57.920 eev installed even if they think the tv 00:37:57.920 --> 00:37:59.280 is too weird 00:37:59.280 --> 00:38:01.440 so this is a very quick listing eevee 00:38:01.440 --> 00:38:03.440 has lease hyperlinks which are super 00:38:03.440 --> 00:38:04.240 nice 00:38:04.240 --> 00:38:06.560 it comes with lots of tutorials the main 00:38:06.560 --> 00:38:07.599 one here 00:38:07.599 --> 00:38:10.800 explains all the main features 00:38:10.800 --> 00:38:14.079 uh there's also a tutorial with that's 00:38:14.079 --> 00:38:15.040 an index of 00:38:15.040 --> 00:38:18.079 all the other tutorials here 00:38:18.079 --> 00:38:21.680 many many many tutorials uh if we forget 00:38:21.680 --> 00:38:24.079 everything we can just type meta j 00:38:24.079 --> 00:38:27.280 and remember that this this part here is 00:38:27.280 --> 00:38:28.880 beginner friendly and the rest is 00:38:28.880 --> 00:38:30.839 beginner 00:38:30.839 --> 00:38:32.960 unfriendly 00:38:32.960 --> 00:38:38.320 there's a tutorial on max list here 00:38:38.320 --> 00:38:41.920 it mainly explains how to understand 00:38:41.920 --> 00:38:44.640 a lisp code which is much easier than 00:38:44.640 --> 00:38:46.320 it's much easier to understand the lisp 00:38:46.320 --> 00:38:47.040 code and 00:38:47.040 --> 00:38:48.800 then to understand how to program in a 00:38:48.800 --> 00:38:50.160 lisp and 00:38:50.160 --> 00:38:53.440 most people are only going to need this 00:38:53.440 --> 00:38:55.920 uh ev is very easy to install it's in 00:38:55.920 --> 00:38:58.240 helper so we just need to do 00:38:58.240 --> 00:39:00.560 this thing here and it's very 00:39:00.560 --> 00:39:03.520 non-invasive 00:39:03.520 --> 00:39:06.079 uh years ago several years ago it was a 00:39:06.079 --> 00:39:08.000 very invasive package but then I changed 00:39:08.000 --> 00:39:08.960 everything 00:39:08.960 --> 00:39:13.520 now uh if we toggle ev mode on and off 00:39:13.520 --> 00:39:16.640 what's going to happen is just that the 00:39:16.640 --> 00:39:20.000 evk map key map becomes activated or 00:39:20.000 --> 00:39:21.599 deactivated 00:39:21.599 --> 00:39:24.720 and when we install the evita 00:39:24.720 --> 00:39:28.320 I mean when we require the only things 00:39:28.320 --> 00:39:28.640 that 00:39:28.640 --> 00:39:32.640 happens globally distance here 00:39:32.640 --> 00:39:34.480 several functions and variables become 00:39:34.480 --> 00:39:36.240 defined all of them have 00:39:36.240 --> 00:39:40.079 standard prefixes except for one 00:39:40.079 --> 00:39:43.040 three characters are changed in the 00:39:43.040 --> 00:39:44.480 standard display table 00:39:44.480 --> 00:39:48.640 to make them appear as colored glyphs 00:39:48.640 --> 00:39:52.079 the red star and two and the open 00:39:52.079 --> 00:39:54.160 double angle brackets and the closed 00:39:54.160 --> 00:39:58.160 double angle brackets 00:39:58.160 --> 00:40:01.359 and two environment variables are set 00:40:01.359 --> 00:40:04.560 and this is a trivial technicality 00:40:04.560 --> 00:40:07.599 we just run a def advice 00:40:07.599 --> 00:40:10.160 around one function that that is used by 00:40:10.160 --> 00:40:10.800 man 00:40:10.800 --> 00:40:14.240 justice also 00:40:14.240 --> 00:40:16.720 eevee has a very high discoverability 00:40:16.720 --> 00:40:18.400 factor 00:40:18.400 --> 00:40:21.839 and there's a way to create a very easy 00:40:21.839 --> 00:40:25.200 way to create a hyperlink to here 00:40:25.200 --> 00:40:27.760 uh I do not have time to show this now 00:40:27.760 --> 00:40:29.760 but for example if I'm 00:40:29.760 --> 00:40:32.960 here in a tutorial and I think that that 00:40:32.960 --> 00:40:34.480 this 00:40:34.480 --> 00:40:36.240 section is something interesting and I 00:40:36.240 --> 00:40:39.520 want to create a hyperlink to it 00:40:39.520 --> 00:40:41.200 I just have to type a certain key 00:40:41.200 --> 00:40:43.040 sequence here 00:40:43.040 --> 00:40:46.800 and here I got a hyperlink that I can 00:40:46.800 --> 00:40:50.400 copy to my notes and this hyperlink goes 00:40:50.400 --> 00:40:52.260 to that section 00:40:52.260 --> 00:40:58.240 [Music] 00:40:58.240 --> 00:41:00.720 we have hyperlinks that point to 00:41:00.720 --> 00:41:02.319 specific positions in 00:41:02.319 --> 00:41:05.839 pdf documents and nvidia files here 00:41:05.839 --> 00:41:09.119 this one opens a pdf and displays it 00:41:09.119 --> 00:41:09.680 this one 00:41:09.680 --> 00:41:13.920 opens a pdf and converts it to text 00:41:13.920 --> 00:41:16.720 and this one opens the video in a 00:41:16.720 --> 00:41:18.400 certain position 00:41:18.400 --> 00:41:20.480 and we also have a way to control 00:41:20.480 --> 00:41:22.079 shell-like programs 00:41:22.079 --> 00:41:25.280 uh in my presentation of the last year I 00:41:25.280 --> 00:41:27.440 spent one third of the presentation 00:41:27.440 --> 00:41:29.520 explaining this and I think that I gave 00:41:29.520 --> 00:41:31.839 a very good demonstration there 00:41:31.839 --> 00:41:35.680 the demonstration is here 00:41:35.680 --> 00:41:38.800 we can go to the web page and go to 00:41:38.800 --> 00:41:41.839 this section of the web page 00:41:41.839 --> 00:41:47.680 and start by this point 00:41:47.680 --> 00:41:51.440 and here we have an explanation and so 00:41:51.440 --> 00:41:55.920 on whatever 00:41:55.920 --> 00:41:58.720 and I've already mentioned this before 00:41:58.720 --> 00:41:59.200 uh 00:41:59.200 --> 00:42:01.119 eevee comes with a very nice elise 00:42:01.119 --> 00:42:02.240 tutorial 00:42:02.240 --> 00:42:04.240 so that's it this is the end of part 00:42:04.240 --> 00:42:05.599 three 00:42:05.599 --> 00:42:07.359 so this is the last part of my 00:42:07.359 --> 00:42:09.839 presentation and it's about the title of 00:42:09.839 --> 00:42:10.160 the 00:42:10.160 --> 00:42:11.839 the presentation I called the 00:42:11.839 --> 00:42:13.599 presentation why 00:42:13.599 --> 00:42:16.560 most of the best features in eevee look 00:42:16.560 --> 00:42:16.960 like 00:42:16.960 --> 00:42:20.480 like five minute hacks uh I've already 00:42:20.480 --> 00:42:20.960 run off 00:42:20.960 --> 00:42:23.920 out of time so I have to to skip this 00:42:23.920 --> 00:42:24.800 first 00:42:24.800 --> 00:42:28.720 part here in which I describe how I 00:42:28.720 --> 00:42:31.280 was exposed to several different notions 00:42:31.280 --> 00:42:33.440 of user friendliness 00:42:33.440 --> 00:42:35.920 and how the one that really blew my mind 00:42:35.920 --> 00:42:37.119 was the one in 00:42:37.119 --> 00:42:41.680 in a certain uh fought environment 00:42:41.680 --> 00:42:44.160 uh and let me make the long long story 00:42:44.160 --> 00:42:46.560 very very short 00:42:46.560 --> 00:42:49.280 uh in all this process I switched from 00:42:49.280 --> 00:42:49.680 from 00:42:49.680 --> 00:42:52.079 the belief that the user was always 00:42:52.079 --> 00:42:52.960 someone else 00:42:52.960 --> 00:42:55.359 someone external and that that I always 00:42:55.359 --> 00:42:57.040 had to write my programs for 00:42:57.040 --> 00:43:00.079 this external user I switched 00:43:00.079 --> 00:43:02.240 from from that to the belief that I am 00:43:02.240 --> 00:43:03.200 the user 00:43:03.200 --> 00:43:05.839 and I can play with the interface that I 00:43:05.839 --> 00:43:07.040 want I can 00:43:07.040 --> 00:43:10.079 write programs which that 00:43:10.079 --> 00:43:12.079 that only I am going to understand I can 00:43:12.079 --> 00:43:14.240 experiment with hundreds of interfaces 00:43:14.240 --> 00:43:16.079 and then select the best ones 00:43:16.079 --> 00:43:18.720 and document them and then share them 00:43:18.720 --> 00:43:20.960 with other people 00:43:20.960 --> 00:43:23.520 who are also experimenting with 00:43:23.520 --> 00:43:24.720 interfaces in their 00:43:24.720 --> 00:43:28.880 own ways and so eevee has 00:43:28.880 --> 00:43:31.119 lots of things that are user-friendly in 00:43:31.119 --> 00:43:33.440 these unusual ways that I've explained 00:43:33.440 --> 00:43:34.880 before 00:43:34.880 --> 00:43:37.760 and uh and if we disconsider that this 00:43:37.760 --> 00:43:40.319 notion of user friendliness is valid 00:43:40.319 --> 00:43:44.079 then this implement these things that av 00:43:44.079 --> 00:43:45.119 implement they are 00:43:45.119 --> 00:43:47.280 user friendly and hacker friendly at the 00:43:47.280 --> 00:43:48.800 same time 00:43:48.800 --> 00:43:51.119 and let me show one example this is one 00:43:51.119 --> 00:43:51.920 this is 00:43:51.920 --> 00:43:54.640 one that really took me one only five 00:43:54.640 --> 00:43:56.640 minutes to implement 00:43:56.640 --> 00:43:59.599 uh at one point a few months ago I 00:43:59.599 --> 00:44:00.640 discovered 00:44:00.640 --> 00:44:04.240 that sasha chewer's weekly posts about 00:44:04.240 --> 00:44:05.599 the max news 00:44:05.599 --> 00:44:08.800 had uh were also being posted to a 00:44:08.800 --> 00:44:11.440 mailing list that is stored at 00:44:11.440 --> 00:44:14.800 lists.we know.org and it's called max 00:44:14.800 --> 00:44:16.319 dungeons 00:44:16.319 --> 00:44:19.280 uh and I just and I found a way to 00:44:19.280 --> 00:44:19.760 create 00:44:19.760 --> 00:44:25.440 the links to to the posts in both places 00:44:25.440 --> 00:44:28.400 but I had to use a template for that so 00:44:28.400 --> 00:44:30.640 what we are seeing here now 00:44:30.640 --> 00:44:32.560 is a template with the the default 00:44:32.560 --> 00:44:36.640 values so this means that we have not uh 00:44:36.640 --> 00:44:39.359 set the year correctly we have not set 00:44:39.359 --> 00:44:40.720 the month correctly 00:44:40.720 --> 00:44:44.240 or the day correctly but if we run this 00:44:44.240 --> 00:44:44.720 text 00:44:44.720 --> 00:44:48.960 here uh let me do something else before 00:44:48.960 --> 00:44:53.359 if we run this text here 00:44:53.359 --> 00:44:57.280 which we change some of these 00:44:57.280 --> 00:45:00.880 entries in the 00:45:00.880 --> 00:45:04.400 in the template and we get these links 00:45:04.400 --> 00:45:05.200 here 00:45:05.200 --> 00:45:09.119 they all work for example this one opens 00:45:09.119 --> 00:45:12.160 uh the blog post in in session sasha 00:45:12.160 --> 00:45:12.800 chewers 00:45:12.800 --> 00:45:16.000 site and this one 00:45:16.000 --> 00:45:21.280 opens it in the mailing list 00:45:21.280 --> 00:45:23.440 and sometimes I want the org source of 00:45:23.440 --> 00:45:25.760 that and the easiest way to get the word 00:45:25.760 --> 00:45:27.280 source is to 00:45:27.280 --> 00:45:30.480 look at this link here that has an 00:45:30.480 --> 00:45:31.680 attachment 00:45:31.680 --> 00:45:35.040 and if I take this 00:45:35.040 --> 00:45:38.560 link here and I take this 00:45:38.560 --> 00:45:42.319 stem that points to to the attachment 00:45:42.319 --> 00:45:44.480 and I put it here and I generate this 00:45:44.480 --> 00:45:45.440 page again 00:45:45.440 --> 00:45:49.119 with all this data then I get a script 00:45:49.119 --> 00:45:50.000 here 00:45:50.000 --> 00:45:53.359 that downloads let me switch to a 00:45:53.359 --> 00:45:54.640 smaller font 00:45:54.640 --> 00:45:58.160 it downloads this attachment 00:45:58.160 --> 00:46:00.960 and it renames that attachment to 00:46:00.960 --> 00:46:01.599 something 00:46:01.599 --> 00:46:06.000 dot slash nx news sorry some things 00:46:06.000 --> 00:46:10.720 uh iphone mx news hyphen 00:46:10.720 --> 00:46:15.119 something mxnews.org here 00:46:15.119 --> 00:46:17.599 the file is already here already with 00:46:17.599 --> 00:46:18.400 the right name 00:46:18.400 --> 00:46:21.359 so I can open it with just this 00:46:21.359 --> 00:46:22.079 hyperlink 00:46:22.079 --> 00:46:23.780 let me go to the big font again 00:46:23.780 --> 00:46:25.200 [Music] 00:46:25.200 --> 00:46:28.079 and now I have the work source for that 00:46:28.079 --> 00:46:29.280 hyperlink 00:46:29.280 --> 00:46:33.839 sorry for that blog post 00:46:33.839 --> 00:46:37.040 and so this one line thing 00:46:37.040 --> 00:46:40.960 here is in a sense 00:46:40.960 --> 00:46:43.920 a a to to this blog post in all its 00:46:43.920 --> 00:46:45.119 formats 00:46:45.119 --> 00:46:48.640 uh if I execute this I get links to 00:46:48.640 --> 00:46:52.000 to all the places where it is posted 00:46:52.000 --> 00:46:54.400 and I get a hype and I get a script to 00:46:54.400 --> 00:46:56.000 download the local copy 00:46:56.000 --> 00:47:00.480 of the org source of it and that's it 00:47:00.480 --> 00:47:03.200 well I'm already out of time so let me 00:47:03.200 --> 00:47:04.480 finish here 00:47:04.480 --> 00:47:10.079 thanks bye