summaryrefslogtreecommitdiffstats
path: root/2024
diff options
context:
space:
mode:
Diffstat (limited to '2024')
-rw-r--r--2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt841
-rw-r--r--2024/info/hyperdrive-after.md288
-rw-r--r--2024/info/hyperdrive-before.md8
3 files changed, 1133 insertions, 4 deletions
diff --git a/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
new file mode 100644
index 00000000..4f12bbed
--- /dev/null
+++ b/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt
@@ -0,0 +1,841 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.919
+Hello, welcome to this talk on hyperdrive.el. I'm Joseph
+
+00:00:03.920 --> 00:00:07.439
+Turner presenting on behalf of Ushin, a tiny independent
+
+00:00:07.440 --> 00:00:12.039
+information freedom nonprofit. Hyperdrive.el is an Emacs
+
+00:00:12.040 --> 00:00:14.959
+interface to the Hyperdrive peer-to-peer file sharing
+
+00:00:14.960 --> 00:00:18.399
+system built by HolePunch. Like other peer-to-peer file
+
+00:00:18.400 --> 00:00:22.119
+sharing tools, such as BitTorrent, Hyperdrive lets you
+
+00:00:22.120 --> 00:00:25.959
+share unlimited files directly with other users without
+
+00:00:25.960 --> 00:00:29.519
+having to go through a central hub. One thing that sets
+
+00:00:29.520 --> 00:00:32.519
+HyperDrive apart is that the files you share can be
+
+00:00:32.520 --> 00:00:35.759
+modified. Since Hyperdrive has built-in versioning,
+
+00:00:35.760 --> 00:00:38.519
+you can explore the history of changes that you make to your
+
+00:00:38.520 --> 00:00:42.199
+files or others make to theirs. You can stream video and
+
+00:00:42.200 --> 00:00:45.639
+audio. There's no sign-up or account creation process
+
+00:00:45.640 --> 00:00:49.319
+required. It's all free software. This means that the
+
+00:00:49.320 --> 00:00:52.319
+community has the legal right, the tools, and the
+
+00:00:52.320 --> 00:00:55.359
+information necessary to participate in the development
+
+00:00:55.360 --> 00:00:58.337
+process, or even fork the project
+
+00:00:58.338 --> 00:01:00.799
+and go somewhere on[??]. Since
+
+00:01:00.800 --> 00:01:04.919
+last year's talk, we've added a few new features. It's now
+
+00:01:04.920 --> 00:01:08.559
+much easier to get started using hyperdrive.el, since we
+
+00:01:08.560 --> 00:01:12.399
+added the hyperdrive install command, which downloads the
+
+00:01:12.400 --> 00:01:16.399
+gateway program and installs it on your machine. We added a
+
+00:01:16.400 --> 00:01:19.959
+peer graph feature, which lets you visualize your network
+
+00:01:19.960 --> 00:01:24.719
+of sources of information. We also published a new package,
+
+00:01:24.720 --> 00:01:29.079
+hyperdrive-org-transclusion, which lets you display live
+
+00:01:29.080 --> 00:01:34.599
+updating snippets of Hyperdrive files in Org documents.
+
+00:01:34.600 --> 00:01:37.319
+Let's get started. Let's say you get an email from your
+
+00:01:37.320 --> 00:01:41.079
+friend Alice inviting you to check out hyperdrive.el.
+
+00:01:41.080 --> 00:01:45.519
+Let's click on the link here to look at the manual. Let's go
+
+00:01:45.520 --> 00:01:50.239
+down to the installation section. It says you need to have
+
+00:01:50.240 --> 00:01:54.639
+GNU Emacs version 28.1 or later. I'll assume you have it
+
+00:01:54.640 --> 00:01:57.479
+installed, but if not, you can click this link.
+
+00:01:57.480 --> 00:01:59.399
+You need to have curl installed,
+
+00:01:59.400 --> 00:02:01.919
+which is likely already the case, but if not,
+
+00:02:01.920 --> 00:02:04.719
+hyperdrive.el will let you know.
+
+00:02:04.720 --> 00:02:10.879
+Now from within Emacs you can install hyperdrive.el.
+
+00:02:10.880 --> 00:02:14.399
+Run M-x package-refresh-contents.
+
+00:02:14.400 --> 00:02:20.919
+Then, M-x package-install, type in hyperdrive,
+
+00:02:20.920 --> 00:02:26.079
+and hit return. Next, we'll install hypergateway ushin.
+
+00:02:26.080 --> 00:02:32.999
+Let's run M-x hyperdrive-install. It's prompting me to
+
+00:02:33.000 --> 00:02:35.880
+download and install the gateway, which is 51 megabytes.
+
+00:02:35.881 --> 00:02:39.780
+I'll press y.
+
+00:02:39.781 --> 00:02:44.159
+I will skip most of the download process. The download is
+
+00:02:44.160 --> 00:02:49.439
+wrapping up.
+
+00:02:49.440 --> 00:02:53.399
+Now, it's prompting me to start the gateway. I can either run
+
+00:02:53.400 --> 00:02:59.279
+M-x hyperdrive start, or I can press this button. And
+
+00:02:59.280 --> 00:03:03.479
+after a few moments, we'll see that the gateway will start.
+
+00:03:03.480 --> 00:03:07.279
+It's ready. You can also click this button, View Hyperdrive
+
+00:03:07.280 --> 00:03:10.239
+User Info Manual, to view the same manual that we were
+
+00:03:10.240 --> 00:03:13.479
+viewing in the browser. The info manual comes with
+
+00:03:13.480 --> 00:03:17.319
+hyperdrive.el and is available offline. Now that
+
+00:03:17.320 --> 00:03:20.559
+everything's installed and the gateway is running, we're
+
+00:03:20.560 --> 00:03:23.399
+back at Alice's email. Let's click on the link to her
+
+00:03:23.400 --> 00:03:28.719
+hyperdrive. Here's Alice's hyperdrive. Let's open her
+
+00:03:28.720 --> 00:03:33.079
+hello.org file.
+
+00:03:33.080 --> 00:03:37.319
+I'm being prompted to mark Alice's hyperdrive. Currently,
+
+00:03:37.320 --> 00:03:41.879
+it's unknown. I'll press ? to see more details.
+
+00:03:41.880 --> 00:03:48.279
+Safe, unsafe, unknown. I'll press e for explain. In the info
+
+00:03:48.280 --> 00:03:54.139
+manual, it says that if a hyperdrive is marked as safe, that
+
+00:03:54.140 --> 00:03:57.799
+means files in that hyperdrive will automatically have
+
+00:03:57.800 --> 00:04:02.559
+their major mode enabled based on their file extension. In
+
+00:04:02.560 --> 00:04:06.719
+this case, if I mark Alice's hyperdrive as safe and I click on
+
+00:04:06.720 --> 00:04:10.519
+this hello.org file, Emacs will automatically enable org
+
+00:04:10.520 --> 00:04:14.919
+mode in that file. Since I know Alice directly, I'll mark her
+
+00:04:14.920 --> 00:04:19.639
+hyperdrive as safe. I'll click on the file hello.org again,
+
+00:04:19.640 --> 00:04:25.679
+and now I'll press Shift-s for safe.
+
+00:04:25.680 --> 00:04:30.639
+Now I'm going to set Alice's pet name. Hyperdrive.el has
+
+00:04:30.640 --> 00:04:34.679
+different ways to name a hyperdrive. The public key is the
+
+00:04:34.680 --> 00:04:38.719
+drive's unique identifier. You can also assign yourself a
+
+00:04:38.720 --> 00:04:42.359
+public nickname, which you announce to the world. Then
+
+00:04:42.360 --> 00:04:45.959
+users on their own machines can assign each hyperdrive that
+
+00:04:45.960 --> 00:04:50.439
+they are aware of a private pet name. I'll assign Alice a
+
+00:04:50.440 --> 00:04:54.079
+pet name, which is the way that I will identify Alice just on
+
+00:04:54.080 --> 00:05:01.906
+my own machine. I'll type in my friend Alice.
+
+00:05:01.907 --> 00:05:03.707
+Then when I refresh her drive,
+
+00:05:03.708 --> 00:05:07.359
+we see that it says pet name in the top left.
+
+00:05:07.360 --> 00:05:09.392
+Now I'll do what she asks,
+
+00:05:09.393 --> 00:05:11.613
+which is to right click on her name and
+
+00:05:11.614 --> 00:05:15.259
+open her peer graph. In the context menu, I see a few
+
+00:05:15.260 --> 00:05:19.159
+different actions I can take, but I'll click on peer graph.
+
+00:05:19.160 --> 00:05:22.959
+It's prompting me to pick the max hops for sources. Default
+
+00:05:22.960 --> 00:05:26.799
+3. I'll choose the default. Same for blockers. I'll explain
+
+00:05:26.800 --> 00:05:27.599
+what that means later.
+
+00:05:30.380 --> 00:05:35.959
+This is Alice's peer graph. Here we can see that Alice has two
+
+00:05:35.960 --> 00:05:41.279
+direct sources, Bob and Eve. Both Bob and Eve have assigned
+
+00:05:41.280 --> 00:05:45.919
+themselves nicknames, and so we see Bob and Eve here. Eve has
+
+00:05:45.920 --> 00:05:50.479
+assigned this other hyperdrive to be a source. But this
+
+00:05:50.480 --> 00:05:55.959
+other hyperdrive, whose public key is KB3ZR6MQ
+
+00:05:55.960 --> 00:05:59.519
+and so on--if we hover over the hyperdrive, we'll see the full
+
+00:05:59.520 --> 00:06:03.239
+public key--has not assigned itself a nickname. So we
+
+00:06:03.240 --> 00:06:07.999
+just see the truncated short public key. Because we've
+
+00:06:08.000 --> 00:06:10.917
+assigned a pet name for Alice,
+
+00:06:10.918 --> 00:06:14.558
+we see Alice's pet name show up here.
+
+00:06:14.559 --> 00:06:17.839
+Now I'll open the peer list view to show the same
+
+00:06:17.840 --> 00:06:21.479
+information in a different way. Since I'm using a large
+
+00:06:21.480 --> 00:06:25.199
+font, I'll widen this window so we can see everything going
+
+00:06:25.200 --> 00:06:29.319
+on in the peer list. We see that the root hyperdrive is pet
+
+00:06:29.320 --> 00:06:33.639
+name, my friend Alice, nickname Alice, public key, DM1, and
+
+00:06:33.640 --> 00:06:38.359
+so on. We've set the sources max hops to three, which means
+
+00:06:38.360 --> 00:06:42.359
+that we will go out at most three hops from Alice in order to
+
+00:06:42.360 --> 00:06:49.839
+find sources. One hop from Alice are Bob and Eve. One hop
+
+00:06:49.840 --> 00:06:55.839
+from Eve is KB3, which is two hops from Alice. Now we've set
+
+00:06:55.840 --> 00:06:59.159
+the max hops for sources to three, but in this case, the
+
+00:06:59.160 --> 00:07:04.279
+network is small, and KB3 has no sources. So we can only go
+
+00:07:04.280 --> 00:07:07.959
+out two hops from Alice until we run out of sources. In the
+
+00:07:07.960 --> 00:07:11.159
+future, we plan to add a search feature based on this list of
+
+00:07:11.160 --> 00:07:14.479
+sources. You type in a query, and you get back a list of
+
+00:07:14.480 --> 00:07:19.879
+results published by Eve, Bob, or KB3. It's also possible to
+
+00:07:19.880 --> 00:07:23.239
+block peers. I'll open the transient menu by pressing
+
+00:07:23.240 --> 00:07:28.759
+question mark. For now, let's turn on showing blocked
+
+00:07:28.760 --> 00:07:35.439
+peers. I'll press s x, and now it says blocked sources.
+
+00:07:35.440 --> 00:07:38.839
+Now we can see Mallory also shows up. Mallory has been
+
+00:07:38.840 --> 00:07:43.399
+included as a source by Eve, but is blocked. So in the end
+
+00:07:43.400 --> 00:07:47.039
+result, she does not show up in the list of sources. Instead,
+
+00:07:47.040 --> 00:07:51.839
+she shows up as a blocked source. But how is it that Mallory
+
+00:07:51.840 --> 00:07:55.039
+ended up being blocked? Let's open up the transient menu
+
+00:07:55.040 --> 00:08:02.759
+once more and click S, B to show blockers. Now we can see that
+
+00:08:02.760 --> 00:08:07.079
+Bob has blocked Mallory. This means that Bob is not
+
+00:08:07.080 --> 00:08:12.519
+interested in seeing search results from Mallory. Since
+
+00:08:12.520 --> 00:08:17.639
+Alice has included Bob as a blocker, that means that Alice
+
+00:08:17.640 --> 00:08:23.439
+trusts Bob to block people on her behalf. So since Bob has
+
+00:08:23.440 --> 00:08:27.479
+blocked Mallory, Mallory does not show up in Alice's
+
+00:08:27.480 --> 00:08:31.919
+peergraph as a source. Well, now I'm curious to see what it is
+
+00:08:31.920 --> 00:08:35.919
+Mallory published that drove Bob to block her. I'll
+
+00:08:35.920 --> 00:08:39.439
+right-click on Mallory, and in the context menu, open
+
+00:08:39.440 --> 00:08:44.319
+Hyperdrive, and... Wingsuit Flying Grand Canyon Point of
+
+00:08:44.320 --> 00:08:49.879
+View Not Clickbait? I gotta check this out.
+
+00:08:49.880 --> 00:08:56.159
+No! Disgusting! No wonder Bob blocked Mallory. Let's go
+
+00:08:56.160 --> 00:09:01.839
+back to Alice's paragraph. Mallory is a blocked source.
+
+00:09:01.840 --> 00:09:05.599
+Are there any peers who are blocked but who aren't sources?
+
+00:09:05.600 --> 00:09:11.739
+I'll open the transient menu and I'll press s x. Now we're
+
+00:09:11.740 --> 00:09:16.839
+looking at blocked non-sources. Darth, who's been blocked
+
+00:09:16.840 --> 00:09:20.759
+by Bob, has not been added by any of Alice's sources as a
+
+00:09:20.760 --> 00:09:25.559
+source. So Darth is a blocked non-source. I'll open the
+
+00:09:25.560 --> 00:09:29.699
+transient menu again and I'll press s x. Now we're
+
+00:09:29.700 --> 00:09:34.639
+looking at all blocked peers. Both Mallory and Darth show
+
+00:09:34.640 --> 00:09:37.959
+up. If I scroll down in the peer list, we'll see that Mallory
+
+00:09:37.960 --> 00:09:42.519
+is listed under blocked sources, and Darth is listed under
+
+00:09:42.520 --> 00:09:45.559
+blocked non-sources. This view has gotten a little bit
+
+00:09:45.560 --> 00:09:49.319
+busy. Let's say that we're only interested in how Alice
+
+00:09:49.320 --> 00:09:54.519
+relates to Mallory. I'll open the transient menu, and I
+
+00:09:54.520 --> 00:09:58.519
+will filter the graph to show paths only to Mallory. I'll
+
+00:09:58.520 --> 00:10:05.519
+press o a, type in Mallory, and hit enter. Now we see that
+
+00:10:05.520 --> 00:10:11.479
+Mallory has a bold border and KB3 and Darth are missing from
+
+00:10:11.480 --> 00:10:16.679
+the graph. Eve shows up because there's a path from Alice to
+
+00:10:16.680 --> 00:10:22.479
+Mallory that goes through Eve. Same for Bob. We can also add
+
+00:10:22.480 --> 00:10:28.599
+more than one peer in this view. I'll press OA again, and
+
+00:10:28.600 --> 00:10:34.719
+this time I'll choose Darth. Now Darth and Mallory have bold
+
+00:10:34.720 --> 00:10:38.839
+borders, and KB3 is still missing. We can remove Mallory and
+
+00:10:38.840 --> 00:10:42.799
+Darth one at a time with o r, or we can press C-u, the
+
+00:10:42.800 --> 00:10:47.679
+universal prefix argument, and then o r to remove both
+
+00:10:47.680 --> 00:10:51.239
+Mallory and Darth from the list. Now we're back to seeing
+
+00:10:51.240 --> 00:10:55.679
+everybody. This view of the graph is somewhat simplified
+
+00:10:55.680 --> 00:10:57.537
+because we're showing only
+
+00:10:57.538 --> 00:11:00.238
+the shortest paths between peers.
+
+00:11:00.239 --> 00:11:06.039
+If I press Shift-s now we're looking at all paths.
+
+00:11:06.040 --> 00:11:10.039
+Here, we can see that in addition to going from Alice to
+
+00:11:10.040 --> 00:11:15.519
+Bob as a source directly, we also go from Alice to Bob through
+
+00:11:15.520 --> 00:11:21.079
+Eve as a source. Let's go back to showing only the shortest
+
+00:11:21.080 --> 00:11:27.719
+paths. Currently, the max hops for sources and for blockers
+
+00:11:27.720 --> 00:11:31.679
+is set to 3. Let's see what happens if we set the blockers max
+
+00:11:31.680 --> 00:11:33.519
+hops to 0.
+
+00:11:35.800 --> 00:11:39.479
+After the graph reloads, we now see that Mallory
+
+00:11:39.480 --> 00:11:43.286
+shows up as a source, not as a blocked source.
+
+00:11:43.287 --> 00:11:44.759
+This is because Bob,
+
+00:11:44.760 --> 00:11:49.199
+who is one hop away from Alice, is no longer included as a
+
+00:11:49.200 --> 00:11:52.479
+blocker, because we've set the blockers max hops to 0. And
+
+00:11:52.480 --> 00:11:57.519
+since Bob is not a blocker, the fact that Bob blocks Mallory
+
+00:11:57.520 --> 00:12:01.719
+doesn't factor in. While Alice is the only one who gets to
+
+00:12:01.720 --> 00:12:05.959
+decide who her direct sources, blockers, and blocked peers
+
+00:12:05.960 --> 00:12:10.239
+are, anyone can view Alice's peer graph, tinker with the
+
+00:12:10.240 --> 00:12:14.439
+sources or blockers' max hops, and use her list of sources to
+
+00:12:14.440 --> 00:12:19.239
+do a search. Let's see what happens if we set sources' max
+
+00:12:19.240 --> 00:12:24.719
+hops to 2. Well, the graph doesn't change, because we only
+
+00:12:24.720 --> 00:12:29.239
+ever went out 2 hops anyway. Let's set source's max hops to 1.
+
+00:12:30.140 --> 00:12:35.159
+Now we only see Bob and Eve, since KB3 and Mallory are
+
+00:12:35.160 --> 00:12:43.079
+2 hops out. Source hops 0. Now we're left with just Alice.
+
+00:12:44.120 --> 00:12:47.999
+Now I'd like to create a new hyperdrive and add Alice as a
+
+00:12:48.000 --> 00:12:52.731
+source. I'll run M-x hyperdrive new.
+
+00:12:52.732 --> 00:12:53.812
+Now it's prompting me
+
+00:12:53.813 --> 00:12:57.479
+for a new hyperdrive seed. Seed is a string of characters
+
+00:12:57.480 --> 00:13:01.359
+that's combined with your secret key, which is generated
+
+00:13:01.360 --> 00:13:04.719
+for you by the gateway program, in order to create a new
+
+00:13:04.720 --> 00:13:10.679
+public key for this new hyperdrive. I'll type in Joseph, a
+
+00:13:10.680 --> 00:13:15.319
+new drive. Now, I'll right-click on my own name, and in the
+
+00:13:15.320 --> 00:13:21.599
+context menu, I'll choose Set Relation From. From Joseph
+
+00:13:21.600 --> 00:13:32.279
+to Alice, as a source. Now, I'll right-click on my name again,
+
+00:13:32.280 --> 00:13:40.919
+and click on Peer Graph. Max hops, let's say three, and for
+
+00:13:40.920 --> 00:13:41.879
+blockers as well,
+
+00:13:45.440 --> 00:13:49.399
+Here's the peer graph from my newly created
+
+00:13:49.400 --> 00:13:54.199
+hyperdrive's perspective. Mallory is included as a
+
+00:13:54.200 --> 00:13:58.519
+source, three hops from the root. Let's open the list view.
+
+00:14:01.220 --> 00:14:06.439
+If we were to mark Alice as a blocker by clicking on this
+
+00:14:06.440 --> 00:14:10.319
+button in the blocker column next to the pet name for Alice,
+
+00:14:12.120 --> 00:14:16.959
+Then we see that Mallory shows up as a blocked source. Only
+
+00:14:16.960 --> 00:14:21.359
+now that Joseph includes Alice as a blocker does the fact
+
+00:14:21.360 --> 00:14:26.399
+that Bob blocked Mallory take effect. You can click on
+
+00:14:26.400 --> 00:14:30.539
+another peer to set them as the root hyperdrive. I'll click
+
+00:14:30.540 --> 00:14:34.999
+on Eve. Now we're looking at the peer graph from Eve's
+
+00:14:35.000 --> 00:14:39.519
+perspective. This peer graph view has a history. If I open
+
+00:14:39.520 --> 00:14:42.359
+the transient menu, you'll see here there's a back and a
+
+00:14:42.360 --> 00:14:47.359
+forward button. Back is bound to l for left. If I press l,
+
+00:14:48.440 --> 00:14:51.839
+we're looking at the graph from Joseph's perspective. If I
+
+00:14:51.840 --> 00:14:56.279
+press l again, now we're looking at Alice, as at the
+
+00:14:56.280 --> 00:15:01.439
+beginning. I'll press r to go forward, and r again, and now
+
+00:15:01.440 --> 00:15:04.734
+we're back at Eve. Now, I'd like to show you
+
+00:15:04.735 --> 00:15:08.337
+the hyperdrive-org-transclusion package we published.
+
+00:15:08.338 --> 00:15:10.358
+I'll open up the HyperDrive manual
+
+00:15:10.359 --> 00:15:14.399
+to see how to install it.
+
+00:15:15.680 --> 00:15:20.999
+Now, from here, I'll press m and type in transclusion to jump
+
+00:15:21.000 --> 00:15:23.599
+straight to the org-transclusion integration section of
+
+00:15:23.600 --> 00:15:27.079
+the manual. To summarize, we can install HyperDrive
+
+00:15:27.080 --> 00:15:30.879
+org-transclusion with M-x package-install
+
+00:15:32.220 --> 00:15:33.919
+hyperdrive-org-transclusion.
+
+00:15:37.000 --> 00:15:42.159
+Then, once this is done, we will copy the following snippet
+
+00:15:43.780 --> 00:15:47.559
+and add it either to our init.el file or, in this case, I'll
+
+00:15:47.560 --> 00:15:52.439
+just evaluate it. Now, hyperdrive-org-transclusion mode is
+
+00:15:52.440 --> 00:15:52.879
+enabled.
+
+00:15:58.100 --> 00:16:01.479
+Let's go back to the hello.org file in Alice's hyperdrive.
+
+00:16:01.480 --> 00:16:07.239
+I'll right-click on Alice, then click Open Hyperdrive, and
+
+00:16:07.240 --> 00:16:11.359
+hit Enter on hello.org. This time, I'm not prompted to mark
+
+00:16:11.360 --> 00:16:16.199
+Alice's hyperdrive as safe, since we did it already. I'll
+
+00:16:16.200 --> 00:16:20.719
+navigate to the Check Out My Peers heading. Then I'll run
+
+00:16:20.720 --> 00:16:28.359
+M-x org-store-link. Now, I'll create a new file in my
+
+00:16:28.360 --> 00:16:32.959
+hyperdrive by running M-x hyperdrive-find-file. I'll
+
+00:16:32.960 --> 00:16:38.488
+select my hyperdrive and I'll call this new file
+
+00:16:38.489 --> 00:16:45.919
+response-to-alice.org.
+
+00:16:45.920 --> 00:16:50.780
+Now, I'll paste in a response that I've written.
+
+00:16:50.781 --> 00:16:57.979
+I'll go to the bottom and I will run M-x org-insert-link
+
+00:16:57.980 --> 00:16:59.423
+and I'll insert the link
+
+00:16:59.424 --> 00:17:02.799
+that I stored earlier. As a link
+
+00:17:02.800 --> 00:17:07.759
+description, I'll change it to snippet from Alice's
+
+00:17:08.880 --> 00:17:09.879
+hyperdrive file.
+
+00:17:12.700 --> 00:17:18.399
+I'll save my hyperdrive file.
+
+00:17:18.400 --> 00:17:21.839
+Now, to show that the link works, I'll just kill this buffer
+
+00:17:21.840 --> 00:17:27.099
+showing the hello.org file, and I'll click on the link.
+
+00:17:27.100 --> 00:17:29.487
+Now in addition to linking from my file
+
+00:17:29.488 --> 00:17:31.488
+to the heading in Alice's file,
+
+00:17:31.489 --> 00:17:35.699
+I'd like to transclude this headings content in my file.
+
+00:17:35.700 --> 00:17:38.634
+So I'll go to the link in my file and run
+
+00:17:38.635 --> 00:17:45.400
+M-x org-transclusion-make-from-link
+
+00:17:45.401 --> 00:17:47.879
+and I'll save my file again.
+
+00:17:47.880 --> 00:17:50.504
+All that's been added is another link
+
+00:17:50.505 --> 00:17:54.433
+prefixed with this transclude keyword.
+
+00:17:54.434 --> 00:17:57.034
+To make the transclusion show up inline,
+
+00:17:57.035 --> 00:18:02.359
+I'll run M-x org-transclusion-add. The content
+
+00:18:02.360 --> 00:18:05.359
+of Alice's file hasn't been copied into mine. It's just
+
+00:18:05.360 --> 00:18:12.959
+being transcluded. If I run M-x org-transclusion-remove,
+
+00:18:12.960 --> 00:18:15.439
+you'll see that the underlying content is still
+
+00:18:15.440 --> 00:18:21.639
+just the transclude keyword and the link.
+
+00:18:21.640 --> 00:18:24.319
+Now some time has passed and Alice has updated her
+
+00:18:24.320 --> 00:18:29.879
+hyperdrive file. She wrote, please add me as a source. Since
+
+00:18:29.880 --> 00:18:33.559
+the transclude link that I added in my file does not specify a
+
+00:18:33.560 --> 00:18:36.879
+version, it will always transclude the latest version of
+
+00:18:36.880 --> 00:18:42.639
+Alice's hello.org file. If I run M-x org-transclusion-add
+
+00:18:42.640 --> 00:18:46.719
+once more, we'll see that the latest version of Alice's
+
+00:18:46.720 --> 00:18:51.679
+file gets transcluded into mine. Let's say that I want to
+
+00:18:51.680 --> 00:18:54.959
+transclude the previous version of Alice's hello.org
+
+00:18:54.960 --> 00:18:58.879
+file, and I don't want my transclusion to change when Alice
+
+00:18:58.880 --> 00:19:02.919
+updates her file. That's possible too. I'll go over to her
+
+00:19:02.920 --> 00:19:09.759
+file and run M-x hyperdrive-open-previous-version. Now
+
+00:19:09.760 --> 00:19:14.079
+when I widen the window a little, we can see in the mode line
+
+00:19:14.080 --> 00:19:18.279
+that this is version 57. For an explanation of what the
+
+00:19:18.280 --> 00:19:21.599
+version numbers mean, check out the last video or the info
+
+00:19:21.600 --> 00:19:25.759
+manual. For now, I'll go down to her check out my peers
+
+00:19:25.760 --> 00:19:32.999
+heading and run M-x org-store-link. Now, in my response to
+
+00:19:33.000 --> 00:19:39.159
+Alice, I'll insert the link. I'll run org transclusion make
+
+00:19:39.160 --> 00:19:44.759
+from link. Now there are two transclusions. The first
+
+00:19:44.760 --> 00:19:47.719
+transclusion will update whenever Alice updates her file,
+
+00:19:47.720 --> 00:19:52.919
+and the second transclusion is pinned to version 57. That
+
+00:19:52.920 --> 00:19:53.356
+covers Hyperdrive install, the peer graph, and
+
+00:19:53.357 --> 00:19:58.298
+hyperdrive-org-transclusion.
+
+00:19:58.299 --> 00:20:00.519
+Feel free to check out the hyperdrive.el
+
+00:20:00.520 --> 00:20:04.119
+info manual in the Ushin hyperdrive here, or on the
+
+00:20:04.120 --> 00:20:08.439
+ushin.org website. Thanks to the folks at Sopranica, we
+
+00:20:08.440 --> 00:20:11.879
+have a public XMPP group chat you can join, either using an
+
+00:20:11.880 --> 00:20:15.919
+XMPP client or anonymously from your browser. If you use
+
+00:20:15.920 --> 00:20:19.799
+Matrix, there's also a bridge. Thank you for watching, and
+
+00:20:19.800 --> 00:20:22.519
+thank you to the EmacsConf organizers and all the
+
+00:20:22.520 --> 00:20:25.160
+presenters who made this wonderful event possible.
diff --git a/2024/info/hyperdrive-after.md b/2024/info/hyperdrive-after.md
index 912bcaf7..754a6aeb 100644
--- a/2024/info/hyperdrive-after.md
+++ b/2024/info/hyperdrive-after.md
@@ -1,6 +1,294 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<a name="hyperdrive-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello, welcome to this talk on hyperdrive.el. I'm Joseph""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Turner presenting on behalf of Ushin, a tiny independent""" start="00:00:03.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information freedom nonprofit. Hyperdrive.el is an Emacs""" start="00:00:07.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""interface to the Hyperdrive peer-to-peer file sharing""" start="00:00:12.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""system built by HolePunch. Like other peer-to-peer file""" start="00:00:14.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sharing tools, such as BitTorrent, Hyperdrive lets you""" start="00:00:18.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""share unlimited files directly with other users without""" start="00:00:22.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""having to go through a central hub. One thing that sets""" start="00:00:25.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""HyperDrive apart is that the files you share can be""" start="00:00:29.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""modified. Since Hyperdrive has built-in versioning,""" start="00:00:32.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can explore the history of changes that you make to your""" start="00:00:35.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""files or others make to theirs. You can stream video and""" start="00:00:38.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""audio. There's no sign-up or account creation process""" start="00:00:42.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""required. It's all free software. This means that the""" start="00:00:45.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""community has the legal right, the tools, and the""" start="00:00:49.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information necessary to participate in the development""" start="00:00:52.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""process, or even fork the project""" start="00:00:55.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and go somewhere on[??]. Since""" start="00:00:58.338" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""last year's talk, we've added a few new features. It's now""" start="00:01:00.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""much easier to get started using hyperdrive.el, since we""" start="00:01:04.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""added the hyperdrive install command, which downloads the""" start="00:01:08.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""gateway program and installs it on your machine. We added a""" start="00:01:12.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer graph feature, which lets you visualize your network""" start="00:01:16.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of sources of information. We also published a new package,""" start="00:01:19.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion, which lets you display live""" start="00:01:24.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updating snippets of Hyperdrive files in Org documents.""" start="00:01:29.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's get started. Let's say you get an email from your""" start="00:01:34.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""friend Alice inviting you to check out hyperdrive.el.""" start="00:01:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's click on the link here to look at the manual. Let's go""" start="00:01:41.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""down to the installation section. It says you need to have""" start="00:01:45.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""GNU Emacs version 28.1 or later. I'll assume you have it""" start="00:01:50.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""installed, but if not, you can click this link.""" start="00:01:54.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You need to have curl installed,""" start="00:01:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is likely already the case, but if not,""" start="00:01:59.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el will let you know.""" start="00:02:01.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now from within Emacs you can install hyperdrive.el.""" start="00:02:04.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Run M-x package-refresh-contents.""" start="00:02:10.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, M-x package-install, type in hyperdrive,""" start="00:02:14.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and hit return. Next, we'll install hypergateway ushin.""" start="00:02:20.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's run M-x hyperdrive-install. It's prompting me to""" start="00:02:26.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""download and install the gateway, which is 51 megabytes.""" start="00:02:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press y.""" start="00:02:35.881" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will skip most of the download process. The download is""" start="00:02:39.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""wrapping up.""" start="00:02:44.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it's prompting me to start the gateway. I can either run""" start="00:02:49.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x hyperdrive start, or I can press this button. And""" start="00:02:53.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""after a few moments, we'll see that the gateway will start.""" start="00:02:59.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's ready. You can also click this button, View Hyperdrive""" start="00:03:03.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""User Info Manual, to view the same manual that we were""" start="00:03:07.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""viewing in the browser. The info manual comes with""" start="00:03:10.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive.el and is available offline. Now that""" start="00:03:13.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""everything's installed and the gateway is running, we're""" start="00:03:17.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back at Alice's email. Let's click on the link to her""" start="00:03:20.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive. Here's Alice's hyperdrive. Let's open her""" start="00:03:23.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hello.org file.""" start="00:03:28.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'm being prompted to mark Alice's hyperdrive. Currently,""" start="00:03:33.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's unknown. I'll press ? to see more details.""" start="00:03:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Safe, unsafe, unknown. I'll press e for explain. In the info""" start="00:03:41.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""manual, it says that if a hyperdrive is marked as safe, that""" start="00:03:48.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""means files in that hyperdrive will automatically have""" start="00:03:54.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""their major mode enabled based on their file extension. In""" start="00:03:57.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this case, if I mark Alice's hyperdrive as safe and I click on""" start="00:04:02.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this hello.org file, Emacs will automatically enable org""" start="00:04:06.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""mode in that file. Since I know Alice directly, I'll mark her""" start="00:04:10.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive as safe. I'll click on the file hello.org again,""" start="00:04:14.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and now I'll press Shift-s for safe.""" start="00:04:19.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'm going to set Alice's pet name. Hyperdrive.el has""" start="00:04:25.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""different ways to name a hyperdrive. The public key is the""" start="00:04:30.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""drive's unique identifier. You can also assign yourself a""" start="00:04:34.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public nickname, which you announce to the world. Then""" start="00:04:38.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""users on their own machines can assign each hyperdrive that""" start="00:04:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they are aware of a private pet name. I'll assign Alice a""" start="00:04:45.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""pet name, which is the way that I will identify Alice just on""" start="00:04:50.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""my own machine. I'll type in my friend Alice.""" start="00:04:54.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then when I refresh her drive,""" start="00:05:01.907" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that it says pet name in the top left.""" start="00:05:03.708" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll do what she asks,""" start="00:05:07.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is to right click on her name and""" start="00:05:09.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""open her peer graph. In the context menu, I see a few""" start="00:05:11.614" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""different actions I can take, but I'll click on peer graph.""" start="00:05:15.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's prompting me to pick the max hops for sources. Default""" start="00:05:19.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""3. I'll choose the default. Same for blockers. I'll explain""" start="00:05:22.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""what that means later.""" start="00:05:26.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is Alice's peer graph. Here we can see that Alice has two""" start="00:05:30.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""direct sources, Bob and Eve. Both Bob and Eve have assigned""" start="00:05:35.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""themselves nicknames, and so we see Bob and Eve here. Eve has""" start="00:05:41.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""assigned this other hyperdrive to be a source. But this""" start="00:05:45.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""other hyperdrive, whose public key is KB3ZR6MQ""" start="00:05:50.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and so on--if we hover over the hyperdrive, we'll see the full""" start="00:05:55.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public key--has not assigned itself a nickname. So we""" start="00:05:59.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just see the truncated short public key. Because we've""" start="00:06:03.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""assigned a pet name for Alice,""" start="00:06:08.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see Alice's pet name show up here.""" start="00:06:10.918" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll open the peer list view to show the same""" start="00:06:14.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""information in a different way. Since I'm using a large""" start="00:06:17.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""font, I'll widen this window so we can see everything going""" start="00:06:21.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on in the peer list. We see that the root hyperdrive is pet""" start="00:06:25.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""name, my friend Alice, nickname Alice, public key, DM1, and""" start="00:06:29.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""so on. We've set the sources max hops to three, which means""" start="00:06:33.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that we will go out at most three hops from Alice in order to""" start="00:06:38.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""find sources. One hop from Alice are Bob and Eve. One hop""" start="00:06:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from Eve is KB3, which is two hops from Alice. Now we've set""" start="00:06:49.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the max hops for sources to three, but in this case, the""" start="00:06:55.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""network is small, and KB3 has no sources. So we can only go""" start="00:06:59.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""out two hops from Alice until we run out of sources. In the""" start="00:07:04.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""future, we plan to add a search feature based on this list of""" start="00:07:07.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sources. You type in a query, and you get back a list of""" start="00:07:11.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""results published by Eve, Bob, or KB3. It's also possible to""" start="00:07:14.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""block peers. I'll open the transient menu by pressing""" start="00:07:19.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""question mark. For now, let's turn on showing blocked""" start="00:07:23.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peers. I'll press s x, and now it says blocked sources.""" start="00:07:28.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now we can see Mallory also shows up. Mallory has been""" start="00:07:35.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""included as a source by Eve, but is blocked. So in the end""" start="00:07:38.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""result, she does not show up in the list of sources. Instead,""" start="00:07:43.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""she shows up as a blocked source. But how is it that Mallory""" start="00:07:47.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ended up being blocked? Let's open up the transient menu""" start="00:07:51.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once more and click S, B to show blockers. Now we can see that""" start="00:07:55.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Bob has blocked Mallory. This means that Bob is not""" start="00:08:02.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""interested in seeing search results from Mallory. Since""" start="00:08:07.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice has included Bob as a blocker, that means that Alice""" start="00:08:12.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""trusts Bob to block people on her behalf. So since Bob has""" start="00:08:17.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocked Mallory, Mallory does not show up in Alice's""" start="00:08:23.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peergraph as a source. Well, now I'm curious to see what it is""" start="00:08:27.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory published that drove Bob to block her. I'll""" start="00:08:31.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""right-click on Mallory, and in the context menu, open""" start="00:08:35.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive, and... Wingsuit Flying Grand Canyon Point of""" start="00:08:39.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""View Not Clickbait? I gotta check this out.""" start="00:08:44.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""No! Disgusting! No wonder Bob blocked Mallory. Let's go""" start="00:08:49.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back to Alice's paragraph. Mallory is a blocked source.""" start="00:08:56.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Are there any peers who are blocked but who aren't sources?""" start="00:09:01.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open the transient menu and I'll press s x. Now we're""" start="00:09:05.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""looking at blocked non-sources. Darth, who's been blocked""" start="00:09:11.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by Bob, has not been added by any of Alice's sources as a""" start="00:09:16.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source. So Darth is a blocked non-source. I'll open the""" start="00:09:20.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transient menu again and I'll press s x. Now we're""" start="00:09:25.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""looking at all blocked peers. Both Mallory and Darth show""" start="00:09:29.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""up. If I scroll down in the peer list, we'll see that Mallory""" start="00:09:34.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is listed under blocked sources, and Darth is listed under""" start="00:09:37.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocked non-sources. This view has gotten a little bit""" start="00:09:42.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""busy. Let's say that we're only interested in how Alice""" start="00:09:45.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""relates to Mallory. I'll open the transient menu, and I""" start="00:09:49.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""will filter the graph to show paths only to Mallory. I'll""" start="00:09:54.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""press o a, type in Mallory, and hit enter. Now we see that""" start="00:09:58.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory has a bold border and KB3 and Darth are missing from""" start="00:10:05.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the graph. Eve shows up because there's a path from Alice to""" start="00:10:11.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory that goes through Eve. Same for Bob. We can also add""" start="00:10:16.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more than one peer in this view. I'll press OA again, and""" start="00:10:22.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this time I'll choose Darth. Now Darth and Mallory have bold""" start="00:10:28.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""borders, and KB3 is still missing. We can remove Mallory and""" start="00:10:34.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Darth one at a time with o r, or we can press C-u, the""" start="00:10:38.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""universal prefix argument, and then o r to remove both""" start="00:10:42.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Mallory and Darth from the list. Now we're back to seeing""" start="00:10:47.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""everybody. This view of the graph is somewhat simplified""" start="00:10:51.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because we're showing only""" start="00:10:55.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the shortest paths between peers.""" start="00:10:57.538" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If I press Shift-s now we're looking at all paths.""" start="00:11:00.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here, we can see that in addition to going from Alice to""" start="00:11:06.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Bob as a source directly, we also go from Alice to Bob through""" start="00:11:10.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Eve as a source. Let's go back to showing only the shortest""" start="00:11:15.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""paths. Currently, the max hops for sources and for blockers""" start="00:11:21.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is set to 3. Let's see what happens if we set the blockers max""" start="00:11:27.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hops to 0.""" start="00:11:31.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""After the graph reloads, we now see that Mallory""" start="00:11:35.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""shows up as a source, not as a blocked source.""" start="00:11:39.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is because Bob,""" start="00:11:43.287" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""who is one hop away from Alice, is no longer included as a""" start="00:11:44.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blocker, because we've set the blockers max hops to 0. And""" start="00:11:49.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""since Bob is not a blocker, the fact that Bob blocks Mallory""" start="00:11:52.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""doesn't factor in. While Alice is the only one who gets to""" start="00:11:57.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""decide who her direct sources, blockers, and blocked peers""" start="00:12:01.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are, anyone can view Alice's peer graph, tinker with the""" start="00:12:05.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""sources or blockers' max hops, and use her list of sources to""" start="00:12:10.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""do a search. Let's see what happens if we set sources' max""" start="00:12:14.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hops to 2. Well, the graph doesn't change, because we only""" start="00:12:19.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ever went out 2 hops anyway. Let's set source's max hops to 1.""" start="00:12:24.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now we only see Bob and Eve, since KB3 and Mallory are""" start="00:12:30.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""2 hops out. Source hops 0. Now we're left with just Alice.""" start="00:12:35.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'd like to create a new hyperdrive and add Alice as a""" start="00:12:44.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source. I'll run M-x hyperdrive new.""" start="00:12:48.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it's prompting me""" start="00:12:52.732" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for a new hyperdrive seed. Seed is a string of characters""" start="00:12:53.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that's combined with your secret key, which is generated""" start="00:12:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for you by the gateway program, in order to create a new""" start="00:13:01.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""public key for this new hyperdrive. I'll type in Joseph, a""" start="00:13:04.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""new drive. Now, I'll right-click on my own name, and in the""" start="00:13:10.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""context menu, I'll choose Set Relation From. From Joseph""" start="00:13:15.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to Alice, as a source. Now, I'll right-click on my name again,""" start="00:13:21.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and click on Peer Graph. Max hops, let's say three, and for""" start="00:13:32.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""blockers as well,""" start="00:13:40.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here's the peer graph from my newly created""" start="00:13:45.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive's perspective. Mallory is included as a""" start="00:13:49.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""source, three hops from the root. Let's open the list view.""" start="00:13:54.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If we were to mark Alice as a blocker by clicking on this""" start="00:14:01.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""button in the blocker column next to the pet name for Alice,""" start="00:14:06.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then we see that Mallory shows up as a blocked source. Only""" start="00:14:12.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""now that Joseph includes Alice as a blocker does the fact""" start="00:14:16.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that Bob blocked Mallory take effect. You can click on""" start="00:14:21.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""another peer to set them as the root hyperdrive. I'll click""" start="00:14:26.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on Eve. Now we're looking at the peer graph from Eve's""" start="00:14:30.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""perspective. This peer graph view has a history. If I open""" start="00:14:35.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the transient menu, you'll see here there's a back and a""" start="00:14:39.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""forward button. Back is bound to l for left. If I press l,""" start="00:14:42.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we're looking at the graph from Joseph's perspective. If I""" start="00:14:48.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""press l again, now we're looking at Alice, as at the""" start="00:14:51.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""beginning. I'll press r to go forward, and r again, and now""" start="00:14:56.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we're back at Eve. Now, I'd like to show you""" start="00:15:01.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the hyperdrive-org-transclusion package we published.""" start="00:15:04.735" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open up the HyperDrive manual""" start="00:15:08.338" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to see how to install it.""" start="00:15:10.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, from here, I'll press m and type in transclusion to jump""" start="00:15:15.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""straight to the org-transclusion integration section of""" start="00:15:21.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the manual. To summarize, we can install HyperDrive""" start="00:15:23.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""org-transclusion with M-x package-install""" start="00:15:27.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion.""" start="00:15:32.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, once this is done, we will copy the following snippet""" start="00:15:37.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and add it either to our init.el file or, in this case, I'll""" start="00:15:43.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just evaluate it. Now, hyperdrive-org-transclusion mode is""" start="00:15:47.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""enabled.""" start="00:15:52.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's go back to the hello.org file in Alice's hyperdrive.""" start="00:15:58.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll right-click on Alice, then click Open Hyperdrive, and""" start="00:16:01.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hit Enter on hello.org. This time, I'm not prompted to mark""" start="00:16:07.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice's hyperdrive as safe, since we did it already. I'll""" start="00:16:11.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""navigate to the Check Out My Peers heading. Then I'll run""" start="00:16:16.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x org-store-link. Now, I'll create a new file in my""" start="00:16:20.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive by running M-x hyperdrive-find-file. I'll""" start="00:16:28.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""select my hyperdrive and I'll call this new file""" start="00:16:32.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""response-to-alice.org.""" start="00:16:38.489" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, I'll paste in a response that I've written.""" start="00:16:45.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll go to the bottom and I will run M-x org-insert-link""" start="00:16:50.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll insert the link""" start="00:16:57.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I stored earlier. As a link""" start="00:16:59.424" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""description, I'll change it to snippet from Alice's""" start="00:17:02.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive file.""" start="00:17:08.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll save my hyperdrive file.""" start="00:17:12.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, to show that the link works, I'll just kill this buffer""" start="00:17:18.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""showing the hello.org file, and I'll click on the link.""" start="00:17:21.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now in addition to linking from my file""" start="00:17:27.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the heading in Alice's file,""" start="00:17:29.488" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'd like to transclude this headings content in my file.""" start="00:17:31.489" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll go to the link in my file and run""" start="00:17:35.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""M-x org-transclusion-make-from-link""" start="00:17:38.635" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll save my file again.""" start="00:17:45.401" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""All that's been added is another link""" start="00:17:47.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""prefixed with this transclude keyword.""" start="00:17:50.505" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""To make the transclusion show up inline,""" start="00:17:54.434" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll run M-x org-transclusion-add. The content""" start="00:17:57.035" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of Alice's file hasn't been copied into mine. It's just""" start="00:18:02.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""being transcluded. If I run M-x org-transclusion-remove,""" start="00:18:05.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you'll see that the underlying content is still""" start="00:18:12.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""just the transclude keyword and the link.""" start="00:18:15.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now some time has passed and Alice has updated her""" start="00:18:21.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive file. She wrote, please add me as a source. Since""" start="00:18:24.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the transclude link that I added in my file does not specify a""" start="00:18:29.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""version, it will always transclude the latest version of""" start="00:18:33.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice's hello.org file. If I run M-x org-transclusion-add""" start="00:18:36.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once more, we'll see that the latest version of Alice's""" start="00:18:42.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file gets transcluded into mine. Let's say that I want to""" start="00:18:46.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transclude the previous version of Alice's hello.org""" start="00:18:51.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file, and I don't want my transclusion to change when Alice""" start="00:18:54.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updates her file. That's possible too. I'll go over to her""" start="00:18:58.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""file and run M-x hyperdrive-open-previous-version. Now""" start="00:19:02.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""when I widen the window a little, we can see in the mode line""" start="00:19:09.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that this is version 57. For an explanation of what the""" start="00:19:14.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""version numbers mean, check out the last video or the info""" start="00:19:18.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""manual. For now, I'll go down to her check out my peers""" start="00:19:21.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""heading and run M-x org-store-link. Now, in my response to""" start="00:19:25.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Alice, I'll insert the link. I'll run org transclusion make""" start="00:19:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from link. Now there are two transclusions. The first""" start="00:19:39.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""transclusion will update whenever Alice updates her file,""" start="00:19:44.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the second transclusion is pinned to version 57. That""" start="00:19:47.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""covers Hyperdrive install, the peer graph, and""" start="00:19:52.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyperdrive-org-transclusion.""" start="00:19:53.357" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Feel free to check out the hyperdrive.el""" start="00:19:58.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""info manual in the Ushin hyperdrive here, or on the""" start="00:20:00.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ushin.org website. Thanks to the folks at Sopranica, we""" start="00:20:04.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""have a public XMPP group chat you can join, either using an""" start="00:20:08.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""XMPP client or anonymously from your browser. If you use""" start="00:20:11.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Matrix, there's also a bridge. Thank you for watching, and""" start="00:20:15.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""thank you to the EmacsConf organizers and all the""" start="00:20:19.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""presenters who made this wonderful event possible.""" start="00:20:22.520" video="mainVideo-hyperdrive" id="subtitle"]]
+
+
+
+Captioner: sachac
+
Questions or comments? Please e-mail [contact@ushin.org](mailto:contact@ushin.org?subject=Comment%20for%20EmacsConf%202023%20hyperdrive%3A%20New%20in%20hyperdrive.el%3A%20quick%20install%2C%20peer%20graph%2C%20transclusion%21)
diff --git a/2024/info/hyperdrive-before.md b/2024/info/hyperdrive-before.md
index 62fd744b..7556412b 100644
--- a/2024/info/hyperdrive-before.md
+++ b/2024/info/hyperdrive-before.md
@@ -1,19 +1,19 @@
<!-- Automatically generated by emacsconf-publish-before-page -->
The following image shows where the talk is in the schedule for Sat 2024-12-07. 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="hyperdrive">
-<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2024/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2024/talks/papers" title="Writing academic papers in Org-Roam" data-slug="papers"> <title> 9:10- 9:20 Writing academic papers in Org-Roam</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> papers</text></g></a> <a href="/2024/talks/project" title="Managing writing project metadata with org-mode" data-slug="project"> <title> 9:40-10:00 Managing writing project metadata with org-mode</title> <rect x="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(79,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> project</text></g></a> <a href="/2024/talks/org-update" title="The Future of Org" data-slug="org-update"> <title> 10:20-11:00 The Future of Org</title> <rect x="109" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(161,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-update</text></g></a> <a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"> <title> 11:20-11:30 Colour your Emacs with ease</title> <rect x="192" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(203,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> color</text></g></a> <a href="/2024/talks/theme" title="My journey of finding and creating the “perfect” Emacs theme" data-slug="theme"> <title> 1:00- 1:10 My journey of finding and creating the “perfect” Emacs theme</title> <rect x="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(340,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> theme</text></g></a> <a href="/2024/talks/water" title="Watering my (digital) plant with Emacs timers" data-slug="water"> <title> 1:30- 1:45 Watering my (digital) plant with Emacs timers</title> <rect x="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(388,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> water</text></g></a> <a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"> <title> 1:55- 2:35 Emacs as a shell</title> <rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(456,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> shell</text></g></a> <a href="/2024/talks/casual" title="Re-imagining the Emacs user experience with Casual Suite" data-slug="casual"> <title> 2:45- 3:05 Re-imagining the Emacs user experience with Casual Suite</title> <rect x="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(498,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> casual</text></g></a> <a href="/2024/talks/hyperdrive" title="New in hyperdrive.el: quick install, peer graph, transclusion!" data-slug="hyperdrive"> <title> 3:25- 3:45 New in hyperdrive.el: quick install, peer graph, transclusion!</title> <rect stroke-width="3" x="528" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(553,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"> <title> 4:05- 4:15 Emacs Writing Studio</title> <rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(594,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"> <title> 4:25- 4:50 Emacs 30 Highlights</title> <rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(642,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacs30</text></g></a> <a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:10 Saturday closing remarks</title> <rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(669,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2024/talks/gypsum" title="Gypsum: my clone of Emacs and ELisp written in Scheme" data-slug="gypsum"> <title> 10:00-10:20 Gypsum: my clone of Emacs and ELisp written in Scheme</title> <rect x="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gypsum</text></g></a> <a href="/2024/talks/rust" title="An experimental Emacs core in Rust" data-slug="rust"> <title> 10:40-11:00 An experimental Emacs core in Rust</title> <rect x="137" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(162,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> rust</text></g></a> <a href="/2024/talks/p-search" title="p-search: a local search engine in Emacs" data-slug="p-search"> <title> 11:20-11:45 p-search: a local search engine in Emacs</title> <rect x="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(224,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> p-search</text></g></a> <a href="/2024/talks/julia" title="Exploring shared philosophies in Julia and Emacs" data-slug="julia"> <title> 1:00- 1:10 Exploring shared philosophies in Julia and Emacs</title> <rect x="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(340,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> julia</text></g></a> <a href="/2024/talks/guile" title="Beguiling Emacs: Guile-Emacs relaunched!" data-slug="guile"> <title> 1:25- 1:45 Beguiling Emacs: Guile-Emacs relaunched!</title> <rect x="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(388,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> guile</text></g></a> <a href="/2024/talks/secrets" title="Committing secrets with git using sops-mode" data-slug="secrets"> <title> 1:55- 2:05 Committing secrets with git using sops-mode</title> <rect x="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(415,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> secrets</text></g></a> <a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"> <title> 2:25- 3:25 Elisp and McCLIM</title> <rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(526,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mcclim</text></g></a> <a href="/2024/talks/maxima" title="Emacs, eev, and Maxima - now!" data-slug="maxima"> <title> 3:45- 4:05 Emacs, eev, and Maxima - now!</title> <rect x="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(580,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maxima</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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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"> 5 PM</text></g></svg>
+<svg width="700" 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="700" height="150" x="0" y="0" fill="white"></rect> <text font-size="10" fill="black" y="12" x="3"> Saturday</text> <a href="/2024/talks/sat-open" title="Saturday opening remarks" data-slug="sat-open"> <title> 9:00- 9:10 Saturday opening remarks</title> <rect x="0" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(11,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-open</text></g></a> <a href="/2024/talks/papers" title="Writing academic papers in Org-Roam" data-slug="papers"> <title> 9:10- 9:20 Writing academic papers in Org-Roam</title> <rect x="13" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(24,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> papers</text></g></a> <a href="/2024/talks/project" title="Managing writing project metadata with org-mode" data-slug="project"> <title> 9:40-10:00 Managing writing project metadata with org-mode</title> <rect x="54" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(79,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> project</text></g></a> <a href="/2024/talks/org-update" title="The Future of Org" data-slug="org-update"> <title> 10:20-11:00 The Future of Org</title> <rect x="109" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(161,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> org-update</text></g></a> <a href="/2024/talks/color" title="Colour your Emacs with ease" data-slug="color"> <title> 11:20-11:30 Colour your Emacs with ease</title> <rect x="192" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(203,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> color</text></g></a> <a href="/2024/talks/theme" title="My journey of finding and creating the “perfect” Emacs theme" data-slug="theme"> <title> 1:00- 1:10 My journey of finding and creating the “perfect” Emacs theme</title> <rect x="329" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(340,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> theme</text></g></a> <a href="/2024/talks/water" title="Watering my (digital) plant with Emacs timers" data-slug="water"> <title> 1:30- 1:45 Watering my (digital) plant with Emacs timers</title> <rect x="370" y="15" opacity="0.5" width="20" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(388,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> water</text></g></a> <a href="/2024/talks/shell" title="Emacs as a shell" data-slug="shell"> <title> 1:55- 2:35 Emacs as a shell</title> <rect x="404" y="15" opacity="0.5" width="54" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(456,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> shell</text></g></a> <a href="/2024/talks/casual" title="Re-imagining the Emacs user experience with Casual Suite" data-slug="casual"> <title> 2:45- 3:05 Re-imagining the Emacs user experience with Casual Suite</title> <rect x="473" y="15" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(498,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> casual</text></g></a> <a href="/2024/talks/hyperdrive" title="New in hyperdrive.el: quick install, peer graph, transclusion!" data-slug="hyperdrive"> <title> 3:25- 3:45 New in hyperdrive.el: quick install, peer graph, transclusion!</title> <rect stroke-width="3" x="528" y="15" opacity="0.8" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(553,73)"> <text font-weight="bold" fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> hyperdrive</text></g></a> <a href="/2024/talks/writing" title="Emacs Writing Studio" data-slug="writing"> <title> 4:05- 4:15 Emacs Writing Studio</title> <rect x="583" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(594,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> writing</text></g></a> <a href="/2024/talks/emacs30" title="Emacs 30 Highlights" data-slug="emacs30"> <title> 4:25- 4:50 Emacs 30 Highlights</title> <rect x="610" y="15" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="peachpuff"></rect> <g transform="translate(642,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> emacs30</text></g></a> <a href="/2024/talks/sat-close" title="Saturday closing remarks" data-slug="sat-close"> <title> 5:00- 5:10 Saturday closing remarks</title> <rect x="658" y="15" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="5,5,5" fill="peachpuff"></rect> <g transform="translate(669,73)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> sat-close</text></g></a> <a href="/2024/talks/gypsum" title="Gypsum: my clone of Emacs and ELisp written in Scheme" data-slug="gypsum"> <title> 10:00-10:20 Gypsum: my clone of Emacs and ELisp written in Scheme</title> <rect x="82" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(107,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> gypsum</text></g></a> <a href="/2024/talks/rust" title="An experimental Emacs core in Rust" data-slug="rust"> <title> 10:40-11:00 An experimental Emacs core in Rust</title> <rect x="137" y="75" opacity="0.5" width="27" 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)"> rust</text></g></a> <a href="/2024/talks/p-search" title="p-search: a local search engine in Emacs" data-slug="p-search"> <title> 11:20-11:45 p-search: a local search engine in Emacs</title> <rect x="192" y="75" opacity="0.5" width="34" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(224,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> p-search</text></g></a> <a href="/2024/talks/julia" title="Exploring shared philosophies in Julia and Emacs" data-slug="julia"> <title> 1:00- 1:10 Exploring shared philosophies in Julia and Emacs</title> <rect x="329" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(340,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> julia</text></g></a> <a href="/2024/talks/guile" title="Beguiling Emacs: Guile-Emacs relaunched!" data-slug="guile"> <title> 1:25- 1:45 Beguiling Emacs: Guile-Emacs relaunched!</title> <rect x="363" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(388,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> guile</text></g></a> <a href="/2024/talks/secrets" title="Committing secrets with git using sops-mode" data-slug="secrets"> <title> 1:55- 2:05 Committing secrets with git using sops-mode</title> <rect x="404" y="75" opacity="0.5" width="13" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(415,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> secrets</text></g></a> <a href="/2024/talks/mcclim" title="Elisp and McCLIM" data-slug="mcclim"> <title> 2:25- 3:25 Elisp and McCLIM</title> <rect x="446" y="75" opacity="0.5" width="82" height="59" stroke="black" stroke-dasharray="" fill="skyblue"></rect> <g transform="translate(526,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> mcclim</text></g></a> <a href="/2024/talks/maxima" title="Emacs, eev, and Maxima - now!" data-slug="maxima"> <title> 3:45- 4:05 Emacs, eev, and Maxima - now!</title> <rect x="555" y="75" opacity="0.5" width="27" height="59" stroke="black" stroke-dasharray="5,5,5" fill="skyblue"></rect> <g transform="translate(580,133)"> <text fill="black" x="0" y="0" font-size="10" transform="rotate(-90)"> maxima</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(82,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(164,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(247,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(329,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(411,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(494,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(576,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(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"> 5 PM</text></g></svg>
</div>
[[!toc ]]
-Format: 21-min talk ; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2024/current/bbb-hyperdrive.html> Etherpad: <https://pad.emacsconf.org/2024-hyperdrive>
+Format: 21-min talk ; Q&A: ask questions via Etherpad/IRC; we'll e-mail the speaker and post answers on this wiki page after the conference Etherpad: <https://pad.emacsconf.org/2024-hyperdrive>
Etherpad: <https://pad.emacsconf.org/2024-hyperdrive>
Discuss on IRC: [#emacsconf-gen](https://chat.emacsconf.org/?join=emacsconf,emacsconf-gen)
-Status: Ready to stream
+Status: Now playing on the conference livestream
<div>Times in different time zones:</div><div class="times" start="2024-12-07T20:25:00Z" end="2024-12-07T20:45:00Z"><div class="conf-time">Saturday, Dec 7 2024, ~3:25 PM - 3:45 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Saturday, Dec 7 2024, ~2:25 PM - 2:45 PM CST (US/Central)<br />Saturday, Dec 7 2024, ~1:25 PM - 1:45 PM MST (US/Mountain)<br />Saturday, Dec 7 2024, ~12:25 PM - 12:45 PM PST (US/Pacific)<br />Saturday, Dec 7 2024, ~8:25 PM - 8:45 PM UTC <br />Saturday, Dec 7 2024, ~9:25 PM - 9:45 PM CET (Europe/Paris)<br />Saturday, Dec 7 2024, ~10:25 PM - 10:45 PM EET (Europe/Athens)<br />Sunday, Dec 8 2024, ~1:55 AM - 2:15 AM IST (Asia/Kolkata)<br />Sunday, Dec 8 2024, ~4:25 AM - 4:45 AM +08 (Asia/Singapore)<br />Sunday, Dec 8 2024, ~5:25 AM - 5:45 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2024/watch/gen/">Find out how to watch and participate</a></strong></div>
-
+<div class="vid"><video controls preload="none" id="hyperdrive-mainVideo"><source src="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2024/captions/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt" default />"""<p><em>Your browser does not support the video tag. Please download the video instead.</em></p></video><div></div>Duration: 20:25 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2024-hyperdrive">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--intro.webm">Download --intro.webm</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2024/emacsconf-2024-hyperdrive--new-in-hyperdriveel-quick-install-peer-graph-transclusion--joseph-turner--main.webm">Download --main.webm (74MB)</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file