summaryrefslogblamecommitdiffstats
path: root/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith-autogen.sbv
blob: 8f77e78a36bc8301e39c9eefe39e41cb5734be88 (plain) (tree)
1
2
3
4
5
                       
                        

                       
                                        


































                                        
                              



























































































                                        
                                    










































































































































































































                                        
                                        




                       
                                 


























































                                        
                                  










                                    
                                      




                       
                                       

                       
                                       



















                                        
                                      









































































                                        
                                     


































                                        
                                        








































                                        
                                        

















































                                        
                                       





























































                                       
                 







































































































































































































                                        
                                      

























                                       
                                     




                       
                                      







                                
                                       










                                       
                                     













                                        
                                  




                       
                                       










                                     
                                  




                                       
                                      
















                                        
                                   

























                                      
                                        



























                                     
0:00:00.320,0:00:05.920
um so hi I'm joe corneli

0:00:03.280,0:00:06.879
uh this is work I did with ray puzio and

0:00:05.920,0:00:10.559
cameron smith

0:00:06.879,0:00:11.599
um and they're the main protagonists in

0:00:10.559,0:00:14.960
this story they

0:00:11.599,0:00:17.840
are uh researchers who've been working

0:00:14.960,0:00:20.160
on theoretical biology um so in a

0:00:17.840,0:00:23.760
typical project they may use manxima

0:00:20.160,0:00:24.800
and julia their work for biology physics

0:00:23.760,0:00:27.199
and computer science

0:00:24.800,0:00:29.439
computer science and the latest work in

0:00:27.199,0:00:30.800
progress is on branching processes for

0:00:29.439,0:00:34.719
cancer modeling so

0:00:30.800,0:00:37.360
how can um Emacs possibly help

0:00:34.719,0:00:38.399
let's let's have a look uh moving code

0:00:37.360,0:00:39.680
and data between these different

0:00:38.399,0:00:42.000
programs by hand is

0:00:39.680,0:00:43.200
annoying on separate workflows for

0:00:42.000,0:00:44.399
writing up notes and preparing

0:00:43.200,0:00:46.000
publications

0:00:44.399,0:00:48.640
is perhaps even more annoying all of

0:00:46.000,0:00:52.000
it's time consuming and error-prone

0:00:48.640,0:00:53.760
um so what about maybe using jupiter

0:00:52.000,0:00:55.199
uh we found something called script of

0:00:53.760,0:00:58.399
scripts and it solves some of those

0:00:55.199,0:01:01.120
problems because you can use

0:00:58.399,0:01:02.640
maximum and julia together but we were

0:01:01.120,0:01:05.199
quite happy to explore emacs based

0:01:02.640,0:01:05.840
solutions being emax enthusiasts and we

0:01:05.199,0:01:07.760
even

0:01:05.840,0:01:09.200
got cameron to be enthusiastic about

0:01:07.760,0:01:11.600
doing emacs so that

0:01:09.200,0:01:12.400
went nice so just here's a little

0:01:11.600,0:01:15.360
feature grid

0:01:12.400,0:01:16.400
of emacs org versus just sort of your

0:01:15.360,0:01:19.040
generic

0:01:16.400,0:01:20.960
um tools that are in a different more

0:01:19.040,0:01:21.520
general ecosystem so as you can see it's

0:01:20.960,0:01:23.360
quite

0:01:21.520,0:01:25.520
feature complete you've got your maximo

0:01:23.360,0:01:27.119
mode julia mode you can use both of them

0:01:25.520,0:01:28.720
inside of org mode

0:01:27.119,0:01:30.240
you can present things with word tree

0:01:28.720,0:01:33.280
slide you can set up a

0:01:30.240,0:01:33.680
wiki inside of orgrome this is one I

0:01:33.280,0:01:35.759
found

0:01:33.680,0:01:37.759
rather recently you can even use

0:01:35.759,0:01:38.799
compatibly with orgrome something called

0:01:37.759,0:01:41.520
log seek

