WEBVTT captioned by bhavin192

00:00:00.000 --> 00:00:02.280
Hey everyone, I'm Michael,

00:00:02.280 --> 00:00:03.640
and I'm going to be talking about

00:00:03.640 --> 00:00:06.000
Org mode and the IndieWeb.

00:00:06.000 --> 00:00:08.840
I am located in the San Francisco Bay Area,

00:00:08.840 --> 00:00:10.321
where I'm a developer as well as

00:00:10.321 --> 00:00:14.080
a longtime Emacs user.

00:00:14.080 --> 00:00:17.560
So, I maintain a personal website using Org mode.

00:00:17.560 --> 00:00:19.080
If you're watching this talk,

00:00:19.080 --> 00:00:21.560
I'm going to guess that you probably are too.

00:00:21.560 --> 00:00:24.880
For anybody who isn't,

00:00:24.880 --> 00:00:28.680
let me explain exactly what I mean by that.

00:00:28.680 --> 00:00:32.280
I have a static website. I author the pages

00:00:32.280 --> 00:00:34.000
in Org mode's markup language,

00:00:34.000 --> 00:00:36.280
otherwise known as Orgdown.

00:00:36.280 --> 00:00:38.440
I use the Org export facility

00:00:38.440 --> 00:00:43.760
to transcode that markup to HTML.

00:00:43.760 --> 00:00:47.000
And then I just use rsync to push

00:00:47.000 --> 00:00:51.760
the resulting HTML pages up to a VPS.

00:00:51.760 --> 00:00:52.854
I like the workflow.

00:00:52.854 --> 00:00:57.840
It's familiar to me as a coder.

00:00:57.840 --> 00:01:03.960
I get to use familiar tools like Git and Make.

00:01:03.960 --> 00:01:06.120
Publishing and then pushing the site

00:01:06.120 --> 00:01:09.800
to a local test server is just `make`.

00:01:09.800 --> 00:01:13.880
Pushing it to the live site is just `make prod`.

00:01:13.880 --> 00:01:18.680
That said, certain problems made themselves apparent

00:01:18.680 --> 00:01:22.080
with this arrangement pretty quickly.

00:01:22.080 --> 00:01:25.840
Commenting was one. It's very difficult

00:01:25.840 --> 00:01:28.200
to support commenting on a static website.

00:01:28.200 --> 00:01:29.501
I've got no database.

00:01:29.501 --> 00:01:34.120
I have no real server, and so on.

00:01:34.120 --> 00:01:35.960
Yes, of course, there is Disqus

00:01:35.960 --> 00:01:37.868
and other third party services

00:01:37.868 --> 00:01:38.800
that will do this for you,

00:01:38.800 --> 00:01:43.880
but I was uncomfortable outsourcing that job.

00:01:43.880 --> 00:01:45.320
And it was more than just comments.

00:01:45.320 --> 00:01:48.360
There was a general sense of isolation.

00:01:48.360 --> 00:01:50.680
There's no connection to places

00:01:50.680 --> 00:01:53.360
like Reddit, or Mastodon, or Twitter,

00:01:53.360 --> 00:01:56.560
you know, where all the people are.

00:01:56.560 --> 00:01:59.520
I guess you can post, then Tweet a link to it.

00:01:59.520 --> 00:02:01.960
But suppose somebody responds to your Tweet.

00:02:01.960 --> 00:02:05.520
Now you've got a conversation going on on Twitter

00:02:05.520 --> 00:02:07.640
that you're a visitor, and

00:02:07.640 --> 00:02:09.960
that a non-Twitter-using visitor to your site

00:02:09.960 --> 00:02:15.400
would be completely disconnected from.

00:02:15.400 --> 00:02:19.000
I am seeing people using Reddit effectively

00:02:19.000 --> 00:02:22.640
as the comment section for their sites.

00:02:22.640 --> 00:02:24.760
But unless you've got an audience, you know,

