summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmacsConf <emacsconf-org@gnu.org>2023-12-03 13:50:23 -0500
committerEmacsConf <emacsconf-org@gnu.org>2023-12-03 13:50:23 -0500
commitb7b0de0d1435a304e0dcd0478ac8e46910ef4d54 (patch)
tree3a17b951e49cf118c3f0e45a4d301829ba78f7cf
parent3a4ae66d00eb4844cc9cf157c41a4a55cad2ae7d (diff)
downloademacsconf-wiki-b7b0de0d1435a304e0dcd0478ac8e46910ef4d54.tar.xz
emacsconf-wiki-b7b0de0d1435a304e0dcd0478ac8e46910ef4d54.zip
Automated commit
Diffstat (limited to '')
-rw-r--r--2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt2274
-rw-r--r--2023/info/hyperdrive-after.md757
-rw-r--r--2023/info/hyperdrive-before.md4
3 files changed, 3033 insertions, 2 deletions
diff --git a/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
new file mode 100644
index 00000000..c1376f19
--- /dev/null
+++ b/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt
@@ -0,0 +1,2274 @@
+WEBVTT captioned by bhavin192, checked by sachac
+
+00:00.000 --> 00:00:02.600
+Hello, I'm Joseph Turner.
+
+00:00:02.600 --> 00:00:05.107
+This talk is about hyperdrive.el,
+
+00:00:05.107 --> 00:00:09.099
+peer-to-peer file system in Emacs.
+
+00:00:09.100 --> 00:00:11.479
+Hyperdrive is a JavaScript library
+
+00:00:11.480 --> 00:00:13.359
+developed by the Holepunch team
+
+00:00:13.360 --> 00:00:16.499
+for sharing files on a peer-to-peer network.
+
+00:00:16.500 --> 00:00:19.839
+It's released under the Apache 2.0 license.
+
+NOTE Hyperdrives introduction
+
+00:00:19.840 --> 00:00:21.639
+Here's how it works.
+
+00:00:21.640 --> 00:00:24.580
+To participate as a peer, you run a node,
+
+00:00:24.581 --> 00:00:27.280
+a lightweight local server that allows you
+
+00:00:27.281 --> 00:00:29.959
+to connect with other nodes on the network.
+
+00:00:29.960 --> 00:00:33.123
+You can create a hyperdrive or multiple hyperdrives,
+
+00:00:33.123 --> 00:00:36.219
+and you can author files within them.
+
+00:00:36.220 --> 00:00:38.699
+Each hyperdrive is automatically assigned
+
+00:00:38.700 --> 00:00:40.906
+a globally unique link
+
+00:00:40.906 --> 00:00:44.579
+that starts with `hyper://`.
+
+00:00:44.580 --> 00:00:47.019
+When you share that link with someone,
+
+00:00:47.020 --> 00:00:49.159
+they have access to your hyperdrive.
+
+00:00:49.160 --> 00:00:52.819
+Anyone who has that link can load the hyperdrive
+
+00:00:52.820 --> 00:00:56.000
+from the network and view its content.
+
+00:56.000 --> 00:00:59.019
+When you load a Hyperdrive file from the network,
+
+00:00:59.020 --> 00:01:02.019
+your node caches that data locally
+
+00:01:02.020 --> 00:01:04.133
+and automatically begins seeding it
+
+00:01:04.133 --> 00:01:05.219
+back to the network,
+
+00:01:05.220 --> 00:01:12.619
+making it available for others to download from you.
+
+00:01:12.620 --> 00:01:14.519
+Hyperdrives are single writer.
+
+00:01:14.520 --> 00:01:16.879
+This means that when you create a new drive,
+
+00:01:16.880 --> 00:01:19.719
+you are the only one who can make changes to it.
+
+00:01:19.720 --> 00:01:21.267
+Others can view it
+
+00:01:21.267 --> 00:01:23.799
+and can seed it back to the network,
+
+00:01:23.800 --> 00:01:27.339
+but you're the only one who can modify it.
+
+00:01:27.340 --> 00:01:29.739
+Hyperdrives are offline first.
+
+00:01:29.740 --> 00:01:32.999
+This means that when you load data from the network,
+
+00:01:33.000 --> 00:01:34.900
+it's stored locally on your machine
+
+00:01:34.900 --> 00:01:36.179
+for you to view later,
+
+00:01:36.180 --> 00:01:38.799
+even when you're disconnected from other peers.
+
+00:01:38.800 --> 00:01:40.799
+You can also create new drives
+
+00:01:40.800 --> 00:01:43.600
+and modify your drives when you're offline,
+
+00:01:43.600 --> 00:01:44.999
+and then share those changes
+
+00:01:45.000 --> 00:01:47.919
+once you connect with peers later.
+
+00:01:47.920 --> 00:01:50.299
+Hyperdrives are local first.
+
+00:01:50.300 --> 00:01:52.400
+This means that when you are connected with
+
+00:01:52.400 --> 00:01:54.739
+other peers on a local area network,
+
+00:01:54.740 --> 00:01:56.939
+even if none of the peers involved
+
+00:01:56.940 --> 00:01:58.979
+are connected to the broader Internet,
+
+00:01:58.980 --> 00:02:02.059
+you can still share files.
+
+00:02:02.060 --> 00:02:04.799
+Hyperdrives are sparsely replicated.
+
+00:02:04.800 --> 00:02:07.479
+This means that you can download individual files
+
+00:02:07.479 --> 00:02:10.020
+from a hyperdrive without having to download
+
+00:02:10.020 --> 00:02:11.719
+the whole thing.
+
+00:02:11.720 --> 00:02:15.471
+This saves on disk space and also allows you
+
+00:02:15.471 --> 00:02:17.233
+to quickly load just the files
+
+00:02:17.233 --> 00:02:20.539
+that you're interested in.
+
+00:02:20.540 --> 00:02:22.467
+Hyperdrives are mutable.
+
+00:02:22.467 --> 00:02:25.499
+You can add files, change files,
+
+00:02:25.500 --> 00:02:28.119
+remove files from a hyperdrive.
+
+00:02:28.120 --> 00:02:30.667
+And when peers load your drive
+
+00:02:30.667 --> 00:02:32.559
+using the very same link,
+
+00:02:32.560 --> 00:02:34.025
+they will be able to load
+
+00:02:34.025 --> 00:02:37.319
+the latest changes that you've published.
+
+00:02:37.320 --> 00:02:39.459
+Hyperdrives are versioned.
+
+00:02:39.460 --> 00:02:42.429
+This means that when you make changes to a file,
+
+00:02:42.429 --> 00:02:46.000
+the previous versions of those files are not lost.
+
+02:46.000 --> 00:02:49.359
+Peers can load the old versions of a file
+
+00:02:49.360 --> 00:02:52.439
+that was changed or deleted, for example,
+
+00:02:52.440 --> 00:02:55.067
+simply by specifying the version number
+
+00:02:55.067 --> 00:02:58.167
+of the hyperdrive when the file still existed
+
+00:02:58.167 --> 00:03:04.599
+or existed in a previous state.
+
+NOTE About USHIN and the contributors
+
+00:03:04.600 --> 00:03:07.379
+I'm presenting this talk on behalf of USHIN.
+
+00:03:07.380 --> 00:03:10.679
+USHIN is a tiny nonprofit whose mission is to
+
+00:03:10.680 --> 00:03:14.032
+promote personal, community and global health
+
+00:03:14.032 --> 00:03:17.367
+through free and open universal shared information
+
+00:03:17.367 --> 00:03:19.699
+for everybody.
+
+00:03:19.700 --> 00:03:21.551
+USHIN was founded in the early 90s
+
+00:03:21.551 --> 00:03:24.859
+by Paula Maas, Steve Nash and others
+
+00:03:24.860 --> 00:03:26.399
+with the goal of creating
+
+00:03:26.400 --> 00:03:29.131
+a distributed health information network
+
+00:03:29.131 --> 00:03:33.429
+that would allow people to find, share, compare
+
+00:03:33.429 --> 00:03:35.667
+and deliberate health information
+
+00:03:35.667 --> 00:03:37.779
+from a variety of sources.
+
+00:03:37.780 --> 00:03:40.699
+Since then, the scope of the project has broadened
+
+00:03:40.700 --> 00:03:43.259
+to include all kinds of information.
+
+00:03:43.260 --> 00:03:45.779
+And in recent years, we've been focusing on
+
+00:03:45.780 --> 00:03:49.499
+building with peer-to-peer software.
+
+00:03:49.500 --> 00:03:50.534
+About three years ago,
+
+00:03:50.534 --> 00:03:52.634
+we started working with Mauve Signweaver,
+
+00:03:52.634 --> 00:03:54.767
+who has since then been our steadfast
+
+00:03:54.767 --> 00:03:58.259
+peer-to-peer explorer and guide.
+
+00:03:58.260 --> 00:04:00.079
+This year, we started working on
+
+00:04:00.080 --> 00:04:02.799
+this hyperdrive.el Emacs package,
+
+00:04:02.800 --> 00:04:05.059
+and Adam has been the powerhouse
+
+00:04:05.060 --> 00:04:08.079
+behind the Emacs Lisp development.
+
+00:04:08.080 --> 00:04:08.967
+About a month ago,
+
+00:04:08.967 --> 00:04:11.099
+Jonas Bernoulli started joining with us,
+
+00:04:11.100 --> 00:04:14.419
+and he has been offering his expertise
+
+00:04:14.420 --> 00:04:15.639
+in the realm of user interface design
+
+00:04:15.640 --> 00:04:18.000
+using his Transient library.
+
+04:18.000 --> 00:04:22.139
+And Protesilaos Stavrou has been not only valuable
+
+00:04:22.140 --> 00:04:25.000
+in terms of user design and feedback,
+
+00:04:25.000 --> 00:04:27.119
+but he created a wonderful
+
+00:04:27.120 --> 00:04:32.099
+basic introduction to Hyperdrive. Take a look.
+
+NOTE Basic introduction to Hyperdrive
+
+00:04:32.646 --> 00:04:33.585
+[Prot]: Hello everyone!
+
+00:04:33.586 --> 00:04:36.365
+My name is Protesilaos, also known as Prot.
+
+00:04:36.366 --> 00:04:37.805
+In this video, I want to show you
+
+00:04:37.806 --> 00:04:40.746
+the basics of hyperdrive.el.
+
+00:04:40.746 --> 00:04:44.012
+This is a package for Emacs that lets us connect to
+
+00:04:44.013 --> 00:04:47.832
+the Hyperdrive peer-to-peer network.
+
+00:04:47.833 --> 00:04:51.572
+We can browse existing drives on the network,
+
+00:04:51.573 --> 00:04:53.879
+meaning existing file systems,
+
+00:04:53.880 --> 00:04:59.052
+or create and maintain our own hyperdrive,
+
+00:04:59.053 --> 00:05:03.473
+to which we can add, remove or edit files.
+
+00:05:03.473 --> 00:05:05.473
+We will see this together.
+
+00:05:05.473 --> 00:05:08.732
+What I have here in front of me is a basic
+
+00:05:08.733 --> 00:05:12.972
+use-package declaration for hyperdrive.el.
+
+00:05:12.973 --> 00:05:16.992
+All I am doing is binding `hyperdrive-menu`
+
+00:05:16.993 --> 00:05:19.792
+to a key and also activating
+
+00:05:19.793 --> 00:05:23.612
+the menu bar entry of hyperdrive.
+
+00:05:23.613 --> 00:05:26.812
+Let me show you very quickly, `hyperdrive-menu`.
+
+00:05:26.813 --> 00:05:31.292
+And this is the sort of interface that it brings up.
+
+00:05:31.293 --> 00:05:33.473
+We will take a closer look at it.
+
+00:05:33.473 --> 00:05:35.992
+As for the menu bar,
+
+00:05:35.993 --> 00:05:41.072
+we have `hyperdrive-menu` over here,
+
+00:05:41.073 --> 00:05:44.192
+and we will take a look at this as well.
+
+00:05:44.193 --> 00:05:45.692
+Suffice to say that
+
+00:05:45.693 --> 00:05:48.272
+you can get the same functionality
+
+00:05:48.273 --> 00:05:51.992
+with the menu bar or with `hyperdrive-menu`,
+
+00:05:51.993 --> 00:05:55.892
+as well as by calling the commands directly
+
+00:05:55.893 --> 00:06:00.052
+with `M-x` or their respective key bindings.
+
+00:06:00.053 --> 00:06:02.979
+I won't cover everything in that regard,
+
+00:06:02.980 --> 00:06:06.132
+but please bear this fact in mind.
+
+NOTE Managing files with Hyperdrive.el
+
+00:06:06.133 --> 00:06:09.212
+Let's start then with what I have here
+
+00:06:09.213 --> 00:06:13.852
+in this other tab, which is a set of files.
+
+00:06:13.853 --> 00:06:18.473
+I have prepared in my local file system - a hyperdrive.
+
+00:06:18.473 --> 00:06:20.332
+This contains a set of files
+
+00:06:20.333 --> 00:06:22.652
+that I ultimately want to share
+
+00:06:22.653 --> 00:06:24.352
+on the peer-to-peer network,
+
+00:06:24.353 --> 00:06:28.052
+meaning that I want this to eventually be
+
+00:06:28.053 --> 00:06:31.473
+reflected in my own hyperdrive.
+
+00:06:31.473 --> 00:06:34.053
+What I did to get started is
+
+00:06:34.054 --> 00:06:36.492
+I invoked `hyperdrive-menu`.
+
+00:06:36.493 --> 00:06:38.572
+The very first thing you need to do
+
+00:06:38.573 --> 00:06:40.992
+to get started with Hyperdrive,
+
+00:06:40.993 --> 00:06:43.632
+either to browse or to create,
+
+00:06:43.633 --> 00:06:46.013
+is to start the gateway,
+
+00:06:46.013 --> 00:06:48.692
+meaning to be able to connect to
+
+00:06:48.693 --> 00:06:50.473
+the peer-to-peer network.
+
+00:06:50.473 --> 00:06:53.492
+You see here in `hyperdrive-menu` that there is
+
+00:06:53.493 --> 00:06:56.292
+an indicator next to the "Gateway" heading
+
+00:06:56.293 --> 00:06:59.473
+telling me that the gateway is on.
+
+00:06:59.473 --> 00:07:04.672
+I started it with `G` and then `s`.
+
+00:07:04.673 --> 00:07:06.572
+Once you start it,
+
+00:07:06.573 --> 00:07:10.152
+you can type `h` to visit an existing drive,
+
+00:07:10.153 --> 00:07:12.112
+`N` to create a drive,
+
+00:07:12.113 --> 00:07:17.473
+or `L` to open a link to an existing hyperdrive.
+
+00:07:17.473 --> 00:07:21.153
+You may get this link via email, for example.
+
+00:07:21.154 --> 00:07:24.932
+In this case, let me be over here
+
+00:07:24.933 --> 00:07:27.972
+and let me just kill this buffer.
+
+00:07:27.973 --> 00:07:32.952
+What I want in this case is to select a hyperdrive.
+
+00:07:32.953 --> 00:07:35.452
+You see here I have my own hyperdrive
+
+00:07:35.453 --> 00:07:37.812
+and also the hyperdrive of USHIN,
+
+00:07:37.813 --> 00:07:41.332
+the developers of hyperdrive.el.
+
+00:07:41.333 --> 00:07:43.972
+What I want to do in this case,
+
+00:07:43.973 --> 00:07:46.852
+you see there are various options available.
+
+00:07:46.853 --> 00:07:50.212
+I want to type `v` to view a file.
+
+00:07:50.213 --> 00:07:50.972
+And in this case,
+
+00:07:50.973 --> 00:07:53.632
+I will just type the forward slash,
+
+00:07:53.633 --> 00:07:56.992
+which means to view the root directory
+
+00:07:56.993 --> 00:08:00.852
+of this hyperdrive. And I am here.
+
+00:08:00.853 --> 00:08:04.219
+It is an empty drive apart from
+
+00:08:04.220 --> 00:08:06.512
+my credentials over here.
+
+00:08:06.513 --> 00:08:10.112
+There is nothing more really to see.
+
+00:08:10.113 --> 00:08:12.092
+But what I want to do is
+
+00:08:12.093 --> 00:08:15.352
+to start adding files to this drive.
+
+00:08:15.353 --> 00:08:18.332
+Let me use the menu bar for this.
+
+00:08:18.333 --> 00:08:21.052
+I will hover over to the menu bar,
+
+00:08:21.053 --> 00:08:24.772
+and I will find the "Hyperdrive" submenu.
+
+00:08:24.773 --> 00:08:27.912
+Then I will go find where the drives are.
+
+00:08:27.913 --> 00:08:30.672
+And you see that there are writable drives,
+
+00:08:30.673 --> 00:08:32.812
+meaning drives that I manage,
+
+00:08:32.813 --> 00:08:37.352
+and read-only drives, meaning drives of other users.
+
+00:08:37.353 --> 00:08:40.332
+In this case, USHIN is read-only, of course,
+
+00:08:40.333 --> 00:08:42.972
+and Protesilaos is writable.
+
+00:08:42.973 --> 00:08:48.352
+So what I want to do is upload a file to Protesilaos.
+
+00:08:48.353 --> 00:08:52.473
+And it prompts me in the Minibuffer for a file.
+
+00:08:52.473 --> 00:08:55.292
+I will just add the README.
+
+00:08:55.293 --> 00:08:58.173
+It is asking me, "Where do you want to add it?"
+
+00:08:58.173 --> 00:09:00.552
+And in square brackets, the default is to add it
+
+00:09:00.553 --> 00:09:03.812
+to the root directory of the hyperdrive.
+
+00:09:03.813 --> 00:09:07.012
+So I will just type `RET` to select the default.
+
+00:09:07.013 --> 00:09:11.392
+And there it is. It is already in the drive.
+
+00:09:11.393 --> 00:09:14.072
+Let me add the COPYING file as well,
+
+00:09:14.073 --> 00:09:16.673
+using the same method.
+
+00:09:16.673 --> 00:09:21.392
+I will go find my drive. "Upload File."
+
+00:09:21.393 --> 00:09:23.852
+And let's add the COPYING.
+
+00:09:23.853 --> 00:09:29.432
+And I also want to add it to the root directory.
+
+00:09:29.433 --> 00:09:30.632
+So already I have two files.
+
+00:09:30.633 --> 00:09:31.952
+This is looking good.
+
+00:09:31.953 --> 00:09:37.013
+Now I am opening the file inside of hyperdrive.
+
+00:09:37.014 --> 00:09:39.032
+This is not the same file
+
+00:09:39.033 --> 00:09:42.673
+as I have in my local directory.
+
+00:09:42.673 --> 00:09:47.432
+What I can do here, for example, is I can...
+
+00:09:47.433 --> 00:09:49.892
+Let me open another file here, the COPYING.
+
+00:09:49.893 --> 00:09:52.112
+I can create an Org link.
+
+00:09:52.113 --> 00:09:54.332
+Notice that these are Org files.
+
+00:09:54.333 --> 00:09:58.852
+So I will use the standard `org-store-link` command.
+
+00:09:58.853 --> 00:10:01.172
+You can see the key binding I invoked
+
+00:10:01.173 --> 00:10:03.532
+and the command it calls
+
+00:10:03.533 --> 00:10:05.892
+on the top right corner of my screen.
+
+00:10:05.893 --> 00:10:07.412
+So what I did is
+
+00:10:07.413 --> 00:10:11.992
+I copied a link to this hyperdrive file.
+
+00:10:11.993 --> 00:10:15.352
+And in this other file over here,
+
+00:10:15.353 --> 00:10:22.152
+I want to say "Free/libre."
+
+00:10:22.153 --> 00:10:27.072
+So I am editing my hyperdrive terms:
+
+00:10:27.073 --> 00:10:35.352
+"Check the," and I will paste the link here,
+
+00:10:35.353 --> 00:10:40.072
+"for how to use my files."
+
+00:10:40.073 --> 00:10:44.812
+If we check what is here,
+
+00:10:44.813 --> 00:10:47.812
+you will see that this is a link
+
+00:10:47.813 --> 00:10:50.879
+inside of the hyperdrive.
+
+00:10:50.880 --> 00:10:52.712
+And it's pointing specifically
+
+00:10:52.713 --> 00:10:54.992
+to that heading over there,
+
+00:10:54.993 --> 00:10:58.172
+which has this unique identifier,
+
+00:10:58.173 --> 00:11:00.512
+as you can see over here.
+
+00:11:00.513 --> 00:11:03.072
+So this is wonderful.
+
+00:11:03.073 --> 00:11:09.712
+I want to rename it to "Check the COPYING
+
+00:11:09.713 --> 00:11:11.952
+for how to use my files."
+
+00:11:11.953 --> 00:11:13.932
+I will save this.
+
+00:11:13.933 --> 00:11:16.839
+And now what I want to do is,
+
+00:11:16.840 --> 00:11:20.492
+I want to invoke `hyperdrive-menu`.
+
+00:11:20.493 --> 00:11:23.152
+And you will see now the menu, unlike earlier,
+
+00:11:23.153 --> 00:11:27.212
+has more commands, more stuff we can do with it.
+
+00:11:27.213 --> 00:11:31.792
+For example, I can type `w` to copy a URL.
+
+00:11:31.793 --> 00:11:34.499
+And by typing `w`, you will notice...
+
+00:11:34.500 --> 00:11:37.332
+Let me go to the `*scratch*` buffer to paste this in.
+
+00:11:37.333 --> 00:11:40.092
+You will notice what the URL is.
+
+00:11:40.093 --> 00:11:44.132
+It is my hyperdrive, my unique identifier,
+
+00:11:44.133 --> 00:11:47.512
+and then forward slash, meaning the root directory,
+
+00:11:47.513 --> 00:11:49.672
+and then README.org.
+
+00:11:49.673 --> 00:11:54.092
+That is the file I was editing.
+
+00:11:54.093 --> 00:11:56.572
+Let's do `hyperdrive-menu` again.
+
+00:11:56.573 --> 00:11:58.132
+Let's remove the `*scratch*` buffer.
+
+00:11:58.133 --> 00:11:59.932
+And let's do `hyperdrive-menu`.
+
+00:11:59.933 --> 00:12:02.379
+And you will notice that there are options
+
+00:12:02.380 --> 00:12:05.132
+to download the file, for example.
+
+00:12:05.133 --> 00:12:07.212
+If you are reading somebody else's file,
+
+00:12:07.213 --> 00:12:10.012
+you can download it to your own file system.
+
+00:12:10.013 --> 00:12:12.012
+Let me do that. "Download."
+
+00:12:12.013 --> 00:12:14.752
+And it is asking me, "Where do you want to save this?"
+
+00:12:14.753 --> 00:12:20.673
+For now, I will save it in the `/tmp/`, like this.
+
+00:12:20.673 --> 00:12:23.212
+Let's call it test.org.
+
+00:12:23.213 --> 00:12:25.052
+Okay, `/tmp/test.org`.
+
+00:12:25.053 --> 00:12:29.092
+Let me go and visit `test.org`.
+
+00:12:29.093 --> 00:12:30.279
+And there it is.
+
+00:12:30.280 --> 00:12:32.652
+It downloaded it just like that.
+
+00:12:32.653 --> 00:12:35.372
+This is how you can, for example,
+
+00:12:35.373 --> 00:12:38.472
+download the pictures and videos
+
+00:12:38.473 --> 00:12:42.332
+that I will eventually share on my hyperdrive.
+
+00:12:42.333 --> 00:12:44.712
+Let's invoke `hyperdrive-menu` again.
+
+00:12:44.713 --> 00:12:48.052
+And let's go up to the parent, you see,
+
+00:12:48.053 --> 00:12:50.512
+with the caret (`^`) sign.
+
+00:12:50.513 --> 00:12:53.172
+This will take me to the parent directory,
+
+00:12:53.173 --> 00:12:56.572
+in this case, the root directory of my hyperdrive.
+
+NOTE Dired like interface
+
+00:12:56.573 --> 00:12:58.352
+Let me do it a bit differently.
+
+00:12:58.353 --> 00:13:00.192
+The same idea, a bit differently.
+
+00:13:00.193 --> 00:13:02.732
+For those of you who are familiar with
+
+00:13:02.733 --> 00:13:05.912
+Dired and the `dired-jump` command,
+
+00:13:05.913 --> 00:13:08.752
+Dired is the standard file manager of Emacs.
+
+00:13:08.753 --> 00:13:13.172
+And `dired-jump` is a command that lets you jump
+
+00:13:13.173 --> 00:13:14.592
+from the current file
+
+00:13:14.593 --> 00:13:18.652
+to the directory that contains that file.
+
+00:13:18.653 --> 00:13:20.732
+So you see, I am here.
+
+00:13:20.733 --> 00:13:22.552
+The `dired-jump` command, by default,
+
+00:13:22.553 --> 00:13:25.232
+is bound to Ctrl-x, Ctrl-j (`C-x C-j`).
+
+00:13:25.233 --> 00:13:29.432
+So if I do `C-x C-j`, in this case,
+
+00:13:29.433 --> 00:13:30.772
+it invokes a command.
+
+00:13:30.773 --> 00:13:33.712
+You can see the name of it, `hyperdrive-up`,
+
+00:13:33.713 --> 00:13:37.732
+which is functionally equivalent to `dired-jump`.
+
+00:13:37.733 --> 00:13:41.332
+It does the same thing, meaning that it took me
+
+00:13:41.333 --> 00:13:45.252
+to the parent directory of this file.
+
+00:13:45.253 --> 00:13:48.252
+I think this is very helpful.
+
+00:13:48.253 --> 00:13:50.692
+This listing over here, in general,
+
+00:13:50.693 --> 00:13:55.272
+tries to mimic or to reuse
+
+00:13:55.273 --> 00:13:58.552
+the knowledge you already have of Dired.
+
+00:13:58.553 --> 00:14:01.072
+For example, if you type `o`,
+
+00:14:01.073 --> 00:14:05.312
+it will open the file at point in the other window,
+
+00:14:05.313 --> 00:14:07.092
+same as in Dired.
+
+00:14:07.093 --> 00:14:08.992
+Whereas if you type `RET`,
+
+00:14:08.993 --> 00:14:11.912
+it would open it in the current window.
+
+00:14:11.913 --> 00:14:16.252
+Again, same as what you will do in Dired.
+
+00:14:16.253 --> 00:14:18.013
+Let's see over here.
+
+00:14:18.014 --> 00:14:21.643
+You have options to jump with `j`,
+
+00:14:21.643 --> 00:14:26.232
+which is using Minibuffer completion to go to a file.
+
+00:14:26.233 --> 00:14:28.432
+Right now, I only have two files,
+
+00:14:28.433 --> 00:14:32.099
+but the idea is the same.
+
+00:14:32.100 --> 00:14:34.012
+It's, again, what you would do in Dired
+
+00:14:34.013 --> 00:14:37.332
+if you type `j` with the default key bindings, though,
+
+00:14:37.333 --> 00:14:40.292
+not with Evil mode or something else.
+
+00:14:40.293 --> 00:14:42.912
+Let's see again what we have over here.
+
+00:14:42.913 --> 00:14:45.933
+You can create a bookmark, and this will work,
+
+00:14:45.934 --> 00:14:48.553
+but no need to show you everything.
+
+00:14:48.554 --> 00:14:50.693
+The idea is that you create a bookmark
+
+00:14:50.694 --> 00:14:53.213
+the way you create any Emacs bookmark,
+
+00:14:53.214 --> 00:14:54.932
+to a file, to a directory.
+
+00:14:54.933 --> 00:14:55.993
+It doesn't matter.
+
+00:14:55.994 --> 00:14:57.733
+And then you can jump to it,
+
+00:14:57.734 --> 00:15:01.233
+the way bookmarks in Emacs always work.
+
+NOTE History in hyperdrive
+
+00:15:01.234 --> 00:15:02.892
+What I want to show you now
+
+00:15:02.893 --> 00:15:06.312
+a little bit is the history.
+
+00:15:06.313 --> 00:15:09.012
+History in Hyperdrive
+
+00:15:09.013 --> 00:15:11.433
+has to do with the drive itself.
+
+00:15:11.434 --> 00:15:13.613
+Meaning that individual files
+
+00:15:13.614 --> 00:15:15.313
+do not have their own history,
+
+00:15:15.314 --> 00:15:18.673
+but the drive as such has a history.
+
+00:15:18.674 --> 00:15:22.013
+Whenever you add a file, you remove a file,
+
+00:15:22.014 --> 00:15:25.672
+or you edit a file, you are incrementing
+
+00:15:25.673 --> 00:15:29.132
+the versioning of the hyperdrive by one.
+
+00:15:29.133 --> 00:15:34.573
+So each action corresponds to one unit of history.
+
+00:15:34.574 --> 00:15:37.832
+If you add a file, remove a file, and edit a file,
+
+00:15:37.833 --> 00:15:40.992
+this means that you are up three versions.
+
+00:15:40.993 --> 00:15:44.712
+So whatever your version number is, plus three.
+
+00:15:44.713 --> 00:15:48.912
+I am on version 24* over here. [* latest, not version 24]
+
+00:15:48.913 --> 00:15:55.932
+Let me go to this file now,
+
+00:15:55.933 --> 00:15:59.792
+and let me do `V h`
+
+00:15:59.793 --> 00:16:02.173
+to see a history of it.
+
+00:16:02.173 --> 00:16:07.552
+You will notice that between versions 23 and 24,
+
+00:16:07.553 --> 00:16:09.972
+this file was constant.
+
+00:16:09.973 --> 00:16:12.632
+But in version 25, we have a change.
+
+00:16:12.633 --> 00:16:14.352
+When you are in this buffer over here,
+
+00:16:14.353 --> 00:16:17.212
+you can type the equals sign (`=`),
+
+00:16:17.213 --> 00:16:22.373
+which is a key binding that will bring up the diff.
+
+00:16:22.373 --> 00:16:24.472
+So the set of changes between
+
+00:16:24.473 --> 00:16:27.032
+the previous version and the current version.
+
+00:16:27.033 --> 00:16:32.512
+And you see here, between versions 23 and 25,
+
+00:16:32.513 --> 00:16:35.092
+I have this addition.
+
+00:16:35.093 --> 00:16:38.372
+I think this is wonderful because now
+
+00:16:38.373 --> 00:16:41.172
+you can always go and check
+
+00:16:41.173 --> 00:16:42.412
+what is the state of this file.
+
+00:16:42.413 --> 00:16:43.852
+What is this person up to?
+
+00:16:43.853 --> 00:16:46.312
+What have they been changing?
+
+00:16:46.313 --> 00:16:50.792
+And with Hyperdrive, you can also visit…
+
+00:16:50.793 --> 00:16:58.513
+Let me go to the parent here.
+
+00:16:58.514 --> 00:17:02.412
+You can always visit a previous history.
+
+00:17:02.413 --> 00:17:06.012
+So, for example, I will go to the previous history,
+
+00:17:06.013 --> 00:17:08.032
+and let me see this file again
+
+00:17:08.033 --> 00:17:09.553
+in its previous history.
+
+00:17:09.554 --> 00:17:11.093
+I am looking at the file,
+
+00:17:11.094 --> 00:17:15.153
+but notice that the file now is not editable
+
+00:17:15.154 --> 00:17:17.353
+because this is in the past.
+
+00:17:17.354 --> 00:17:19.313
+I cannot rewrite history.
+
+00:17:19.314 --> 00:17:23.413
+I can only go to the present and then modify it
+
+00:17:23.414 --> 00:17:27.213
+and then create a new history, a new version.
+
+00:17:27.214 --> 00:17:31.213
+But this helps me see the state of the file
+
+00:17:31.214 --> 00:17:35.973
+at that version of the hyperdrive.
+
+00:17:35.973 --> 00:17:39.973
+So this is the basic idea of it, folks.
+
+NOTE Use case of sharing large files
+
+00:17:39.973 --> 00:17:42.233
+What I want to do then is
+
+00:17:42.234 --> 00:17:46.253
+continue with my process here.
+
+00:17:46.254 --> 00:17:51.973
+Let me actually do it like this so that you can see.
+
+00:17:51.973 --> 00:17:54.373
+Continue with the process of
+
+00:17:54.374 --> 00:17:56.493
+publishing all those files
+
+00:17:56.494 --> 00:17:59.753
+that I have on my hyperdrive.
+
+00:17:59.754 --> 00:18:02.853
+For example, this is a picture of a flower
+
+00:18:02.854 --> 00:18:04.113
+that I have taken.
+
+00:18:04.114 --> 00:18:05.733
+I think it's very nice.
+
+00:18:05.734 --> 00:18:08.032
+And this is a video of an eagle
+
+00:18:08.033 --> 00:18:09.593
+that was flying above me.
+
+00:18:09.594 --> 00:18:13.773
+And I will share this on the Hyperdrive network.
+
+00:18:13.774 --> 00:18:15.732
+From the network, by the way,
+
+00:18:15.733 --> 00:18:18.452
+you can also stream video as well.
+
+00:18:18.453 --> 00:18:20.693
+It is described in the hyperdrive.el manual,
+
+00:18:20.694 --> 00:18:24.252
+but I cannot show you everything right now.
+
+00:18:24.253 --> 00:18:26.512
+I think you get the idea.
+
+00:18:26.513 --> 00:18:29.712
+The gist is, you have a file system
+
+00:18:29.713 --> 00:18:31.912
+that you can share with the world
+
+00:18:31.913 --> 00:18:34.132
+using peer-to-peer technology.
+
+00:18:34.133 --> 00:18:38.519
+And for me, this is a powerful tool.
+
+00:18:38.520 --> 00:18:41.912
+This is a valuable proposition
+
+00:18:41.913 --> 00:18:45.012
+because I can share these large files I have,
+
+00:18:45.013 --> 00:18:47.432
+these pictures or videos,
+
+00:18:47.433 --> 00:18:49.712
+which I cannot post on my website
+
+00:18:49.713 --> 00:18:52.712
+due to bandwidth considerations.
+
+00:18:52.713 --> 00:18:55.592
+And this way, I can still share with the world
+
+00:18:55.593 --> 00:18:59.073
+something that I consider interesting.
+
+00:18:59.073 --> 00:19:00.212
+That's all for today, folks.
+
+00:19:00.213 --> 00:19:01.893
+Thank you very much for your attention.
+
+00:19:01.894 --> 00:19:05.513
+Remember that hyperdrive.el is still in development
+
+00:19:05.514 --> 00:19:07.393
+and things may change.
+
+00:19:07.394 --> 00:19:10.312
+But the fundamentals are in place
+
+00:19:10.313 --> 00:19:13.073
+and will remain constant.
+
+00:19:13.073 --> 00:19:19.460
+That's all for today. Take care. Goodbye.
+
+00:19:19.461 --> 00:19:20.793
+[Joseph]: Thank you, Prot.
+
+NOTE Drive creation with hyperdrive.el
+
+00:19:20.913 --> 00:19:23.852
+Another fundamental feature of hyperdrive.el
+
+00:19:23.980 --> 00:19:26.319
+is drive creation.
+
+00:19:26.319 --> 00:19:28.338
+The first step, as always,
+
+00:19:28.339 --> 00:19:30.858
+is to make sure that the gateway is running.
+
+00:19:30.859 --> 00:19:35.118
+So I'll open up `hyperdrive-menu` with `C-c h`.
+
+00:19:35.119 --> 00:19:36.778
+By the way, my key presses,
+
+00:19:36.779 --> 00:19:38.698
+as well as the commands that they run,
+
+00:19:38.699 --> 00:19:42.438
+can be seen at the top right of my screen.
+
+00:19:42.439 --> 00:19:44.618
+Down here, I see that the gateway is off.
+
+00:19:44.619 --> 00:19:49.138
+So I'll start it with `G s`.
+
+00:19:49.139 --> 00:19:50.559
+Now, it takes a few moments
+
+00:19:50.560 --> 00:19:52.219
+for the gateway to spin up.
+
+00:19:52.219 --> 00:19:54.298
+So to refresh the menu,
+
+00:19:54.299 --> 00:19:58.398
+I will close it and open it again.
+
+00:19:58.399 --> 00:20:01.218
+And now we see that the gateway is on.
+
+00:20:01.219 --> 00:20:05.919
+I'll press `N` to create a new drive.
+
+00:20:05.919 --> 00:20:09.758
+Now it's prompting me for a new hyperdrive seed.
+
+00:20:09.759 --> 00:20:12.938
+A seed is a string of characters
+
+00:20:12.939 --> 00:20:14.998
+that will be used to generate,
+
+00:20:14.999 --> 00:20:18.298
+in tandem with my secret master key,
+
+00:20:18.299 --> 00:20:21.338
+a new public key that will globally,
+
+00:20:21.339 --> 00:20:24.878
+uniquely identify this drive.
+
+00:20:24.879 --> 00:20:31.758
+So I'll type in "emacsconf".
+
+00:20:31.759 --> 00:20:32.658
+And after a moment,
+
+00:20:32.659 --> 00:20:36.998
+we see the newly created, empty drive.
+
+00:20:36.999 --> 00:20:40.098
+So I'll open up `hyperdrive-menu` once more.
+
+00:20:40.099 --> 00:20:43.798
+And I'll press `h` to open the sub-menu that shows
+
+00:20:43.799 --> 00:20:45.978
+more information about this hyperdrive,
+
+00:20:45.979 --> 00:20:50.878
+as well as commands related to this drive.
+
+00:20:50.879 --> 00:20:54.918
+In blue here, we see the seed that I just entered
+
+00:20:54.919 --> 00:21:00.219
+as well as the public key that it generated.
+
+00:21:00.219 --> 00:21:02.198
+We also see that the petname
+
+00:21:02.199 --> 00:21:06.539
+is also set to emacsconf.
+
+00:21:06.540 --> 00:21:09.038
+The petname is different from the seed.
+
+00:21:09.039 --> 00:21:13.078
+The petname is my personal, local identifier
+
+00:21:13.079 --> 00:21:14.678
+for this drive.
+
+00:21:14.679 --> 00:21:16.819
+I can change it whenever I want.
+
+00:21:16.819 --> 00:21:19.738
+And while it's not a secret,
+
+00:21:19.739 --> 00:21:23.998
+it's not displayed to other users.
+
+00:21:23.999 --> 00:21:26.359
+So I will leave it for now.
+
+00:21:26.360 --> 00:21:28.138
+"emacsconf" is fine.
+
+00:21:28.139 --> 00:21:30.858
+But when I go to share this drive,
+
+00:21:30.859 --> 00:21:34.158
+I'll want to display something more memorable
+
+00:21:34.159 --> 00:21:36.878
+than this long public key.
+
+00:21:36.879 --> 00:21:39.219
+And that's what the nickname is for.
+
+00:21:39.219 --> 00:21:42.518
+I'll change that by pressing `n`,
+
+00:21:42.519 --> 00:21:48.219
+and I'll type in "Emacs Conference".
+
+00:21:48.219 --> 00:21:51.358
+Now, when other peers load this hyperdrive
+
+00:21:51.359 --> 00:21:57.058
+by its URL, which I can copy by pressing `w`,
+
+00:21:57.059 --> 00:21:59.498
+they will see the nickname
+
+00:21:59.499 --> 00:22:02.018
+in addition to the public key.
+
+00:22:02.019 --> 00:22:05.720
+So if hyperdrive.el is like a phone book,
+
+00:22:05.720 --> 00:22:09.419
+the public keys are akin to phone numbers,
+
+00:22:09.419 --> 00:22:13.938
+the nickname is like the name that your contacts
+
+00:22:13.939 --> 00:22:16.298
+give you when they introduce themselves,
+
+00:22:16.299 --> 00:22:18.318
+and the petname is the name
+
+00:22:18.319 --> 00:22:22.298
+that you actually write down in your phone book.
+
+00:22:22.299 --> 00:22:25.298
+I'll show you what nicknames and petnames look like
+
+00:22:25.299 --> 00:22:29.619
+for drives that are not writable to me.
+
+00:22:29.619 --> 00:22:32.478
+I'll press `C-g` to close this submenu,
+
+00:22:32.479 --> 00:22:34.638
+and now I'm back at the main menu.
+
+00:22:34.639 --> 00:22:39.998
+I'll press `C-u h` to choose a hyperdrive,
+
+00:22:39.999 --> 00:22:44.558
+and I'll look at Prot's hyperdrive here.
+
+00:22:44.559 --> 00:22:46.298
+And here we see that the nickname
+
+00:22:46.299 --> 00:22:49.838
+of Prot's hyperdrive is "Protesilaos".
+
+00:22:49.839 --> 00:22:50.918
+Now, it's grayed out,
+
+00:22:50.919 --> 00:22:53.238
+which means that I can't change it.
+
+00:22:53.239 --> 00:22:56.418
+I can't change it because it's not my hyperdrive.
+
+00:22:56.419 --> 00:22:58.538
+But I can change the petname if I want it
+
+00:22:58.539 --> 00:23:00.538
+to show up under a different name.
+
+00:23:00.539 --> 00:23:02.438
+So I'll press `p`,
+
+00:23:02.439 --> 00:23:06.678
+and I'll type in "Prot", and hit Enter.
+
+00:23:06.679 --> 00:23:11.319
+Now I'll open his hyperdrive by pressing `f`.
+
+00:23:11.319 --> 00:23:13.898
+And I'll pick a path, I'll just hit `RET`
+
+00:23:13.899 --> 00:23:16.758
+to open the root directory.
+
+00:23:16.759 --> 00:23:19.458
+And now, when Prot's hyperdrive shows up,
+
+00:23:19.459 --> 00:23:20.538
+at the top of the screen,
+
+00:23:20.539 --> 00:23:26.198
+I see that it's identified with the petname "Prot."
+
+NOTE hyperdrive-mirror
+
+00:23:26.199 --> 00:23:28.719
+Now I'll show off `hyperdrive-mirror`.
+
+00:23:28.719 --> 00:23:32.158
+`hyperdrive-mirror` is like `hyperdrive-upload-file`,
+
+00:23:32.159 --> 00:23:33.878
+except that it allows you to upload
+
+00:23:33.879 --> 00:23:37.918
+an entire directory full of files recursively.
+
+00:23:37.919 --> 00:23:40.038
+For this example, I will upload
+
+00:23:40.039 --> 00:23:44.819
+the contents of the emacsconf-mirror directory.
+
+00:23:44.819 --> 00:23:48.918
+First step is to open the menu. I'll press H,
+
+00:23:48.919 --> 00:23:53.378
+and then I will choose the emacsconf drive.
+
+00:23:53.379 --> 00:23:57.718
+In the bottom here, we see the Mirror group.
+
+00:23:57.719 --> 00:23:59.478
+The first option that I can change
+
+00:23:59.479 --> 00:24:01.819
+is the source directory.
+
+00:24:01.819 --> 00:24:04.618
+The source directory is the directory on my local
+
+00:24:04.619 --> 00:24:08.819
+machine from which files will be uploaded.
+
+00:24:08.819 --> 00:24:11.198
+By default, the source directory
+
+00:24:11.199 --> 00:24:17.059
+is set to the current directory of the main buffer.
+
+00:24:17.060 --> 00:24:19.419
+This is good for now, so I'll leave it.
+
+00:24:19.419 --> 00:24:22.198
+The target directory is the directory
+
+00:24:22.199 --> 00:24:25.418
+in the hyperdrive where the files will end up.
+
+00:24:25.419 --> 00:24:28.838
+By default, it's the root directory,
+
+00:24:28.839 --> 00:24:30.358
+but for this example,
+
+00:24:30.359 --> 00:24:36.358
+I'll put these files in a subdirectory called notes.
+
+00:24:36.359 --> 00:24:40.298
+The filter is the rule that allows you
+
+00:24:40.299 --> 00:24:43.378
+to programmatically determine which files
+
+00:24:43.379 --> 00:24:46.578
+in the local directory will be uploaded
+
+00:24:46.579 --> 00:24:50.338
+into the hyperdrive, and which ones won't.
+
+00:24:50.339 --> 00:24:54.718
+By default, all files are mirrored, but in this case,
+
+00:24:54.719 --> 00:24:58.498
+let's say that I want to upload only the Org files,
+
+00:24:58.499 --> 00:25:01.358
+these first three, and I want to exclude
+
+00:25:01.359 --> 00:25:05.419
+the markdown file, solar-oven-notes.md.
+
+00:25:05.419 --> 00:25:10.378
+So I'll press `m f`, and I will choose
+
+00:25:10.379 --> 00:25:13.419
+the regular expression string option.
+
+00:25:13.419 --> 00:25:16.278
+If I wanted to, I could choose a named function
+
+00:25:16.279 --> 00:25:22.198
+or a lambda, but I won't demo that here.
+
+00:25:22.199 --> 00:25:26.338
+I'll type in `org$`, which will match against
+
+00:25:26.339 --> 00:25:31.658
+the files that end with "org."
+
+00:25:31.659 --> 00:25:35.898
+The filter is here, and I'll leave confirmation on.
+
+00:25:35.899 --> 00:25:39.718
+The confirmation step just allows me to review
+
+00:25:39.719 --> 00:25:42.138
+the list of files that are going to be uploaded
+
+00:25:42.139 --> 00:25:45.898
+into the drive before it happens.
+
+00:25:45.899 --> 00:25:52.878
+So I'll press `m m` to mirror them, and I see here
+
+00:25:52.879 --> 00:25:58.438
+that these three files are going to be uploaded.
+
+00:25:58.439 --> 00:26:05.558
+Looks good. I'll press `C-c C-c` to confirm the mirror.
+
+00:26:05.559 --> 00:26:07.738
+Now it says three files have been uploaded,
+
+00:26:07.739 --> 00:26:11.378
+and here they are in the drive.
+
+00:26:11.379 --> 00:26:15.818
+Good, so now I will modify the
+
+00:26:15.819 --> 00:26:19.938
+fermented-overnight-oats file in the hyperdrive.
+
+00:26:19.939 --> 00:26:24.339
+So I've loaded it, and I'll add here:
+
+00:26:24.340 --> 00:26:31.818
+"or other grains - cook them in advance if you want to,"
+
+00:26:31.819 --> 00:26:33.778
+and I'll save it.
+
+00:26:33.779 --> 00:26:37.778
+Now this file, fermented-overnight-oats.org,
+
+00:26:37.779 --> 00:26:40.678
+has been modified on the hyperdrive
+
+00:26:40.679 --> 00:26:44.538
+more recently than on the file system.
+
+00:26:44.539 --> 00:26:48.899
+The file system file has not been modified.
+
+00:26:48.900 --> 00:26:53.818
+So I'll go back to my local directory,
+
+00:26:53.819 --> 00:26:56.538
+and I'll modify a different file.
+
+00:26:56.539 --> 00:27:00.458
+In this case, I'll add another hoedown
+
+00:27:00.459 --> 00:27:04.619
+to the fiddle-tunes.org file.
+
+00:27:04.619 --> 00:27:09.619
+"Tom and Jerry." That's a good hoedown.
+
+00:27:09.619 --> 00:27:14.119
+And now I'll mirror again.
+
+00:27:14.119 --> 00:27:16.778
+So I'll open the menu, and I'll press `h`,
+
+00:27:16.779 --> 00:27:20.578
+and then I'll open up the emacsconf demo drive.
+
+00:27:20.579 --> 00:27:22.958
+And now I've also decided that
+
+00:27:22.959 --> 00:27:26.718
+I want to include the solar-oven-notes.md file.
+
+00:27:26.719 --> 00:27:28.498
+So I'll remove the filter
+
+00:27:28.499 --> 00:27:32.119
+so that it's no longer excluded.
+
+00:27:32.119 --> 00:27:34.078
+I'll leave the rest of the settings the same,
+
+00:27:34.079 --> 00:27:38.778
+and I'll press `m m` again.
+
+00:27:38.779 --> 00:27:40.018
+And now we see that the
+
+00:27:40.019 --> 00:27:43.538
+`*hyperdrive-mirror*` buffer looks different.
+
+00:27:43.539 --> 00:27:47.378
+So, there are two main groups.
+
+00:27:47.379 --> 00:27:49.986
+These are the files that are going to be uploaded,
+
+00:27:49.986 --> 00:27:52.898
+and these are the files that are ignored.
+
+00:27:52.899 --> 00:27:56.538
+They're not going to be uploaded.
+
+00:27:56.539 --> 00:28:00.519
+The first subgroup is the files that are new locally.
+
+00:28:00.519 --> 00:28:04.898
+So the solar-oven-notes.md file is new on my machine,
+
+00:28:04.899 --> 00:28:07.319
+and it doesn't exist in the hyperdrive.
+
+00:28:07.319 --> 00:28:10.038
+So the mirror command is going to take that file
+
+00:28:10.039 --> 00:28:13.758
+and add it to the hyperdrive.
+
+00:28:13.759 --> 00:28:17.519
+This group contains the files that are newer locally.
+
+00:28:17.519 --> 00:28:19.778
+So the fiddle-tunes.org file
+
+00:28:19.779 --> 00:28:23.358
+has been modified on my local machine,
+
+00:28:23.359 --> 00:28:26.718
+but it hasn't been modified on the hyperdrive.
+
+00:28:26.719 --> 00:28:28.858
+So `hyperdrive-mirror` is going to take the
+
+00:28:28.859 --> 00:28:33.858
+updated version and put it on the hyperdrive.
+
+00:28:33.859 --> 00:28:35.958
+Now, the first group that's going to be ignored
+
+00:28:35.959 --> 00:28:39.358
+are the files that are older locally.
+
+00:28:39.359 --> 00:28:42.978
+So the fermented oats file has been modified
+
+00:28:42.979 --> 00:28:45.298
+on the hyperdrive more recently
+
+00:28:45.299 --> 00:28:47.538
+than on my local file system.
+
+00:28:47.539 --> 00:28:51.058
+So `hyperdrive-mirror` isn't going to overwrite
+
+00:28:51.059 --> 00:28:53.518
+the version of the file in my hyperdrive
+
+00:28:53.519 --> 00:28:57.278
+with the older local version.
+
+00:28:57.279 --> 00:29:00.778
+And finally, the emacsconf-preparation.org file
+
+00:29:00.779 --> 00:29:05.498
+hasn't been modified on either the hyperdrive
+
+00:29:05.499 --> 00:29:07.438
+or my local file system,
+
+00:29:07.439 --> 00:29:09.718
+and the timestamp is identical.
+
+00:29:09.719 --> 00:29:11.278
+So `hyperdrive-mirror` is going to
+
+00:29:11.279 --> 00:29:13.818
+ignore this file as well.
+
+00:29:13.819 --> 00:29:15.298
+So the only two files that are going
+
+00:29:15.299 --> 00:29:19.318
+to be uploaded now are the solar-oven-notes.md file
+
+00:29:19.319 --> 00:29:21.638
+and the fiddle-tunes.org file.
+
+00:29:21.639 --> 00:29:25.378
+I'll confirm that with `C-c C-c`.
+
+00:29:25.379 --> 00:29:26.578
+And now in my hyperdrive
+
+00:29:26.579 --> 00:29:28.518
+we see that there are four files.
+
+00:29:28.519 --> 00:29:31.678
+The solar-oven-notes.md file has been uploaded,
+
+00:29:31.679 --> 00:29:35.519
+and if I open the fiddle-tunes.org file,
+
+00:29:35.519 --> 00:29:39.478
+we see that it now contains the line "Tom and Jerry,"
+
+00:29:39.479 --> 00:29:41.658
+which means that it was updated based on
+
+00:29:41.659 --> 00:29:47.098
+the change to the file on my local file system.
+
+00:29:47.099 --> 00:29:50.558
+This `hyperdrive-mirror` command is the command
+
+00:29:50.559 --> 00:29:54.138
+that we use to periodically update
+
+00:29:54.139 --> 00:29:56.598
+the USHIN hyperdrive with
+
+00:29:56.599 --> 00:30:00.318
+the contents of the USHIN website.
+
+00:30:00.319 --> 00:30:03.018
+There's going to be a link to the USHIN hyperdrive
+
+00:30:03.019 --> 00:30:06.818
+as well as the website at the end of the video.
+
+NOTE hyperdrive history
+
+00:30:06.819 --> 00:30:09.078
+Now I'll go into a little more detail
+
+00:30:09.079 --> 00:30:11.218
+about the Hyperdrive history buffer
+
+00:30:11.219 --> 00:30:15.818
+by showing off the README file in Prot's hyperdrive.
+
+00:30:15.819 --> 00:30:19.018
+I'll press `C-c h` to open the menu,
+
+00:30:19.019 --> 00:30:22.198
+`C-u h` to be prompted for a drive.
+
+00:30:22.199 --> 00:30:24.238
+I'll select Prot's drive,
+
+00:30:24.239 --> 00:30:26.738
+then I'll press `f` to jump to a file
+
+00:30:26.739 --> 00:30:28.738
+inside of Prot's drive,
+
+00:30:28.739 --> 00:30:32.398
+and then `RET` to go to the root directory.
+
+00:30:32.399 --> 00:30:35.338
+From here, I'll press `j` to jump to
+
+00:30:35.339 --> 00:30:37.298
+an item in his directory.
+
+00:30:37.299 --> 00:30:42.378
+I'll press `RET` on the README to load it.
+
+00:30:42.379 --> 00:30:44.118
+And then finally, I'll open up
+
+00:30:44.119 --> 00:30:49.578
+`C-c h` to look at the menu.
+
+00:30:49.579 --> 00:30:50.978
+Here, I see that I'm looking at
+
+00:30:50.979 --> 00:30:56.858
+the latest version of Prot's README.org file.
+
+00:30:56.859 --> 00:30:58.738
+I also see that the previous version
+
+00:30:58.739 --> 00:31:02.418
+of README.org is unknown.
+
+00:31:02.419 --> 00:31:05.358
+It's unknown because hyperdrives
+
+00:31:05.359 --> 00:31:07.818
+are sparsely replicated.
+
+00:31:07.819 --> 00:31:09.998
+That means that when my node loaded this
+
+00:31:09.999 --> 00:31:12.358
+README.org file, it didn't bother
+
+00:31:12.359 --> 00:31:13.998
+to load anything else.
+
+00:31:13.999 --> 00:31:16.058
+It didn't load the previous history
+
+00:31:16.059 --> 00:31:18.658
+or any other file in his drive.
+
+00:31:18.659 --> 00:31:20.758
+But now that I want to check out whether
+
+00:31:20.759 --> 00:31:26.198
+there is a previous version, I'll press `V p`.
+
+00:31:26.199 --> 00:31:28.918
+And when it loads, I see in the mode line down here
+
+00:31:28.919 --> 00:31:33.318
+that I'm now looking at version 25 of this drive.
+
+00:31:33.319 --> 00:31:36.498
+That means that I'm looking at the README.org file
+
+00:31:36.499 --> 00:31:39.458
+at version 25 of this drive.
+
+00:31:39.459 --> 00:31:42.018
+I'll open the menu again, and I see
+
+00:31:42.019 --> 00:31:47.718
+that the same version number is displayed here.
+
+00:31:47.719 --> 00:31:50.478
+The previous version, before version 25,
+
+00:31:50.479 --> 00:31:53.558
+is also unknown because we haven't bothered
+
+00:31:53.559 --> 00:31:56.858
+to load anything before version 25.
+
+00:31:56.859 --> 00:32:00.478
+I also see that the next version, after version 25,
+
+00:32:00.479 --> 00:32:02.418
+is the latest version.
+
+00:32:02.419 --> 00:32:06.718
+So I'll open that up by pressing `V n`.
+
+00:32:06.719 --> 00:32:10.998
+And now we are back where we started,
+
+00:32:10.999 --> 00:32:12.918
+at the latest version.
+
+00:32:12.919 --> 00:32:15.078
+But now we see that the previous version,
+
+00:32:15.079 --> 00:32:18.998
+the version before the latest version, is version 25.
+
+00:32:18.999 --> 00:32:24.299
+Because now that our node has loaded the previous version,
+
+00:32:24.300 --> 00:32:28.619
+it can display that information to us.
+
+00:32:28.620 --> 00:32:31.639
+From here, I'll open up the history buffer.
+
+00:32:31.640 --> 00:32:35.319
+I'll press `V h`.
+
+00:32:35.320 --> 00:32:40.319
+And I can see that there are two known existent
+
+00:32:40.320 --> 00:32:46.119
+ranges in Prot's README.org history.
+
+00:32:46.119 --> 00:32:50.119
+This means that the latest version of README.org
+
+00:32:50.120 --> 00:32:54.419
+was modified at version 39.
+
+00:32:54.420 --> 00:32:57.479
+And that Prot made four changes
+
+00:32:57.480 --> 00:33:00.319
+to other files in his hyperdrive
+
+00:33:00.320 --> 00:33:04.279
+besides the README.org file since then.
+
+00:33:04.280 --> 00:33:08.659
+Before that, the time that Prot modified
+
+00:33:08.660 --> 00:33:11.839
+the README.org file was at version 25.
+
+00:33:11.840 --> 00:33:15.199
+And then he made 13 other changes to other files
+
+00:33:15.200 --> 00:33:18.579
+inside of this drive.
+
+00:33:18.580 --> 00:33:20.258
+Before that, we don't know.
+
+00:33:20.259 --> 00:33:21.858
+We haven't loaded the history.
+
+00:33:21.859 --> 00:33:23.178
+But since we're curious,
+
+00:33:23.179 --> 00:33:27.919
+I'll hit `RET` on the unknown line.
+
+00:33:27.920 --> 00:33:32.139
+And now we see that in Prot's hyperdrive,
+
+00:33:32.140 --> 00:33:34.939
+the README.org file didn't exist
+
+00:33:34.940 --> 00:33:39.019
+for the first 22 revisions of his drive.
+
+00:33:39.020 --> 00:33:43.779
+Then Prot created it at version 23.
+
+00:33:43.780 --> 00:33:46.919
+Then again, at 25, made a change.
+
+00:33:46.920 --> 00:33:50.559
+And then made another change at 39.
+
+00:33:50.560 --> 00:33:54.419
+For good measure, I'll show you the diffs.
+
+00:33:54.420 --> 00:33:58.179
+The first diff just contains the entire file
+
+00:33:58.180 --> 00:34:05.119
+because the file didn't exist before version 23.
+
+00:34:05.119 --> 00:34:08.619
+Then, at version 25, Prot added a link
+
+00:34:08.620 --> 00:34:13.119
+to the COPYING.org file.
+
+00:34:13.119 --> 00:34:14.219
+And then, at 39,
+
+00:34:14.220 --> 00:34:17.339
+Prot changed the link to his own hyperdrive
+
+00:34:17.340 --> 00:34:20.879
+to be a relative link.
+
+NOTE Streaming video from hyperdrive
+
+00:34:20.880 --> 00:34:24.299
+Now, I'll stream a video from the USHIN hyperdrive
+
+00:34:24.300 --> 00:34:27.899
+that shows off a prototype interface we created
+
+00:34:27.900 --> 00:34:31.719
+for exploring networks of sources of information.
+
+00:34:31.720 --> 00:34:33.939
+I'll open up `hyperdrive-menu`.
+
+00:34:33.940 --> 00:34:37.219
+Press `C-u h` to be prompted for a drive.
+
+00:34:37.220 --> 00:34:39.739
+I'll select the USHIN drive.
+
+00:34:39.740 --> 00:34:41.939
+Press `f` to jump to a file in it.
+
+00:34:41.940 --> 00:34:46.559
+And then I'll jump to the media directory.
+
+00:34:46.560 --> 00:34:50.179
+Once it loads, I'll press `RET` on the video
+
+00:34:50.180 --> 00:34:54.559
+that I want to stream.
+
+00:34:54.560 --> 00:34:56.686
+[Voice from the video]: This is a demonstration
+
+00:34:56.686 --> 00:34:57.838
+of the subjective trust interface
+
+00:34:57.839 --> 00:35:02.499
+that the USHIN team built for the u4u.io web app.
+
+00:35:02.500 --> 00:35:04.079
+[Joseph]: There it is.
+
+00:35:04.080 --> 00:35:07.119
+Streaming a video from Hyperdrive.
+
+NOTE hyperdrive.el under the hood
+
+00:35:08.746 --> 00:35:13.026
+Here's how hyperdrive.el works under the hood.
+
+00:35:13.027 --> 00:35:14.726
+It uses plz [Please],
+
+00:35:14.727 --> 00:35:18.079
+the HTTP library that Adam Porter wrote,
+
+00:35:18.080 --> 00:35:22.719
+to send requests via curl to hyper-gateway.
+
+00:35:22.720 --> 00:35:26.579
+hyper-gateway is a program that Mauve Signweaver wrote,
+
+00:35:26.580 --> 00:35:30.759
+which runs a hyperdrive node under the hood.
+
+00:35:30.760 --> 00:35:34.039
+It also runs a local HTTP server,
+
+00:35:34.040 --> 00:35:38.459
+which accepts requests to control the node.
+
+00:35:38.460 --> 00:35:43.479
+For example, if hyperdrive.el wants to show a file
+
+00:35:43.480 --> 00:35:45.219
+from someone's hyperdrive,
+
+00:35:45.220 --> 00:35:49.119
+it sends the appropriate link via curl
+
+00:35:49.120 --> 00:35:52.959
+as a GET request to hyper-gateway.
+
+00:35:52.960 --> 00:35:57.239
+hyper-gateway then fetches the data from the network
+
+00:35:57.240 --> 00:35:59.339
+and returns it via curl,
+
+00:35:59.340 --> 00:36:03.939
+via plz, back to hyperdrive.el.
+
+00:36:03.940 --> 00:36:07.419
+If hyper-gateway already has a locally cached copy,
+
+00:36:07.420 --> 00:36:09.239
+it doesn't bother checking the network.
+
+00:36:09.240 --> 00:36:12.559
+It just sends it straight away.
+
+00:36:12.560 --> 00:36:15.879
+Likewise, if hyperdrive.el wants to add a file
+
+00:36:15.880 --> 00:36:20.199
+to a hyperdrive, it sends a PUT request.
+
+00:36:20.200 --> 00:36:24.979
+hyper-gateway is not installed as part of hyperdrive.el.
+
+00:36:24.980 --> 00:36:26.659
+It needs to be installed
+
+00:36:26.660 --> 00:36:35.739
+as a separate, executable program.
+
+00:36:35.740 --> 00:36:39.459
+We have plans to switch from using hyper-gateway
+
+00:36:39.460 --> 00:36:42.458
+to another program that Mauve Signweaver
+
+00:36:42.459 --> 00:36:47.838
+is working on, called hyper-sdk-rpc.
+
+00:36:47.839 --> 00:36:52.019
+hyper-sdk-rpc will give us more fine-grained control
+
+00:36:52.020 --> 00:36:54.699
+over the underlying Hyperdrive node,
+
+00:36:54.700 --> 00:36:56.819
+which will open up some new features.
+
+00:36:56.820 --> 00:37:00.899
+For example, we'll be able to rename files atomically,
+
+00:37:00.900 --> 00:37:03.419
+diff directories between versions,
+
+00:37:03.420 --> 00:37:11.219
+and list the peers that we're currently connected to.
+
+00:37:11.220 --> 00:37:13.359
+Here are some of the Emacs libraries
+
+00:37:13.360 --> 00:37:17.539
+that hyperdrive.el depends on.
+
+00:37:17.540 --> 00:37:22.399
+Hyperdrive.el uses plz to send HTTP requests
+
+00:37:22.400 --> 00:37:25.698
+to hyper-gateway. Check it out.
+
+00:37:25.699 --> 00:37:28.559
+It's on GNU ELPA.
+
+00:37:28.560 --> 00:37:33.639
+ewoc.el is a built-in library that's documented
+
+00:37:33.640 --> 00:37:37.339
+in the Emacs Lisp manual under the rather cryptic
+
+00:37:37.340 --> 00:37:41.599
+heading "Abstract Display Functions."
+
+00:37:41.600 --> 00:37:44.519
+Really, what it does is it allows you
+
+00:37:44.520 --> 00:37:49.999
+to map a data model to some display.
+
+00:37:50.000 --> 00:37:53.859
+What we do with it in hyperdrive.el is,
+
+00:37:53.860 --> 00:38:02.049
+in the directory view, we map directory entry items,
+
+00:38:02.049 --> 00:38:04.239
+files and directories, to display items.
+
+00:38:04.240 --> 00:38:08.700
+And ewoc.el makes it easy to update the display
+
+00:38:08.701 --> 00:38:14.760
+whenever the underlying data changes.
+
+00:38:14.761 --> 00:38:21.279
+Hyperdrive.el uses persist.el to store
+
+00:38:21.280 --> 00:38:25.639
+Hyperdrive metadata about known hyperdrives
+
+00:38:25.640 --> 00:38:29.480
+as well as version history between sessions,
+
+00:38:29.481 --> 00:38:32.120
+so that the data is cached
+
+00:38:32.121 --> 00:38:34.960
+when you log out and log back in.
+
+00:38:34.961 --> 00:38:38.720
+If you're going to be developing a program in Emacs
+
+00:38:38.721 --> 00:38:41.960
+for Emacs 29 or later,
+
+00:38:41.961 --> 00:38:44.940
+I recommend looking at multisession.el,
+
+00:38:44.941 --> 00:38:50.160
+because it's built-in, and it has some features
+
+00:38:50.161 --> 00:38:57.540
+that persist.el doesn't have.
+
+NOTE Next steps
+
+00:38:57.541 --> 00:39:00.000
+Thank you for listening to this talk.
+
+00:39:00.001 --> 00:39:03.680
+I hope you get a chance to try out hyperdrive.el.
+
+00:39:03.681 --> 00:39:08.620
+Here is a link to the hyperdrive.el manual
+
+00:39:08.621 --> 00:39:11.560
+in the USHIN hyperdrive.
+
+00:39:11.561 --> 00:39:14.980
+When you go to paste this link in,
+
+00:39:14.981 --> 00:39:18.920
+you'll need to combine it back into one line.
+
+00:39:18.921 --> 00:39:22.500
+This link is available in the hyperdrive.el manual,
+
+00:39:22.501 --> 00:39:26.660
+which is available from within a browser,
+
+00:39:26.661 --> 00:39:29.820
+at this link on the USHIN website.
+
+00:39:29.821 --> 00:39:32.960
+We also have a public conference room that you can join.
+
+00:39:32.961 --> 00:39:35.520
+It's an XMPP multi-user chat
+
+00:39:35.521 --> 00:39:39.780
+that the Sopranica team graciously makes available
+
+00:39:39.781 --> 00:39:41.620
+for us to use.
+
+00:39:41.621 --> 00:39:43.900
+There's also a Matrix bridge,
+
+00:39:43.901 --> 00:39:48.659
+if that's more your cup of tea.
+
+00:39:48.660 --> 00:39:52.820
+Thank you to the EmacsConf organizers.
+
+00:39:52.821 --> 00:39:55.160
+It's been a pleasure to participate,
+
+00:39:55.161 --> 00:39:57.613
+and I look forward to hearing the rest of the talks.
+
+00:39:57.614 --> 00:40:02.859
+Have a good day.
diff --git a/2023/info/hyperdrive-after.md b/2023/info/hyperdrive-after.md
index 925590e7..c563a790 100644
--- a/2023/info/hyperdrive-after.md
+++ b/2023/info/hyperdrive-after.md
@@ -1,6 +1,763 @@
<!-- Automatically generated by emacsconf-publish-after-page -->
+<a name="hyperdrive-mainVideo-transcript"></a>
+# Transcript
+
+[[!template text="""Hello, I'm Joseph Turner.""" start="00:00:00.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This talk is about hyperdrive.el,""" start="00:00:02.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer file system in Emacs.""" start="00:00:05.107" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive is a JavaScript library""" start="00:00:09.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""developed by the Holepunch team""" start="00:00:11.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for sharing files on a peer-to-peer network.""" start="00:00:13.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's released under the Apache 2.0 license.""" start="00:00:16.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here's how it works.""" start="00:00:19.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""To participate as a peer, you run a node,""" start="00:00:21.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a lightweight local server that allows you""" start="00:00:24.581" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to connect with other nodes on the network.""" start="00:00:27.281" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can create a hyperdrive or multiple hyperdrives,""" start="00:00:29.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and you can author files within them.""" start="00:00:33.123" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Each hyperdrive is automatically assigned""" start="00:00:36.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a globally unique link""" start="00:00:38.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that starts with `hyper://`.""" start="00:00:40.906" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you share that link with someone,""" start="00:00:44.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they have access to your hyperdrive.""" start="00:00:47.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Anyone who has that link can load the hyperdrive""" start="00:00:49.160" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from the network and view its content.""" start="00:00:52.820" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you load a Hyperdrive file from the network,""" start="00:00:56.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""your node caches that data locally""" start="00:00:59.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and automatically begins seeding it""" start="00:01:02.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""back to the network,""" start="00:01:04.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""making it available for others to download from you.""" start="00:01:05.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are single writer.""" start="00:01:12.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you create a new drive,""" start="00:01:14.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you are the only one who can make changes to it.""" start="00:01:16.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Others can view it""" start="00:01:19.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and can seed it back to the network,""" start="00:01:21.267" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but you're the only one who can modify it.""" start="00:01:23.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are offline first.""" start="00:01:27.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you load data from the network,""" start="00:01:29.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's stored locally on your machine""" start="00:01:33.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for you to view later,""" start="00:01:34.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""even when you're disconnected from other peers.""" start="00:01:36.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can also create new drives""" start="00:01:38.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and modify your drives when you're offline,""" start="00:01:40.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then share those changes""" start="00:01:43.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""once you connect with peers later.""" start="00:01:45.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are local first.""" start="00:01:47.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you are connected with""" start="00:01:50.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""other peers on a local area network,""" start="00:01:52.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""even if none of the peers involved""" start="00:01:54.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are connected to the broader Internet,""" start="00:01:56.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can still share files.""" start="00:01:58.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are sparsely replicated.""" start="00:02:02.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that you can download individual files""" start="00:02:04.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from a hyperdrive without having to download""" start="00:02:07.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the whole thing.""" start="00:02:10.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This saves on disk space and also allows you""" start="00:02:11.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to quickly load just the files""" start="00:02:15.471" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you're interested in.""" start="00:02:17.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are mutable.""" start="00:02:20.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can add files, change files,""" start="00:02:22.467" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""remove files from a hyperdrive.""" start="00:02:25.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And when peers load your drive""" start="00:02:28.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using the very same link,""" start="00:02:30.667" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they will be able to load""" start="00:02:32.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the latest changes that you've published.""" start="00:02:34.025" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrives are versioned.""" start="00:02:37.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that when you make changes to a file,""" start="00:02:39.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the previous versions of those files are not lost.""" start="00:02:42.429" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Peers can load the old versions of a file""" start="00:02:46.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that was changed or deleted, for example,""" start="00:02:49.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""simply by specifying the version number""" start="00:02:52.440" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of the hyperdrive when the file still existed""" start="00:02:55.067" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or existed in a previous state.""" start="00:02:58.167" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'm presenting this talk on behalf of USHIN.""" start="00:03:04.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""USHIN is a tiny nonprofit whose mission is to""" start="00:03:07.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""promote personal, community and global health""" start="00:03:10.680" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""through free and open universal shared information""" start="00:03:14.032" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for everybody.""" start="00:03:17.367" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""USHIN was founded in the early 90s""" start="00:03:19.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by Paula Maas, Steve Nash and others""" start="00:03:21.551" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the goal of creating""" start="00:03:24.860" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a distributed health information network""" start="00:03:26.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that would allow people to find, share, compare""" start="00:03:29.131" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and deliberate health information""" start="00:03:33.429" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from a variety of sources.""" start="00:03:35.667" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Since then, the scope of the project has broadened""" start="00:03:37.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to include all kinds of information.""" start="00:03:40.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in recent years, we've been focusing on""" start="00:03:43.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""building with peer-to-peer software.""" start="00:03:45.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""About three years ago,""" start="00:03:49.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we started working with Mauve Signweaver,""" start="00:03:50.534" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""who has since then been our steadfast""" start="00:03:52.634" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""peer-to-peer explorer and guide.""" start="00:03:54.767" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This year, we started working on""" start="00:03:58.260" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this hyperdrive.el Emacs package,""" start="00:04:00.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and Adam has been the powerhouse""" start="00:04:02.800" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""behind the Emacs Lisp development.""" start="00:04:05.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""About a month ago,""" start="00:04:08.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Jonas Bernoulli started joining with us,""" start="00:04:08.967" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and he has been offering his expertise""" start="00:04:11.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the realm of user interface design""" start="00:04:14.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using his Transient library.""" start="00:04:15.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And Protesilaos Stavrou has been not only valuable""" start="00:04:18.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in terms of user design and feedback,""" start="00:04:22.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but he created a wonderful""" start="00:04:25.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""basic introduction to Hyperdrive. Take a look.""" start="00:04:27.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Prot]: Hello everyone!""" start="00:04:32.646" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""My name is Protesilaos, also known as Prot.""" start="00:04:33.586" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this video, I want to show you""" start="00:04:36.366" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the basics of hyperdrive.el.""" start="00:04:37.806" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is a package for Emacs that lets us connect to""" start="00:04:40.746" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the Hyperdrive peer-to-peer network.""" start="00:04:44.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We can browse existing drives on the network,""" start="00:04:47.833" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning existing file systems,""" start="00:04:51.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or create and maintain our own hyperdrive,""" start="00:04:53.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to which we can add, remove or edit files.""" start="00:04:59.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We will see this together.""" start="00:05:03.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I have here in front of me is a basic""" start="00:05:05.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""use-package declaration for hyperdrive.el.""" start="00:05:08.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""All I am doing is binding `hyperdrive-menu`""" start="00:05:12.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a key and also activating""" start="00:05:16.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the menu bar entry of hyperdrive.""" start="00:05:19.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me show you very quickly, `hyperdrive-menu`.""" start="00:05:23.613" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this is the sort of interface that it brings up.""" start="00:05:26.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We will take a closer look at it.""" start="00:05:31.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""As for the menu bar,""" start="00:05:33.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we have `hyperdrive-menu` over here,""" start="00:05:35.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and we will take a look at this as well.""" start="00:05:41.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Suffice to say that""" start="00:05:44.193" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can get the same functionality""" start="00:05:45.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the menu bar or with `hyperdrive-menu`,""" start="00:05:48.273" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as by calling the commands directly""" start="00:05:51.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with `M-x` or their respective key bindings.""" start="00:05:55.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I won't cover everything in that regard,""" start="00:06:00.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but please bear this fact in mind.""" start="00:06:02.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's start then with what I have here""" start="00:06:06.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in this other tab, which is a set of files.""" start="00:06:09.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I have prepared in my local file system - a hyperdrive.""" start="00:06:13.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This contains a set of files""" start="00:06:18.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I ultimately want to share""" start="00:06:20.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the peer-to-peer network,""" start="00:06:22.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning that I want this to eventually be""" start="00:06:24.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""reflected in my own hyperdrive.""" start="00:06:28.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I did to get started is""" start="00:06:31.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I invoked `hyperdrive-menu`.""" start="00:06:34.054" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The very first thing you need to do""" start="00:06:36.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to get started with Hyperdrive,""" start="00:06:38.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""either to browse or to create,""" start="00:06:40.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is to start the gateway,""" start="00:06:43.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning to be able to connect to""" start="00:06:46.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the peer-to-peer network.""" start="00:06:48.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You see here in `hyperdrive-menu` that there is""" start="00:06:50.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an indicator next to the &quot;Gateway&quot; heading""" start="00:06:53.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""telling me that the gateway is on.""" start="00:06:56.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I started it with `G` and then `s`.""" start="00:06:59.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Once you start it,""" start="00:07:04.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can type `h` to visit an existing drive,""" start="00:07:06.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`N` to create a drive,""" start="00:07:10.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or `L` to open a link to an existing hyperdrive.""" start="00:07:12.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You may get this link via email, for example.""" start="00:07:17.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, let me be over here""" start="00:07:21.154" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me just kill this buffer.""" start="00:07:24.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want in this case is to select a hyperdrive.""" start="00:07:27.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You see here I have my own hyperdrive""" start="00:07:32.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and also the hyperdrive of USHIN,""" start="00:07:35.453" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the developers of hyperdrive.el.""" start="00:07:37.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want to do in this case,""" start="00:07:41.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you see there are various options available.""" start="00:07:43.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to type `v` to view a file.""" start="00:07:46.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in this case,""" start="00:07:50.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will just type the forward slash,""" start="00:07:50.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means to view the root directory""" start="00:07:53.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of this hyperdrive. And I am here.""" start="00:07:56.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is an empty drive apart from""" start="00:08:00.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""my credentials over here.""" start="00:08:04.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There is nothing more really to see.""" start="00:08:06.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But what I want to do is""" start="00:08:10.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to start adding files to this drive.""" start="00:08:12.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me use the menu bar for this.""" start="00:08:15.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will hover over to the menu bar,""" start="00:08:18.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I will find the &quot;Hyperdrive&quot; submenu.""" start="00:08:21.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then I will go find where the drives are.""" start="00:08:24.773" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you see that there are writable drives,""" start="00:08:27.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""meaning drives that I manage,""" start="00:08:30.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and read-only drives, meaning drives of other users.""" start="00:08:32.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, USHIN is read-only, of course,""" start="00:08:37.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and Protesilaos is writable.""" start="00:08:40.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So what I want to do is upload a file to Protesilaos.""" start="00:08:42.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it prompts me in the Minibuffer for a file.""" start="00:08:48.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will just add the README.""" start="00:08:52.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is asking me, &quot;Where do you want to add it?&quot;""" start="00:08:55.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in square brackets, the default is to add it""" start="00:08:58.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the root directory of the hyperdrive.""" start="00:09:00.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will just type `RET` to select the default.""" start="00:09:03.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And there it is. It is already in the drive.""" start="00:09:07.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me add the COPYING file as well,""" start="00:09:11.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using the same method.""" start="00:09:14.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will go find my drive. &quot;Upload File.&quot;""" start="00:09:16.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's add the COPYING.""" start="00:09:21.393" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I also want to add it to the root directory.""" start="00:09:23.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So already I have two files.""" start="00:09:29.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is looking good.""" start="00:09:30.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I am opening the file inside of hyperdrive.""" start="00:09:31.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is not the same file""" start="00:09:37.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as I have in my local directory.""" start="00:09:39.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I can do here, for example, is I can...""" start="00:09:42.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me open another file here, the COPYING.""" start="00:09:47.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can create an Org link.""" start="00:09:49.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Notice that these are Org files.""" start="00:09:52.113" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will use the standard `org-store-link` command.""" start="00:09:54.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can see the key binding I invoked""" start="00:09:58.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the command it calls""" start="00:10:01.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the top right corner of my screen.""" start="00:10:03.533" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So what I did is""" start="00:10:05.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I copied a link to this hyperdrive file.""" start="00:10:07.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And in this other file over here,""" start="00:10:11.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to say &quot;Free/libre.&quot;""" start="00:10:15.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I am editing my hyperdrive terms:""" start="00:10:22.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;Check the,&quot; and I will paste the link here,""" start="00:10:27.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;for how to use my files.&quot;""" start="00:10:35.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If we check what is here,""" start="00:10:40.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you will see that this is a link""" start="00:10:44.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of the hyperdrive.""" start="00:10:47.813" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it's pointing specifically""" start="00:10:50.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to that heading over there,""" start="00:10:52.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which has this unique identifier,""" start="00:10:54.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as you can see over here.""" start="00:10:58.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So this is wonderful.""" start="00:11:00.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to rename it to &quot;Check the COPYING""" start="00:11:03.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for how to use my files.&quot;""" start="00:11:09.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will save this.""" start="00:11:11.953" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now what I want to do is,""" start="00:11:13.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to invoke `hyperdrive-menu`.""" start="00:11:16.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you will see now the menu, unlike earlier,""" start="00:11:20.493" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has more commands, more stuff we can do with it.""" start="00:11:23.153" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, I can type `w` to copy a URL.""" start="00:11:27.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And by typing `w`, you will notice...""" start="00:11:31.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to the `*scratch*` buffer to paste this in.""" start="00:11:34.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You will notice what the URL is.""" start="00:11:37.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is my hyperdrive, my unique identifier,""" start="00:11:40.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then forward slash, meaning the root directory,""" start="00:11:44.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then README.org.""" start="00:11:47.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That is the file I was editing.""" start="00:11:49.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's do `hyperdrive-menu` again.""" start="00:11:54.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's remove the `*scratch*` buffer.""" start="00:11:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's do `hyperdrive-menu`.""" start="00:11:58.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you will notice that there are options""" start="00:11:59.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to download the file, for example.""" start="00:12:02.380" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you are reading somebody else's file,""" start="00:12:05.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can download it to your own file system.""" start="00:12:07.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me do that. &quot;Download.&quot;""" start="00:12:10.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And it is asking me, &quot;Where do you want to save this?&quot;""" start="00:12:12.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For now, I will save it in the `/tmp/`, like this.""" start="00:12:14.753" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's call it test.org.""" start="00:12:20.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Okay, `/tmp/test.org`.""" start="00:12:23.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go and visit `test.org`.""" start="00:12:25.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And there it is.""" start="00:12:29.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It downloaded it just like that.""" start="00:12:30.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is how you can, for example,""" start="00:12:32.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""download the pictures and videos""" start="00:12:35.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I will eventually share on my hyperdrive.""" start="00:12:38.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's invoke `hyperdrive-menu` again.""" start="00:12:42.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And let's go up to the parent, you see,""" start="00:12:44.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the caret (`^`) sign.""" start="00:12:48.053" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This will take me to the parent directory,""" start="00:12:50.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in this case, the root directory of my hyperdrive.""" start="00:12:53.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me do it a bit differently.""" start="00:12:56.573" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The same idea, a bit differently.""" start="00:12:58.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For those of you who are familiar with""" start="00:13:00.193" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Dired and the `dired-jump` command,""" start="00:13:02.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Dired is the standard file manager of Emacs.""" start="00:13:05.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And `dired-jump` is a command that lets you jump""" start="00:13:08.753" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from the current file""" start="00:13:13.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the directory that contains that file.""" start="00:13:14.593" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So you see, I am here.""" start="00:13:18.653" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The `dired-jump` command, by default,""" start="00:13:20.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is bound to Ctrl-x, Ctrl-j (`C-x C-j`).""" start="00:13:22.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So if I do `C-x C-j`, in this case,""" start="00:13:25.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it invokes a command.""" start="00:13:29.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can see the name of it, `hyperdrive-up`,""" start="00:13:30.773" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is functionally equivalent to `dired-jump`.""" start="00:13:33.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It does the same thing, meaning that it took me""" start="00:13:37.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the parent directory of this file.""" start="00:13:41.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think this is very helpful.""" start="00:13:45.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This listing over here, in general,""" start="00:13:48.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""tries to mimic or to reuse""" start="00:13:50.693" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the knowledge you already have of Dired.""" start="00:13:55.273" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, if you type `o`,""" start="00:13:58.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it will open the file at point in the other window,""" start="00:14:01.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""same as in Dired.""" start="00:14:05.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Whereas if you type `RET`,""" start="00:14:07.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it would open it in the current window.""" start="00:14:08.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Again, same as what you will do in Dired.""" start="00:14:11.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's see over here.""" start="00:14:16.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You have options to jump with `j`,""" start="00:14:18.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is using Minibuffer completion to go to a file.""" start="00:14:21.643" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Right now, I only have two files,""" start="00:14:26.233" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but the idea is the same.""" start="00:14:28.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's, again, what you would do in Dired""" start="00:14:32.100" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""if you type `j` with the default key bindings, though,""" start="00:14:34.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""not with Evil mode or something else.""" start="00:14:37.333" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let's see again what we have over here.""" start="00:14:40.293" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can create a bookmark, and this will work,""" start="00:14:42.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but no need to show you everything.""" start="00:14:45.934" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The idea is that you create a bookmark""" start="00:14:48.554" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the way you create any Emacs bookmark,""" start="00:14:50.694" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a file, to a directory.""" start="00:14:53.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It doesn't matter.""" start="00:14:54.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then you can jump to it,""" start="00:14:55.994" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the way bookmarks in Emacs always work.""" start="00:14:57.734" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want to show you now""" start="00:15:01.234" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a little bit is the history.""" start="00:15:02.893" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""History in Hyperdrive""" start="00:15:06.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has to do with the drive itself.""" start="00:15:09.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Meaning that individual files""" start="00:15:11.434" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""do not have their own history,""" start="00:15:13.614" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but the drive as such has a history.""" start="00:15:15.314" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Whenever you add a file, you remove a file,""" start="00:15:18.674" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or you edit a file, you are incrementing""" start="00:15:22.014" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the versioning of the hyperdrive by one.""" start="00:15:25.673" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So each action corresponds to one unit of history.""" start="00:15:29.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you add a file, remove a file, and edit a file,""" start="00:15:34.574" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this means that you are up three versions.""" start="00:15:37.833" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So whatever your version number is, plus three.""" start="00:15:40.993" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I am on version 24* over here. [* latest, not version 24]""" start="00:15:44.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to this file now,""" start="00:15:48.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me do `V h`""" start="00:15:55.933" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to see a history of it.""" start="00:15:59.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You will notice that between versions 23 and 24,""" start="00:16:02.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""this file was constant.""" start="00:16:07.553" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But in version 25, we have a change.""" start="00:16:09.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you are in this buffer over here,""" start="00:16:12.633" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can type the equals sign (`=`),""" start="00:16:14.353" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is a key binding that will bring up the diff.""" start="00:16:17.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the set of changes between""" start="00:16:22.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the previous version and the current version.""" start="00:16:24.473" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And you see here, between versions 23 and 25,""" start="00:16:27.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I have this addition.""" start="00:16:32.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think this is wonderful because now""" start="00:16:35.093" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can always go and check""" start="00:16:38.373" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""what is the state of this file.""" start="00:16:41.173" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What is this person up to?""" start="00:16:42.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What have they been changing?""" start="00:16:43.853" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And with Hyperdrive, you can also visit…""" start="00:16:46.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me go to the parent here.""" start="00:16:50.793" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""You can always visit a previous history.""" start="00:16:58.514" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So, for example, I will go to the previous history,""" start="00:17:02.413" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and let me see this file again""" start="00:17:06.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in its previous history.""" start="00:17:08.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I am looking at the file,""" start="00:17:09.554" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but notice that the file now is not editable""" start="00:17:11.094" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because this is in the past.""" start="00:17:15.154" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I cannot rewrite history.""" start="00:17:17.354" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can only go to the present and then modify it""" start="00:17:19.314" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then create a new history, a new version.""" start="00:17:23.414" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But this helps me see the state of the file""" start="00:17:27.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at that version of the hyperdrive.""" start="00:17:31.214" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So this is the basic idea of it, folks.""" start="00:17:35.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What I want to do then is""" start="00:17:39.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""continue with my process here.""" start="00:17:42.234" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Let me actually do it like this so that you can see.""" start="00:17:46.254" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Continue with the process of""" start="00:17:51.973" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""publishing all those files""" start="00:17:54.374" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I have on my hyperdrive.""" start="00:17:56.494" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, this is a picture of a flower""" start="00:17:59.754" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I have taken.""" start="00:18:02.854" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think it's very nice.""" start="00:18:04.114" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this is a video of an eagle""" start="00:18:05.734" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that was flying above me.""" start="00:18:08.033" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I will share this on the Hyperdrive network.""" start="00:18:09.594" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From the network, by the way,""" start="00:18:13.774" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you can also stream video as well.""" start="00:18:15.733" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It is described in the hyperdrive.el manual,""" start="00:18:18.453" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but I cannot show you everything right now.""" start="00:18:20.694" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I think you get the idea.""" start="00:18:24.253" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The gist is, you have a file system""" start="00:18:26.513" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you can share with the world""" start="00:18:29.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""using peer-to-peer technology.""" start="00:18:31.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And for me, this is a powerful tool.""" start="00:18:34.133" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is a valuable proposition""" start="00:18:38.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because I can share these large files I have,""" start="00:18:41.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""these pictures or videos,""" start="00:18:45.013" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which I cannot post on my website""" start="00:18:47.433" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""due to bandwidth considerations.""" start="00:18:49.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And this way, I can still share with the world""" start="00:18:52.713" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""something that I consider interesting.""" start="00:18:55.593" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That's all for today, folks.""" start="00:18:59.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you very much for your attention.""" start="00:19:00.213" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Remember that hyperdrive.el is still in development""" start="00:19:01.894" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and things may change.""" start="00:19:05.514" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But the fundamentals are in place""" start="00:19:07.394" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and will remain constant.""" start="00:19:10.313" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That's all for today. Take care. Goodbye.""" start="00:19:13.073" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Joseph]: Thank you, Prot.""" start="00:19:19.461" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Another fundamental feature of hyperdrive.el""" start="00:19:20.913" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is drive creation.""" start="00:19:23.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first step, as always,""" start="00:19:26.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is to make sure that the gateway is running.""" start="00:19:28.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open up `hyperdrive-menu` with `C-c h`.""" start="00:19:30.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By the way, my key presses,""" start="00:19:35.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the commands that they run,""" start="00:19:36.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""can be seen at the top right of my screen.""" start="00:19:38.699" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Down here, I see that the gateway is off.""" start="00:19:42.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll start it with `G s`.""" start="00:19:44.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it takes a few moments""" start="00:19:49.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for the gateway to spin up.""" start="00:19:50.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So to refresh the menu,""" start="00:19:52.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I will close it and open it again.""" start="00:19:54.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that the gateway is on.""" start="00:19:58.399" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `N` to create a new drive.""" start="00:20:01.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it's prompting me for a new hyperdrive seed.""" start="00:20:05.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""A seed is a string of characters""" start="00:20:09.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that will be used to generate,""" start="00:20:12.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in tandem with my secret master key,""" start="00:20:14.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""a new public key that will globally,""" start="00:20:18.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""uniquely identify this drive.""" start="00:20:21.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll type in &quot;emacsconf&quot;.""" start="00:20:24.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And after a moment,""" start="00:20:31.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see the newly created, empty drive.""" start="00:20:32.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open up `hyperdrive-menu` once more.""" start="00:20:36.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I'll press `h` to open the sub-menu that shows""" start="00:20:40.099" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more information about this hyperdrive,""" start="00:20:43.799" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as commands related to this drive.""" start="00:20:45.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In blue here, we see the seed that I just entered""" start="00:20:50.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the public key that it generated.""" start="00:20:54.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We also see that the petname""" start="00:21:00.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is also set to emacsconf.""" start="00:21:02.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The petname is different from the seed.""" start="00:21:06.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The petname is my personal, local identifier""" start="00:21:09.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for this drive.""" start="00:21:13.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can change it whenever I want.""" start="00:21:14.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And while it's not a secret,""" start="00:21:16.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it's not displayed to other users.""" start="00:21:19.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I will leave it for now.""" start="00:21:23.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;emacsconf&quot; is fine.""" start="00:21:26.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But when I go to share this drive,""" start="00:21:28.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll want to display something more memorable""" start="00:21:30.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""than this long public key.""" start="00:21:34.159" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And that's what the nickname is for.""" start="00:21:36.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll change that by pressing `n`,""" start="00:21:39.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll type in &quot;Emacs Conference&quot;.""" start="00:21:42.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, when other peers load this hyperdrive""" start="00:21:48.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by its URL, which I can copy by pressing `w`,""" start="00:21:51.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""they will see the nickname""" start="00:21:57.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in addition to the public key.""" start="00:21:59.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So if hyperdrive.el is like a phone book,""" start="00:22:02.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the public keys are akin to phone numbers,""" start="00:22:05.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the nickname is like the name that your contacts""" start="00:22:09.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""give you when they introduce themselves,""" start="00:22:13.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the petname is the name""" start="00:22:16.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that you actually write down in your phone book.""" start="00:22:18.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll show you what nicknames and petnames look like""" start="00:22:22.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for drives that are not writable to me.""" start="00:22:25.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-g` to close this submenu,""" start="00:22:29.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and now I'm back at the main menu.""" start="00:22:32.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-u h` to choose a hyperdrive,""" start="00:22:34.639" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll look at Prot's hyperdrive here.""" start="00:22:39.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And here we see that the nickname""" start="00:22:44.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of Prot's hyperdrive is &quot;Protesilaos&quot;.""" start="00:22:46.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, it's grayed out,""" start="00:22:49.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means that I can't change it.""" start="00:22:50.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I can't change it because it's not my hyperdrive.""" start="00:22:53.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But I can change the petname if I want it""" start="00:22:56.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to show up under a different name.""" start="00:22:58.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `p`,""" start="00:23:00.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll type in &quot;Prot&quot;, and hit Enter.""" start="00:23:02.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll open his hyperdrive by pressing `f`.""" start="00:23:06.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I'll pick a path, I'll just hit `RET`""" start="00:23:11.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to open the root directory.""" start="00:23:13.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now, when Prot's hyperdrive shows up,""" start="00:23:16.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at the top of the screen,""" start="00:23:19.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I see that it's identified with the petname &quot;Prot.&quot;""" start="00:23:20.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll show off `hyperdrive-mirror`.""" start="00:23:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`hyperdrive-mirror` is like `hyperdrive-upload-file`,""" start="00:23:28.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""except that it allows you to upload""" start="00:23:32.159" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an entire directory full of files recursively.""" start="00:23:33.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For this example, I will upload""" start="00:23:37.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the contents of the emacsconf-mirror directory.""" start="00:23:40.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""First step is to open the menu. I'll press H,""" start="00:23:44.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then I will choose the emacsconf drive.""" start="00:23:48.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In the bottom here, we see the Mirror group.""" start="00:23:53.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first option that I can change""" start="00:23:57.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is the source directory.""" start="00:23:59.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The source directory is the directory on my local""" start="00:24:01.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""machine from which files will be uploaded.""" start="00:24:04.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, the source directory""" start="00:24:08.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is set to the current directory of the main buffer.""" start="00:24:11.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This is good for now, so I'll leave it.""" start="00:24:17.060" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The target directory is the directory""" start="00:24:19.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the hyperdrive where the files will end up.""" start="00:24:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, it's the root directory,""" start="00:24:25.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but for this example,""" start="00:24:28.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll put these files in a subdirectory called notes.""" start="00:24:30.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The filter is the rule that allows you""" start="00:24:36.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to programmatically determine which files""" start="00:24:40.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the local directory will be uploaded""" start="00:24:43.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""into the hyperdrive, and which ones won't.""" start="00:24:46.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""By default, all files are mirrored, but in this case,""" start="00:24:50.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""let's say that I want to upload only the Org files,""" start="00:24:54.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""these first three, and I want to exclude""" start="00:24:58.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the markdown file, solar-oven-notes.md.""" start="00:25:01.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `m f`, and I will choose""" start="00:25:05.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the regular expression string option.""" start="00:25:10.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If I wanted to, I could choose a named function""" start="00:25:13.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or a lambda, but I won't demo that here.""" start="00:25:16.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll type in `org$`, which will match against""" start="00:25:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the files that end with &quot;org.&quot;""" start="00:25:26.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The filter is here, and I'll leave confirmation on.""" start="00:25:31.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The confirmation step just allows me to review""" start="00:25:35.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the list of files that are going to be uploaded""" start="00:25:39.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""into the drive before it happens.""" start="00:25:42.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll press `m m` to mirror them, and I see here""" start="00:25:45.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that these three files are going to be uploaded.""" start="00:25:52.879" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Looks good. I'll press `C-c C-c` to confirm the mirror.""" start="00:25:58.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now it says three files have been uploaded,""" start="00:26:05.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and here they are in the drive.""" start="00:26:07.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Good, so now I will modify the""" start="00:26:11.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""fermented-overnight-oats file in the hyperdrive.""" start="00:26:15.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I've loaded it, and I'll add here:""" start="00:26:19.939" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;or other grains - cook them in advance if you want to,&quot;""" start="00:26:24.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll save it.""" start="00:26:31.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now this file, fermented-overnight-oats.org,""" start="00:26:33.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has been modified on the hyperdrive""" start="00:26:37.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""more recently than on the file system.""" start="00:26:40.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The file system file has not been modified.""" start="00:26:44.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll go back to my local directory,""" start="00:26:48.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll modify a different file.""" start="00:26:53.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""In this case, I'll add another hoedown""" start="00:26:56.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the fiddle-tunes.org file.""" start="00:27:00.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""&quot;Tom and Jerry.&quot; That's a good hoedown.""" start="00:27:04.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now I'll mirror again.""" start="00:27:09.619" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open the menu, and I'll press `h`,""" start="00:27:14.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then I'll open up the emacsconf demo drive.""" start="00:27:16.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now I've also decided that""" start="00:27:20.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I want to include the solar-oven-notes.md file.""" start="00:27:22.959" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll remove the filter""" start="00:27:26.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""so that it's no longer excluded.""" start="00:27:28.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll leave the rest of the settings the same,""" start="00:27:32.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I'll press `m m` again.""" start="00:27:34.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that the""" start="00:27:38.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`*hyperdrive-mirror*` buffer looks different.""" start="00:27:40.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So, there are two main groups.""" start="00:27:43.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""These are the files that are going to be uploaded,""" start="00:27:47.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and these are the files that are ignored.""" start="00:27:49.986" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""They're not going to be uploaded.""" start="00:27:52.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first subgroup is the files that are new locally.""" start="00:27:56.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the solar-oven-notes.md file is new on my machine,""" start="00:28:00.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and it doesn't exist in the hyperdrive.""" start="00:28:04.899" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the mirror command is going to take that file""" start="00:28:07.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and add it to the hyperdrive.""" start="00:28:10.039" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This group contains the files that are newer locally.""" start="00:28:13.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the fiddle-tunes.org file""" start="00:28:17.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""has been modified on my local machine,""" start="00:28:19.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""but it hasn't been modified on the hyperdrive.""" start="00:28:23.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` is going to take the""" start="00:28:26.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""updated version and put it on the hyperdrive.""" start="00:28:28.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, the first group that's going to be ignored""" start="00:28:33.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are the files that are older locally.""" start="00:28:35.959" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the fermented oats file has been modified""" start="00:28:39.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""on the hyperdrive more recently""" start="00:28:42.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""than on my local file system.""" start="00:28:45.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` isn't going to overwrite""" start="00:28:47.539" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the version of the file in my hyperdrive""" start="00:28:51.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""with the older local version.""" start="00:28:53.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And finally, the emacsconf-preparation.org file""" start="00:28:57.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hasn't been modified on either the hyperdrive""" start="00:29:00.779" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or my local file system,""" start="00:29:05.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the timestamp is identical.""" start="00:29:07.439" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So `hyperdrive-mirror` is going to""" start="00:29:09.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ignore this file as well.""" start="00:29:11.279" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So the only two files that are going""" start="00:29:13.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to be uploaded now are the solar-oven-notes.md file""" start="00:29:15.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and the fiddle-tunes.org file.""" start="00:29:19.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll confirm that with `C-c C-c`.""" start="00:29:21.639" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now in my hyperdrive""" start="00:29:25.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that there are four files.""" start="00:29:26.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The solar-oven-notes.md file has been uploaded,""" start="00:29:28.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and if I open the fiddle-tunes.org file,""" start="00:29:31.679" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""we see that it now contains the line &quot;Tom and Jerry,&quot;""" start="00:29:35.519" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which means that it was updated based on""" start="00:29:39.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the change to the file on my local file system.""" start="00:29:41.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This `hyperdrive-mirror` command is the command""" start="00:29:47.099" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that we use to periodically update""" start="00:29:50.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the USHIN hyperdrive with""" start="00:29:54.139" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the contents of the USHIN website.""" start="00:29:56.599" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There's going to be a link to the USHIN hyperdrive""" start="00:30:00.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as the website at the end of the video.""" start="00:30:03.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now I'll go into a little more detail""" start="00:30:06.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""about the Hyperdrive history buffer""" start="00:30:09.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""by showing off the README file in Prot's hyperdrive.""" start="00:30:11.219" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `C-c h` to open the menu,""" start="00:30:15.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`C-u h` to be prompted for a drive.""" start="00:30:19.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll select Prot's drive,""" start="00:30:22.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""then I'll press `f` to jump to a file""" start="00:30:24.239" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of Prot's drive,""" start="00:30:26.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and then `RET` to go to the root directory.""" start="00:30:28.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From here, I'll press `j` to jump to""" start="00:30:32.399" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""an item in his directory.""" start="00:30:35.339" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `RET` on the README to load it.""" start="00:30:37.299" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then finally, I'll open up""" start="00:30:42.379" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""`C-c h` to look at the menu.""" start="00:30:44.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here, I see that I'm looking at""" start="00:30:49.579" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the latest version of Prot's README.org file.""" start="00:30:50.979" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I also see that the previous version""" start="00:30:56.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of README.org is unknown.""" start="00:30:58.739" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's unknown because hyperdrives""" start="00:31:02.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""are sparsely replicated.""" start="00:31:05.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That means that when my node loaded this""" start="00:31:07.819" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""README.org file, it didn't bother""" start="00:31:09.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to load anything else.""" start="00:31:12.359" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It didn't load the previous history""" start="00:31:13.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""or any other file in his drive.""" start="00:31:16.059" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But now that I want to check out whether""" start="00:31:18.659" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""there is a previous version, I'll press `V p`.""" start="00:31:20.759" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And when it loads, I see in the mode line down here""" start="00:31:26.199" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I'm now looking at version 25 of this drive.""" start="00:31:28.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""That means that I'm looking at the README.org file""" start="00:31:33.319" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at version 25 of this drive.""" start="00:31:36.499" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open the menu again, and I see""" start="00:31:39.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the same version number is displayed here.""" start="00:31:42.019" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The previous version, before version 25,""" start="00:31:47.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is also unknown because we haven't bothered""" start="00:31:50.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to load anything before version 25.""" start="00:31:53.559" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I also see that the next version, after version 25,""" start="00:31:56.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is the latest version.""" start="00:32:00.479" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""So I'll open that up by pressing `V n`.""" start="00:32:02.419" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we are back where we started,""" start="00:32:06.719" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at the latest version.""" start="00:32:10.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But now we see that the previous version,""" start="00:32:12.919" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the version before the latest version, is version 25.""" start="00:32:15.079" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Because now that our node has loaded the previous version,""" start="00:32:18.999" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it can display that information to us.""" start="00:32:24.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""From here, I'll open up the history buffer.""" start="00:32:28.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll press `V h`.""" start="00:32:31.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And I can see that there are two known existent""" start="00:32:35.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ranges in Prot's README.org history.""" start="00:32:40.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This means that the latest version of README.org""" start="00:32:46.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""was modified at version 39.""" start="00:32:50.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And that Prot made four changes""" start="00:32:54.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to other files in his hyperdrive""" start="00:32:57.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""besides the README.org file since then.""" start="00:33:00.320" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Before that, the time that Prot modified""" start="00:33:04.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the README.org file was at version 25.""" start="00:33:08.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then he made 13 other changes to other files""" start="00:33:11.840" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""inside of this drive.""" start="00:33:15.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Before that, we don't know.""" start="00:33:18.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We haven't loaded the history.""" start="00:33:20.259" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""But since we're curious,""" start="00:33:21.859" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll hit `RET` on the unknown line.""" start="00:33:23.179" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And now we see that in Prot's hyperdrive,""" start="00:33:27.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the README.org file didn't exist""" start="00:33:32.140" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for the first 22 revisions of his drive.""" start="00:33:34.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then Prot created it at version 23.""" start="00:33:39.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then again, at 25, made a change.""" start="00:33:43.780" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then made another change at 39.""" start="00:33:46.920" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For good measure, I'll show you the diffs.""" start="00:33:50.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""The first diff just contains the entire file""" start="00:33:54.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because the file didn't exist before version 23.""" start="00:33:58.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Then, at version 25, Prot added a link""" start="00:34:05.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to the COPYING.org file.""" start="00:34:08.620" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then, at 39,""" start="00:34:13.119" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Prot changed the link to his own hyperdrive""" start="00:34:14.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to be a relative link.""" start="00:34:17.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Now, I'll stream a video from the USHIN hyperdrive""" start="00:34:20.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that shows off a prototype interface we created""" start="00:34:24.300" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for exploring networks of sources of information.""" start="00:34:27.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll open up `hyperdrive-menu`.""" start="00:34:31.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Press `C-u h` to be prompted for a drive.""" start="00:34:33.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I'll select the USHIN drive.""" start="00:34:37.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Press `f` to jump to a file in it.""" start="00:34:39.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And then I'll jump to the media directory.""" start="00:34:41.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Once it loads, I'll press `RET` on the video""" start="00:34:46.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that I want to stream.""" start="00:34:50.180" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Voice from the video]: This is a demonstration""" start="00:34:54.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""of the subjective trust interface""" start="00:34:56.686" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the USHIN team built for the u4u.io web app.""" start="00:34:57.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""[Joseph]: There it is.""" start="00:35:02.500" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Streaming a video from Hyperdrive.""" start="00:35:04.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here's how hyperdrive.el works under the hood.""" start="00:35:08.746" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It uses plz [Please],""" start="00:35:13.027" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""the HTTP library that Adam Porter wrote,""" start="00:35:14.727" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to send requests via curl to hyper-gateway.""" start="00:35:18.080" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway is a program that Mauve Signweaver wrote,""" start="00:35:22.720" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which runs a hyperdrive node under the hood.""" start="00:35:26.580" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It also runs a local HTTP server,""" start="00:35:30.760" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which accepts requests to control the node.""" start="00:35:34.040" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, if hyperdrive.el wants to show a file""" start="00:35:38.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""from someone's hyperdrive,""" start="00:35:43.480" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it sends the appropriate link via curl""" start="00:35:45.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as a GET request to hyper-gateway.""" start="00:35:49.120" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway then fetches the data from the network""" start="00:35:52.960" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and returns it via curl,""" start="00:35:57.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""via plz, back to hyperdrive.el.""" start="00:35:59.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If hyper-gateway already has a locally cached copy,""" start="00:36:03.940" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""it doesn't bother checking the network.""" start="00:36:07.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It just sends it straight away.""" start="00:36:09.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Likewise, if hyperdrive.el wants to add a file""" start="00:36:12.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to a hyperdrive, it sends a PUT request.""" start="00:36:15.880" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-gateway is not installed as part of hyperdrive.el.""" start="00:36:20.200" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It needs to be installed""" start="00:36:24.980" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as a separate, executable program.""" start="00:36:26.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We have plans to switch from using hyper-gateway""" start="00:36:35.740" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to another program that Mauve Signweaver""" start="00:36:39.460" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""is working on, called hyper-sdk-rpc.""" start="00:36:42.459" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""hyper-sdk-rpc will give us more fine-grained control""" start="00:36:47.839" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""over the underlying Hyperdrive node,""" start="00:36:52.020" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which will open up some new features.""" start="00:36:54.700" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""For example, we'll be able to rename files atomically,""" start="00:36:56.820" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""diff directories between versions,""" start="00:37:00.900" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and list the peers that we're currently connected to.""" start="00:37:03.420" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here are some of the Emacs libraries""" start="00:37:11.220" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that hyperdrive.el depends on.""" start="00:37:13.360" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive.el uses plz to send HTTP requests""" start="00:37:17.540" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to hyper-gateway. Check it out.""" start="00:37:22.400" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's on GNU ELPA.""" start="00:37:25.699" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""ewoc.el is a built-in library that's documented""" start="00:37:28.560" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the Emacs Lisp manual under the rather cryptic""" start="00:37:33.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""heading &quot;Abstract Display Functions.&quot;""" start="00:37:37.340" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Really, what it does is it allows you""" start="00:37:41.600" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""to map a data model to some display.""" start="00:37:44.520" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""What we do with it in hyperdrive.el is,""" start="00:37:50.000" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the directory view, we map directory entry items,""" start="00:37:53.860" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""files and directories, to display items.""" start="00:38:02.049" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""And ewoc.el makes it easy to update the display""" start="00:38:04.240" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""whenever the underlying data changes.""" start="00:38:08.701" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive.el uses persist.el to store""" start="00:38:14.761" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Hyperdrive metadata about known hyperdrives""" start="00:38:21.280" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""as well as version history between sessions,""" start="00:38:25.640" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""so that the data is cached""" start="00:38:29.481" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""when you log out and log back in.""" start="00:38:32.121" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""If you're going to be developing a program in Emacs""" start="00:38:34.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for Emacs 29 or later,""" start="00:38:38.721" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I recommend looking at multisession.el,""" start="00:38:41.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""because it's built-in, and it has some features""" start="00:38:44.941" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that persist.el doesn't have.""" start="00:38:50.161" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you for listening to this talk.""" start="00:38:57.541" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""I hope you get a chance to try out hyperdrive.el.""" start="00:39:00.001" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Here is a link to the hyperdrive.el manual""" start="00:39:03.681" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""in the USHIN hyperdrive.""" start="00:39:08.621" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""When you go to paste this link in,""" start="00:39:11.561" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""you'll need to combine it back into one line.""" start="00:39:14.981" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""This link is available in the hyperdrive.el manual,""" start="00:39:18.921" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""which is available from within a browser,""" start="00:39:22.501" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""at this link on the USHIN website.""" start="00:39:26.661" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""We also have a public conference room that you can join.""" start="00:39:29.821" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's an XMPP multi-user chat""" start="00:39:32.961" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""that the Sopranica team graciously makes available""" start="00:39:35.521" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""for us to use.""" start="00:39:39.781" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""There's also a Matrix bridge,""" start="00:39:41.621" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""if that's more your cup of tea.""" start="00:39:43.901" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Thank you to the EmacsConf organizers.""" start="00:39:48.660" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""It's been a pleasure to participate,""" start="00:39:52.821" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""and I look forward to hearing the rest of the talks.""" start="00:39:55.161" video="mainVideo-hyperdrive" id="subtitle"]]
+[[!template text="""Have a good day.""" start="00:39:57.614" video="mainVideo-hyperdrive" id="subtitle"]]
+
+
+
+Captioner: bhavin192
+
Questions or comments? Please e-mail [joseph@ushin.org](mailto:joseph@ushin.org?subject=Comment%20for%20EmacsConf%202022%20hyperdrive%3A%20hyperdrive.el%3A%20Peer-to-peer%20filesystem%20in%20Emacs)
diff --git a/2023/info/hyperdrive-before.md b/2023/info/hyperdrive-before.md
index db8c5d1d..d611cb96 100644
--- a/2023/info/hyperdrive-before.md
+++ b/2023/info/hyperdrive-before.md
@@ -10,12 +10,12 @@ The following image shows where the talk is in the schedule for Sun 2023-12-03.
Format: 41-min talk; Q&A: BigBlueButton conference room <https://media.emacsconf.org/2023/current/bbb-hyperdrive.html>
Etherpad: <https://pad.emacsconf.org/2023-hyperdrive>
Discuss on IRC: [#emacsconf-dev](https://chat.emacsconf.org/?join=emacsconf,emacsconf-dev)
-Status: Ready to stream
+Status: Now playing on the conference livestream
<div>Times in different timezones:</div><div class="times" start="2023-12-03T18:50:00Z" end="2023-12-03T19:30:00Z"><div class="conf-time">Sunday, Dec 3 2023, ~1:50 PM - 2:30 PM EST (US/Eastern)</div><div class="others"><div>which is the same as:</div>Sunday, Dec 3 2023, ~12:50 PM - 1:30 PM CST (US/Central)<br />Sunday, Dec 3 2023, ~11:50 AM - 12:30 PM MST (US/Mountain)<br />Sunday, Dec 3 2023, ~10:50 AM - 11:30 AM PST (US/Pacific)<br />Sunday, Dec 3 2023, ~6:50 PM - 7:30 PM UTC <br />Sunday, Dec 3 2023, ~7:50 PM - 8:30 PM CET (Europe/Paris)<br />Sunday, Dec 3 2023, ~8:50 PM - 9:30 PM EET (Europe/Athens)<br />Monday, Dec 4 2023, ~12:20 AM - 1:00 AM IST (Asia/Kolkata)<br />Monday, Dec 4 2023, ~2:50 AM - 3:30 AM +08 (Asia/Singapore)<br />Monday, Dec 4 2023, ~3:50 AM - 4:30 AM JST (Asia/Tokyo)</div></div><div><strong><a href="/2023/watch/dev/">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/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm" />captions="""<track label="English" kind="captions" srclang="en" src="/2023/captions/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--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: 40:03 minutes<div class="files resources"><ul><li><a href="https://pad.emacsconf.org/2023-hyperdrive">Open Etherpad</a></li><li><a href="https://media.emacsconf.org/2023/current/bbb-hyperdrive.html">Open public Q&A</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--final.webm">Download --final.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.vtt">Download --intro.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--intro.webm">Download --intro.webm (996kB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.opus">Download --main.opus (18MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.txt">Download --main.txt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.vtt">Download --main.vtt</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--main.webm">Download --main.webm (149MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--normalized.opus">Download --normalized.opus (69MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--original.webm">Download --original.webm (402MB)</a></li><li><a href="https://media.emacsconf.org/2023/emacsconf-2023-hyperdrive--hyperdriveel-peertopeer-filesystem-in-emacs--joseph-turner--reencoded.webm">Download --reencoded.webm (99MB)</a></li><li><a href="https://toobnix.org/w/9wLA55XACiGnS3nNBNwsV5">View on Toobnix</a></li></ul></div></div>
# Description
<!-- End of emacsconf-publish-before-page --> \ No newline at end of file