0:01:38.799,0:01:42.159
which is in the browser um so that's

0:01:41.520,0:01:44.320
nice

0:01:42.159,0:01:45.840
um you can do real-time collaborative

0:01:44.320,0:01:47.840
editing um

0:01:45.840,0:01:49.280
either in a kind of pairing style or in

0:01:47.840,0:01:51.520
a more etherpad style

0:01:49.280,0:01:54.159
obviously you can manage your references

0:01:51.520,0:01:55.759
you can typeset whatever you want um you

0:01:54.159,0:01:57.439
can publish work in progress on a blog

0:01:55.759,0:01:58.159
and the fern is another one of these

0:01:57.439,0:02:00.560
external

0:01:58.159,0:02:01.360
org mode tools it's not actually any mac

0:02:00.560,0:02:03.680
but works with

0:02:01.360,0:02:04.399
org mode stuff and you know so we're

0:02:03.680,0:02:06.640
good to go

0:02:04.399,0:02:08.000
uh with all of that so what does that

0:02:06.640,0:02:09.679
look like well here's

0:02:08.000,0:02:11.599
a little example from before they were

0:02:09.679,0:02:12.800
doing um

0:02:11.599,0:02:14.560
before we started really thinking

0:02:12.800,0:02:15.599
seriously about this stuff so this is

0:02:14.560,0:02:17.440
just maxima

0:02:15.599,0:02:19.280
well maximo doesn't have a long running

0:02:17.440,0:02:20.160
process by default if you've ever used

0:02:19.280,0:02:22.480
python

0:02:20.160,0:02:23.920
uh you have something called sessions uh

0:02:22.480,0:02:24.959
they don't have that for maxim at least

0:02:23.920,0:02:27.599
not by default

0:02:24.959,0:02:29.360
um so how what was the workaround

0:02:27.599,0:02:32.480
there's this thing called uh

0:02:29.360,0:02:34.879
solve for you here and um

0:02:32.480,0:02:36.319
that shows up down below again in these

0:02:34.879,0:02:37.360
angle brackets which you've seen maybe

0:02:36.319,0:02:40.480
in someone else's talk

0:02:37.360,0:02:41.920
uh which means go to the previous uh

0:02:40.480,0:02:43.920
thing that was named soul for you

0:02:41.920,0:02:45.280
and do that all over again so they do

0:02:43.920,0:02:47.440
that over again

0:02:45.280,0:02:49.519
and here's the little maxima code for

0:02:47.440,0:02:50.560
defining you saw so you've now defined

0:02:49.519,0:02:51.920
you saw

0:02:50.560,0:02:54.000
and then you can use it in the next

0:02:51.920,0:02:56.560
expression you get out a nice juicy

0:02:54.000,0:02:57.200
zero at the end but it's a little bit a

0:02:56.560,0:02:58.959
little bit

0:02:57.200,0:03:00.640
like cartridge in a pear tree to have to

0:02:58.959,0:03:02.560
redefine everything every time

0:03:00.640,0:03:04.159
so this is clearly at the level of work

0:03:02.560,0:03:06.879
around um maybe just

0:03:04.159,0:03:07.920
one more time going looking through that

0:03:06.879,0:03:11.599
um

0:03:07.920,0:03:13.760
that stuff um

0:03:11.599,0:03:15.280
sorry so uh looking through that stuff

0:03:13.760,0:03:17.200
this is we're going to need something

0:03:15.280,0:03:19.599
like that probably for stitching

0:03:17.200,0:03:20.319
maxima and julie julia together so it's

0:03:19.599,0:03:21.680
good to

0:03:20.319,0:03:23.920
look a little bit about how that might

0:03:21.680,0:03:25.680
work so first of all you can cache

0:03:23.920,0:03:26.480
results so if you wanted to save the

0:03:25.680,0:03:28.480
date

0:03:26.480,0:03:29.920
out of block one at a certain time and

0:03:28.480,0:03:32.239
then use

0:03:29.920,0:03:33.280
use it again later so at the time when I