00:02:24.760 --> 00:02:27.720
the size of Derek's or Amos's,

00:02:27.720 --> 00:02:32.040
I don't think that's really feasible either.

00:02:32.040 --> 00:02:34.200
Now, after casting about for some time,

00:02:34.200 --> 00:02:37.680
I stumbled upon something called the IndieWeb.

00:02:37.680 --> 00:02:39.280
In their own words, the IndieWeb is

00:02:39.280 --> 00:02:41.960
a community of independent and personal websites

00:02:41.960 --> 00:02:44.401
connected by simple standards based on

00:02:44.401 --> 00:02:46.720
the principles of owning your domain

00:02:46.720 --> 00:02:48.480
and using it as your primary identity,

00:02:48.480 --> 00:02:50.360
publishing on your own site,

00:02:50.360 --> 00:02:52.418
and optionally syndicating elsewhere,

00:02:52.418 --> 00:02:54.320
and owning your data.

00:02:54.320 --> 00:02:57.680
I would describe it as a collection of individuals

00:02:57.680 --> 00:03:01.360
who've chosen to own their own platforms,

00:03:01.360 --> 00:03:05.520
alongside a loosely specked set of standards

00:03:05.520 --> 00:03:07.480
that tie those sites together.

00:03:07.480 --> 00:03:09.218
And it's really those standards

00:03:09.218 --> 00:03:10.640
that make the IndieWeb

00:03:10.640 --> 00:03:13.120
more than just a call for everybody

00:03:13.120 --> 00:03:14.735
to go back to the arts

00:03:14.735 --> 00:03:17.800
and blog on on their own sites.

00:03:17.800 --> 00:03:19.640
Now, this presentation isn't going to

00:03:19.640 --> 00:03:21.480
focus on the IndieWeb as such.

00:03:21.480 --> 00:03:23.360
It's more about using Org mode

00:03:23.360 --> 00:03:24.640
to put your site on the IndieWeb.

00:03:24.640 --> 00:03:28.040
I'm a little limited by time here,

00:03:28.040 --> 00:03:30.351
so I'm going to focus on

00:03:30.351 --> 00:03:32.080
just one of those protocols,

00:03:32.080 --> 00:03:33.400
and that's Webmentions.

00:03:33.400 --> 00:03:35.720
So, what's a Webmention?

00:03:35.720 --> 00:03:38.520
Let's begin with the inveterate Alice,

00:03:38.520 --> 00:03:39.468
who has a website

00:03:39.468 --> 00:03:42.680
and has posted content to that site.

00:03:42.680 --> 00:03:46.080
Her old friend Bob comes along,

00:03:46.080 --> 00:03:47.440
notices that content

00:03:47.440 --> 00:03:49.360
and wishes to say something about it.

00:03:49.360 --> 00:03:51.468
He posts to his site

00:03:51.468 --> 00:03:54.920
and his publication software will,

00:03:54.920 --> 00:03:57.080
if it supports Webmentions,

00:03:57.080 --> 00:04:00.160
will notice that he's mentioned Alice's post.

00:04:00.160 --> 00:04:04.320
At that point, his publication software

00:04:04.320 --> 00:04:07.240
reaches out to Alice's site,

00:04:07.240 --> 00:04:11.040
asks for the mentioned document,

00:04:11.040 --> 00:04:12.560
and will examine it to see

00:04:12.560 --> 00:04:15.600
if Alice advertises an endpoint at her site

00:04:15.600 --> 00:04:18.160
capable of receiving Webmentions.

00:04:18.160 --> 00:04:19.600
In this case, it does.

00:04:19.600 --> 00:04:23.480
So, Bob's publishing software does it.

00:04:23.480 --> 00:04:24.468
At the end of the day,

00:04:24.468 --> 00:04:26.000
a Webmention is really just

00:04:26.000 --> 00:04:30.360
an HTTP post request with two parameters,

