Hi, my name is Brett Gillio,
and today I'll be sharing a project that
several people and I have been working on
for the past few months, called org-webring.
The essential idea behind org-webring
is to take the power of creating a
website with Org Mode
and its built-in features to control
HTML and XML output
and utilize it to share blogs, git
commits, or other rss or atom static feed content
to share directly with your audiences.
My website is created entirely using
Org Mode. I love the amount of
flexibility it offers me while keeping
everything quite simple.
I am able to put information about
myself, a blog,
and my org-webring tool directly on on
the home page using simple Org syntax.
As you can see, I am currently displaying
three posts on my website.
The first is the Guix Day announcement,
the second is a quarterly financial
update from SourceHut,
and the third is a post from
Drew DeVault's blog. Drew DeVault, by the way--
his open ring is what helped inspire
what is today org-webring. All this information is
gathered using a sort of manifest file
that org-webring will use to acquire
and place the information in the
correct format
according to your specification.
additionally, you can see that the
Guix Day announcement's post is pinned.
Stylization is likewise controlled by using CSS.
You can add nice subtle color changes on
mouse hover or control the size of the
flexboxes, all using standard CSS.
Let's examine a simple scenario of using org-webring.
After you have org-webring installed,
you'll be able to create a manifest file
that looks something like this.
This particular manifest file is an
example offered in the repository under
the assets directory.
Please feel free to utilize them as a
starting point if you are interested in
using org-webring.
As you can see here, we are able to place
an RSS or ATOM feed in this file and
specify information about the feed we
wish to produce.
For example: the total number of items
and the total number of entries per
source item.
Additionally, you're able to filter posts
you feel would not be relevant to your web ring.
We can take this example file,
run the dispatch and see the result.
The web ring displays a proper summary
set to a character limit you can specify.
Additionally, all the links in the
web ring are navigatable and
will open in a new tab.
That way, if someone wishes to view the content,
they simply need to
click on the title or their source name.
Now this particular example is not
stylized because we have not given the
website a CSS file to reference.
Let's examine what is happening from
behind the scenes a little bit.
From inside of the Org Mode file,
let's run the org-webring function.
As you can see, it takes that XML file
and processes it into the correct HTML.
You will then be able to embed this
Org function into another Org file
to be able to display it on your website.
Pretty neat. Let's look at another example.
On my website, we have an example of
using org-webring to reply to another
blog post.
What I have here is a post from
Drew DeVault's blog. It is showcased clearly at
the top as a single entry,
and you can see it is pinned.
The pinning functionality ensures
that this post is
moved to the front of the
hypothetical web ring
and guaranteeing its visibility.
This is then coupled with a few changes, such as
disabling the generation time
(which would not be relevant to the readers)
and a change of the text in the header
to demonstrate it is indeed used as a reply.
An example of this is also provided in
the assets directory.
Last, we can use org-webring
as a blog planet,
which is one of my favorites. This takes
after the Emacs Life planet, which I
believe is moderated by Sacha and others,
as well as the Haskell and
OCaml planets.
A planet, for the uninitiated, is a
curated form of content sharing
about a set of topics.
The Emacs Life, Haskell, and OCaml planets,
as their names imply,
cover Emacs, Haskell, and OCaml blogs respectively.
Likewise, my planet covers
programming language theory
and category theory, primarily.
It works in essentially the same way as
the org-webring. You provide it with a
list of feeds that get parsed.
However, unlike the web ring,
the planet function has no limits
on the number of entries per source,
and the display number of posts is
increased significantly.
The syndicates or sources have their
feeds shown visibly to users
who may wish to fetch them.
A planet is typically meant to be a
standalone page and not something you
would embed in another page like a web ring.
All this is provided under a single file
in the org-webring package,
as the code reuse is quite high.
Aside from my own website, we can view
the org-webring being used in neat
context with varying stylizations.
Here's a nice example
from Mikhail Kirillov at w96k.ru,
featuring a four symmetrical flexbox layout,
an appropriate Russian language
time encoding, which can be also set
in the org-webring manifest.
Another is an example from
Camilo Mesa Gaete (https://cmezagaete.cl/),
using ox-hugo with org-webring and
likewise correctly
features the correct Spanish time encoding.
Last, my other website workircd.org
shows the web ring being used
in combination with Ocaml's tool link Soupault,
to fetch git logs for that project.
You may obtain org-webring directly
from SourceHut and add it to your load-path.
Additionally, you will need to obtain
xmlgen.el, which is unfortunately not yet on ELPA,
although I have been trying to get this
rectified so I do not have to rewrite
org-webring's XML to HTML parser.
Or if you're one of the cool kids using
my favorite package manager, GNU Guix,
you can obtain it like so.
All of the documentation for
org-webring is available
on the SourceHut website or in the README
file after you check it out from the git tree.
There are so many ways to
customize org-webring,
as there are just as many variables
as there are parts and components
to org-webring for you to change.
All of this is able to be done simply
from that same manifest file.
Now, taking a moment to examine some of
the org-webring code,
you can see it is all done in the same
Elisp that everybody else is used to.
Now, admittedly, my Elisp is not as
strong as probably somebody else's,
so if you are an Elisp ninja,
please feel free to
send a contribution or a patch
and tell me what I'm doing wrong.
I am not going to be offended
by that at all. I would love to
see this code to improve.
Otherwise, I don't think it's half bad,
considering that my experience with
Lisps is usually in Scheme.
Me moving from Scheme to Elisp
was not all that hard.
Taking the syntax apart,
we're able to see that we can
fetch URLs, which are then
parsed and filtered, sorted, and then
kind of reverse-sorted, rather,
to get you to the web ring result.
All of this is then passed through
different parts of the xmlgen.el
functions which gets you that HTML
that you saw earlier.
org-webring is fully free software
distributed under the GNU General Public
License versions 3 or later.
At your option, I love accepting patches
and collaborating.
I hope you will consider using org-webring.
You can contact me on
Freenode, OFTC, or many other
IRC networks at brettgillio,
or email me at brettg@gnu.org.
Thanks so much to Amin Bandali and the EmacsConf organizers,
and to you, the audience, thanks.