From c9c943de8efdf0556816dea86df89c452b245dc3 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sat, 3 Dec 2022 15:45:21 -0500 Subject: Automated commit --- 2022/info/jupyter-after.md | 260 ++++++++++++++++++++++++++++++++++++++++++++ 2022/info/jupyter-before.md | 27 ++++- 2 files changed, 285 insertions(+), 2 deletions(-) (limited to '2022/info') diff --git a/2022/info/jupyter-after.md b/2022/info/jupyter-after.md index 69a8da24..b79a2189 100644 --- a/2022/info/jupyter-after.md +++ b/2022/info/jupyter-after.md @@ -1,6 +1,266 @@ + +# Transcript + +[[!template new="1" text="Hi, my name is Blaine Mooers." start="00:00:00.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'm an associate professor of biochemistry" start="00:00:03.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="at the University of Oklahoma Health Sciences Center" start="00:00:05.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in Oklahoma City." start="00:00:08.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'm going to talk about the use of Emacs" start="00:00:09.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to edit live Jupyter notebook cells" start="00:00:12.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="as well as text areas on web pages." start="00:00:16.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So like a lot of technical workers," start="00:00:20.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I find myself having to write prose" start="00:00:22.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in text areas on web pages," start="00:00:24.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="as well as working with code" start="00:00:28.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in Jupyter notebooks and Colab notebooks," start="00:00:31.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and often I have wished for" start="00:00:37.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="the full power of Emacs while doing so." start="00:00:39.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Well, now that is possible." start="00:00:43.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Actually, there are several solutions" start="00:00:45.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that have been available for some time." start="00:00:46.800" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'm going to talk about one solution" start="00:00:49.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that I'm familiar with and has worked out for me." start="00:00:50.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="So this requires the use of two software packages," start="00:00:55.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="GhostText and Atomic Chrome." start="00:00:58.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="GhostText is an extension for the web browser," start="00:01:01.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="whereas Atomic Chrome is a package for Emacs." start="00:01:04.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="You have to have both of these." start="00:01:07.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So Chrome is for the editor side" start="00:01:10.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and GhostText handles the browser side." start="00:01:13.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="The GhostText extension is available" start="00:01:18.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in the Chrome web store." start="00:01:22.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And GhostText is represented by this icon," start="00:01:26.800" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="which has a ghost in front of the capital letter T." start="00:01:29.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="It is being developed by Federico Brigante." start="00:01:31.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="He is a very prolific JavaScript developer." start="00:01:36.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="He has a web page committed to GhostText," start="00:01:41.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="as well as a GitHub site." start="00:01:44.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So here's an example of GhostText." start="00:01:47.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This is a snapshot from a session" start="00:01:50.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that I had while editing LaTeX on the Overleaf website." start="00:01:54.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Overleaf is this web service" start="00:02:01.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that empowers the editing of LaTeX documents on the web." start="00:02:03.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I have clicked on this GhostText icon in the toolbar." start="00:02:09.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I had already opened up Emacs," start="00:02:14.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and I had the Atomic Chrome server running." start="00:02:17.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So a connection was established," start="00:02:19.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="as indicated by this blue border around this text area." start="00:02:21.800" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And as soon as that appeared," start="00:02:28.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="the text appeared in a buffer inside of Emacs." start="00:02:30.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I have overlaid the area where normally the compiled PDF" start="00:02:35.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="would appear in an Overleaf session." start="00:02:40.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I'm using a configuration for LaTeX that I developed," start="00:02:43.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="which is available through the MooersLab GitHub site." start="00:02:47.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I also gave a talk about how I use LaTeX in Emacs" start="00:02:52.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="at the Berlin Emacs meetup in August." start="00:02:55.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This talk was not recorded," start="00:02:58.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="but the slides are available on this website." start="00:03:00.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I would like to now switch to a little live coding" start="00:03:05.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to make this a little more interesting." start="00:03:09.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I start my day at this other website called 750Words." start="00:03:12.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="This site just takes plain text," start="00:03:22.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="but I like to write in LaTeX." start="00:03:25.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So GhostText came to my rescue" start="00:03:28.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="when I started using this everyday last May." start="00:03:31.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I clicked on the GhostText icon." start="00:03:34.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="It highlighted that area in blue." start="00:03:37.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="There's some boilerplate" start="00:03:39.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that I like to start my day with." start="00:03:41.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I like to get a list of my deadlines" start="00:03:45.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that are coming up, as shown here," start="00:03:50.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="for the next several months." start="00:03:54.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then I have landed at this tab stop." start="00:03:55.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And so I had issued a tab trigger" start="00:03:59.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="which inserted this almost 50 lines of text" start="00:04:04.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="from a snippet through Yasnippet." start="00:04:09.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then I'll change this text to whatever." start="00:04:13.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then I can hit TAB to move to the next site." start="00:04:17.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I was dead tired last night, so I fell asleep at my desk," start="00:04:29.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and whatever. So I just keep on going" start="00:04:38.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and then hit TAB again and enter my "To Be Done" items." start="00:04:42.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then what I love about Emacs is that" start="00:04:47.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="you can hit C-c C-j to insert a new item and so forth," start="00:04:50.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="so you can extend the list." start="00:04:56.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Initially, I just have 10 items." start="00:05:03.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'm going to have more. And on I go," start="00:05:05.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="using the full power of LaTeX." start="00:05:08.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I have configured Atomic Chrome" start="00:05:12.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="so it will recognize this website as a –" start="00:05:16.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="it will open up this website –" start="00:05:20.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="the connection to this website with this buffer" start="00:05:21.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in the LaTeX major mode. To turn this off," start="00:05:26.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="we can close – simply just close the buffer" start="00:05:36.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and that will shut things down." start="00:05:40.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="On the browser side, you can right-click on the icon" start="00:05:42.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and disconnect GhostText on this page." start="00:05:46.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Okay, let's go to a different situation." start="00:05:49.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This is not a feature that's advertised by the developer," start="00:05:53.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="but I discovered that you can edit code cells" start="00:05:57.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="(or any kind of cell for that matter)" start="00:06:00.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in a Jupyter Notebook." start="00:06:02.800" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="However, we have a challenge here." start="00:06:04.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="We have three text areas open – three code cells." start="00:06:05.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So if we click on the GhostText icon," start="00:06:09.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="these three areas will show up in green" start="00:06:14.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we'll be prompted to select the one" start="00:06:17.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that we want to activate." start="00:06:19.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="We want to activate the one with text." start="00:06:20.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So then we can go in here and make edits, of course," start="00:06:22.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and you can do this in Emacs" start="00:06:31.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="or we can do it in the browser. It doesn't matter." start="00:06:33.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="You saw me editing in Emacs," start="00:06:35.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="but we can also make the edits" start="00:06:38.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in the text area of the browser" start="00:06:40.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and they will show up immediately in Emacs." start="00:06:44.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So we could change the case of that M and that's going to –" start="00:06:47.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="shows up over here. Okay, we can run this code." start="00:06:54.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So this is R, one of the three major" start="00:06:59.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="programming languages for data science." start="00:07:03.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="At least, Jupyter is supposed to be" start="00:07:05.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="a combination of Julia, Python, and R." start="00:07:07.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So we're running mcmc to get the posterior distribution" start="00:07:13.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we're going to plot those out with this pyplots package," start="00:07:17.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we have these beautiful plots showing the median" start="00:07:21.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="of the posterior distribution for four variables in –" start="00:07:24.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="four parameters in the CARS data set," start="00:07:27.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="which is available – built into the R package." start="00:07:31.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then these shaded areas are the 80% interval." start="00:07:38.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Okay. Oops." start="00:07:45.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So now for the Python side," start="00:07:49.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="here's an example in which I'm going to actually" start="00:08:07.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="insert a snippet of that cell" start="00:08:13.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and then I'm going to enter nvlig for nglview ligand," start="00:08:18.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and just hit enter. Oops. Hit TAB, excuse me," start="00:08:27.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we don't need this line of code, so delete that." start="00:08:43.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Yep, we want to load up this pdb file" start="00:08:48.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that's in this subdirectory." start="00:08:52.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So the pdb file is a plain text file" start="00:08:54.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that contains atomic coordinates" start="00:08:56.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="of protein crystal structure." start="00:08:58.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This protein happens to be important in cancer" start="00:09:00.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we have – we screened by docking 55,000 compounds" start="00:09:03.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="on a supercomputer" start="00:09:09.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and then we did MD [molecular dynamics] simulations" start="00:09:10.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="of the top 10 [actually 20] leads." start="00:09:12.744" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Twelve of them had the compound remain bound" start="00:09:14.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="during the period of the simulation," start="00:09:18.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="so those have some potential for –" start="00:09:19.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and require experimental validation." start="00:09:22.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So we'll run this chunk of code," start="00:09:25.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and this will give a view of the molecule" start="00:09:28.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="that we can interact with by using the mouse." start="00:09:30.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="But I want to share this with my colleague." start="00:09:36.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="My colleague is not set up to use Jupyter," start="00:09:39.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="but instead we can write this out to a HTML file," start="00:09:42.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="which I have loaded up already." start="00:09:46.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And so we can actually – perhaps." start="00:09:48.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="We click on these two arrows pointing at each other," start="00:09:55.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we can get a full screen view of this molecule" start="00:10:01.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and he can identify each atom in this structure." start="00:10:05.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Over a thousand atoms present." start="00:10:10.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="We're just hovering over a specific atom." start="00:10:12.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So shown in gray is the ligand that is bound. Okay." start="00:10:14.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So we still have this box selected" start="00:10:27.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and we still have these two different –" start="00:10:32.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="so for each of the – our selected text areas" start="00:10:36.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="we have a separate – we have a separate buffer open. Okay." start="00:10:40.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="To wrap things up here, here's an example of using –" start="00:11:03.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="with evolving Julia code." start="00:11:06.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And so this Julia code in this cell is in a Emacs buffer." start="00:11:08.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="So you've got an idea now, I think." start="00:11:12.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So in terms of plain text areas like in Overleaf" start="00:11:19.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and then these cells in Jupyter Notebooks," start="00:11:23.760" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="these are other areas that can be edited" start="00:11:27.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="like in the text areas within Outlook Webmail and Gmail." start="00:11:30.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Instead of having to point with the mouse" start="00:11:37.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="or click with the mouse," start="00:11:42.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="one can also use keybindings or keyboard shortcuts." start="00:11:43.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So here are the ones for three major operating systems." start="00:11:48.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So how does GhostText work?" start="00:11:51.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Main thing is you have to open up Emacs" start="00:11:54.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and get this Atomic Chrome server running." start="00:11:57.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="And then with it up and going," start="00:11:59.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="GhostText will be able to – has to be activated" start="00:12:03.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and it will find the GhostText server" start="00:12:06.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="through the localhost port 4001." start="00:12:09.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Put that into the web browser." start="00:12:15.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="If you navigate to that port," start="00:12:19.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="you'll get output that looks like this" start="00:12:21.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="if everything's working well." start="00:12:23.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Otherwise, you'll get a error message" start="00:12:25.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and it should have a port socket –" start="00:12:27.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="a web socket port number." start="00:12:30.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="It will not be the same every time." start="00:12:34.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So these are the supported web browsers" start="00:12:36.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in addition to Chrome. These are supported" start="00:12:42.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="and likewise anything in these –" start="00:12:45.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="any browser related to these" start="00:12:47.280" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="can probably use these extensions." start="00:12:49.880" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="For example, the Brave browser will use Chrome extension" start="00:12:53.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and the Firefox browser extension works with WaterFox." start="00:12:56.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="These are the supported editors." start="00:13:01.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Each editor has its own extension" start="00:13:05.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and this GhostText was initially developed for SublimeText." start="00:13:10.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So if you have SublimeText," start="00:13:15.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="then you can use its smooth operation as positive control" start="00:13:17.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="when things go wrong with Emacs." start="00:13:21.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This is Atomic. This is a GitHub site for Atomic Chrome." start="00:13:25.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Atomic Chrome is available for installation through Melpa." start="00:13:29.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="This is my configuration for Atomic Chrome." start="00:13:33.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I have this setup so the server starts whenever I log in," start="00:13:40.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and I have it set up so that default major mode is Python" start="00:13:45.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to deal with the Jupyter notebooks and Colab notebooks." start="00:13:50.320" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then I have major modes" start="00:13:55.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="for these other websites defined below." start="00:13:57.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This is a testing site so the developer has made" start="00:13:59.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to help with troubleshooting." start="00:14:06.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="He also has a protocol on his website" start="00:14:08.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to follow during troubleshooting." start="00:14:11.160" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So here are some precautions." start="00:14:13.560" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="You'll find that GhostText doesn't work with Pluto." start="00:14:16.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Pluto is a new computational notebook" start="00:14:19.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="for working with Julia." start="00:14:21.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="My suggestion would be just to run IJulia in Jupyter." start="00:14:23.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="It also doesn't work, of course, with RStudio." start="00:14:27.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Even though RStudio sort of resembles" start="00:14:32.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="a web page, web browser, it's not." start="00:14:35.200" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Of course, you can always run R," start="00:14:39.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="as you've just seen, using the IPy kernel." start="00:14:41.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I will also caution you that if you use the Emacs server," start="00:14:48.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="you may run into issues" start="00:14:52.240" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="with the server competing with the port 4001." start="00:14:53.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So instead, you should probably configure the Emacs server" start="00:14:58.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="to use a specific port." start="00:15:01.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So far – although I haven't done that myself –" start="00:15:05.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="so far, I haven't found any conflicts" start="00:15:07.640" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="with the Org Roam user interface." start="00:15:11.000" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So my conclusions are: GhostText allows you to edit prose" start="00:15:13.480" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="with your favorite major mode" start="00:15:20.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="in the text areas of web pages" start="00:15:24.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and in the cells of Jupyter notebooks." start="00:15:28.120" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="This allows you to tap into snippets" start="00:15:31.080" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and thereby save time as you have – probably have –" start="00:15:34.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="hopefully got an idea of." start="00:15:37.520" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'd like to thank my friends and mentors" start="00:15:39.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="who've helped me out during my second year" start="00:15:44.040" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="in my Emacs learning spiral." start="00:15:46.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template new="1" text="These include my local colleagues." start="00:15:49.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="We meet once a month in the Oklahoma Data Science Workshop." start="00:15:55.840" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Last July, I gave a presentation about GhostText." start="00:15:58.680" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="And then also my friends at Berlin and Austin Emacs meetups" start="00:16:01.720" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="and in the UK research software engineer" start="00:16:08.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Emacs research Slack channel." start="00:16:12.960" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="So I don't attend these every month," start="00:16:17.600" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="but I try to make the meetings as often as I can." start="00:16:18.920" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="Then I'm supported by the following grants," start="00:16:21.440" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="which allow me to spend" start="00:16:25.400" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="at least some time each day in Emacs." start="00:16:28.360" video="mainVideo-jupyter" id="subtitle"]] +[[!template text="I'll be happy to take any questions." start="00:16:30.680" video="mainVideo-jupyter" id="subtitle"]] + + Questions or comments? Please e-mail [Blaine-Mooers@ouhsc.edu](mailto:Blaine-Mooers@ouhsc.edu?subject=Comment%20for%20EmacsConf%202022%20jupyter%3A%20Edit%20live%20Jupyter%20notebook%20cells%20with%20Emacs) diff --git a/2022/info/jupyter-before.md b/2022/info/jupyter-before.md index 4f405af4..e8854b27 100644 --- a/2022/info/jupyter-before.md +++ b/2022/info/jupyter-before.md @@ -3,16 +3,39 @@ In this talk, Blaine Mooers shows how to use GhostText and Atomic Chrome to edit The following image shows where the talk is in the schedule for Sat 2022-12-03. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.
- Schedule for Saturday Saturday 9:00- 9:05 Saturday opening remarks sat-open 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs) journalism 9:45- 9:55 Back to school with Emacs school 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode handwritten 10:45-11:05 Writing and organizing literature notes for scientific writing science 11:25-11:35 The Emacs Buddy initiative buddy 1:00- 1:20 Attending and organizing Emacs meetups meetups 1:40- 1:55 Linking personal info with Hyperbole implicit buttons buttons 2:15- 2:40 Real estate and Org table formulas realestate 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot health 3:45- 4:05 Edit live Jupyter notebook cells with Emacs jupyter 4:50- 4:55 Saturday closing remarks sat-close 10:00-10:15 Tree-sitter beyond syntax highlighting treesitter 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client lspbridge 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for asmblox 11:25-11:35 Emacs should become a Wayland compositor wayland 1:00- 1:25 Using SQLite as a data source: a framework and an example sqlite 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents mail 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source maint 3:35- 3:40 Bidirectional links with eev eev 3:50- 3:55 Short hyperlinks to Python docs python 4:05- 4:35 Haskell code exploration with Emacs haskell 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM 4 PM 5 PM + Schedule for Saturday Saturday 9:00- 9:05 Saturday opening remarks sat-open 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs) journalism 9:45- 9:55 Back to school with Emacs school 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode handwritten 10:45-11:05 Writing and organizing literature notes for scientific writing science 11:25-11:35 The Emacs Buddy initiative buddy 1:00- 1:20 Attending and organizing Emacs meetups meetups 1:40- 1:55 Linking personal info with Hyperbole implicit buttons buttons 2:15- 2:40 Real estate and Org table formulas realestate 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot health 3:45- 4:05 Edit live Jupyter notebook cells with Emacs jupyter 4:50- 4:55 Saturday closing remarks sat-close 10:00-10:15 Tree-sitter beyond syntax highlighting treesitter 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client lspbridge 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for asmblox 11:25-11:35 Emacs should become a Wayland compositor wayland 1:00- 1:25 Using SQLite as a data source: a framework and an example sqlite 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents mail 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source maint 3:35- 3:40 Bidirectional links with eev eev 4:05- 4:35 Haskell code exploration with Emacs haskell 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM 4 PM 5 PM
[[!toc ]] Format: 18-min talk followed by live Q&A () Etherpad: Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen) -Status: Talk captioned +Status: Now playing on the conference livestream
Times in different timezones:
Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM EST (US/Eastern)
which is the same as:
Saturday, Dec 3 2022, ~2:45 PM - 3:05 PM CST (US/Central)
Saturday, Dec 3 2022, ~1:45 PM - 2:05 PM MST (US/Mountain)
Saturday, Dec 3 2022, ~12:45 PM - 1:05 PM PST (US/Pacific)
Saturday, Dec 3 2022, ~8:45 PM - 9:05 PM UTC
Saturday, Dec 3 2022, ~9:45 PM - 10:05 PM CET (Europe/Paris)
Saturday, Dec 3 2022, ~10:45 PM - 11:05 PM EET (Europe/Athens)
Sunday, Dec 4 2022, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)
Sunday, Dec 4 2022, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)
Sunday, Dec 4 2022, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)
Find out how to watch and participate
+[[!template id="vid" vidid="jupyter-mainVideo" src="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm" poster="https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.png" captions="""""" +size="64M" duration="17:08" other_resources="""[Download --main.webm (64MB)](https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.webm) +[Download --main.vtt](https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt) +[Download --main--chapters.vtt](https://media.emacsconf.org/2022/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt) +[View transcript](https://emacsconf.org/2022/talks/jupyter#jupyter-mainVideo-transcript) +[View on Toobnix](https://toobnix.org/w/3umjDWcUmHoypvBnzw7dTQ) +"""]] +[[!template id="chapters" vidid="jupyter-mainVideo" data=""" +00:00:00.000 Introduction +00:51.520 GhostText and Atomic Chrome +01:26.920 GhostText +03:13.120 Live coding demo +05:57.040 Editing code cells +07:57.160 Python +11:11.040 Julia +11:59.600 How does GhostText work? +12:44.320 Supported web browsers +13:33.000 Atomic Chrome configuration +14:21.560 Precautions +15:21.480 Conclusions +15:48.560 Thanks + +"""]] # Description -- cgit v1.2.3