00:04:30.360 --> 00:04:33.000
a source and a target.

00:04:33.000 --> 00:04:36.818
On receipt, Alice's server will

00:04:36.818 --> 00:04:39.400
reach out to Bob's site,

00:04:39.400 --> 00:04:43.280
request the document that contains the mention,

00:04:43.280 --> 00:04:45.920
and validate it, decide whether or not

00:04:45.920 --> 00:04:48.120
she wants to accept the Webmention.

00:04:48.120 --> 00:04:50.960
In this case, it's legit, it's accepted,

00:04:50.960 --> 00:04:54.000
and Alice chooses to make a note,

00:04:54.000 --> 00:04:56.760
to update her content,

00:04:56.760 --> 00:04:58.720
to make a note of the fact

00:04:58.720 --> 00:05:00.600
that it was mentioned by Bob.

00:05:00.600 --> 00:05:01.960
Now a couple of things to note here.

00:05:01.960 --> 00:05:03.480
The first is that this is effectively

00:05:03.480 --> 00:05:04.960
decentralized commenting.

00:05:04.960 --> 00:05:07.440
Both parties own their content,

00:05:07.440 --> 00:05:09.080
and there's no third party involved,

00:05:09.080 --> 00:05:13.640
trusted or otherwise.

00:05:13.640 --> 00:05:16.080
Now at this point, you might object that, well,

00:05:16.080 --> 00:05:18.720
as the owner of a statically generated site,

00:05:18.720 --> 00:05:21.600
I have essentially none of the infrastructure

00:05:21.600 --> 00:05:22.920
I need to implement this.

00:05:22.920 --> 00:05:27.120
I have no server above and beyond Apache.

00:05:27.120 --> 00:05:30.600
I can't really…, I have no database.

00:05:30.600 --> 00:05:33.680
I guess you could send Webmentions with curl,

00:05:33.680 --> 00:05:37.040
but now to do Webmention endpoint discovery,

00:05:37.040 --> 00:05:39.640
you're going to be parsing arbitrary HTML.

00:05:39.640 --> 00:05:41.120
It's a lot of work.

00:05:41.120 --> 00:05:45.080
That's okay. There are sites out there

00:05:45.080 --> 00:05:48.840
that offer Webmentions as a service.

00:05:48.840 --> 00:05:51.000
So, let's take a look at how that goes.

00:05:51.000 --> 00:05:54.920
We return to our original example.

00:05:54.920 --> 00:05:57.840
Alice continues to advertise an endpoint

00:05:57.840 --> 00:06:00.320
capable of receiving Webmentions,

00:06:00.320 --> 00:06:01.840
but it's no longer on her site.

00:06:01.840 --> 00:06:03.840
It's at webmention.io.

00:06:03.840 --> 00:06:08.000
Bob is essentially in the same position,

00:06:08.000 --> 00:06:09.920
but he now has in his world

00:06:09.920 --> 00:06:13.920
a third party site called Telegraph.

00:06:13.920 --> 00:06:16.040
When Bob wants to publish,

00:06:16.040 --> 00:06:19.760
he no longer needs to go through all the work

00:06:19.760 --> 00:06:21.760
of sending Webmention,

00:06:21.760 --> 00:06:25.280
and of carrying out Webmention endpoint discovery.

00:06:25.280 --> 00:06:27.880
He sends one API request to Telegraph,

00:06:27.880 --> 00:06:31.120
effectively saying, please send a Webmention for me.

00:06:31.120 --> 00:06:36.640
Asynchronously, telegraph.io is going to

00:06:36.640 --> 00:06:38.718
retrieve Alice's post,

00:06:38.718 --> 00:06:41.320
do Webmention endpoint discovery,

00:06:41.320 --> 00:06:45.400
and send the Webmention on Bob's behalf.

00:06:45.400 --> 00:06:48.280
Except this time he's sending it to webmention.io.