0:03:32.239,0:03:34.640
ran this code

0:03:33.280,0:03:36.720
you can see I've got two slightly

0:03:34.640,0:03:38.560
different time stamps down below one's

0:03:36.720,0:03:40.319
the cached result and the other was the

0:03:38.560,0:03:42.640
result of reevaluating

0:03:40.319,0:03:43.760
the block so you can move things around

0:03:42.640,0:03:46.000
um and that's

0:03:43.760,0:03:47.280
that's going to be useful but you know

0:03:46.000,0:03:48.080
that's not really the main problem the

0:03:47.280,0:03:50.799
main problem is

0:03:48.080,0:03:51.440
making maxima long running so kind of

0:03:50.799,0:03:53.920
the

0:03:51.440,0:03:56.400
core of this talk is a new observant

0:03:53.920,0:03:59.280
facility which is a general purpose

0:03:56.400,0:04:00.560
way to do that kind of thing which

0:03:59.280,0:04:04.239
involves a very simple

0:04:00.560,0:04:05.360
change to obcor uh so we'll give a quick

0:04:04.239,0:04:08.480
overview of that and show

0:04:05.360,0:04:11.760
an example um so here's the example

0:04:08.480,0:04:13.040
um a very simple sort of silly example

0:04:11.760,0:04:14.640
uh what does it mean to have a long

0:04:13.040,0:04:15.920
running process here I've set this

0:04:14.640,0:04:18.560
display2d

0:04:15.920,0:04:19.440
to be false um which just means that

0:04:18.560,0:04:22.320
things are going to come

0:04:19.440,0:04:23.040
come across in 1d and then I ask it to

0:04:22.320,0:04:25.199
expand

0:04:23.040,0:04:27.280
uh something and I get latex by default

0:04:25.199,0:04:28.639
so so that's what it means is I've sent

0:04:27.280,0:04:30.240
something in and it's going to come

0:04:28.639,0:04:32.080
across in one view which is great

0:04:30.240,0:04:34.560
um maybe you'll also notice that there's

0:04:32.080,0:04:36.720
no semicolon if you're a maxima fan

0:04:34.560,0:04:38.400
um and things are coming across as tech

0:04:36.720,0:04:40.320
so those were some little bonus features

0:04:38.400,0:04:41.040
and I'll show you how that works later

0:04:40.320,0:04:45.440
so

0:04:41.040,0:04:48.880
um the change to obcor is as follows uh

0:04:45.440,0:04:51.520
um we uh actually this should say uh

0:04:48.880,0:04:52.479
instead of stream here it should say um

0:04:51.520,0:04:54.800
servant

0:04:52.479,0:04:56.160
sorry uh we tried an experimental

0:04:54.800,0:04:58.160
version what's called stream so now it's

0:04:56.160,0:05:01.520
called servant but all it does is it

0:04:58.160,0:05:02.639
overrides uh or babel execute laying for

0:05:01.520,0:05:05.919
arbitrary laying

0:05:02.639,0:05:07.840
if you have um a servant

0:05:05.919,0:05:09.759
in your in your params so that's the

0:05:07.840,0:05:11.919
change that hasn't been

0:05:09.759,0:05:13.759
pushed out or sent as a patch to anybody

0:05:11.919,0:05:16.960
but it's a pretty minor change

0:05:13.759,0:05:19.080
um here's an overview without the code

0:05:16.960,0:05:20.720
of just a high level overview of

0:05:19.080,0:05:22.160
observant.el so

0:05:20.720,0:05:24.479
it stores information about these

0:05:22.160,0:05:26.080
processes in a hash table

0:05:24.479,0:05:27.600
it can do pre-processing and

0:05:26.080,0:05:29.759
post-processing

0:05:27.600,0:05:30.720
um it does all these things it stores

0:05:29.759,0:05:32.479
the output

0:05:30.720,0:05:34.080
I mentioned here that in principle we

0:05:32.479,0:05:35.280
could store lots of output and have a

