WEBVTT
00:00:01.120 --> 00:00:03.120
Hi, my name is Brett Gillio,
00:00:03.120 --> 00:00:04.560
and today I'll be sharing a project that
00:00:04.560 --> 00:00:05.920
several people and I have been working on
00:00:05.920 --> 00:00:08.480
for the past few months, called
org-webring.
00:00:08.480 --> 00:00:10.559
The essential idea behind org-webring
00:00:10.559 --> 00:00:12.240
is to take the power of creating a
00:00:12.240 --> 00:00:13.679
website with Org Mode
00:00:13.679 --> 00:00:15.360
and its built-in features to control
00:00:15.360 --> 00:00:17.520
HTML and XML output
00:00:17.520 --> 00:00:19.119
and utilize it to share blogs, git
00:00:19.119 --> 00:00:22.640
commits, or other rss or atom static
feed content
00:00:22.640 --> 00:00:25.920
to share directly with your audiences.
00:00:25.920 --> 00:00:28.362
My website is created entirely using
00:00:28.362 --> 00:00:30.000
Org Mode. I love the amount of
00:00:30.000 --> 00:00:31.679
flexibility it offers me while keeping
00:00:31.679 --> 00:00:34.079
everything quite simple.
00:00:34.079 --> 00:00:35.920
I am able to put information about
00:00:35.920 --> 00:00:37.600
myself, a blog,
00:00:37.600 --> 00:00:40.079
and my org-webring tool directly on on
00:00:40.079 --> 00:00:42.879
the home page using simple Org syntax.
00:00:42.879 --> 00:00:44.640
As you can see, I am currently displaying
00:00:44.640 --> 00:00:46.239
three posts on my website.
00:00:46.239 --> 00:00:48.239
The first is the Guix Day announcement,
00:00:48.239 --> 00:00:49.840
the second is a quarterly financial
00:00:49.840 --> 00:00:51.039
update from SourceHut,
00:00:51.039 --> 00:00:52.320
and the third is a post from
00:00:52.320 --> 00:00:55.120
Drew DeVault's blog. Drew DeVault,
by the way--
00:00:55.120 --> 00:00:57.680
his open ring is what helped inspire
00:00:57.680 --> 00:01:01.359
what is today org-webring.
All this information is
00:01:01.359 --> 00:01:03.440
gathered using a sort of manifest file
00:01:03.440 --> 00:01:05.360
that org-webring will use to acquire
00:01:05.360 --> 00:01:06.746
and place the information in the
00:01:06.746 --> 00:01:07.760
correct format
00:01:07.760 --> 00:01:10.000
according to your specification.
00:01:10.000 --> 00:01:11.729
additionally, you can see that the
00:01:11.729 --> 00:01:14.159
Guix Day announcement's post is pinned.
00:01:14.159 --> 00:01:17.200
Stylization is likewise controlled by
using CSS.
00:01:17.200 --> 00:01:18.960
You can add nice subtle color changes on
00:01:18.960 --> 00:01:20.720
mouse hover or control the size of the
00:01:20.720 --> 00:01:23.759
flexboxes, all using standard CSS.
00:01:23.759 --> 00:01:28.320
Let's examine a simple scenario of using
org-webring.
00:01:28.320 --> 00:01:30.400
After you have org-webring installed,
00:01:30.400 --> 00:01:32.000
you'll be able to create a manifest file
00:01:32.000 --> 00:01:33.759
that looks something like this.
00:01:33.759 --> 00:01:35.680
This particular manifest file is an
00:01:35.680 --> 00:01:37.840
example offered in the repository under
00:01:37.840 --> 00:01:39.520
the assets directory.
00:01:39.520 --> 00:01:41.200
Please feel free to utilize them as a
00:01:41.200 --> 00:01:42.640
starting point if you are interested in
00:01:42.640 --> 00:01:44.399
using org-webring.
00:01:44.399 --> 00:01:46.320
As you can see here, we are able to place
00:01:46.320 --> 00:01:48.640
an RSS or ATOM feed in this file and
00:01:48.640 --> 00:01:50.479
specify information about the feed we
00:01:50.479 --> 00:01:51.920
wish to produce.
00:01:51.920 --> 00:01:54.640
For example: the total number of items
00:01:54.640 --> 00:01:56.159
and the total number of entries per
00:01:56.159 --> 00:01:57.439
source item.
00:01:57.439 --> 00:01:59.439
Additionally, you're able to filter posts
00:01:59.439 --> 00:02:02.079
you feel would not be relevant to your
web ring.
00:02:02.079 --> 00:02:03.843
We can take this example file,
00:02:03.843 --> 00:02:13.120
run the dispatch and see the result.
00:02:13.120 --> 00:02:15.280
The web ring displays a proper summary
00:02:15.280 --> 00:02:17.760
set to a character limit you can specify.
00:02:17.760 --> 00:02:19.453
Additionally, all the links in the
00:02:19.453 --> 00:02:20.814
web ring are navigatable and
00:02:20.814 --> 00:02:22.560
will open in a new tab.
00:02:22.560 --> 00:02:24.719
That way, if someone wishes to
view the content,
00:02:24.719 --> 00:02:25.920
they simply need to
00:02:25.920 --> 00:02:30.319
click on the title or their source name.
00:02:30.319 --> 00:02:32.879
Now this particular example is not
00:02:32.879 --> 00:02:34.800
stylized because we have not given the
00:02:34.800 --> 00:02:37.120
website a CSS file to reference.
00:02:37.120 --> 00:02:38.720
Let's examine what is happening from
00:02:38.720 --> 00:02:40.319
behind the scenes a little bit.
00:02:40.319 --> 00:02:42.621
From inside of the Org Mode file,
00:02:42.621 --> 00:02:48.800
let's run the org-webring function.
00:02:48.800 --> 00:02:51.280
As you can see, it takes that XML file
00:02:51.280 --> 00:02:54.239
and processes it into the correct HTML.
00:02:54.239 --> 00:02:55.938
You will then be able to embed this
00:02:55.938 --> 00:02:57.758
Org function into another Org file
00:02:57.758 --> 00:03:00.080
to be able to display it on your website.
00:03:00.080 --> 00:03:05.440
Pretty neat. Let's look at
another example.
00:03:05.440 --> 00:03:07.360
On my website, we have an example of
00:03:07.360 --> 00:03:09.519
using org-webring to reply to another
00:03:09.519 --> 00:03:10.800
blog post.
00:03:10.800 --> 00:03:12.178
What I have here is a post from
00:03:12.178 --> 00:03:14.640
Drew DeVault's blog. It is showcased clearly at
00:03:14.640 --> 00:03:16.239
the top as a single entry,
00:03:16.239 --> 00:03:18.220
and you can see it is pinned.
00:03:18.220 --> 00:03:19.889
The pinning functionality ensures
00:03:19.889 --> 00:03:20.800
that this post is
00:03:20.800 --> 00:03:21.852
moved to the front of the
00:03:21.852 --> 00:03:23.120
hypothetical web ring
00:03:23.120 --> 00:03:25.232
and guaranteeing its visibility.
00:03:25.232 --> 00:03:27.599
This is then coupled with a
few changes, such as
00:03:27.599 --> 00:03:29.840
disabling the generation time
00:03:29.840 --> 00:03:31.552
(which would not be relevant to the
readers)
00:03:31.552 --> 00:03:34.000
and a change of the text
in the header
00:03:34.000 --> 00:03:37.040
to demonstrate it is indeed
used as a reply.
00:03:37.040 --> 00:03:39.599
An example of this is also provided in
00:03:39.599 --> 00:03:42.319
the assets directory.
00:03:42.319 --> 00:03:44.146
Last, we can use org-webring
00:03:44.146 --> 00:03:45.519
as a blog planet,
00:03:45.519 --> 00:03:47.599
which is one of my favorites. This takes
00:03:47.599 --> 00:03:49.360
after the Emacs Life planet, which I
00:03:49.360 --> 00:03:51.722
believe is moderated
by Sacha and others,
00:03:51.722 --> 00:03:53.200
as well as the Haskell and
00:03:53.200 --> 00:03:54.720
OCaml planets.
00:03:54.720 --> 00:03:56.959
A planet, for the uninitiated, is a
00:03:56.959 --> 00:03:58.485
curated form of content sharing
00:03:58.485 --> 00:04:00.159
about a set of topics.
00:04:00.159 --> 00:04:02.400
The Emacs Life, Haskell, and OCaml planets,
00:04:02.400 --> 00:04:03.439
as their names imply,
00:04:03.439 --> 00:04:07.200
cover Emacs, Haskell, and OCaml blogs
respectively.
00:04:07.200 --> 00:04:08.962
Likewise, my planet covers
00:04:08.962 --> 00:04:10.310
programming language theory
00:04:10.310 --> 00:04:12.239
and category theory, primarily.
00:04:12.239 --> 00:04:13.920
It works in essentially the same way as
00:04:13.920 --> 00:04:15.840
the org-webring. You provide it with a
00:04:15.840 --> 00:04:17.519
list of feeds that get parsed.
00:04:17.519 --> 00:04:19.317
However, unlike the web ring,
00:04:19.317 --> 00:04:21.086
the planet function has no limits
00:04:21.086 --> 00:04:23.040
on the number of entries per source,
00:04:23.040 --> 00:04:24.639
and the display number of posts is
00:04:24.639 --> 00:04:27.600
increased significantly.
00:04:27.600 --> 00:04:29.759
The syndicates or sources have their
00:04:29.759 --> 00:04:31.429
feeds shown visibly to users
00:04:31.429 --> 00:04:33.759
who may wish to fetch them.
00:04:33.759 --> 00:04:35.440
A planet is typically meant to be a
00:04:35.440 --> 00:04:37.040
standalone page and not something you
00:04:37.040 --> 00:04:39.440
would embed in another page like a
web ring.
00:04:39.440 --> 00:04:41.680
All this is provided under a single file
00:04:41.680 --> 00:04:43.009
in the org-webring package,
00:04:43.009 --> 00:04:45.280
as the code reuse is quite high.
00:04:45.280 --> 00:04:48.240
Aside from my own website, we can view
00:04:48.240 --> 00:04:49.840
the org-webring being used in neat
00:04:49.840 --> 00:04:52.400
context with varying stylizations.
00:04:52.400 --> 00:04:53.642
Here's a nice example
00:04:53.642 --> 00:04:57.680
from Mikhail Kirillov at w96k.ru,
00:04:57.680 --> 00:05:00.960
featuring a four symmetrical
flexbox layout,
00:05:00.960 --> 00:05:02.324
an appropriate Russian language
00:05:02.324 --> 00:05:04.225
time encoding, which can be also set
00:05:04.225 --> 00:05:07.360
in the org-webring manifest.
00:05:07.360 --> 00:05:08.892
Another is an example from
00:05:08.892 --> 00:05:10.400
Camilo Mesa Gaete (https://cmezagaete.cl/),
00:05:10.400 --> 00:05:13.280
using ox-hugo with org-webring and
00:05:13.280 --> 00:05:14.320
likewise correctly
00:05:14.320 --> 00:05:17.680
features the correct Spanish
time encoding.
00:05:17.680 --> 00:05:22.240
Last, my other website workircd.org
00:05:22.240 --> 00:05:24.265
shows the web ring being used
00:05:24.265 --> 00:05:27.440
in combination with Ocaml's tool
link Soupault,
00:05:27.440 --> 00:05:32.800
to fetch git logs for that project.
00:05:32.800 --> 00:05:34.639
You may obtain org-webring directly
00:05:34.639 --> 00:05:37.039
from SourceHut and add it to your
load-path.
00:05:37.039 --> 00:05:39.639
Additionally, you will need to obtain
00:05:39.639 --> 00:05:43.280
xmlgen.el, which is unfortunately
not yet on ELPA,
00:05:43.280 --> 00:05:44.960
although I have been trying to get this
00:05:44.960 --> 00:05:46.800
rectified so I do not have to rewrite
00:05:46.800 --> 00:05:49.840
org-webring's XML to HTML parser.
00:05:49.840 --> 00:05:51.759
Or if you're one of the cool kids using
00:05:51.759 --> 00:05:54.000
my favorite package manager, GNU Guix,
00:05:54.000 --> 00:06:06.319
you can obtain it like so.
00:06:06.319 --> 00:06:08.248
All of the documentation for
00:06:08.248 --> 00:06:09.840
org-webring is available
00:06:09.840 --> 00:06:12.000
on the SourceHut website or in the README
00:06:12.000 --> 00:06:15.039
file after you check it out
from the git tree.
00:06:15.039 --> 00:06:16.586
There are so many ways to
00:06:16.586 --> 00:06:18.240
customize org-webring,
00:06:18.240 --> 00:06:20.671
as there are just as many variables
00:06:20.671 --> 00:06:23.056
as there are parts and components
00:06:23.056 --> 00:06:25.759
to org-webring for you to change.
00:06:25.759 --> 00:06:27.759
All of this is able to be done simply
00:06:27.759 --> 00:06:31.600
from that same manifest file.
00:06:31.600 --> 00:06:33.919
Now, taking a moment to examine some of
00:06:33.919 --> 00:06:35.759
the org-webring code,
00:06:35.759 --> 00:06:37.840
you can see it is all done in the same
00:06:37.840 --> 00:06:40.160
Elisp that everybody else is used to.
00:06:40.160 --> 00:06:43.120
Now, admittedly, my Elisp is not as
00:06:43.120 --> 00:06:45.977
strong as probably somebody else's,
00:06:45.977 --> 00:06:48.678
so if you are an Elisp ninja,
00:06:48.678 --> 00:06:50.479
please feel free to
00:06:50.479 --> 00:06:52.633
send a contribution or a patch
00:06:52.633 --> 00:06:54.880
and tell me what I'm doing wrong.
00:06:54.880 --> 00:06:56.836
I am not going to be offended
00:06:56.836 --> 00:06:58.233
by that at all. I would love to
00:06:58.233 --> 00:06:59.982
see this code to improve.
00:06:59.982 --> 00:07:04.160
Otherwise, I don't think it's half bad,
00:07:04.160 --> 00:07:06.800
considering that my experience with
00:07:06.800 --> 00:07:08.880
Lisps is usually in Scheme.
00:07:08.880 --> 00:07:10.774
Me moving from Scheme to Elisp
00:07:10.774 --> 00:07:13.680
was not all that hard.
00:07:13.680 --> 00:07:17.120
Taking the syntax apart,
00:07:17.120 --> 00:07:20.880
we're able to see that we can
00:07:20.880 --> 00:07:23.331
fetch URLs, which are then
00:07:23.331 --> 00:07:26.505
parsed and filtered, sorted, and then
00:07:26.505 --> 00:07:29.151
kind of reverse-sorted, rather,
00:07:29.151 --> 00:07:32.960
to get you to the web ring result.
00:07:32.960 --> 00:07:34.639
All of this is then passed through
00:07:34.639 --> 00:07:37.840
different parts of the xmlgen.el
00:07:37.840 --> 00:07:40.280
functions which gets you that HTML
00:07:40.280 --> 00:07:43.520
that you saw earlier.
00:07:43.520 --> 00:07:45.599
org-webring is fully free software
00:07:45.599 --> 00:07:47.440
distributed under the GNU General Public
00:07:47.440 --> 00:07:49.280
License versions 3 or later.
00:07:49.280 --> 00:07:52.000
At your option, I love accepting patches
00:07:52.000 --> 00:07:53.120
and collaborating.
00:07:53.120 --> 00:07:55.166
I hope you will consider
using org-webring.
00:07:55.166 --> 00:07:56.720
You can contact me on
00:07:56.720 --> 00:07:59.390
Freenode, OFTC, or many other
00:07:59.390 --> 00:08:01.520
IRC networks at brettgillio,
00:08:01.520 --> 00:08:05.120
or email me at brettg@gnu.org.
00:08:05.120 --> 00:08:09.327
Thanks so much to Amin Bandali and the
EmacsConf organizers,
00:08:09.327 --> 00:08:13.840
and to you, the audience, thanks.