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.