0:05:34.080,0:05:36.560
kind of browsable

0:05:35.280,0:05:38.880
history although we don't do that

0:05:36.560,0:05:40.639
presently um but that's what observant

0:05:38.880,0:05:41.440
does is it does what you might expect

0:05:40.639,0:05:45.440
and here's the

0:05:41.440,0:05:48.160
here's the maxima kind of um

0:05:45.440,0:05:49.600
on-ramp uh to get maxima brought in so

0:05:48.160,0:05:51.360
you have to obviously have a maximum

0:05:49.600,0:05:54.960
process you can call

0:05:51.360,0:05:57.840
um put hash uh this is the preprocessing

0:05:54.960,0:05:58.960
thing I mentioned adding in some tech um

0:05:57.840,0:06:01.520
and adding in

0:05:58.960,0:06:03.120
uh or deleting rather a substring and

0:06:01.520,0:06:03.759
here here is why you delete the

0:06:03.120,0:06:06.960
substring

0:06:03.759,0:06:08.240
is because um maxima thinks it's a good

0:06:06.960,0:06:10.080
idea to tell you false

0:06:08.240,0:06:11.759
once you once you run check on things

0:06:10.080,0:06:13.680
you've got to delete that back out to

0:06:11.759,0:06:16.960
get something kind of coherent out of it

0:06:13.680,0:06:19.280
but so this is how to set up maximal um

0:06:16.960,0:06:20.000
that's enough really of the demo is not

0:06:19.280,0:06:21.919
really a demos for

0:06:20.000,0:06:23.600
show and tell but uh this is an

0:06:21.919,0:06:25.440
experience report I wanted to talk about

0:06:23.600,0:06:28.080
the experience of doing this

0:06:25.440,0:06:30.160
so some some negatives like we tried to

0:06:28.080,0:06:33.199
get emacs jupiter working

0:06:30.160,0:06:36.000
prior to prior to working on the um

0:06:33.199,0:06:37.919
observant and we couldn't get it doing

0:06:36.000,0:06:40.160
everything we wanted despite a bit of

0:06:37.919,0:06:41.840
heavy lifting and debugging and stuff so

0:06:40.160,0:06:42.880
that's not not finished that was a bit

0:06:41.840,0:06:45.360
difficult

0:06:42.880,0:06:47.759
um on the other hand working on

0:06:45.360,0:06:48.479
observing was fun and pretty lightweight

0:06:47.759,0:06:50.400
and easy

0:06:48.479,0:06:52.400
um we got some experience co-editing

0:06:50.400,0:06:54.479
things with these real-time tools

0:06:52.400,0:06:55.919
obviously the stack is somewhat work in

0:06:54.479,0:06:58.000
progress um

0:06:55.919,0:07:00.800
so I just wanted to give a shout out to

0:06:58.000,0:07:03.919
crdt which was really fun

0:07:00.800,0:07:07.039
and champion was making bug fiction

0:07:03.919,0:07:08.960
bug fixes for that as we go similarly

0:07:07.039,0:07:10.160
for fern and log seek the maintainers

0:07:08.960,0:07:12.960
were really responsive

0:07:10.160,0:07:14.560
um and so that was nice we did try to

0:07:12.960,0:07:15.840
get emacs running in the browser

0:07:14.560,0:07:16.880
thinking it would be really nice for

0:07:15.840,0:07:19.520
people who

0:07:16.880,0:07:21.120
um didn't want to install it to get a

0:07:19.520,0:07:23.120
chance to just try it

0:07:21.120,0:07:24.479
uh but actually browsers capture things

0:07:23.120,0:07:27.120
like uh control n

0:07:24.479,0:07:28.479
and so that's that was a bit annoying

0:07:27.120,0:07:29.759
but we did get lots of great feedback

0:07:28.479,0:07:31.599
and interaction with people including

0:07:29.759,0:07:33.759
around this conference so thank you

0:07:31.599,0:07:35.599
to those who we've had discussions with

