summaryrefslogblamecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.sbv
blob: 622872785001eb9d8b2890c97718df497ba0cc59 (plain) (tree)
1
2
                       
                                       




























                                       
                                  
















                                        
                                    


































                                        
                                       





















































































                                        
                                       

                       
                          

                       
                                      






















                                       
                                       










                                     
                               























































                                        
                                 






































































































































































                                        
                                    



















                                        
                                      
















                                      
                                    




























                                       
                                    



















                                        
                                     




                       
                                     










                                  
                                        







                                      
                                    










                                       
                           
















                                       
                                       















































































                                        
                               
























































































































































































                                        
                                      

                       
                                     




























                                      
                                




                       
                    





































                                        
                                




                                        
                               




                       
                                    




























                                        
                                 





































































































































                                        
                                        

                       
                                       




























                                      
                                   

                       
                                        




                       
                                       







                                     
                                       







































































































                                        
                                      







                           
                                      










                                       
                                







                                       
                                   













                                        
                                        




                       
                   

                       
                                  







                       
                                   

























                                      
                                    








































                                        
                                  



















                                       
                                   










                                     
                                     
































































                                        
                                       




























                                        
                                    





































                                        
                       















































































                                        
                                 



































































                                        
                                


































                                    
                        













                                      
                                  
















                                    
                             

                       
                                       




                                 
                                     




                                     
                







                                       
                                        

                       
                                       




                       
                                        

                       
                   


































                                       
                               



































































                                        
                                     

























                                       
                                   







                                      
                                   







                                       
                                   

























                                        
                         







                                       
                                 































                                        
                         

                       
                                       




                                       
                                       




                       
                                   










                                  
                                      
















                                       
            

                       
                         











































                                        
                                 




                       
                                    




                       
                                







                               
                                     







                                        
                                        

















































                                        
                                

                       
                                  




                       
                                      


























































                                        
                                       


























































                                      
                                     




                                     
                                      










                                     
                                     













                                     
                                        













                                      
                                      


































                                        
                                  
































































                                        
       







































































































                                        
                                    










                                    
                                 

                       
                           










                                       
                    










































































































                                        
                                        



















                                       
                                      
































































                                        
                                      

                       
                      

                       
                                        




                       
                                      




                                
                                 




                       
                                     








































                                        
                                        




                                   
                                       






















                                      
                                      

























                                        
                             










                                       
                                      




                       
                                     




                       
                                   






















                                        
                                      










                                   
                                       




                            
                             

                       
                                      




                       
                                        

                       
          




                         
                                        

























                                        
                                      


































                                        
                                  






















                                      
                                  







                                        
                                       























































                                        
                                      













                                        
                  

                       
                         




                                     
                                     




                       
                                      


































                                     
                               










                               
                                       



















                                   
                                   




                                    
                                      







                                     
                                      






                       
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