00:06:48.280 --> 00:06:53.080
Now, at some arbitrary point in the future,

00:06:53.080 --> 00:06:55.800
Alice can ask webmention.io,

00:06:55.800 --> 00:06:57.720
"Hey, do I have any new Webmentions?"

00:06:57.720 --> 00:07:00.480
And if she does, she may choose

00:07:00.480 --> 00:07:04.160
to update her content and publish.

00:07:04.160 --> 00:07:07.240
Okay, so let's code this up.

00:07:07.240 --> 00:07:09.120
Now, I'm recording this talk

00:07:09.120 --> 00:07:10.960
about a month ahead of time

00:07:10.960 --> 00:07:12.520
and I haven't been able to put together

00:07:12.520 --> 00:07:13.920
a little demo project.

00:07:13.920 --> 00:07:16.600
Hopefully, I can hack something together

00:07:16.600 --> 00:07:18.920
before this video streams.

00:07:18.920 --> 00:07:20.920
But in the meantime,

00:07:20.920 --> 00:07:22.960
I'd like to imagine a little test site.

00:07:22.960 --> 00:07:25.218
It has a single page,

00:07:25.218 --> 00:07:28.880
maybe we'll call it index.org,

00:07:28.880 --> 00:07:30.520
and we're going to publish it.

00:07:30.520 --> 00:07:32.600
We're going to export it to

00:07:32.600 --> 00:07:35.840
a subdirectory of our project directory,

00:07:35.840 --> 00:07:39.080
simply called www.

00:07:39.080 --> 00:07:44.800
So, the entry point to the Org export system

00:07:44.800 --> 00:07:46.640
is the function org-publish,

00:07:46.640 --> 00:07:49.960
whose docstring helpfully says,

00:07:49.960 --> 00:07:52.240
it publishes all projects.

00:07:52.240 --> 00:07:56.760
The set of all projects is defined by

00:07:56.760 --> 00:07:59.520
the variable `org-publish-project-alist`,

00:07:59.520 --> 00:08:02.320
which is a very flexible association list

00:08:02.320 --> 00:08:03.868
that lets you define

00:08:03.868 --> 00:08:05.520
what files are in your project,

00:08:05.520 --> 00:08:07.000
how you wish to export them,

00:08:07.000 --> 00:08:10.320
where they're going to go, etc, etc, etc.

00:08:10.320 --> 00:08:13.840
So great. This is actually pretty straightforward.

00:08:13.840 --> 00:08:15.880
We just give ourselves a little Elisp file

00:08:15.880 --> 00:08:17.040
and a single function.

00:08:17.040 --> 00:08:18.640
I'll call it publish,

00:08:18.640 --> 00:08:22.360
and all it will do is define

00:08:22.360 --> 00:08:25.000
`org-publish-project-alist`

00:08:25.000 --> 00:08:26.840
and invoke `org-publish-all`.

00:08:26.840 --> 00:08:31.880
At that point, exporting is a one-liner.

00:08:31.880 --> 00:08:35.560
We just invoke Emacs, load up our site.el file,

00:08:35.560 --> 00:08:37.280
and invoke the publish function.

00:08:37.280 --> 00:08:43.668
And if we want to publish to the live server,

00:08:43.668 --> 00:08:45.520
that's just another one-liner of ours.

00:08:45.520 --> 00:08:48.080
So, that's the publication framework.

00:08:48.080 --> 00:08:51.280
Now, let's take a look at sending Webmentions.

00:08:51.280 --> 00:08:54.400
The idea is that we're going to

00:08:54.400 --> 00:08:57.240
get our fingers into the publication process.

00:08:57.240 --> 00:09:01.000
Note when we see a Webmention in

00:09:01.000 --> 00:09:04.000
the process of exporting our Orgdown,

00:09:04.000 --> 00:09:07.840
and write it out to disk for sending later on.