0:07:33.759,0:07:37.680
um

0:07:35.599,0:07:38.639
so future work okay so maybe you

0:07:37.680,0:07:41.039
remember I didn't

0:07:38.639,0:07:42.400
give a talk a few years back on arcana

0:07:41.039,0:07:44.479
so what what

0:07:42.400,0:07:45.919
might this have to do with org mode and

0:07:44.479,0:07:47.039
that's always the question one asks

0:07:45.919,0:07:48.720
about arcata

0:07:47.039,0:07:50.319
well so arcana one of the things it does

0:07:48.720,0:07:51.680
is transclusions and so that could be

0:07:50.319,0:07:54.000
actually very helpful

0:07:51.680,0:07:55.520
in connection with this combined notes

0:07:54.000,0:07:56.479
and write-up workflow so you might have

0:07:55.520,0:07:58.400
a

0:07:56.479,0:08:00.800
forward mode uh and some of these

0:07:58.400,0:08:03.199
results we got back as raw results

0:08:00.800,0:08:03.919
could go right into your write up in a

0:08:03.199,0:08:07.520
kind of

0:08:03.919,0:08:09.039
convenient way at a level above um

0:08:07.520,0:08:11.280
transparently a level above the notebook

0:08:09.039,0:08:13.440
so you'd have the notebook alongside the

0:08:11.280,0:08:15.599
write-up in that case

0:08:13.440,0:08:16.800
which is a sort of variation on the

0:08:15.599,0:08:19.120
literate programming

0:08:16.800,0:08:20.000
workflow this is speculative who knows

0:08:19.120,0:08:22.080
the other thought is

0:08:20.000,0:08:23.520
it just relates to the idea of network

0:08:22.080,0:08:24.800
programming so we can imagine these

0:08:23.520,0:08:26.639
networks of

0:08:24.800,0:08:28.800
computational nodes maybe sitting inside

0:08:26.639,0:08:31.199
of orgrome calling each other

0:08:28.800,0:08:32.560
um and you would want to maintain some

0:08:31.199,0:08:34.959
kind of model of that

0:08:32.560,0:08:36.640
process and a sort of general question

0:08:34.959,0:08:38.320
is how do we have a remote control for

0:08:36.640,0:08:40.240
long-running processes you could do that

0:08:38.320,0:08:42.479
in lisp or closure but

0:08:40.240,0:08:44.080
maybe we could have something a little

0:08:42.479,0:08:45.839
bit like that here

0:08:44.080,0:08:48.080
um so conclusions what have we actually

0:08:45.839,0:08:50.080
addressed well uh we addressed uh

0:08:48.080,0:08:51.600
accessing any long-running process with

0:08:50.080,0:08:52.959
a simple or mode interface

0:08:51.600,0:08:54.880
obviously we're not the only people to

0:08:52.959,0:08:56.880
think about notebooks but we think that

0:08:54.880,0:08:58.880
emacs has some advantages

0:08:56.880,0:09:01.120
related to reproducible research and

0:08:58.880,0:09:01.680
interdisciplinary collaboration so let's

0:09:01.120,0:09:03.120
just

0:09:01.680,0:09:04.880
say that we think something is

0:09:03.120,0:09:07.200
reproducible if it's actually teachable

0:09:04.880,0:09:09.279
to someone new and they can do it

0:09:07.200,0:09:11.680
org mode seems very useful for that many

0:09:09.279,0:09:14.399
of the other talks have touched on this

0:09:11.680,0:09:16.000
interdisciplinary collaboration is great

0:09:14.399,0:09:17.839
this was an interdisciplinary

0:09:16.000,0:09:19.680
collaboration on some level but

0:09:17.839,0:09:21.600
what about you know future work for

0:09:19.680,0:09:22.320
bringing in scenario planners simulation

0:09:21.600,0:09:24.480
scientists

0:09:22.320,0:09:25.519
and local farmers and building something

0:09:24.480,0:09:27.200
that they can all

0:09:25.519,0:09:29.200
use that's more than the sum of the

