I have the privilege of giving a short talk on Tuesday, at the always-excellent Edinburgh JS meetup, on using Quarto for blogging. My presentation, made in Quarto using reveal.js, is available here.
As part of a community talks evening, the presentation time is short: between five and ten minutes, with five as the target. A key point I want to get across is that, around a year ago, I completed one of Codeclan‘s last Professional Software Development courses (E63), in large part to address a key ’known unknown’ when it comes to developing dashboards and web content via R.
This known unknown: I knew that, when I make a dashboard in Shiny, or compile to html with rmarkdown, I’m telling R to generate a bundle of HTML, CSS and Javascript; and that by pressing a button to deploy I’m having this bundle sent and hosted by some server somewhere, and having it associated with a url. However, until I took the software development course, I was largely in the dark as to what the HTML, CSS and Javascript looked like in practice, and how it worked, and definitely would struggled to build something directly in HTML, CSS and JS. So, for example, if I wanted to customise a page or app so it doesn’t look so obviously ‘Shiny’, I’d have struggled, because I just had to rely on Shiny as an intermediary - writing the web bundle at a distance, rather than directly.
With the knowledge of the software development course, however, I was able to both make a Dash-based equivalent of my mortality database explorer app; and also to use React, with semantic HTML and CSS written from scratch to produce and style my website. 1
However, I’m mindful of a quote I half remember from a documentary I saw - on the history of the internet - back in the 1990s. It’s something like, “A nerd is someone who uses a telephone just to talk to 2 people about how telephones work”. More broadly: the message needs to be more than just the medium.
So, there’s a balance to be struck: between too much abstraction, and too little abstraction. Too much abstraction led to the known unknown issue mentioned above: becoming too dependent on one tool to handle other tools on my behalf, and not knowing how to use these tools myself to make any finishing touches. But too little abstraction can lead to an excess focus on coalface concerns about exactly how to go about implementation, and towards a preoccupation with the minutiae, which can be at the expense of thinking deeply and clearly about exactly what you want to say.
And for now, and for blogging, I think Quarto strikes a great balance. It definitely abstracts away a lot more of the mechanics of website development and deployment than, say, React. And it includes default features and styles that definitely look good enough with low effort. But on the other hand, through things like fences and more advanced frontomatter configuration, it allows quite a lot of additional customisation opportunity if needed.
Within this blog, I’ve aimed to focus largely on one post at a time, and when writing these posts to focus on the content. Whether writing about socioeconomic matters, or pop culture, or statistical modelling and data science (now over three hours of content), I’ve aimed to think deeply about what I’m writing, not how I’m writing it. And for this purpose, Quarto has continued to be great.
So, in a sense, with Quarto I’ve returned to development-at-a-distance, using one tool to instruct others to make content. But at least now I’m doing so out of choice, not necessity borne of ignorance.
And on deployment: Well, you can see the presentation itself is deployed via github pages, something I don’t think I’d have attempted before the Codeclan course.
Footnotes
It took about six months after the course had finished, and poring through - in particular - Dave Gray’s excellent 11 hour tutorial on CSS, and then to build my own styling rules from scrach using a BEM format, that I finally learned not to treat CSS, and I guess styling more generally, with the usual indifference and contempt I do for most matters sartorial and sylistic!↩︎
Or possibly ‘at’↩︎