00:09:07.840 --> 00:09:11.520
Now, I didn't want to send a Webmention

00:09:11.520 --> 00:09:13.040
for every single link in the post.

00:09:13.040 --> 00:09:14.960
I wanted this to be an intentional choice.

00:09:14.960 --> 00:09:16.960
And it turns out there are

00:09:16.960 --> 00:09:19.120
different sorts of Webmentions

00:09:19.120 --> 00:09:20.160
you can make on a page.

00:09:20.160 --> 00:09:22.520
For instance, if you add

00:09:22.520 --> 00:09:26.800
the CSS class u-in-reply-to to your link,

00:09:26.800 --> 00:09:28.635
the recipient will

00:09:28.635 --> 00:09:30.920
interpret this Webmention as a reply.

00:09:30.920 --> 00:09:33.440
There are similar CSS classes

00:09:33.440 --> 00:09:37.240
for likes, reposts, and generalized mentions.

00:09:37.240 --> 00:09:42.800
When the recipient gets your Webmention,

00:09:42.800 --> 00:09:45.640
if they want to know who's talking to them,

00:09:45.640 --> 00:09:47.960
they need to parse your page

00:09:47.960 --> 00:09:51.800
and look for DOM elements with certain CSS classes

00:09:51.800 --> 00:09:54.000
defined by the protocol as well.

00:09:54.000 --> 00:09:57.520
I'm a visual thinker,

00:09:57.520 --> 00:10:00.680
so I kind of drew out the process of publication,

00:10:00.680 --> 00:10:03.320
and exactly where we're going to

00:10:03.320 --> 00:10:05.160
get our fingers into this.

00:10:05.160 --> 00:10:07.320
So, this is me invoking make,

00:10:07.320 --> 00:10:09.800
which of course fires up Emacs.

00:10:09.800 --> 00:10:14.440
Just as before, my publish function will define

00:10:14.440 --> 00:10:17.920
`org-publish-project-alist` with one difference.

00:10:17.920 --> 00:10:21.040
There is an attribute,

00:10:21.040 --> 00:10:23.520
a property in the list called `publishing-function`.

00:10:23.520 --> 00:10:26.280
We're going to need to customize that.

00:10:26.280 --> 00:10:28.960
As usual, we then call…,

00:10:28.960 --> 00:10:31.960
we kick off the process by calling `org-publish-all`.

00:10:31.960 --> 00:10:36.468
org-publish-all will invoke

00:10:36.468 --> 00:10:37.320
your publishing function

00:10:37.320 --> 00:10:40.560
for each page, and it will hand to

00:10:40.560 --> 00:10:42.520
your publishing function for each page.

00:10:42.520 --> 00:10:45.080
The name of the file you're publishing,

00:10:45.080 --> 00:10:50.680
where it's going, and a parameter entitled plist.

00:10:50.680 --> 00:10:53.200
This is not super well documented.

00:10:53.200 --> 00:10:55.280
There are points in the docs

00:10:55.280 --> 00:10:57.440
that refer to this as a communication channel.

00:10:57.440 --> 00:11:01.800
What I discovered by simply reading the code was that

00:11:01.800 --> 00:11:04.560
it's a property list that is initialized

00:11:04.560 --> 00:11:09.680
for each invocation of your publication function.

00:11:09.680 --> 00:11:13.560
The initial properties are

00:11:13.560 --> 00:11:16.200
inherited from your project,

00:11:16.200 --> 00:11:20.801
but you are free to add properties as you go

00:11:20.801 --> 00:11:23.880
to communicate between different portions

00:11:23.880 --> 00:11:25.520
of the publication process.

00:11:25.520 --> 00:11:30.400
My publication function really does one thing,

00:11:30.400 --> 00:11:34.080
and that's simply swap out the HTML template

00:11:34.080 --> 00:11:36.840
that's passed to `org-publish-to`.

00:11:36.840 --> 00:11:43.696
Now, in order to take note of