0:09:27.200,0:09:30.720
parts so a little

0:09:29.200,0:09:32.160
future work for everybody else here so

0:09:30.720,0:09:33.120
we think science should be widely

0:09:32.160,0:09:34.560
teachable

0:09:33.120,0:09:36.720
shareable semi-automated

0:09:34.560,0:09:40.399
transdisciplinary and real time

0:09:36.720,0:09:43.279
like EmacsConf so you can get in touch

0:09:40.399,0:09:44.560
uh via these methods and the code which

0:09:43.279,0:09:45.200
is very much early stage work in

0:09:44.560,0:09:46.640
progress

0:09:45.200,0:09:48.800
as this was meant to be an experience

0:09:46.640,0:09:49.920
report not a it's all done here it is

0:09:48.800,0:09:51.680
polished report

0:09:49.920,0:09:53.360
um it's also online if you'd like to

0:09:51.680,0:09:54.560
have a look so that's the end of the

0:09:53.360,0:09:55.279
talk and I don't know if there's time

0:09:54.560,0:09:57.440
for questions

0:09:55.279,0:10:00.240
or not but um I'm at your disposal now

0:09:57.440,0:10:04.079
thank you you are now unmuted

0:10:00.240,0:10:07.120
um many thanks for the tough job

0:10:04.079,0:10:08.880
uh let's see we have about I think four

0:10:07.120,0:10:10.880
minutes four questions

0:10:08.880,0:10:12.320
um and we have a couple of questions on

0:10:10.880,0:10:14.240
the pad would you like to read them

0:10:12.320,0:10:16.560
yourself or should I read them to you

0:10:14.240,0:10:18.079
uh just for sake of easy management why

0:10:16.560,0:10:21.279
don't you read them out if that's okay

0:10:18.079,0:10:22.240
yeah sure uh so they ask have you looked

0:10:21.279,0:10:25.440
into trying

0:10:22.240,0:10:33.760
sage math I've long uh long wanted

0:10:25.440,0:10:36.959
nothing org files

0:10:33.760,0:10:39.279
right and I and I wrote the answer that

0:10:36.959,0:10:42.079
we should be possible because one can

0:10:39.279,0:10:42.079
call it from a command

0:10:44.839,0:10:48.640
okay

0:10:46.399,0:10:50.079
and I see there's another sagemath

0:10:48.640,0:10:52.100
question that you seem to have answered

0:10:50.079,0:10:54.880
as well so I guess I won't repeat that

0:10:52.100,0:10:56.959
[Music]

0:10:54.880,0:11:00.640
there's let's not forget about embedded

0:10:56.959,0:11:03.680
calc in emacs

0:11:00.640,0:11:05.040
so so the first demos actually were with

0:11:03.680,0:11:06.640
calc so that's that's

0:11:05.040,0:11:07.839
useful uh although I think it was a

0:11:06.640,0:11:08.240
different kind of a different command

0:11:07.839,0:11:11.839
line

0:11:08.240,0:11:13.839
well that was the next calc yeah

0:11:11.839,0:11:15.680
so sure there is there is calc so that

0:11:13.839,0:11:19.120
would be calculus and

0:11:15.680,0:11:21.839
calc is already in org mode yeah

0:11:19.120,0:11:21.839
yeah yeah

0:11:25.680,0:11:29.839
um still looking for questions

0:11:39.760,0:11:44.320
okay I think that's about it I don't see

0:11:41.760,0:11:47.440
any questions on the ether pad

0:11:44.320,0:11:50.480
and let's see

0:11:47.440,0:11:50.480
anything on irc

0:11:53.040,0:11:56.720
um nothing but phrases and everyone

0:11:55.760,0:11:59.120
thanking you

0:11:56.720,0:12:00.240
thank you all right you're welcome

0:11:59.120,0:12:02.880
thanks a lot uh

0:12:00.240,0:12:06.800
we'll see you guys around then cheers

0:12:02.880,0:12:06.800
and see you around