summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2022/info/jupyter-after.md260
-rw-r--r--2022/info/jupyter-before.md27
2 files changed, 285 insertions, 2 deletions
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 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<a name="jupyter-mainVideo-transcript"></a>
+# 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 &quot;To Be Done&quot; 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.<div class="schedule-in-context schedule-svg-container" data-slug="jupyter">
-<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect stroke-width="3" x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/python" title="Short hyperlinks to Python docs" data-slug="python"> <title> 3:50- 3:55 Short hyperlinks to Python docs</title> <rect x="643" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(648,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> python</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
+<svg width="800" height="150" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title> Schedule for Saturday</title> <rect width="800" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2022/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:05 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(5,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2022/talks/journalism" title="Emacs journalism (or everything's a nail if you hit it with Emacs)" data-slug="journalism"> <title> 9:05- 9:25 Emacs journalism (or everything's a nail if you hit it with Emacs)</title> <rect x="7" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(36,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> journalism</text></g></a> <a href="/2022/talks/school" title="Back to school with Emacs" data-slug="school"> <title> 9:45- 9:55 Back to school with Emacs</title> <rect x="70" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(83,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> school</text></g></a> <a href="/2022/talks/handwritten" title="How to incorporate handwritten notes into Emacs Orgmode" data-slug="handwritten"> <title> 10:05-10:15 How to incorporate handwritten notes into Emacs Orgmode</title> <rect x="101" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(114,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> handwritten</text></g></a> <a href="/2022/talks/science" title="Writing and organizing literature notes for scientific writing" data-slug="science"> <title> 10:45-11:05 Writing and organizing literature notes for scientific writing</title> <rect x="164" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(193,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> science</text></g></a> <a href="/2022/talks/buddy" title="The Emacs Buddy initiative" data-slug="buddy"> <title> 11:25-11:35 The Emacs Buddy initiative</title> <rect x="227" y="15" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(240,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buddy</text></g></a> <a href="/2022/talks/meetups" title="Attending and organizing Emacs meetups" data-slug="meetups"> <title> 1:00- 1:20 Attending and organizing Emacs meetups</title> <rect x="376" y="15" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(405,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> meetups</text></g></a> <a href="/2022/talks/buttons" title="Linking personal info with Hyperbole implicit buttons" data-slug="buttons"> <title> 1:40- 1:55 Linking personal info with Hyperbole implicit buttons</title> <rect x="439" y="15" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(460,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> buttons</text></g></a> <a href="/2022/talks/realestate" title="Real estate and Org table formulas" data-slug="realestate"> <title> 2:15- 2:40 Real estate and Org table formulas</title> <rect x="494" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(531,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> realestate</text></g></a> <a href="/2022/talks/health" title="Health data journaling and visualization with Org Mode and gnuplot" data-slug="health"> <title> 3:00- 3:25 Health data journaling and visualization with Org Mode and gnuplot</title> <rect x="564" y="15" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(601,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> health</text></g></a> <a href="/2022/talks/jupyter" title="Edit live Jupyter notebook cells with Emacs" data-slug="jupyter"> <title> 3:45- 4:05 Edit live Jupyter notebook cells with Emacs</title> <rect stroke-width="3" x="635" y="15" opacity="0.8" width="31" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(664,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> jupyter</text></g></a> <a href="/2022/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 4:50- 4:55 Saturday closing remarks</title> <rect x="737" y="15" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(742,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2022/talks/treesitter" title="Tree-sitter beyond syntax highlighting" data-slug="treesitter"> <title> 10:00-10:15 Tree-sitter beyond syntax highlighting</title> <rect x="94" y="75" opacity="0.5" width="23" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(115,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> treesitter</text></g></a> <a href="/2022/talks/lspbridge" title="lsp-bridge: a smooth-as-butter asynchronous LSP client" data-slug="lspbridge"> <title> 10:25-10:45 lsp-bridge: a smooth-as-butter asynchronous LSP client</title> <rect x="133" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> lspbridge</text></g></a> <a href="/2022/talks/asmblox" title="asm-blox: a game based on WebAssembly that no one asked for" data-slug="asmblox"> <title> 10:55-11:15 asm-blox: a game based on WebAssembly that no one asked for</title> <rect x="180" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(209,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> asmblox</text></g></a> <a href="/2022/talks/wayland" title="Emacs should become a Wayland compositor" data-slug="wayland"> <title> 11:25-11:35 Emacs should become a Wayland compositor</title> <rect x="227" y="75" opacity="0.5" width="15" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(240,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> wayland</text></g></a> <a href="/2022/talks/sqlite" title="Using SQLite as a data source: a framework and an example" data-slug="sqlite"> <title> 1:00- 1:25 Using SQLite as a data source: a framework and an example</title> <rect x="376" y="75" opacity="0.5" width="39" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(413,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sqlite</text></g></a> <a href="/2022/talks/mail" title="Revisiting the anatomy of Emacs mail user agents" data-slug="mail"> <title> 1:50- 2:30 Revisiting the anatomy of Emacs mail user agents</title> <rect x="454" y="75" opacity="0.5" width="62" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(514,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mail</text></g></a> <a href="/2022/talks/maint" title="Maintaining the Maintainers: Attribution as an Economic Model for Open Source" data-slug="maint"> <title> 2:50- 3:10 Maintaining the Maintainers: Attribution as an Economic Model for Open Source</title> <rect x="549" y="75" opacity="0.5" width="31" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(578,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maint</text></g></a> <a href="/2022/talks/eev" title="Bidirectional links with eev" data-slug="eev"> <title> 3:35- 3:40 Bidirectional links with eev</title> <rect x="619" y="75" opacity="0.5" width="7" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(624,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> eev</text></g></a> <a href="/2022/talks/haskell" title="Haskell code exploration with Emacs" data-slug="haskell"> <title> 4:05- 4:35 Haskell code exploration with Emacs</title> <rect x="666" y="75" opacity="0.5" width="47" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(711,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> haskell</text></g></a> <g transform="translate(0,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 9 AM</text></g> <g transform="translate(94,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 10 AM</text></g> <g transform="translate(188,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 11 AM</text></g> <g transform="translate(282,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 12 PM</text></g> <g transform="translate(376,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 1 PM</text></g> <g transform="translate(470,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 2 PM</text></g> <g transform="translate(564,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 3 PM</text></g> <g transform="translate(658,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 4 PM</text></g> <g transform="translate(752,15)"> <line stroke="darkgray" x1="0" y1="0" x2="0" y2="120"></line> <text fill="black" x="0" y="133" font-size="10" text-anchor="left"> 5 PM</text></g></svg>
</div>
[[!toc ]]
Format: 18-min talk followed by live Q&A (<https://emacsconf.org/current/jupyter/room>)
Etherpad: <https://pad.emacsconf.org/2022-jupyter>
Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
-Status: Talk captioned
+Status: Now playing on the conference livestream
<div>Times in different timezones:</div><div class="times" start="2022-12-03T20:45:00Z" end="2022-12-03T21:05:00Z"><div class="conf-time">Saturday, Dec 3 2022, ~3:45 PM - 4:05 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 3 2022, ~2:45 PM - 3:05 PM CST (US/Central)<br />Saturday, Dec 3 2022, ~1:45 PM - 2:05 PM MST (US/Mountain)<br />Saturday, Dec 3 2022, ~12:45 PM - 1:05 PM PST (US/Pacific)<br />Saturday, Dec 3 2022, ~8:45 PM - 9:05 PM UTC <br />Saturday, Dec 3 2022, ~9:45 PM - 10:05 PM CET (Europe/Paris)<br />Saturday, Dec 3 2022, ~10:45 PM - 11:05 PM EET (Europe/Athens)<br />Sunday, Dec 4 2022, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)<br />Sunday, Dec 4 2022, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)<br />Sunday, Dec 4 2022, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)</div></div><div><a href="/2022/watch/gen/">Find out how to watch and participate</a></div>
+[[!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="""<track label="English" kind="captions" srclang="en" src="/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt" default />"""
+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