summaryrefslogtreecommitdiffstats
path: root/2022/info/jupyter-after.md
blob: 830fdf1628abc4eb213c469d7fe432fe2be55f4e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
<!-- 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"]]



Captioner: sachac

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)


<!-- End of emacsconf-publish-after-page -->