00:11:43.696 --> 00:11:45.680
each Webmention that I send,

00:11:45.680 --> 00:11:47.585
I took advantage of another

00:11:47.585 --> 00:11:49.880
Org mode extension point

00:11:49.880 --> 00:11:52.720
called defining new link types.

00:11:52.720 --> 00:11:54.851
Here you can see

00:11:54.851 --> 00:11:58.560
I've created a new link type called reply.

00:11:58.560 --> 00:12:01.960
One of the attributes that you can attach to this

00:12:01.960 --> 00:12:06.160
is the function that is used to export your link.

00:12:06.160 --> 00:12:08.562
I've elided the code for

00:12:08.562 --> 00:12:10.720
mentions, likes, and reposts.

00:12:10.720 --> 00:12:13.520
If you look at my export function,

00:12:13.520 --> 00:12:16.280
you can see that it ultimately yields

00:12:16.280 --> 00:12:19.440
the appropriate HTML for this link.

00:12:19.440 --> 00:12:22.320
Before that, it calls a little helper function

00:12:22.320 --> 00:12:24.518
that will pull out the actual

00:12:24.518 --> 00:12:26.160
target URL of the link

00:12:26.160 --> 00:12:28.680
and shove it into this communication channel

00:12:28.680 --> 00:12:31.920
under the property name `sp1ff/mentions`.

00:12:31.920 --> 00:12:37.360
So, `org-publish-to` is really the workhorse

00:12:37.360 --> 00:12:40.240
of the publication process.

00:12:40.240 --> 00:12:42.120
The first thing it's going to do is

00:12:42.120 --> 00:12:47.400
transcode from the parsed Orgdown,

00:12:47.400 --> 00:12:50.320
which is an intermediate representation

00:12:50.320 --> 00:12:53.200
known as Org elements, to HTML.

00:12:53.200 --> 00:12:57.680
In particular, for every one of my new links

00:12:57.680 --> 00:13:00.440
that I'm using to mark Webmentions,

00:13:00.440 --> 00:13:04.040
it's going to invoke my little export function.

00:13:04.040 --> 00:13:06.600
And so as we work our way through the post,

00:13:06.600 --> 00:13:09.040
I'm going to accumulate all the Webmentions

00:13:09.040 --> 00:13:10.920
that I've made in the property list.

00:13:10.920 --> 00:13:14.360
The second step is to actually render

00:13:14.360 --> 00:13:16.560
the final HTML document,

00:13:16.560 --> 00:13:18.800
and that's where my specialized template comes in.

00:13:18.800 --> 00:13:21.480
All I do there is, use it to get

00:13:21.480 --> 00:13:24.920
my authorship information into the page.

00:13:24.920 --> 00:13:29.000
And then the last step is called finalization.

00:13:29.000 --> 00:13:32.320
At this point, we have the rendered HTML document,

00:13:32.320 --> 00:13:35.720
and Org mode gives you an extension point here,

00:13:35.720 --> 00:13:38.080
where you can do arbitrary post-processing

00:13:38.080 --> 00:13:39.200
on that document.

00:13:39.200 --> 00:13:42.160
I arguably abuse it to retrieve

00:13:42.160 --> 00:13:44.440
all the Webmentions I've made

00:13:44.440 --> 00:13:46.280
out of the communication channel

00:13:46.280 --> 00:13:47.920
and write them to disk.

00:13:47.920 --> 00:13:54.840
At this point, when we type make,

00:13:54.840 --> 00:13:59.160
we wind up with the rendered HTML

00:13:59.160 --> 00:14:01.080
for our Orgdown document,

00:14:01.080 --> 00:14:03.880
along with a little text file

00:14:03.880 --> 00:14:06.040
in which we've recorded all the Webmentions

00:14:06.040 --> 00:14:07.349
that need to be sent.

