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