Back to the schedule
Previous: README-Driven Design
Next: Org-roam: Presentation, Demonstration, and What's on the Horizon
Moving from Jekyll to OrgMode, an experience report
Adolfo Villafiorita
Download compressed .webm video (23.6M)
Download compressed .webm video (13.8M, highly compressed)
View transcript
I have been a long time user of static site generators, such as Jekyll.
I recently discovered Org Mode's publishing features and started appreciating flexibility and capabilities, especially when literate programming comes into play to generate "dynamic" content.
In this talk/tutorial I will present the challenges I faced and how I finally moved my homepage and the University of Trento's Computational Logic website to Org Mode.
- Actual start and end time (EST): Start: 2020-11-28T14.36.18; Q&A: 2020-11-28T14.51.48; End: 2020-11-28T14.53.03
Questions
Opinion on Firn (https://github.com/theiceshelf/firn)?
Do you discuss this in a blog as well? Where could I find more about it?
Talk and content will be published later after the conference. Will be available on the talk page.
Could you please paste your URLs in the notes below? (link to your site etc).
The source repository of the first website (my homepage) lives here: https://www.ict4g.net/gitea/adolfo/home and the output is: https://www.ict4g.net/adolfo/.
The source repository of the second website (Computational Logic) lives here: https://www.ict4g.net/gitea/adolfo/cl-2020 and the output is: http://datascientia.education/cl-2020.
The talk, code and links are now availble here: https://www.ict4g.net/adolfo/notes/emacsconf-2020/index.html.
https://www.ict4g.net/gitea/adolfo/home has the source code for the website.
Notes
- Main reason: Org has better support for literate programming.
- Org mode files support in Jekyll - https://emacs.cc/jekyll-org/.
- Mentioned: http://juanjose.garciaripoll.com/blog/org-mode-html-templates/index.html (org-html).
- Other static webpage generators: https://github.com/novoid/lazyblorg/wiki/Similar-Projects.
Transcript
00:00:00.080 --> 00:00:03.120 Adolfo: Okay, excellent. Hello, everyone and nice meeting you. Let me thank the the organizer for all the organization and all the work they are doing to support us. My name is Adolfo Villafiorita. I'm teaching at the University of Trento. I will shortly be working at shared.tech, which is a non-profit organization developing applications to recover surplus food.
00:00:35.680 --> 00:00:38.600 The reason of the talk today and the reason I'm here today is to talk about my experience in moving from Jekyll static website generator to Org Mode. The reason I moved to Org Mode is to have better support for literate programming on the websites at the University of Trento, where we make available the content for the the students.
00:01:04.720 --> 00:01:08.900 First of all, what is a static website generator? It is basically a tool which allows you to generate HTML files out of text files containing basically two types of information: metadata and content.
00:01:20.700 --> 00:01:23.119 Metadata is a set of key pairs describing the
00:01:26.159 --> 00:01:28.560 content of the file, such as the title,
00:01:28.560 --> 00:01:31.733 author, tags, and so on and so forth.
00:01:31.733 --> 00:01:34.560 The content is what you actually want to
00:01:34.560 --> 00:01:37.040 get published on the Internet in
00:01:37.040 --> 00:01:38.880 the HTML file.
00:01:38.880 --> 00:01:41.439 Usually the content is written in
00:01:41.439 --> 00:01:45.800 some kind of markup language,
00:01:45.800 --> 00:01:49.759 such as Markdown or possibly
00:01:49.759 --> 00:01:53.200 Org Mode. Jekyll is a very
00:01:53.200 --> 00:01:57.900 popular static website generator.
00:01:57.900 --> 00:01:59.840 It is written in Ruby.
00:01:59.840 --> 00:02:03.280 What it does: it systematically
00:02:03.280 --> 00:02:06.840 transforms all the input files
00:02:06.840 --> 00:02:09.440 by making the content into
00:02:09.440 --> 00:02:11.599 HTML and systematically applying a
00:02:11.599 --> 00:02:14.000 template in order to generate the
00:02:14.000 --> 00:02:17.120 HTML files, which you can then deploy
00:02:17.120 --> 00:02:19.840 on your server of choice to make them
00:02:19.840 --> 00:02:22.160 available on the Internet.
00:02:22.160 --> 00:02:26.160 One of the features most--
00:02:26.160 --> 00:02:27.500 well, I would say all
00:02:27.500 --> 00:02:30.239 static website generators have
00:02:30.239 --> 00:02:32.560 is that of being able to
00:02:32.560 --> 00:02:34.879 collect the metadata information
00:02:34.879 --> 00:02:38.400 of the files being part of
00:02:38.400 --> 00:02:39.440 your project.
00:02:39.440 --> 00:02:45.280 The reason they do that is because
00:02:45.280 --> 00:02:47.840 you sometimes want to generate pages
00:02:47.840 --> 00:02:49.280 based on the content
00:02:49.280 --> 00:02:53.200 of your projects,
00:02:53.200 --> 00:02:56.239 such as, for instance, the list of
00:02:56.239 --> 00:02:59.040 posts you have recently published, or
00:02:59.040 --> 00:03:00.400 maybe the list of tags
00:03:00.400 --> 00:03:03.840 you have defined for your post,
00:03:03.840 --> 00:03:07.280 and so on and so forth.
00:03:07.280 --> 00:03:09.760 Jekyll gives the possibility of
00:03:09.760 --> 00:03:12.400 generating this kind of dynamic
00:03:12.400 --> 00:03:14.400 content by using Liquid,
00:03:14.400 --> 00:03:18.800 which is a templating language which
00:03:18.800 --> 00:03:21.840 looks like this.
00:03:21.840 --> 00:03:24.879 So basically, you have all the
00:03:24.879 --> 00:03:26.879 constructs you can
00:03:26.879 --> 00:03:28.800 expect in a programming language.
00:03:28.800 --> 00:03:29.920 This, for instance,
00:03:29.920 --> 00:03:33.360 is a for cycle which
00:03:33.360 --> 00:03:37.440 iterates over all the posts or the
00:03:37.440 --> 00:03:39.599 files in a specific directory of the
00:03:39.599 --> 00:03:41.040 Jekyll project.
00:03:41.040 --> 00:03:45.040 For each post, it takes the title
00:03:45.040 --> 00:03:48.400 and the URL and generates a link.
00:03:48.400 --> 00:03:52.867 So Jekyll is nice and sweet,
00:03:52.867 --> 00:03:55.200 but over the years
00:03:55.200 --> 00:03:57.760 I started using more and more
00:03:57.760 --> 00:03:59.519 systematically
00:03:59.519 --> 00:04:02.000 Org Mode to write all my files.
00:04:02.000 --> 00:04:04.833 I moved from Markdown to Org Mode
00:04:04.833 --> 00:04:07.200 I am a long time Emacs user.
00:04:07.200 --> 00:04:09.167 I've been using Emacs for 30 years now,
00:04:09.167 --> 00:04:12.799 so Org Mode is a more recent discovery,
00:04:12.799 --> 00:04:17.033 but it is a very nice discovery I made.
00:04:17.033 --> 00:04:19.680 The reason I like Org Mode
00:04:19.680 --> 00:04:22.320 is because, for instance, you can write
00:04:22.320 --> 00:04:24.933 formulas using MathJax
00:04:24.933 --> 00:04:26.639 and you can generate diagrams
00:04:26.639 --> 00:04:30.320 or plots with Gnuplot.
00:04:30.320 --> 00:04:32.240 Also important is the fact that you have
00:04:32.240 --> 00:04:34.080 the possibility of publishing
00:04:34.080 --> 00:04:39.520 your documents to multiple backends such as PDF,
00:04:39.520 --> 00:04:43.600 or maybe a Reveal presentation,
00:04:43.600 --> 00:04:47.199 or HTML. This is all made possible
00:04:47.199 --> 00:04:50.479 by Babel, which is
00:04:50.479 --> 00:04:52.560 exactly what we just saw in the
00:04:52.560 --> 00:04:54.639 previous talk:
00:04:54.639 --> 00:04:57.440 Namely, the possibility of executing a
00:04:57.440 --> 00:04:59.520 snippet of code
00:04:59.520 --> 00:05:02.560 embedded in in your pages.
00:05:02.560 --> 00:05:06.400 Our model can also be used
00:05:06.400 --> 00:05:09.600 within Jekyll. In fact,
00:05:09.600 --> 00:05:13.667 there is a a nice gem, a nice library,
00:05:13.667 --> 00:05:17.233 called jekyll-org which allows you
00:05:17.233 --> 00:05:19.680 to use Org Mode files directly
00:05:19.680 --> 00:05:22.880 into jekyll. But when you start using
00:05:22.880 --> 00:05:26.560 Org Mode... When I started using
00:05:26.560 --> 00:05:30.560 Org Mode, I realized I could move
00:05:30.560 --> 00:05:34.240 all my workflow, all my publishing
00:05:34.240 --> 00:05:36.840 workflow to Emacs.
00:05:36.840 --> 00:05:41.100 In fact, Org Mode is also a
00:05:41.100 --> 00:05:42.880 static website generator because
00:05:42.880 --> 00:05:46.240 it has got the possibility of publishing
00:05:46.240 --> 00:05:50.880 projects made of Org Mode files.
00:05:50.880 --> 00:05:53.840 One of the nice things about
00:05:53.840 --> 00:05:56.479 the publishing features of Org Mode
00:05:56.479 --> 00:05:58.880 is that it allows you to define in the
00:05:58.880 --> 00:06:01.300 org-publish-project-alist,
00:06:01.300 --> 00:06:03.199 all the the components
00:06:03.199 --> 00:06:05.367 which are part of your project.
00:06:05.367 --> 00:06:07.520 In a sense, it is
00:06:07.520 --> 00:06:10.479 also more flexible than Jekyll,
00:06:10.479 --> 00:06:12.880 because it also allows you, for instance,
00:06:12.880 --> 00:06:15.120 to publish a single file rather
00:06:15.120 --> 00:06:17.440 than having to recompile everything
00:06:17.440 --> 00:06:20.080 every time you want to publish your
00:06:20.080 --> 00:06:22.333 your project to your website.
00:06:22.333 --> 00:06:25.333 However, there are some short comments
00:06:25.333 --> 00:06:29.520 I would say, or some areas of improvement.
00:06:30.400 --> 00:06:33.600 The first is that support for templating
00:06:33.600 --> 00:06:36.639 is not so obvious as it is
00:06:36.639 --> 00:06:39.280 in Jekyll, even though there are some
00:06:40.560 --> 00:06:44.560 nice extensions such as org-thtml,
00:06:44.560 --> 00:06:48.400 for instance, which allows you to use templates.
00:06:48.400 --> 00:06:51.840 More important to me was the fact that
00:06:51.840 --> 00:06:54.080 apparently, there is little support for
00:06:54.080 --> 00:06:56.133 the creation of dynamic content
00:06:56.133 --> 00:06:57.900 So I was very curious
00:06:57.900 --> 00:06:59.360 and very keen to use
00:06:59.360 --> 00:07:02.800 Org Mode for publishing my blog
00:07:02.800 --> 00:07:05.440 and the courses at the university,
00:07:05.440 --> 00:07:08.720 but then I had to find a way
00:07:08.720 --> 00:07:11.440 to being able to publish these
00:07:11.440 --> 00:07:13.599 dynamic pages, finding some kind of
00:07:13.599 --> 00:07:16.000 replacement, so to speak,
00:07:16.720 --> 00:07:17.900 for the liquid engine.
00:07:17.900 --> 00:07:24.160 The solution was there at hand, actually, because
00:07:24.160 --> 00:07:27.280 basically, I realized I could use Babel
00:07:27.280 --> 00:07:30.800 for exactly this purpose. Rather than
00:07:30.800 --> 00:07:32.720 using Babel for generating
00:07:32.720 --> 00:07:35.759 plots or my other computations
00:07:35.759 --> 00:07:37.919 or whatever I was using them for,
00:07:37.919 --> 00:07:41.039 I realized I could use Babel to
00:07:41.039 --> 00:07:45.120 generate HTML which could be
00:07:45.120 --> 00:07:49.967 then published in the project
00:07:49.967 --> 00:07:53.680 All I needed to do then
00:07:53.680 --> 00:07:56.100 was defining some kind of functions,
00:07:56.100 --> 00:07:58.319 some kind of code in order to read
00:07:58.319 --> 00:08:01.840 the metadata of all
00:08:01.840 --> 00:08:04.767 the Org Mode files of my web project,
00:08:04.767 --> 00:08:09.680 so that I could then publish--
00:08:09.680 --> 00:08:13.280 generate the dynamic content.
00:08:13.280 --> 00:08:18.080 This is a snippet taken from
00:08:18.080 --> 00:08:21.759 one of my HTML projects,
00:08:21.759 --> 00:08:24.800 which basically shows the way in which
00:08:24.800 --> 00:08:27.599 I generate the list of posts on
00:08:27.599 --> 00:08:32.560 my page. It is exactly how the Liquid that we saw
00:08:32.560 --> 00:08:35.680 a couple of slides earlier that looks like
00:08:35.680 --> 00:08:39.200 in Org Mode.
00:08:39.200 --> 00:08:42.320 Basically, what I'm doing... I'm using...
00:08:42.320 --> 00:08:46.720 I wrote a Ruby script which
00:08:46.720 --> 00:08:49.680 reads all the metadata. So this
00:08:49.680 --> 00:08:51.040 highlighted code
00:08:51.040 --> 00:08:53.100 basically loads the script
00:08:53.100 --> 00:08:55.300 which is stored externally.
00:08:55.300 --> 00:08:56.800 Then it collects all the
00:08:56.800 --> 00:08:58.320 metadata from the
00:08:58.320 --> 00:09:00.880 Org Mode files in the
00:09:00.880 --> 00:09:02.240 current directory.
00:09:02.240 --> 00:09:04.800 And then the following... The code
00:09:04.800 --> 00:09:06.480 you can see here
00:09:06.480 --> 00:09:09.839 basically iterates over all the
00:09:09.839 --> 00:09:12.959 posts read at the previous step.
00:09:12.959 --> 00:09:16.399 It generates
00:09:16.399 --> 00:09:19.519 a list with the title
00:09:19.519 --> 00:09:22.959 and the URLS, basically
00:09:22.959 --> 00:09:27.440 replicating what Jekyll does.
00:09:27.440 --> 00:09:30.240 There are some other things
00:09:30.240 --> 00:09:32.399 I have to deal with in order to
00:09:33.200 --> 00:09:36.480 accommodate my workflow. But that was
00:09:36.480 --> 00:09:39.200 relatively easy in the sense that one of
00:09:39.200 --> 00:09:43.279 the problems, one of the issues I had to
00:09:43.279 --> 00:09:45.360 solve was that of having
00:09:45.360 --> 00:09:48.480 a common navigation on all my
00:09:48.480 --> 00:09:51.040 pages. That was easily solved
00:09:51.040 --> 00:09:53.867 using the #+INCLUDE feature.
00:09:53.867 --> 00:09:54.959 So I basically
00:09:54.959 --> 00:09:56.000 made available
00:09:56.000 --> 00:09:57.839 an #+INCLUDE with all the navigation
00:09:57.839 --> 00:10:00.560 which is embedded in all the pages of
00:10:00.560 --> 00:10:01.839 my websites
00:10:01.839 --> 00:10:03.733 through the #+INCLUDE.
00:10:03.733 --> 00:10:06.160 Another nice feature which
00:10:06.160 --> 00:10:08.560 Jekyll has is the possibility of
00:10:08.560 --> 00:10:12.800 previewing a website before deploying it.
00:10:13.200 --> 00:10:16.079 Emacs also has got a node which allows
00:10:16.079 --> 00:10:21.200 you to launch a web server. In fact,
00:10:21.200 --> 00:10:24.320 I wrote a quick hack
00:10:24.320 --> 00:10:26.959 which allows you to
00:10:26.959 --> 00:10:31.519 invoke a node on an Org Mode
00:10:31.519 --> 00:10:34.720 project, start a local preview,
00:10:34.720 --> 00:10:37.920 and then use rsync
00:10:37.920 --> 00:10:44.839 in order to deploy the the website.
00:10:46.240 --> 00:10:48.720 Five minutes left. More than
00:10:48.720 --> 00:10:51.200 enough. Okay.
00:10:51.200 --> 00:10:52.967 Thanks. Thank you, thank you very much.
00:10:52.967 --> 00:10:56.480 I'm nearly done. So then I can take some questions.
00:10:56.480 --> 00:11:00.560 Just to give you maybe
00:11:00.560 --> 00:11:03.680 a slightly more in-depth
00:11:03.680 --> 00:11:06.480 view of what the pages look like,
00:11:06.480 --> 00:11:07.200 so these are
00:11:07.200 --> 00:11:11.120 one of the pages, or the source files
00:11:11.120 --> 00:11:14.720 of one of the websites. It is
00:11:14.720 --> 00:11:18.480 in literate programming. Basically,
00:11:18.480 --> 00:11:20.399 you see there is some metadata here.
00:11:20.399 --> 00:11:22.640 I mean this is a regular Org Mode file.
00:11:22.640 --> 00:11:26.640 This part here
00:11:26.640 --> 00:11:29.920 basically defines some common options
00:11:29.920 --> 00:11:31.519 for publication.
00:11:31.519 --> 00:11:35.920 These two includes here
00:11:35.920 --> 00:11:41.120 put some extra HTML in the head part and
00:11:41.120 --> 00:11:44.480 the navigation. Here, as you can see,
00:11:44.480 --> 00:11:48.079 is the code generating the
00:11:48.079 --> 00:11:50.160 the list in chronological order. It is
00:11:50.160 --> 00:11:52.240 slightly more complex than the example I
00:11:52.240 --> 00:11:53.839 made in the slide
00:11:53.839 --> 00:11:56.240 because there is some more
00:11:56.240 --> 00:11:59.760 elaboration to do, including putting some
00:11:59.760 --> 00:12:01.839 Javascript to identify
00:12:01.839 --> 00:12:05.120 according to the tags.
00:12:05.120 --> 00:12:08.160 To go back to the presentation...
00:12:11.200 --> 00:12:13.067 I managed this migration
00:12:13.067 --> 00:12:14.560 a few months ago,
00:12:14.560 --> 00:12:17.680 and then all my workflow is within
00:12:17.680 --> 00:12:20.399 Org Mode and within Emacs.
00:12:20.399 --> 00:12:23.079 I'm very happy with it because it's
00:12:23.079 --> 00:12:26.800 simplified quite a bit
00:12:26.800 --> 00:12:28.480 my publication process.
00:12:28.480 --> 00:12:31.839 One of the advantages... Another
00:12:31.839 --> 00:12:34.240 advantage... So the first advantage is that
00:12:34.240 --> 00:12:36.959 everything is in Org Mode and Emacs.
00:12:36.959 --> 00:12:38.160 Second advantage
00:12:38.160 --> 00:12:41.680 is that everything is based on the
00:12:41.680 --> 00:12:44.880 standard machinery provided by Org Mode.
00:12:44.880 --> 00:12:47.760 So in a sense, it is
00:12:47.760 --> 00:12:50.079 more robust with respect to
00:12:50.079 --> 00:12:53.040 dependencies, possible errors, and so
00:12:53.040 --> 00:12:54.320 on and so forth.
00:12:54.320 --> 00:12:56.639 The fact that Org Mode
00:12:56.639 --> 00:12:58.240 allows you to publish
00:12:58.240 --> 00:13:00.880 a single file in a project is also
00:13:00.880 --> 00:13:03.839 very interesting because
00:13:03.839 --> 00:13:07.839 it allows to be more robust to
00:13:07.839 --> 00:13:11.040 problems you might introduce when
00:13:11.040 --> 00:13:14.959 you're changing--when I'm changing the setup.
00:13:14.959 --> 00:13:16.880 Another interesting thing which I
00:13:16.880 --> 00:13:21.519 realized that I could have is that
00:13:21.519 --> 00:13:23.600 in a sense, the specification of the
00:13:23.600 --> 00:13:28.480 website can be embedded in the website itself.
00:13:28.480 --> 00:13:30.800 In a sense this is some kind of
00:13:30.800 --> 00:13:31.839 self-documenting...
00:13:31.839 --> 00:13:35.120 It's a way of self-documenting
00:13:35.120 --> 00:13:36.600 what I'm actually doing.
00:13:36.600 --> 00:13:44.133 For instance, here on my website,
00:13:44.133 --> 00:13:46.399 you can see the
00:13:46.399 --> 00:13:48.240 specification of the
00:13:48.240 --> 00:13:51.519 project which is loaded
00:13:51.519 --> 00:13:53.933 from my initialization file,
00:13:53.933 --> 00:13:56.320 but then it is also published
00:13:56.320 --> 00:13:59.440 together with my home page. It lives
00:13:59.440 --> 00:14:01.360 with the repository where
00:14:01.360 --> 00:14:05.360 I keep all the sources of my website,
00:14:05.360 --> 00:14:08.079 which is kind of nice because it
00:14:08.079 --> 00:14:09.839 basically isolates
00:14:09.839 --> 00:14:14.079 everything in a single place.
00:14:14.079 --> 00:14:16.880 So there are some examples. I'm
00:14:16.880 --> 00:14:19.433 showing them more because of the
00:14:19.433 --> 00:14:21.760 source code which
00:14:21.760 --> 00:14:25.519 you can grab from the git repositories
00:14:25.519 --> 00:14:26.933 if you are interested.
00:14:26.933 --> 00:14:28.399 Of course I'm also available
00:14:28.399 --> 00:14:31.600 to provide some support and help
00:14:31.600 --> 00:14:32.959 if you are interested
00:14:32.959 --> 00:14:34.480 in this kind of stuff.
00:14:34.480 --> 00:14:37.760 The the next step for me will be that of
00:14:37.760 --> 00:14:41.600 trying, making this kind of machinery available
00:14:41.600 --> 00:14:45.199 for more general use at the moment.
00:14:45.199 --> 00:14:47.120 If you are interested in trying out my
00:14:47.120 --> 00:14:48.800 suggestion, grabbing the
00:14:48.800 --> 00:14:51.933 sources for one of the websites
00:14:51.933 --> 00:14:54.700 to seehow they look like,
00:14:54.700 --> 00:14:56.720 and maybe try and
00:14:56.720 --> 00:15:00.160 customize it for your purposes...
00:15:00.160 --> 00:15:03.839 This is basically the content of my talk.
00:15:03.839 --> 00:15:06.959 I'm open to questions and thank you
00:15:06.959 --> 00:15:10.880 for your attention.
00:15:10.880 --> 00:15:12.880 (Amin: Thank you very much, Adolfo, for your
00:15:12.880 --> 00:15:14.480 awesome presentation.
00:15:14.480 --> 00:15:17.360 I think we have time for maybe like
00:15:17.360 --> 00:15:19.360 one or two questions,
00:15:19.360 --> 00:15:21.279 and then the rest maybe you could
00:15:21.279 --> 00:15:26.639 take up after the stream.)
00:15:26.639 --> 00:15:28.033 Adolfo: What should we do?
00:15:28.033 --> 00:15:30.000 (Amin: Would you like me
00:15:30.000 --> 00:15:31.839 to read you the questions?)
00:15:31.839 --> 00:15:35.199 Adolfo: Yeah, probably better because
00:15:35.199 --> 00:15:36.700 I'm kind of lost there.
00:15:36.700 --> 00:15:40.399 (Amin: Okay, no problem.
00:15:40.399 --> 00:15:42.480 So someone asks, "Do you have any
00:15:42.480 --> 00:15:45.440 opinion on Firn?")
00:15:45.440 --> 00:15:48.639 Adolfo: Firn. I don't know Firn,
00:15:48.639 --> 00:15:51.839 so I'll give it a try
00:15:51.839 --> 00:15:55.040 and check it out.
00:15:55.040 --> 00:15:57.839 (Amin: Thanks. People are also asking,
00:15:57.839 --> 00:15:59.680 do you discuss this, for example, in a blog
00:15:59.680 --> 00:16:01.279 or anywhere else they could find more
00:16:01.279 --> 00:16:02.800 about it?)
00:16:02.800 --> 00:16:05.600 Adolfo: Oh yes. I'm going to publish the
00:16:05.600 --> 00:16:08.560 the talk and the content
00:16:08.560 --> 00:16:11.120 on my website, and then I'll link it from
00:16:11.120 --> 00:16:13.067 the EmacsConf conference
00:16:13.067 --> 00:16:14.720 so that it will be easier for
00:16:14.720 --> 00:16:16.533 people to to reach it
00:16:16.533 --> 00:16:19.040 I will shortly make it
00:16:19.040 --> 00:16:22.880 available right after the conference.
00:16:22.880 --> 00:16:26.160 (Amin: Wonderful. I think that's all for the questions.
00:16:26.160 --> 00:16:27.667 Thank you very much.)
00:16:27.667 --> 00:16:29.600 Adolfo: Thank you very much. Thank you.
00:16:29.600 --> 00:16:34.800 (Amin: Cheers.) Adolfo: Bye, cheers. (Amin: Bye.)
Saturday, Nov 28 2020, ~ 2:41 PM - 2:51 PM EST
Saturday, Nov 28 2020, ~11:41 AM - 11:51 AM PST
Saturday, Nov 28 2020, ~ 7:41 PM - 7:51 PM UTC
Saturday, Nov 28 2020, ~ 8:41 PM - 8:51 PM CET
Sunday, Nov 29 2020, ~ 3:41 AM - 3:51 AM +08
Back to the schedule
Previous: README-Driven Design
Next: Org-roam: Presentation, Demonstration, and What's on the Horizon