00:14:07.349 --> 00:14:11.800
The next step is to send said Webmentions.

00:14:11.800 --> 00:14:15.560
This is surprisingly easy in Emacs Lisp.

00:14:15.560 --> 00:14:17.360
This is my actual implementation.

00:14:17.360 --> 00:14:22.360
I use the request.el package to talk to Telegraph.

00:14:22.360 --> 00:14:26.920
And at this point, we really don't need to

00:14:26.920 --> 00:14:30.640
add a lot to our little site Elisp file.

00:14:30.640 --> 00:14:34.320
I sketched out a `send-webmentions` implementation

00:14:34.320 --> 00:14:36.160
that just goes through in a loop

00:14:36.160 --> 00:14:39.000
and calls my send-webmention function.

00:14:39.000 --> 00:14:42.640
And now publication becomes a two-step process.

00:14:42.640 --> 00:14:46.520
First, the org-publish, then sending Webmentions.

00:14:46.520 --> 00:14:51.418
Okay, so I realize this has been

00:14:51.418 --> 00:14:52.800
a bit of a whirlwind.

00:14:52.800 --> 00:14:55.240
So, where are we now?

00:14:55.240 --> 00:15:00.600
We have a sample site that we can publish

00:15:00.600 --> 00:15:02.400
and have sent Webmentions.

00:15:02.400 --> 00:15:05.480
And we've done it with just Emacs, Org mode,

00:15:05.480 --> 00:15:07.080
a little Lisp, and a make file.

00:15:07.080 --> 00:15:09.080
If you'd like to see more,

00:15:09.080 --> 00:15:11.680
I've put my library up on GitHub.

00:15:11.680 --> 00:15:13.754
It has logic for both

00:15:13.754 --> 00:15:15.560
sending and receiving Webmentions

00:15:15.560 --> 00:15:16.960
as well as something

00:15:16.960 --> 00:15:19.120
that on the IndieWeb is called POSSE,

00:15:19.120 --> 00:15:22.400
which is an acronym standing for

00:15:22.400 --> 00:15:25.400
Publish (on your) Own Site, Syndicate Elsewhere.

00:15:25.400 --> 00:15:27.818
What that means is that

00:15:27.818 --> 00:15:31.400
you turn the publication step

00:15:31.400 --> 00:15:35.400
from merely publishing new content to your site

00:15:35.400 --> 00:15:36.920
to also replicating it to places

00:15:36.920 --> 00:15:39.160
like Twitter and Facebook and so forth.

00:15:39.160 --> 00:15:44.120
And also when people like, comment,

00:15:44.120 --> 00:15:45.960
and retweet your content,

00:15:45.960 --> 00:15:47.680
that gets fed back to your site,

00:15:47.680 --> 00:15:51.400
where you can display it as comments.

00:15:51.400 --> 00:15:52.600
In terms of the future,

00:15:52.600 --> 00:15:54.520
I feel like I'm at a decision point.

00:15:54.520 --> 00:15:58.000
Org mode is admirably flexible,

00:15:58.000 --> 00:16:00.320
and I'm confident that I can continue to

00:16:00.320 --> 00:16:02.560
add support for IndieWeb protocols.

00:16:02.560 --> 00:16:05.440
On the other hand, it is so flexible

00:16:05.440 --> 00:16:07.880
that the process of figuring out

00:16:07.880 --> 00:16:10.680
which extension points to use in any situation

00:16:10.680 --> 00:16:12.000
is very challenging.

00:16:12.000 --> 00:16:14.800
When I started down this path,

00:16:14.800 --> 00:16:17.840
my mindset was keep it simple

00:16:17.840 --> 00:16:20.400
and let's just see how far I could get with Org mode.

00:16:20.400 --> 00:16:23.160
And I feel like I might be bumping up

00:16:23.160 --> 00:16:25.800
against the limitations of that approach now.

00:16:25.800 --> 00:16:34.920
Thank you very much.