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.