21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# build output
|
||||||
|
dist/
|
||||||
|
# generated types
|
||||||
|
.astro/
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
||||||
6
.helix/languages.toml
Normal file
6
.helix/languages.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[language-server.astro.config]
|
||||||
|
typescript = { tsdk = "node_modules/typescript/lib" }
|
||||||
|
|
||||||
|
[[language]]
|
||||||
|
name = "astro"
|
||||||
|
indent = { tab-width = 4, unit = " " }
|
||||||
4
.vscode/extensions.json
vendored
Normal file
4
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"],
|
||||||
|
"unwantedRecommendations": []
|
||||||
|
}
|
||||||
11
.vscode/launch.json
vendored
Normal file
11
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"command": "./node_modules/.bin/astro dev",
|
||||||
|
"name": "Development server",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "node-terminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
# personal-website
|
# personal-website
|
||||||
|
|
||||||
Joe Carstairs' personal website
|
Joe Carstairs' personal website
|
||||||
|
|
||||||
## Invalidating the CloudFront cache
|
## Invalidating the CloudFront cache
|
||||||
|
|||||||
9
astro.config.mjs
Normal file
9
astro.config.mjs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
|
||||||
|
import sitemap from '@astrojs/sitemap';
|
||||||
|
|
||||||
|
// https://astro.build/config
|
||||||
|
export default defineConfig({
|
||||||
|
site: 'https://joeac.net',
|
||||||
|
integrations: [sitemap()],
|
||||||
|
});
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
<link rel="stylesheet" href="/blog.css" />
|
|
||||||
<title>Hariri’s Sapiens on Religion | joeac’s blog</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<article class="h-entry">
|
|
||||||
<aside>
|
|
||||||
<p>This is a blog post by <a class="p-author h-card" href="/">Joe Carstairs</a></p>
|
|
||||||
<p>He wrote it on <time class="dt-published" datetime="2024-01-14">the 14<sup>th</sup> of January, 2024</time></p>
|
|
||||||
<p>Go back to his <a href="/blog">blog</a> if you like</p>
|
|
||||||
<p><a class="u-url uid" href="https://joeac.net/blog/2024/01/14/sapiens_on_religion">Permalink</a></p>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<h1 class="p-name">Harari’s <i>Sapiens</i> on Religion</h1>
|
|
||||||
<p class="p-summary">
|
|
||||||
In which I discuss why I think Harari’s characterisation of religion
|
|
||||||
is inadequate because it’s too materialistic.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="e-content">
|
|
||||||
<p>
|
|
||||||
I’ve been slowly re-reading Yuval Noah Harari’s 2014 classic,
|
|
||||||
<a href="https://www.ynharari.com/book/sapiens-2">Sapiens</a>,
|
|
||||||
which apart from being ridiculously over-scoped and hilariously
|
|
||||||
under-evidenced, is proving delightfully entertaining.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
I’ve just finished chapter 12, covering the world history of all
|
|
||||||
religion in thirty pages. Of course, at that level of brevity,
|
|
||||||
there will be many deficiencies. But here’s some thoughts - not
|
|
||||||
terribly well organised - which stand out to me.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Hurari generally assumes a materialist metaphysic (a problem which
|
|
||||||
blights the book more generally). Nothing exists except physical stuff.
|
|
||||||
This gives him severe tunnel vision. As a consequence of this
|
|
||||||
restricting metaphysic, he is forced to adopt limiting accounts of what
|
|
||||||
the role of religion is in world history, and therefore what religion is.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<p>
|
|
||||||
The crucial historical role of religion has been to give superhuman
|
|
||||||
legitimacy to [all social orders and hierarchies].
|
|
||||||
</p>
|
|
||||||
<p>…</p>
|
|
||||||
<p>
|
|
||||||
Religion can thus be defined as <em>a system of human norms and
|
|
||||||
values that is founded on a belief in a superhuman order</em>.
|
|
||||||
</p>
|
|
||||||
<footer>p. 234</footer>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
It might seem a little unfair to criticise Harari for giving a
|
|
||||||
materialist account of religion. <i>Sapiens</i> is, after all, a
|
|
||||||
materialist world history.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
But this account is just one extreme example of how that project, to
|
|
||||||
give a materialist account of world history, will inevitably lack the
|
|
||||||
metaphysical resources to really understand the human story.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
On Harari’s view, any human enterprise which attempts to understand
|
|
||||||
that which transcends direct human experience is at best an effort in
|
|
||||||
imaginative story-telling. All scientific theory, theology, ethics and
|
|
||||||
metaphysics either contorted out of all recognition into a pragmatic
|
|
||||||
fiction or is cast to the flames.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In particular, it’s a view which is incapable of taking seriously some
|
|
||||||
of the most important questions human beings have grappled with in the
|
|
||||||
course of their history. Those who know me won’t be surprised at which
|
|
||||||
ones I’m going to pick out: who was the being which made their covenant
|
|
||||||
with Abraham? How is that promise being fulfilled? And who the heck was
|
|
||||||
Jesus of Nazareth?
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If Harari’s characterisation of religion is adequate - and the Abrahamic
|
|
||||||
faiths come under that banner - then those questions are reduced to
|
|
||||||
nothing more profound than Doctor Who fans arguing over ‘canon’. The
|
|
||||||
question of who God is becomes a mere tool for the organisation of
|
|
||||||
society, rather than a substantial and important question on a matter
|
|
||||||
of fact.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
This is a shortcoming for its own sake: a materialist account of
|
|
||||||
religion cannot adequately account for the phenomenon of religion
|
|
||||||
itself.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
But it is also a shortcoming even by its own lights. Without giving
|
|
||||||
serious consideration to the substantial matter of what Harari calls
|
|
||||||
‘religion’ (which, to his mind, includes the Abrahamic faiths,
|
|
||||||
Hinduism, paganism, animism, Buddhism, Shintoism, Confucianism,
|
|
||||||
capitalism, communism and Nazism), even the material facts are
|
|
||||||
inexplicable. Why would, as Harari is keen to point out, out, people
|
|
||||||
fight and die over and over again for a fiction?
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The material facts themselves prove that ‘religion’ as he construes it
|
|
||||||
is not window dressing to the real story of history. It cannot merely
|
|
||||||
serve as a mechanism in the churning of material history. It is itself
|
|
||||||
the centre of the story.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
@@ -1,309 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
<link rel="stylesheet" href="/blog.css" />
|
|
||||||
<title>EUHWC Toast to the Lassies 2024 | joeac’s blog</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<article class="h-entry">
|
|
||||||
<aside>
|
|
||||||
<p>This is a blog post by <a class="p-author h-card" href="/">Joe Carstairs</a></p>
|
|
||||||
<p>He wrote it on <time class="dt-published" datetime="2024-01-29">the 29<sup>th</sup> of January, 2024</time></p>
|
|
||||||
<p>Go back to his <a href="/blog">blog</a> if you like</p>
|
|
||||||
<p><a class="u-url uid" href="https://joeac.net/blog/2024/01/29/euhwc_toast_to_lasses_2024">Permalink</a></p>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<h1 class="h-name">EUHWC Toast to the Lassies 2024</h1>
|
|
||||||
|
|
||||||
<p class="p-summary">
|
|
||||||
At the <a href="https://www.euhwc.co.uk">EUHWC</a> Burns meet in
|
|
||||||
Ullapool last weekend, I had the last privilege of giving the Toast to
|
|
||||||
the Lassies. Particularly for the benefit of those who weren’t there,
|
|
||||||
here it is in full!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="e-content">
|
|
||||||
<p>
|
|
||||||
Had Burns, instead of his sweet bonnie Jean,<br>
|
|
||||||
his skills poetical for to mature<br>
|
|
||||||
had any one of our club’s lassies seen<br>
|
|
||||||
he would forever have remained obscure.<br>
|
|
||||||
If he had nothing but this box of worms<br>
|
|
||||||
Scotia would have been poorer, that I’m sure.<br>
|
|
||||||
Now none of us can claim to be a Burns,<br>
|
|
||||||
I’m no poetic master, still, I’ll have a punt,<br>
|
|
||||||
though let’s be clear, I’ll do it on my terms.<br>
|
|
||||||
I’ve everywhere avoided being blunt -<br>
|
|
||||||
politeness matters more than any schema -<br>
|
|
||||||
but it is hard when Isla’s such a cunt.<br>
|
|
||||||
It was a challenge to produce a terza rima<br>
|
|
||||||
I could recite withouten snoring;<br>
|
|
||||||
you’ve been so stiff I thought youse had oedema.<br>
|
|
||||||
The bother is this year is you’ll all been boring:<br>
|
|
||||||
no drugs, no sex, no gossiping or lies,<br>
|
|
||||||
no rock and roll, and hardly any whoring.<br>
|
|
||||||
But hey well, rules is rules, I’ve had to try!<br>
|
|
||||||
At least it can’t be worse than the reply.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
I’ll start with Audrey, the club’s senior member,<br>
|
|
||||||
for if there’s something that I say which disconcerts her,<br>
|
|
||||||
it’s fine: the poor old girl, she won’t remember.<br>
|
|
||||||
She likes to let us think she’s a hard worker<br>
|
|
||||||
but we’re electing a third social sec…<br>
|
|
||||||
it’s pretty clear she’s just another shirker.<br>
|
|
||||||
This lady, half American, half Czech,<br>
|
|
||||||
for study, moved to Scotland for to do<br>
|
|
||||||
American history – really, what the heck?<br>
|
|
||||||
The club is so much louder thanks to you:<br>
|
|
||||||
impressive vocals for just five foot two.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
That woman, Willow, reggles is bespeckled<br>
|
|
||||||
with her sickle and her fishing tackle<br>
|
|
||||||
shackled by the shins while she is heckled;<br>
|
|
||||||
the way that Willow waddles maks me cackle<br>
|
|
||||||
like a speckled jackal getting tickles,<br>
|
|
||||||
worth a shekel in the tabernacle;<br>
|
|
||||||
I chuckle muckle at her love of pickles<br>
|
|
||||||
which she wiggles when she has the heart<br>
|
|
||||||
while work for the Committee’s fickle trickles.<br>
|
|
||||||
Her modus operandi: <em>you can’t rush art.</em><br>
|
|
||||||
Her reimbursements programme’s going great;<br>
|
|
||||||
any day now, she’ll maybe even start.<br>
|
|
||||||
She cannot walk without Audrey, her mate:<br>
|
|
||||||
I wonder when they’re going to consummate.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Although they make them pretty tough in Peebles,<br>
|
|
||||||
the thought of actually going up a peak<br>
|
|
||||||
fills Shona Lewis with the heeble-jeebles.<br>
|
|
||||||
New car? We miss your beautiful antique!<br>
|
|
||||||
How long before this one’s also up a creek?<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Once there was a lass called Hannah Collier<br>
|
|
||||||
whom even hell below regarded nasty,<br>
|
|
||||||
deeply despised by all that dwells there.<br>
|
|
||||||
Dating’s proceeding slowly for our lassie;<br>
|
|
||||||
not far from giving up til she beguiles<br>
|
|
||||||
a hot Italian in Southsider: classy!<br>
|
|
||||||
At first, Michaelo seems to be all smiles<br>
|
|
||||||
till it transpires he’s one of Dante’s demons…<br>
|
|
||||||
I guess it’s back to posters of Harry Styles.<br>
|
|
||||||
One day you’ll get a decent boy, keep dreamin;<br>
|
|
||||||
somewhere there waits a handsome Mr Collier.<br>
|
|
||||||
Hopefully when she meets him she’ll no be steamin.<br>
|
|
||||||
Hannah, I’m not sure why you chose to maul your<br>
|
|
||||||
poor skeleton at Subway (she’s still tetchy)<br>
|
|
||||||
and then abandon what remains of all your<br>
|
|
||||||
dignity at Ryvoan with a Frenchie!<br>
|
|
||||||
I think he wishes that he never met ye.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And has a quiet Felicia e’er been seen?<br>
|
|
||||||
The energy she has is frankly wild.<br>
|
|
||||||
I’ve never seen a hillwalker so keen!<br>
|
|
||||||
<i lang="de">Ssie ischt raschtlos und nie gelangweilt</i>.<br>
|
|
||||||
She eats raw oats with soggy protein powder:<br>
|
|
||||||
a camping pot has ne’er been worse defiled.<br>
|
|
||||||
She uses what her Maker has endowed her<br>
|
|
||||||
with: her recorder skills are off the charts;<br>
|
|
||||||
youse think I’m joking, but I wouldn’t doubt her!<br>
|
|
||||||
This lass of the land of the Rot-Gold-Schwarz<br>
|
|
||||||
will soon depart, though long we might beseech ya<br>
|
|
||||||
to stay. Of course, you’ll break all of our hearts,<br>
|
|
||||||
but mine most of all. Any time, Felicia,<br>
|
|
||||||
Creag Meagaidh calls, I know routes up the rear<br>
|
|
||||||
dark and under-explored that I can teach you!<br>
|
|
||||||
I won’t deny I think it’s rather queer<br>
|
|
||||||
the things you do with chickpeas, but no matter.<br>
|
|
||||||
You’re keen, you’re quick, you’re cool, that much is clear.<br>
|
|
||||||
In fact, I think you’d make a damn good faffer:<br>
|
|
||||||
swoop down on distilleries like the Luftwaffe.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And now we come to our girl Emily Topness!<br>
|
|
||||||
You’re keen for social sec. You’d suit the role<br>
|
|
||||||
because… I’m not quite sure, it’s embdy’s guess.<br>
|
|
||||||
We met your sister, and she was just as dull.<br>
|
|
||||||
No, please drone on about Icelandic soil!<br>
|
|
||||||
Poor Joe here down the front’s bored out his skull.<br>
|
|
||||||
And since I mentioned Joe – I hate to spoil<br>
|
|
||||||
it for you – but you’ve got the inferior Joe,<br>
|
|
||||||
by Jove, no joke, it’s Jock here’s got the style!<br>
|
|
||||||
Nah, write the boy a sonnet, get in the flow,<br>
|
|
||||||
Whatever you produce’ll beat by thrice<br>
|
|
||||||
your Masters thesis. What’d you got to show<br>
|
|
||||||
for months of hunting for the butterflies?<br>
|
|
||||||
‘There weren’t any.’ Oh, and have some sense,<br>
|
|
||||||
cos I’ve heard rumours – I assume they’re lies –<br>
|
|
||||||
you’ve called yourself the ‘poet in residence.’<br>
|
|
||||||
You know you can’t compete, drop the pretence.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Tereza was our gear sec for last year.<br>
|
|
||||||
She helped herself to stuff: that’s factual.<br>
|
|
||||||
Now when she asks to loan a bit club gear<br>
|
|
||||||
we have to ask her to provide collateral.<br>
|
|
||||||
She picked up tin whistle pretty sharp!<br>
|
|
||||||
Which is to say, she’s not a natural.<br>
|
|
||||||
She’s nowhere happier than under tarp<br>
|
|
||||||
gazing up at the moon and stars alone<br>
|
|
||||||
somewhere distant and remote like Glen Tarff.<br>
|
|
||||||
Now what to say about Lucy Ma-the-soooon....<br>
|
|
||||||
she likes… to faff… mm hmmm… well, moving on!<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And now we come to Emilie the French.<br>
|
|
||||||
She seems to be nice on the trips we see her<br>
|
|
||||||
but my distrust of frogs will ne’er be quenched.<br>
|
|
||||||
Claims she’s a ‘pharmacist’? So she’s a dealer.<br>
|
|
||||||
Need some pills in a pinch? You call, she’s there<br>
|
|
||||||
at your door in her rally-approved four-wheeler.<br>
|
|
||||||
One question we have is, why are you here?<br>
|
|
||||||
Most folk are in uni, you’ve no refutin<br>
|
|
||||||
you were kicked out after second year!<br>
|
|
||||||
Now the Engineering grad, Sophia Newton.<br>
|
|
||||||
Your namesake, Isaac, was a man convicted,<br>
|
|
||||||
constructed calculus; but no computin,<br>
|
|
||||||
not even Isaac’s, could’ve e’er predicted<br>
|
|
||||||
you’d drop the Eng for creative writing!<br>
|
|
||||||
now that’s what I would call a self-inflicted<br>
|
|
||||||
inflection point! It must be quite enlightening,<br>
|
|
||||||
but that doesn’t excuse when you give us an earful.<br>
|
|
||||||
The blood boils in our veins, the rage heightening,<br>
|
|
||||||
and you’re an American, that makes me fearful.<br>
|
|
||||||
What’s your secret? You have us knackered!<br>
|
|
||||||
What are you on to always be so cheerful?<br>
|
|
||||||
Now we approach the topic of Merzbacher.<br>
|
|
||||||
Wait, she’s not here? Abandoned ship?<br>
|
|
||||||
She says she’s informatics: so she’s a hacker?<br>
|
|
||||||
She has strong views, she lets her anger rip.<br>
|
|
||||||
Poor George got an earful, full of future advice,<br>
|
|
||||||
but why hasn’t she been on another club trip?<br>
|
|
||||||
We’re cruel to focus on this list of vice;<br>
|
|
||||||
the fact remains: she’s headstrong and nice.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
On Skye, a lady gave her poles to Sasha,<br>
|
|
||||||
which was really nice - I mean just the best -<br>
|
|
||||||
but Sasha really didn’t have to flash her.<br>
|
|
||||||
Quick history lesson: way back, RBS<br>
|
|
||||||
led the banking system to self-destruct<br>
|
|
||||||
and left taxpayers to pick up the mess.<br>
|
|
||||||
Since then, the name’s so irredeemably fucked<br>
|
|
||||||
they’ve had to ditch the brand once and for all.<br>
|
|
||||||
There’s one lassie who I need not instruct<br>
|
|
||||||
What, these days, the Royal Bank is called<br>
|
|
||||||
cos NatWest’s nasty history of scandal<br>
|
|
||||||
didn’t stop Booth from working there at all.<br>
|
|
||||||
Nothing motivates her more than to trample<br>
|
|
||||||
upon the working class. They set her free.<br>
|
|
||||||
She sank the pound quicker than the Belgrano,<br>
|
|
||||||
because ‘there is no such thing as society,’<br>
|
|
||||||
that’s how it is, is it? All right, I see.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Now, coming all the way from Glenmore Lodge,<br>
|
|
||||||
it’s Ellie’s turn! We have done what we can,<br>
|
|
||||||
although I’m scared what she’ll put in my squash.<br>
|
|
||||||
She wasn’t into Benji, but listen man,<br>
|
|
||||||
you’re lucky that you dodged her drunken benders.<br>
|
|
||||||
You’ll wake up in a tent in Kyrgystan,<br>
|
|
||||||
as for how you got there, no-one remembers,<br>
|
|
||||||
and if you’d known you’d be sleeping next to Ellie,<br>
|
|
||||||
you would’ve brought some fucking ear defenders.<br>
|
|
||||||
She’ll wrap you in bubblewrap, from your ears to your belly,<br>
|
|
||||||
cotton clothes for none, and no complaining,<br>
|
|
||||||
applying safety to the max, spare socks in your wellies.<br>
|
|
||||||
She’s always at her Mountain Leader training,<br>
|
|
||||||
practicing her night nav in the locale,<br>
|
|
||||||
pursuing QMDs - unless it’s raining.<br>
|
|
||||||
But some water should not scare our gal!<br>
|
|
||||||
She’s had much experience with the wet as of late:<br>
|
|
||||||
after all, she got on well with our navy pal.<br>
|
|
||||||
What was the age of that particular first mate?<br>
|
|
||||||
Older than your ex - always part of the plan?<br>
|
|
||||||
Ah, of course! He was a spry twenty-eight!<br>
|
|
||||||
Youth’s for the losers, let’s get you a real man,<br>
|
|
||||||
mature and rugged, but kind and astute?<br>
|
|
||||||
Just make sure he’s not as old as your gran.<br>
|
|
||||||
One request we all have is you ditch the uke:<br>
|
|
||||||
never have strings been pluckèd quite so shitely;<br>
|
|
||||||
we would all much rather be hit by a nuke.<br>
|
|
||||||
And please shut up about your nice society.<br>
|
|
||||||
We are all glad you had a fun summer,<br>
|
|
||||||
but bringing it up throws us right back to sobriety.<br>
|
|
||||||
To lose you of course would be a bummer:<br>
|
|
||||||
that is, for your carefully groomed newcomers.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Now time for the main woman, El Presidente!<br>
|
|
||||||
To here, it’s been like getting stones to bleed,<br>
|
|
||||||
but in Isla Burslem’s case we’ve material aplenty!<br>
|
|
||||||
As Holy Scripture says, ‘let those who lead<br>
|
|
||||||
well be worthy of double honour,’ so<br>
|
|
||||||
your bit is double length – it’s quite the screed!<br>
|
|
||||||
I’ll start off with her brilliant boyfriend – oh!<br>
|
|
||||||
Not boyfriend! Friend? To me this rather smacks<br>
|
|
||||||
of low commitment, but what do I know?<br>
|
|
||||||
So far, he’s disappointing, but on track.<br>
|
|
||||||
What’s he up to Isla: seven minutes? neat!<br>
|
|
||||||
Despite that, he is never holding back<br>
|
|
||||||
your blossoming romance with Dr Peat.<br>
|
|
||||||
Don’t deny it, that launch was pretty hard!<br>
|
|
||||||
It’s fifth base next: that’s photos of his feet.<br>
|
|
||||||
It’s fair to say her reputation’s marred.<br>
|
|
||||||
We all regret that we did once anoint<br>
|
|
||||||
her President: her premiership’s ill-starred.<br>
|
|
||||||
Hey - you’re meant to be in charge of this joint!<br>
|
|
||||||
You’re seldom seen cos of the mountaineering<br>
|
|
||||||
meets that you’re always on. You’d made your point<br>
|
|
||||||
before you chose to go off disappearing<br>
|
|
||||||
to <em>New Zealand</em>… we get the message! Plus<br>
|
|
||||||
we’ve had enough of all your domineering:<br>
|
|
||||||
maybe it’s time we put you on a bus!<br>
|
|
||||||
Nah, I’m just joking. All I’ve said’s refutable.<br>
|
|
||||||
But the boys, we mean this next bit, all of us,<br>
|
|
||||||
so stop me Isla if this isn’t suitable<br>
|
|
||||||
but honestly we think your mum is beautiful.<br>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Alas, I have to bring an end to this rhyme.<br>
|
|
||||||
I know it wasn’t much, in our defence,<br>
|
|
||||||
the fact you used ChatGPT’s a crime.<br>
|
|
||||||
I hope I’ve not caused over much offence<br>
|
|
||||||
don’t worry, that is it, I’ve said my bit,<br>
|
|
||||||
so I’ll turn from the ladies to the gents.<br>
|
|
||||||
Yeah, don’t look away now, we wrote this shit!<br>
|
|
||||||
I see you looking at your laces, Chris!<br>
|
|
||||||
Wit without real goodwill is not legit,<br>
|
|
||||||
so boys, don’t send sincerity to piss!<br>
|
|
||||||
Why did God say he’d take our hearts of stone<br>
|
|
||||||
and give us hearts of flesh? For this, for this!<br>
|
|
||||||
Here is flesh of our flesh, bone of our bone;<br>
|
|
||||||
love, and love nothing more but God alone.<br>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,168 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
<link rel="stylesheet" href="/blog.css" />
|
|
||||||
<title>Why Easter is the best week of the year | joeac’s blog</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<article class="h-entry">
|
|
||||||
<aside>
|
|
||||||
<p>This is a blog post by <a class="p-author h-card" href="/">Joe Carstairs</a></p>
|
|
||||||
<p>He wrote it on <time class="dt-published" datetime="2024-03-30">the 30<sup>th</sup> of March, 2024</time></p>
|
|
||||||
<p>Go back to his <a href="/blog">blog</a> if you like</p>
|
|
||||||
<p><a class="u-url uid" href="https://joeac.net/blog/2024/03/30/easter">Permalink</a></p>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<h1 class="h-name">Why Easter is the best week of the year</h1>
|
|
||||||
|
|
||||||
<p class="p-summary">
|
|
||||||
Based on a talk given to my colleagues at
|
|
||||||
<a href="https://www.scottlogic.co.uk">Scott Logic</a> for Maundy
|
|
||||||
Thursday, 2024.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="e-content">
|
|
||||||
<p>
|
|
||||||
As you might have noticed, it is Easter this week! So I'd like to take five or
|
|
||||||
five minutes of your time to share why I – and about two billion other humans
|
|
||||||
going about the place just now – think Easter is the best week of the year. And
|
|
||||||
it's got something to do with a special Christian ritual called Communion.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Communion, at its heart, is about as simple a ritual as you can get. You get
|
|
||||||
together with a bunch of other people. You share some bread, and you share some
|
|
||||||
wine.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And it’s because of this ritual that so many people regard Easter as the best
|
|
||||||
week of the year. I want to explain to you why that is, and more than that, I
|
|
||||||
want to convince you that Easter is the best week of the year for you, too!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you’ve passed by <i>The Hub</i> at the top of Johnstone Terrace here in
|
|
||||||
Edinburgh recently, you might have notice the banner which is draped over
|
|
||||||
the railings just now – reading, ‘RITUALS THAT UNITE US.’
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Now, that might seem like an odd idea. But wouldn’t that be great, if we
|
|
||||||
actually had a ritual which could unite us? Because the world could surely do
|
|
||||||
with a bit more unity right now. The world seems so divided, and sometimes it
|
|
||||||
seems like there’s no hope for real unity.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
We can see that in our politics. We’re divided about foreign policy, about
|
|
||||||
taxation policy, about trade policy, about environmental policy.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And the conflicts that we have in this country seem pretty trivial when we
|
|
||||||
remember the conflicts that are playing out in other parts of the world right
|
|
||||||
now. In Israel and Gaza. In Sudan. In Russia and Ukraine.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And there’s plenty of conflict happening on the small scale, too. Often it’s the
|
|
||||||
smallest-scale conflicts which hurt us the most deeply. Your landlord pushes you
|
|
||||||
around. That friend you trusted like no-one else in the world lets you down. The
|
|
||||||
partner or spouse you loved like no-one else in the world – you end up fighting.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
It’s possible that you’re going to be reading this right now with a heavy heart
|
|
||||||
because of a broken relationship in their life. And doesn’t that hurt more than
|
|
||||||
anything else we know?
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
When the world is groaning so heavily under the weight of conflict, and some
|
|
||||||
banner on <i>The Hub</i> tells us a ritual can unite us, that seems so out of
|
|
||||||
proportion to the scale of the problem, doesn’t it? What can a ritual do? A bit
|
|
||||||
of old superstition? An excuse to divide people, maybe – what can a ritual do
|
|
||||||
to unite us?
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Well, two thousand years ago, a man had a meal with his friends. Together, they
|
|
||||||
shared a meal of bread and wine – which, in that time and place, was the most
|
|
||||||
ordinary meal imaginable.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And yet, in that most ordinary event imaginable, something was happening which
|
|
||||||
was totally unimaginable. As this man, Jesus, shared the elements of this meal,
|
|
||||||
he made some extraordinary statements about what he was doing: ‘take, eat, this
|
|
||||||
is my body’ – ‘drink this, all of you; this is my blood of the new covenant.’
|
|
||||||
(The word ‘covenant’ means a promise.)
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
He told them he wasn’t just giving them bread and wine, he was giving his body
|
|
||||||
and his blood, and a promise.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Before Jesus ate another meal, he was flogged and nailed to a cross. His blood
|
|
||||||
was spilt and his body broken, even to death.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
And yet, that wasn’t the end of the Easter story. Because three days later,
|
|
||||||
mourners turned up at Jesus’ tomb to pay their respects, and found the tomb
|
|
||||||
empty, the stone rolled away. Then they became the first of crowds of
|
|
||||||
incredulous eyewitnesses to see Jesus, the same Jesus who was killed on a cross,
|
|
||||||
alive.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Some magic trick, right? But this matters a hell of a lot more than just some
|
|
||||||
magic trick. Because Jesus became the first person in history to prove that you
|
|
||||||
really can both have your cake and eat it. He gave his life, and lived! As a
|
|
||||||
result, we can have his life and our own. We can join with Jesus through the
|
|
||||||
ritual of Communion which he established, and thereby, through Jesus’ body, join
|
|
||||||
together with everyone else who takes part in that ritual, as one body. Then we
|
|
||||||
can start living our brand-new, full-fat, original-recipe life overflowing with
|
|
||||||
generosity where we too can both give our life to others and enjoy it ourselves.
|
|
||||||
Indeed, Jesus taught us and showed us that it’s precisely by giving our lives to
|
|
||||||
others that we get to truly live ourselves.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
This is why, in spite of all the division which persists in the world today, two
|
|
||||||
billion people regard this week as the best week of the year. Two billion
|
|
||||||
people, from every nation on Earth, speaking thousands of languages, of every
|
|
||||||
age and culture and gender and race, who defy the divisions of this world to
|
|
||||||
insist on joining together as one body in Jesus.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
That includes Edinburgh’s thriving and diverse Christian community, many of whom
|
|
||||||
will be taking part in the ritual of Communion at some point this week. And if
|
|
||||||
you want to hear more about how Jesus gave his life for us and why that matters
|
|
||||||
for all of us, I’m sure every church in Edinburgh will have their doors open at
|
|
||||||
some point this week and would be delighted to have you. My own church,
|
|
||||||
Bruntsfield Evangelical, will be having a service tomorrow, Good Friday at
|
|
||||||
twelve noon, and also at eleven o’ clock on Sunday – I’d especially recommend this
|
|
||||||
one if you’re new to church or haven’t been in a while. You’d be very welcome to
|
|
||||||
join me there!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Because Jesus’ new covenant, his promise to all of us, is that in an apparently
|
|
||||||
hopelessly divided world, there exists real hope for unity. And that’s why
|
|
||||||
Easter is the best week of the year.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<section class="h-feed">
|
|
||||||
<h1 class="p-name">
|
|
||||||
My blog
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<aside>
|
|
||||||
<p>
|
|
||||||
This blog is written by <a class="p-author h-card" href="/">Joe Carstairs</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a class="u-url" href="https://joeac.net/blog">Permalink</a>
|
|
||||||
</p>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
2024
|
|
||||||
<ul>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/03/30/easter">
|
|
||||||
Why Easter is the best week of the year
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/01/29/euhwc_toast_to_lasses_2024">
|
|
||||||
EUHWC Toast to the Lasses
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/01/14/sapiens_on_religion">
|
|
||||||
Harari’s <i>Sapiens</i> on Religion
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
22
error.html
22
error.html
@@ -1,22 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<section>
|
|
||||||
<h1>Got lost?</h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you’re on this page, something’s probably gone wrong. Try going to
|
|
||||||
my <a href="/">homepage</a> instead.
|
|
||||||
</p>
|
|
||||||
</section>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
92
index.html
92
index.html
@@ -1,92 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en-GB">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/reset.css" />
|
|
||||||
<link rel="stylesheet" href="/base.css" />
|
|
||||||
<link rel="stylesheet" href="/hcard.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<section class="h-card">
|
|
||||||
<img class="u-photo" src="/headshot.jpg" height="256" width="256" />
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<h1>
|
|
||||||
<a class="p-name u-url u-uid" href="https://joeac.net" rel="me">
|
|
||||||
Joe Carstairs
|
|
||||||
</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Hi! 👋 My name is <span class="p-given-name">Joe</span>
|
|
||||||
<span class="p-family-name">Carstairs</span>. I’m a
|
|
||||||
<span class="p-job-title">software developer</span> at
|
|
||||||
<a class="p-org" href="https://www.scottlogic.com">Scott Logic</a>, a
|
|
||||||
graduate of Philosophy and Mathematics at the University of Edinburgh,
|
|
||||||
a committed Christian and a pretty rubbish poet.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
I’m also the <span class="p-job-title">secretary</span> of the
|
|
||||||
<a class="p-org" href="https://scotsleidassocie.org">Scots Language Society</a>.
|
|
||||||
<a href="https://github.com/joeacarstairs/lallans-wabsteid-astro">Help me maintain our website!</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Email me at
|
|
||||||
<a class="u-email" href="mailto:joeacarstairs@gmail.com">joeacarstairs@gmail.com</a>
|
|
||||||
with your thoughts on metaethics, Scots verse and eschatology.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Or get me on
|
|
||||||
<a href="https://www.facebook.com/joe.carstairs.5" rel="me">Facebook</a>,
|
|
||||||
<a href="https://mastodon.social/@joe_carstairs" rel="me">Mastodon</a>
|
|
||||||
or <a href="https://github.com/joeacarstairs" rel="me">GitHub</a>.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="h-feed">
|
|
||||||
<h2 class="p-name">
|
|
||||||
My blog
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<aside>
|
|
||||||
<p class="hidden">
|
|
||||||
This blog is written by <a class="p-author h-card" href="/">Joe Carstairs</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a class="u-url" href="https://joeac.net/blog">Permalink</a>
|
|
||||||
</p>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
2024
|
|
||||||
<ul>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/03/30/easter">
|
|
||||||
Why Easter is the best week of the year
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/01/29/euhwc_toast_to_lasses_2024">
|
|
||||||
EUHWC Toast to the Lasses
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="h-entry">
|
|
||||||
<a class="u-url p-name" href="/blog/2024/01/14/sapiens_on_religion">
|
|
||||||
Harari’s <i>Sapiens</i> on Religion
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
6979
package-lock.json
generated
Normal file
6979
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
package.json
Normal file
19
package.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "joeac.net",
|
||||||
|
"type": "module",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro check && astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/check": "^0.5.10",
|
||||||
|
"@astrojs/rss": "^4.0.5",
|
||||||
|
"@astrojs/sitemap": "^3.1.2",
|
||||||
|
"astro": "^4.5.12",
|
||||||
|
"typescript": "^5.4.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
::backdrop {
|
::backdrop {
|
||||||
/* Set sans-serif & mono fonts */
|
/* Set sans-serif & mono fonts */
|
||||||
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir,
|
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir,
|
||||||
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
|
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
|
||||||
"Helvetica Neue", sans-serif;
|
"Helvetica Neue", sans-serif;
|
||||||
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
|
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
|
||||||
--standard-border-radius: 5px;
|
--standard-border-radius: 5px;
|
||||||
|
|
||||||
@@ -28,21 +28,21 @@
|
|||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
:root,
|
:root,
|
||||||
::backdrop {
|
::backdrop {
|
||||||
color-scheme: dark;
|
color-scheme: dark;
|
||||||
--bg: #212121;
|
--bg: #212121;
|
||||||
--accent-bg: #2b2b2b;
|
--accent-bg: #2b2b2b;
|
||||||
--text: #dcdcdc;
|
--text: #dcdcdc;
|
||||||
--text-light: #ababab;
|
--text-light: #ababab;
|
||||||
--accent: #ffb300;
|
--accent: #ffb300;
|
||||||
--accent-text: var(--bg);
|
--accent-text: var(--bg);
|
||||||
--code: #f06292;
|
--code: #f06292;
|
||||||
--preformatted: #ccc;
|
--preformatted: #ccc;
|
||||||
--disabled: #111;
|
--disabled: #111;
|
||||||
}
|
}
|
||||||
/* Add a bit of transparency so light media isn't so glaring in dark mode */
|
/* Add a bit of transparency so light media isn't so glaring in dark mode */
|
||||||
img,
|
img,
|
||||||
video {
|
video {
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,19 +164,19 @@ h3 {
|
|||||||
/* Reduce header size on mobile */
|
/* Reduce header size on mobile */
|
||||||
@media only screen and (max-width: 720px) {
|
@media only screen and (max-width: 720px) {
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 2.5rem;
|
font-size: 2.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 2.1rem;
|
font-size: 2.1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 1.75rem;
|
font-size: 1.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,10 +297,10 @@ header > nav a[aria-current="page"] {
|
|||||||
/* Reduce nav side on mobile */
|
/* Reduce nav side on mobile */
|
||||||
@media only screen and (max-width: 720px) {
|
@media only screen and (max-width: 720px) {
|
||||||
header > nav a {
|
header > nav a {
|
||||||
border: none;
|
border: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,9 +326,9 @@ aside {
|
|||||||
/* Make aside full-width on mobile */
|
/* Make aside full-width on mobile */
|
||||||
@media only screen and (max-width: 720px) {
|
@media only screen and (max-width: 720px) {
|
||||||
aside {
|
aside {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
float: none;
|
float: none;
|
||||||
margin-inline-start: 0;
|
margin-inline-start: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,7 +447,7 @@ textarea:not([cols]) {
|
|||||||
/* Add arrow to drop-down */
|
/* Add arrow to drop-down */
|
||||||
select:not([multiple]) {
|
select:not([multiple]) {
|
||||||
background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%),
|
background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%),
|
||||||
linear-gradient(135deg, var(--text) 51%, transparent 49%);
|
linear-gradient(135deg, var(--text) 51%, transparent 49%);
|
||||||
background-position: calc(100% - 15px), calc(100% - 10px);
|
background-position: calc(100% - 15px), calc(100% - 10px);
|
||||||
background-size: 5px 5px, 5px 5px;
|
background-size: 5px 5px, 5px 5px;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
@@ -512,7 +512,7 @@ input[type="radio"]:checked::after {
|
|||||||
textarea,
|
textarea,
|
||||||
select,
|
select,
|
||||||
input {
|
input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,7 +583,7 @@ cite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Use mono font for code elements */
|
/* Use mono font for code elements */
|
||||||
@@ -663,8 +663,8 @@ dialog::backdrop {
|
|||||||
|
|
||||||
@media only screen and (max-width: 720px) {
|
@media only screen and (max-width: 720px) {
|
||||||
dialog {
|
dialog {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
margin: auto 1em;
|
margin: auto 1em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5,13 +5,13 @@
|
|||||||
|
|
||||||
@media (min-width: 48rem) {
|
@media (min-width: 48rem) {
|
||||||
.h-card {
|
.h-card {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.u-photo {
|
.u-photo {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 949 KiB After Width: | Height: | Size: 949 KiB |
|
Before Width: | Height: | Size: 949 KiB After Width: | Height: | Size: 949 KiB |
44
src/components/BaseHead.astro
Normal file
44
src/components/BaseHead.astro
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
interface Props {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
image?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
|
||||||
|
|
||||||
|
const { title, description, image = '/images/headshot.jpg' } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- Stylesheets -->
|
||||||
|
<link rel="stylesheet" href="/css/reset.css" />
|
||||||
|
<link rel="stylesheet" href="/css/base.css" />
|
||||||
|
<link rel="stylesheet" href="/css/hcard.css" />
|
||||||
|
|
||||||
|
<!-- Global Metadata -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<meta name="generator" content={Astro.generator} />
|
||||||
|
|
||||||
|
<!-- Canonical URL -->
|
||||||
|
<link rel="canonical" href={canonicalURL} />
|
||||||
|
|
||||||
|
<!-- Primary Meta Tags -->
|
||||||
|
<title>{title}</title>
|
||||||
|
<meta name="title" content={title} />
|
||||||
|
<meta name="description" content={description} />
|
||||||
|
|
||||||
|
<!-- Open Graph / Facebook -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content={Astro.url} />
|
||||||
|
<meta property="og:title" content={title} />
|
||||||
|
<meta property="og:description" content={description} />
|
||||||
|
<meta property="og:image" content={new URL(image, Astro.url)} />
|
||||||
|
|
||||||
|
<!-- Twitter -->
|
||||||
|
<meta property="twitter:card" content="summary_large_image" />
|
||||||
|
<meta property="twitter:url" content={Astro.url} />
|
||||||
|
<meta property="twitter:title" content={title} />
|
||||||
|
<meta property="twitter:description" content={description} />
|
||||||
|
<meta property="twitter:image" content={new URL(image, Astro.url)} />
|
||||||
76
src/components/BlogFeed.astro
Normal file
76
src/components/BlogFeed.astro
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
---
|
||||||
|
import type { CollectionEntry } from 'astro:content';
|
||||||
|
import { getCollection } from 'astro:content';
|
||||||
|
|
||||||
|
export interface Props {
|
||||||
|
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6,
|
||||||
|
hideAuthor?: boolean,
|
||||||
|
};
|
||||||
|
|
||||||
|
const { headingLevel = 2, hideAuthor = false } = Astro.props;
|
||||||
|
|
||||||
|
const posts = (await getCollection('blog'));
|
||||||
|
|
||||||
|
const distinctYears: number[] = posts
|
||||||
|
.map(post => post.data.pubDate.year)
|
||||||
|
.reduce<number[]>((acc, curr) => acc.includes(curr) ? acc : [...acc, curr], [])
|
||||||
|
.sort((a, b) => b - a);
|
||||||
|
|
||||||
|
function matchesYear(year: number) {
|
||||||
|
return (post: CollectionEntry<'blog'>) => post.data.pubDate.year === year;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortByPubDateDescending(post1: CollectionEntry<'blog'>, post2: CollectionEntry<'blog'>) {
|
||||||
|
const year1 = post1.data.pubDate.year;
|
||||||
|
const year2 = post2.data.pubDate.year;
|
||||||
|
const month1 = post1.data.pubDate.month;
|
||||||
|
const month2 = post2.data.pubDate.month;
|
||||||
|
const day1 = post1.data.pubDate.day;
|
||||||
|
const day2 = post2.data.pubDate.day;
|
||||||
|
|
||||||
|
if (year1 !== year2) {
|
||||||
|
return year2 - year1;
|
||||||
|
} else if (month1 !== month2) {
|
||||||
|
return month2 - month1;
|
||||||
|
} else {
|
||||||
|
return day2 - day1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const headingElem = `h${headingLevel}`;
|
||||||
|
|
||||||
|
const canonicalUrl = new URL(Astro.url.pathname, Astro.site)
|
||||||
|
---
|
||||||
|
|
||||||
|
<section class="h-feed">
|
||||||
|
<Fragment set:html={`
|
||||||
|
<${headingElem} class="p-name">
|
||||||
|
My blog
|
||||||
|
</${headingElem}>
|
||||||
|
`} />
|
||||||
|
|
||||||
|
<aside>
|
||||||
|
<p class={hideAuthor ? 'hidden' : ''}>
|
||||||
|
This blog is written by <a class="p-author h-card" href="/">Joe Carstairs</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a class="u-url" href={canonicalUrl}>Permalink</a>
|
||||||
|
</p>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{ distinctYears.map(year => (
|
||||||
|
<li>
|
||||||
|
{year}
|
||||||
|
<ul>
|
||||||
|
{ posts.filter(matchesYear(year)).sort(sortByPubDateDescending).map(post => (
|
||||||
|
<li class="h-entry">
|
||||||
|
<a class="u-url p-name" href={`/blog/${post.slug}`}>{post.data.title}</a>
|
||||||
|
</li>
|
||||||
|
)) }
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
)) }
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
21
src/components/FormattedDate.astro
Normal file
21
src/components/FormattedDate.astro
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
interface Props {
|
||||||
|
className?: string;
|
||||||
|
date: Date | string;
|
||||||
|
}
|
||||||
|
|
||||||
|
let { className, date } = Astro.props;
|
||||||
|
if (typeof(date) === 'string') {
|
||||||
|
date = new Date(date);
|
||||||
|
}
|
||||||
|
---
|
||||||
|
|
||||||
|
<time datetime={date.toISOString()} class={className ?? ''}>
|
||||||
|
{
|
||||||
|
date.toLocaleDateString('en-GB', {
|
||||||
|
year: 'numeric',
|
||||||
|
month: 'long',
|
||||||
|
day: 'numeric',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</time>
|
||||||
43
src/components/Me.astro
Normal file
43
src/components/Me.astro
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
<section class="h-card">
|
||||||
|
<img class="u-photo" src="/images/headshot.jpg" height="256" width="256" />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h1>
|
||||||
|
<a class="p-name u-url u-uid" href="https://joeac.net" rel="me">
|
||||||
|
Joe Carstairs
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Hi! 👋 My name is <span class="p-given-name">Joe</span>
|
||||||
|
<span class="p-family-name">Carstairs</span>. I’m a
|
||||||
|
<span class="p-job-title">software developer</span> at
|
||||||
|
<a class="p-org" href="https://www.scottlogic.com">Scott Logic</a>, a
|
||||||
|
graduate of Philosophy and Mathematics at the University of Edinburgh,
|
||||||
|
a committed Christian and a pretty rubbish poet.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
I’m also the <span class="p-job-title">secretary</span> of the
|
||||||
|
<a class="p-org" href="https://scotsleidassocie.org">Scots Language Society</a>.
|
||||||
|
<a href="https://github.com/joeacarstairs/lallans-wabsteid-astro">Help me maintain our website!</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Email me at
|
||||||
|
<a class="u-email" href="mailto:joeacarstairs@gmail.com">joeacarstairs@gmail.com</a>
|
||||||
|
with your thoughts on metaethics, Scots verse and eschatology.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Or get me on
|
||||||
|
<a href="https://www.facebook.com/joe.carstairs.5" rel="me">Facebook</a>,
|
||||||
|
<a href="https://mastodon.social/@joe_carstairs" rel="me">Mastodon</a>,
|
||||||
|
<a href="https://www.linkedin.com/in/joe-carstairs-0aa936277" rel="me">LinkedIn</a>,
|
||||||
|
or <a href="https://github.com/joeacarstairs" rel="me">GitHub</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
2
src/consts.ts
Normal file
2
src/consts.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export const SITE_TITLE = 'Joe Carstairs';
|
||||||
|
export const SITE_DESCRIPTION = 'Joe’s personal website.';
|
||||||
77
src/content/blog/2024/01/14/sapiens_on_religion.md
Normal file
77
src/content/blog/2024/01/14/sapiens_on_religion.md
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
title: Harari’s Sapiens on Religion
|
||||||
|
description: >-
|
||||||
|
In which I discuss why I think Harari’s characterisation of religion
|
||||||
|
is inadequate because it’s too materialistic.
|
||||||
|
pubDate:
|
||||||
|
year: 2024
|
||||||
|
month: 01
|
||||||
|
day: 14
|
||||||
|
---
|
||||||
|
|
||||||
|
I’ve been slowly re-reading Yuval Noah Harari’s 2014 classic,
|
||||||
|
<a href="https://www.ynharari.com/book/sapiens-2">Sapiens</a>,
|
||||||
|
which apart from being ridiculously over-scoped and hilariously
|
||||||
|
under-evidenced, is proving delightfully entertaining.
|
||||||
|
|
||||||
|
I’ve just finished chapter 12, covering the world history of all
|
||||||
|
religion in thirty pages. Of course, at that level of brevity,
|
||||||
|
there will be many deficiencies. But here’s some thoughts - not
|
||||||
|
terribly well organised - which stand out to me.
|
||||||
|
|
||||||
|
Hurari generally assumes a materialist metaphysic (a problem which
|
||||||
|
blights the book more generally). Nothing exists except physical stuff.
|
||||||
|
This gives him severe tunnel vision. As a consequence of this
|
||||||
|
restricting metaphysic, he is forced to adopt limiting accounts of what
|
||||||
|
the role of religion is in world history, and therefore what religion is.
|
||||||
|
|
||||||
|
> The crucial historical role of religion has been to give superhuman
|
||||||
|
> legitimacy to [all social orders and hierarchies].
|
||||||
|
> Religion can thus be defined as <em>a system of human norms and
|
||||||
|
> values that is founded on a belief in a superhuman order</em>.
|
||||||
|
> <footer>p. 234</footer>
|
||||||
|
|
||||||
|
It might seem a little unfair to criticise Harari for giving a
|
||||||
|
materialist account of religion. <i>Sapiens</i> is, after all, a
|
||||||
|
materialist world history.
|
||||||
|
|
||||||
|
But this account is just one extreme example of how that project, to
|
||||||
|
give a materialist account of world history, will inevitably lack the
|
||||||
|
metaphysical resources to really understand the human story.
|
||||||
|
|
||||||
|
On Harari’s view, any human enterprise which attempts to understand
|
||||||
|
that which transcends direct human experience is at best an effort in
|
||||||
|
imaginative story-telling. All scientific theory, theology, ethics and
|
||||||
|
metaphysics either contorted out of all recognition into a pragmatic
|
||||||
|
fiction or is cast to the flames.
|
||||||
|
|
||||||
|
In particular, it’s a view which is incapable of taking seriously some
|
||||||
|
of the most important questions human beings have grappled with in the
|
||||||
|
course of their history. Those who know me won’t be surprised at which
|
||||||
|
ones I’m going to pick out: who was the being which made their covenant
|
||||||
|
with Abraham? How is that promise being fulfilled? And who the heck was
|
||||||
|
Jesus of Nazareth?
|
||||||
|
|
||||||
|
If Harari’s characterisation of religion is adequate - and the Abrahamic
|
||||||
|
faiths come under that banner - then those questions are reduced to
|
||||||
|
nothing more profound than Doctor Who fans arguing over ‘canon’. The
|
||||||
|
question of who God is becomes a mere tool for the organisation of
|
||||||
|
society, rather than a substantial and important question on a matter
|
||||||
|
of fact.
|
||||||
|
|
||||||
|
This is a shortcoming for its own sake: a materialist account of
|
||||||
|
religion cannot adequately account for the phenomenon of religion
|
||||||
|
itself.
|
||||||
|
|
||||||
|
But it is also a shortcoming even by its own lights. Without giving
|
||||||
|
serious consideration to the substantial matter of what Harari calls
|
||||||
|
‘religion’ (which, to his mind, includes the Abrahamic faiths,
|
||||||
|
Hinduism, paganism, animism, Buddhism, Shintoism, Confucianism,
|
||||||
|
capitalism, communism and Nazism), even the material facts are
|
||||||
|
inexplicable. Why would, as Harari is keen to point out, out, people
|
||||||
|
fight and die over and over again for a fiction?
|
||||||
|
|
||||||
|
The material facts themselves prove that ‘religion’ as he construes it
|
||||||
|
is not window dressing to the real story of history. It cannot merely
|
||||||
|
serve as a mechanism in the churning of material history. It is itself
|
||||||
|
the centre of the story.
|
||||||
261
src/content/blog/2024/01/29/euhwc_toast_to_the_lasses_2024.md
Normal file
261
src/content/blog/2024/01/29/euhwc_toast_to_the_lasses_2024.md
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
---
|
||||||
|
title: EUHWC Toast to the Lassies 2024
|
||||||
|
description: >-
|
||||||
|
At the <a href="https://www.euhwc.co.uk">EUHWC</a> Burns meet in
|
||||||
|
Ullapool last weekend, I had the last privilege of giving the Toast to
|
||||||
|
the Lassies. Particularly for the benefit of those who weren’t there,
|
||||||
|
here it is in full!
|
||||||
|
pubDate:
|
||||||
|
year: 2024
|
||||||
|
month: 01
|
||||||
|
day: 29
|
||||||
|
---
|
||||||
|
|
||||||
|
Had Burns, instead of his sweet bonnie Jean,<br>
|
||||||
|
his skills poetical for to mature<br>
|
||||||
|
had any one of our club’s lassies seen<br>
|
||||||
|
he would forever have remained obscure.<br>
|
||||||
|
If he had nothing but this box of worms<br>
|
||||||
|
Scotia would have been poorer, that I’m sure.<br>
|
||||||
|
Now none of us can claim to be a Burns,<br>
|
||||||
|
I’m no poetic master, still, I’ll have a punt,<br>
|
||||||
|
though let’s be clear, I’ll do it on my terms.<br>
|
||||||
|
I’ve everywhere avoided being blunt -<br>
|
||||||
|
politeness matters more than any schema -<br>
|
||||||
|
but it is hard when Isla’s such a cunt.<br>
|
||||||
|
It was a challenge to produce a terza rima<br>
|
||||||
|
I could recite withouten snoring;<br>
|
||||||
|
you’ve been so stiff I thought youse had oedema.<br>
|
||||||
|
The bother is this year is you’ll all been boring:<br>
|
||||||
|
no drugs, no sex, no gossiping or lies,<br>
|
||||||
|
no rock and roll, and hardly any whoring.<br>
|
||||||
|
But hey well, rules is rules, I’ve had to try!<br>
|
||||||
|
At least it can’t be worse than the reply.<br>
|
||||||
|
|
||||||
|
I’ll start with Audrey, the club’s senior member,<br>
|
||||||
|
for if there’s something that I say which disconcerts her,<br>
|
||||||
|
it’s fine: the poor old girl, she won’t remember.<br>
|
||||||
|
She likes to let us think she’s a hard worker<br>
|
||||||
|
but we’re electing a third social sec…<br>
|
||||||
|
it’s pretty clear she’s just another shirker.<br>
|
||||||
|
This lady, half American, half Czech,<br>
|
||||||
|
for study, moved to Scotland for to do<br>
|
||||||
|
American history – really, what the heck?<br>
|
||||||
|
The club is so much louder thanks to you:<br>
|
||||||
|
impressive vocals for just five foot two.<br>
|
||||||
|
|
||||||
|
That woman, Willow, reggles is bespeckled<br>
|
||||||
|
with her sickle and her fishing tackle<br>
|
||||||
|
shackled by the shins while she is heckled;<br>
|
||||||
|
the way that Willow waddles maks me cackle<br>
|
||||||
|
like a speckled jackal getting tickles,<br>
|
||||||
|
worth a shekel in the tabernacle;<br>
|
||||||
|
I chuckle muckle at her love of pickles<br>
|
||||||
|
which she wiggles when she has the heart<br>
|
||||||
|
while work for the Committee’s fickle trickles.<br>
|
||||||
|
Her modus operandi: <em>you can’t rush art.</em><br>
|
||||||
|
Her reimbursements programme’s going great;<br>
|
||||||
|
any day now, she’ll maybe even start.<br>
|
||||||
|
She cannot walk without Audrey, her mate:<br>
|
||||||
|
I wonder when they’re going to consummate.<br>
|
||||||
|
|
||||||
|
Although they make them pretty tough in Peebles,<br>
|
||||||
|
the thought of actually going up a peak<br>
|
||||||
|
fills Shona Lewis with the heeble-jeebles.<br>
|
||||||
|
New car? We miss your beautiful antique!<br>
|
||||||
|
How long before this one’s also up a creek?<br>
|
||||||
|
|
||||||
|
Once there was a lass called Hannah Collier<br>
|
||||||
|
whom even hell below regarded nasty,<br>
|
||||||
|
deeply despised by all that dwells there.<br>
|
||||||
|
Dating’s proceeding slowly for our lassie;<br>
|
||||||
|
not far from giving up til she beguiles<br>
|
||||||
|
a hot Italian in Southsider: classy!<br>
|
||||||
|
At first, Michaelo seems to be all smiles<br>
|
||||||
|
till it transpires he’s one of Dante’s demons…<br>
|
||||||
|
I guess it’s back to posters of Harry Styles.<br>
|
||||||
|
One day you’ll get a decent boy, keep dreamin;<br>
|
||||||
|
somewhere there waits a handsome Mr Collier.<br>
|
||||||
|
Hopefully when she meets him she’ll no be steamin.<br>
|
||||||
|
Hannah, I’m not sure why you chose to maul your<br>
|
||||||
|
poor skeleton at Subway (she’s still tetchy)<br>
|
||||||
|
and then abandon what remains of all your<br>
|
||||||
|
dignity at Ryvoan with a Frenchie!<br>
|
||||||
|
I think he wishes that he never met ye.<br>
|
||||||
|
|
||||||
|
And has a quiet Felicia e’er been seen?<br>
|
||||||
|
The energy she has is frankly wild.<br>
|
||||||
|
I’ve never seen a hillwalker so keen!<br>
|
||||||
|
<i lang="de">Ssie ischt raschtlos und nie gelangweilt</i>.<br>
|
||||||
|
She eats raw oats with soggy protein powder:<br>
|
||||||
|
a camping pot has ne’er been worse defiled.<br>
|
||||||
|
She uses what her Maker has endowed her<br>
|
||||||
|
with: her recorder skills are off the charts;<br>
|
||||||
|
youse think I’m joking, but I wouldn’t doubt her!<br>
|
||||||
|
This lass of the land of the Rot-Gold-Schwarz<br>
|
||||||
|
will soon depart, though long we might beseech ya<br>
|
||||||
|
to stay. Of course, you’ll break all of our hearts,<br>
|
||||||
|
but mine most of all. Any time, Felicia,<br>
|
||||||
|
Creag Meagaidh calls, I know routes up the rear<br>
|
||||||
|
dark and under-explored that I can teach you!<br>
|
||||||
|
I won’t deny I think it’s rather queer<br>
|
||||||
|
the things you do with chickpeas, but no matter.<br>
|
||||||
|
You’re keen, you’re quick, you’re cool, that much is clear.<br>
|
||||||
|
In fact, I think you’d make a damn good faffer:<br>
|
||||||
|
swoop down on distilleries like the Luftwaffe.<br>
|
||||||
|
|
||||||
|
And now we come to our girl Emily Topness!<br>
|
||||||
|
You’re keen for social sec. You’d suit the role<br>
|
||||||
|
because… I’m not quite sure, it’s embdy’s guess.<br>
|
||||||
|
We met your sister, and she was just as dull.<br>
|
||||||
|
No, please drone on about Icelandic soil!<br>
|
||||||
|
Poor Joe here down the front’s bored out his skull.<br>
|
||||||
|
And since I mentioned Joe – I hate to spoil<br>
|
||||||
|
it for you – but you’ve got the inferior Joe,<br>
|
||||||
|
by Jove, no joke, it’s Jock here’s got the style!<br>
|
||||||
|
Nah, write the boy a sonnet, get in the flow,<br>
|
||||||
|
Whatever you produce’ll beat by thrice<br>
|
||||||
|
your Masters thesis. What’d you got to show<br>
|
||||||
|
for months of hunting for the butterflies?<br>
|
||||||
|
‘There weren’t any.’ Oh, and have some sense,<br>
|
||||||
|
cos I’ve heard rumours – I assume they’re lies –<br>
|
||||||
|
you’ve called yourself the ‘poet in residence.’<br>
|
||||||
|
You know you can’t compete, drop the pretence.<br>
|
||||||
|
|
||||||
|
Tereza was our gear sec for last year.<br>
|
||||||
|
She helped herself to stuff: that’s factual.<br>
|
||||||
|
Now when she asks to loan a bit club gear<br>
|
||||||
|
we have to ask her to provide collateral.<br>
|
||||||
|
She picked up tin whistle pretty sharp!<br>
|
||||||
|
Which is to say, she’s not a natural.<br>
|
||||||
|
She’s nowhere happier than under tarp<br>
|
||||||
|
gazing up at the moon and stars alone<br>
|
||||||
|
somewhere distant and remote like Glen Tarff.<br>
|
||||||
|
Now what to say about Lucy Ma-the-soooon....<br>
|
||||||
|
she likes… to faff… mm hmmm… well, moving on!<br>
|
||||||
|
|
||||||
|
And now we come to Emilie the French.<br>
|
||||||
|
She seems to be nice on the trips we see her<br>
|
||||||
|
but my distrust of frogs will ne’er be quenched.<br>
|
||||||
|
Claims she’s a ‘pharmacist’? So she’s a dealer.<br>
|
||||||
|
Need some pills in a pinch? You call, she’s there<br>
|
||||||
|
at your door in her rally-approved four-wheeler.<br>
|
||||||
|
One question we have is, why are you here?<br>
|
||||||
|
Most folk are in uni, you’ve no refutin<br>
|
||||||
|
you were kicked out after second year!<br>
|
||||||
|
Now the Engineering grad, Sophia Newton.<br>
|
||||||
|
Your namesake, Isaac, was a man convicted,<br>
|
||||||
|
constructed calculus; but no computin,<br>
|
||||||
|
not even Isaac’s, could’ve e’er predicted<br>
|
||||||
|
you’d drop the Eng for creative writing!<br>
|
||||||
|
now that’s what I would call a self-inflicted<br>
|
||||||
|
inflection point! It must be quite enlightening,<br>
|
||||||
|
but that doesn’t excuse when you give us an earful.<br>
|
||||||
|
The blood boils in our veins, the rage heightening,<br>
|
||||||
|
and you’re an American, that makes me fearful.<br>
|
||||||
|
What’s your secret? You have us knackered!<br>
|
||||||
|
What are you on to always be so cheerful?<br>
|
||||||
|
Now we approach the topic of Merzbacher.<br>
|
||||||
|
Wait, she’s not here? Abandoned ship?<br>
|
||||||
|
She says she’s informatics: so she’s a hacker?<br>
|
||||||
|
She has strong views, she lets her anger rip.<br>
|
||||||
|
Poor George got an earful, full of future advice,<br>
|
||||||
|
but why hasn’t she been on another club trip?<br>
|
||||||
|
We’re cruel to focus on this list of vice;<br>
|
||||||
|
the fact remains: she’s headstrong and nice.<br>
|
||||||
|
|
||||||
|
On Skye, a lady gave her poles to Sasha,<br>
|
||||||
|
which was really nice - I mean just the best -<br>
|
||||||
|
but Sasha really didn’t have to flash her.<br>
|
||||||
|
Quick history lesson: way back, RBS<br>
|
||||||
|
led the banking system to self-destruct<br>
|
||||||
|
and left taxpayers to pick up the mess.<br>
|
||||||
|
Since then, the name’s so irredeemably fucked<br>
|
||||||
|
they’ve had to ditch the brand once and for all.<br>
|
||||||
|
There’s one lassie who I need not instruct<br>
|
||||||
|
What, these days, the Royal Bank is called<br>
|
||||||
|
cos NatWest’s nasty history of scandal<br>
|
||||||
|
didn’t stop Booth from working there at all.<br>
|
||||||
|
Nothing motivates her more than to trample<br>
|
||||||
|
upon the working class. They set her free.<br>
|
||||||
|
She sank the pound quicker than the Belgrano,<br>
|
||||||
|
because ‘there is no such thing as society,’<br>
|
||||||
|
that’s how it is, is it? All right, I see.<br>
|
||||||
|
|
||||||
|
Now, coming all the way from Glenmore Lodge,<br>
|
||||||
|
it’s Ellie’s turn! We have done what we can,<br>
|
||||||
|
although I’m scared what she’ll put in my squash.<br>
|
||||||
|
She wasn’t into Benji, but listen man,<br>
|
||||||
|
you’re lucky that you dodged her drunken benders.<br>
|
||||||
|
You’ll wake up in a tent in Kyrgystan,<br>
|
||||||
|
as for how you got there, no-one remembers,<br>
|
||||||
|
and if you’d known you’d be sleeping next to Ellie,<br>
|
||||||
|
you would’ve brought some fucking ear defenders.<br>
|
||||||
|
She’ll wrap you in bubblewrap, from your ears to your belly,<br>
|
||||||
|
cotton clothes for none, and no complaining,<br>
|
||||||
|
applying safety to the max, spare socks in your wellies.<br>
|
||||||
|
She’s always at her Mountain Leader training,<br>
|
||||||
|
practicing her night nav in the locale,<br>
|
||||||
|
pursuing QMDs - unless it’s raining.<br>
|
||||||
|
But some water should not scare our gal!<br>
|
||||||
|
She’s had much experience with the wet as of late:<br>
|
||||||
|
after all, she got on well with our navy pal.<br>
|
||||||
|
What was the age of that particular first mate?<br>
|
||||||
|
Older than your ex - always part of the plan?<br>
|
||||||
|
Ah, of course! He was a spry twenty-eight!<br>
|
||||||
|
Youth’s for the losers, let’s get you a real man,<br>
|
||||||
|
mature and rugged, but kind and astute?<br>
|
||||||
|
Just make sure he’s not as old as your gran.<br>
|
||||||
|
One request we all have is you ditch the uke:<br>
|
||||||
|
never have strings been pluckèd quite so shitely;<br>
|
||||||
|
we would all much rather be hit by a nuke.<br>
|
||||||
|
And please shut up about your nice society.<br>
|
||||||
|
We are all glad you had a fun summer,<br>
|
||||||
|
but bringing it up throws us right back to sobriety.<br>
|
||||||
|
To lose you of course would be a bummer:<br>
|
||||||
|
that is, for your carefully groomed newcomers.<br>
|
||||||
|
|
||||||
|
Now time for the main woman, El Presidente!<br>
|
||||||
|
To here, it’s been like getting stones to bleed,<br>
|
||||||
|
but in Isla Burslem’s case we’ve material aplenty!<br>
|
||||||
|
As Holy Scripture says, ‘let those who lead<br>
|
||||||
|
well be worthy of double honour,’ so<br>
|
||||||
|
your bit is double length – it’s quite the screed!<br>
|
||||||
|
I’ll start off with her brilliant boyfriend – oh!<br>
|
||||||
|
Not boyfriend! Friend? To me this rather smacks<br>
|
||||||
|
of low commitment, but what do I know?<br>
|
||||||
|
So far, he’s disappointing, but on track.<br>
|
||||||
|
What’s he up to Isla: seven minutes? neat!<br>
|
||||||
|
Despite that, he is never holding back<br>
|
||||||
|
your blossoming romance with Dr Peat.<br>
|
||||||
|
Don’t deny it, that launch was pretty hard!<br>
|
||||||
|
It’s fifth base next: that’s photos of his feet.<br>
|
||||||
|
It’s fair to say her reputation’s marred.<br>
|
||||||
|
We all regret that we did once anoint<br>
|
||||||
|
her President: her premiership’s ill-starred.<br>
|
||||||
|
Hey - you’re meant to be in charge of this joint!<br>
|
||||||
|
You’re seldom seen cos of the mountaineering<br>
|
||||||
|
meets that you’re always on. You’d made your point<br>
|
||||||
|
before you chose to go off disappearing<br>
|
||||||
|
to <em>New Zealand</em>… we get the message! Plus<br>
|
||||||
|
we’ve had enough of all your domineering:<br>
|
||||||
|
maybe it’s time we put you on a bus!<br>
|
||||||
|
Nah, I’m just joking. All I’ve said’s refutable.<br>
|
||||||
|
But the boys, we mean this next bit, all of us,<br>
|
||||||
|
so stop me Isla if this isn’t suitable<br>
|
||||||
|
but honestly we think your mum is beautiful.<br>
|
||||||
|
|
||||||
|
Alas, I have to bring an end to this rhyme.<br>
|
||||||
|
I know it wasn’t much, in our defence,<br>
|
||||||
|
the fact you used ChatGPT’s a crime.<br>
|
||||||
|
I hope I’ve not caused over much offence<br>
|
||||||
|
don’t worry, that is it, I’ve said my bit,<br>
|
||||||
|
so I’ll turn from the ladies to the gents.<br>
|
||||||
|
Yeah, don’t look away now, we wrote this shit!<br>
|
||||||
|
I see you looking at your laces, Chris!<br>
|
||||||
|
Wit without real goodwill is not legit,<br>
|
||||||
|
so boys, don’t send sincerity to piss!<br>
|
||||||
|
Why did God say he’d take our hearts of stone<br>
|
||||||
|
and give us hearts of flesh? For this, for this!<br>
|
||||||
|
Here is flesh of our flesh, bone of our bone;<br>
|
||||||
|
love, and love nothing more but God alone.<br>
|
||||||
108
src/content/blog/2024/03/30/easter.md
Normal file
108
src/content/blog/2024/03/30/easter.md
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
---
|
||||||
|
title: Why Easter is the best week of the year
|
||||||
|
description: >-
|
||||||
|
Based on a talk given to my colleagues at
|
||||||
|
<a href="https://www.scottlogic.co.uk">Scott Logic</a> for Maundy
|
||||||
|
Thursday, 2024.
|
||||||
|
pubDate:
|
||||||
|
year: 2024
|
||||||
|
month: 03
|
||||||
|
day: 30
|
||||||
|
---
|
||||||
|
|
||||||
|
As you might have noticed, it is Easter this week! So I'd like to take five or
|
||||||
|
five minutes of your time to share why I – and about two billion other humans
|
||||||
|
going about the place just now – think Easter is the best week of the year. And
|
||||||
|
it's got something to do with a special Christian ritual called Communion.
|
||||||
|
|
||||||
|
Communion, at its heart, is about as simple a ritual as you can get. You get
|
||||||
|
together with a bunch of other people. You share some bread, and you share some
|
||||||
|
wine.
|
||||||
|
|
||||||
|
And it’s because of this ritual that so many people regard Easter as the best
|
||||||
|
week of the year. I want to explain to you why that is, and more than that, I
|
||||||
|
want to convince you that Easter is the best week of the year for you, too!
|
||||||
|
|
||||||
|
If you’ve passed by _The Hub_ at the top of Johnstone Terrace here in
|
||||||
|
Edinburgh recently, you might have notice the banner which is draped over
|
||||||
|
the railings just now – reading, ‘RITUALS THAT UNITE US.’
|
||||||
|
|
||||||
|
Now, that might seem like an odd idea. But wouldn’t that be great, if we
|
||||||
|
actually had a ritual which could unite us? Because the world could surely do
|
||||||
|
with a bit more unity right now. The world seems so divided, and sometimes it
|
||||||
|
seems like there’s no hope for real unity.
|
||||||
|
|
||||||
|
We can see that in our politics. We’re divided about foreign policy, about
|
||||||
|
taxation policy, about trade policy, about environmental policy.
|
||||||
|
|
||||||
|
And the conflicts that we have in this country seem pretty trivial when we
|
||||||
|
remember the conflicts that are playing out in other parts of the world right
|
||||||
|
now. In Israel and Gaza. In Sudan. In Russia and Ukraine.
|
||||||
|
|
||||||
|
And there’s plenty of conflict happening on the small scale, too. Often it’s the
|
||||||
|
smallest-scale conflicts which hurt us the most deeply. Your landlord pushes you
|
||||||
|
around. That friend you trusted like no-one else in the world lets you down. The
|
||||||
|
partner or spouse you loved like no-one else in the world – you end up fighting.
|
||||||
|
|
||||||
|
It’s possible that you’re going to be reading this right now with a heavy heart
|
||||||
|
because of a broken relationship in their life. And doesn’t that hurt more than
|
||||||
|
anything else we know?
|
||||||
|
|
||||||
|
When the world is groaning so heavily under the weight of conflict, and some
|
||||||
|
banner on _The Hub_ tells us a ritual can unite us, that seems so out of
|
||||||
|
proportion to the scale of the problem, doesn’t it? What can a ritual do? A bit
|
||||||
|
of old superstition? An excuse to divide people, maybe – what can a ritual do
|
||||||
|
to unite us?
|
||||||
|
|
||||||
|
Well, two thousand years ago, a man had a meal with his friends. Together, they
|
||||||
|
shared a meal of bread and wine – which, in that time and place, was the most
|
||||||
|
ordinary meal imaginable.
|
||||||
|
|
||||||
|
And yet, in that most ordinary event imaginable, something was happening which
|
||||||
|
was totally unimaginable. As this man, Jesus, shared the elements of this meal,
|
||||||
|
he made some extraordinary statements about what he was doing: ‘take, eat, this
|
||||||
|
is my body’ – ‘drink this, all of you; this is my blood of the new covenant.’
|
||||||
|
(The word ‘covenant’ means a promise.)
|
||||||
|
|
||||||
|
He told them he wasn’t just giving them bread and wine, he was giving his body
|
||||||
|
and his blood, and a promise.
|
||||||
|
|
||||||
|
Before Jesus ate another meal, he was flogged and nailed to a cross. His blood
|
||||||
|
was spilt and his body broken, even to death.
|
||||||
|
|
||||||
|
And yet, that wasn’t the end of the Easter story. Because three days later,
|
||||||
|
mourners turned up at Jesus’ tomb to pay their respects, and found the tomb
|
||||||
|
empty, the stone rolled away. Then they became the first of crowds of
|
||||||
|
incredulous eyewitnesses to see Jesus, the same Jesus who was killed on a cross,
|
||||||
|
alive.
|
||||||
|
|
||||||
|
Some magic trick, right? But this matters a hell of a lot more than just some
|
||||||
|
magic trick. Because Jesus became the first person in history to prove that you
|
||||||
|
really can both have your cake and eat it. He gave his life, and lived! As a
|
||||||
|
result, we can have his life and our own. We can join with Jesus through the
|
||||||
|
ritual of Communion which he established, and thereby, through Jesus’ body, join
|
||||||
|
together with everyone else who takes part in that ritual, as one body. Then we
|
||||||
|
can start living our brand-new, full-fat, original-recipe life overflowing with
|
||||||
|
generosity where we too can both give our life to others and enjoy it ourselves.
|
||||||
|
Indeed, Jesus taught us and showed us that it’s precisely by giving our lives to
|
||||||
|
others that we get to truly live ourselves.
|
||||||
|
|
||||||
|
This is why, in spite of all the division which persists in the world today, two
|
||||||
|
billion people regard this week as the best week of the year. Two billion
|
||||||
|
people, from every nation on Earth, speaking thousands of languages, of every
|
||||||
|
age and culture and gender and race, who defy the divisions of this world to
|
||||||
|
insist on joining together as one body in Jesus.
|
||||||
|
|
||||||
|
That includes Edinburgh’s thriving and diverse Christian community, many of whom
|
||||||
|
will be taking part in the ritual of Communion at some point this week. And if
|
||||||
|
you want to hear more about how Jesus gave his life for us and why that matters
|
||||||
|
for all of us, I’m sure every church in Edinburgh will have their doors open at
|
||||||
|
some point this week and would be delighted to have you. My own church,
|
||||||
|
Bruntsfield Evangelical, will be having a service tomorrow, Good Friday at
|
||||||
|
twelve noon, and also at eleven o’ clock on Sunday – I’d especially recommend this
|
||||||
|
one if you’re new to church or haven’t been in a while. You’d be very welcome to
|
||||||
|
join me there!
|
||||||
|
|
||||||
|
Because Jesus’ new covenant, his promise to all of us, is that in an apparently
|
||||||
|
hopelessly divided world, there exists real hope for unity. And that’s why
|
||||||
|
Easter is the best week of the year.
|
||||||
19
src/content/config.ts
Normal file
19
src/content/config.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { defineCollection, z } from 'astro:content';
|
||||||
|
|
||||||
|
const dateSchema = z.object({
|
||||||
|
year: z.number(),
|
||||||
|
month: z.number(),
|
||||||
|
day: z.number(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const blog = defineCollection({
|
||||||
|
type: 'content',
|
||||||
|
schema: z.object({
|
||||||
|
title: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
pubDate: dateSchema,
|
||||||
|
updatedDate: z.optional(dateSchema),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const collections = { blog };
|
||||||
2
src/env.d.ts
vendored
Normal file
2
src/env.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/// <reference path="../.astro/types.d.ts" />
|
||||||
|
/// <reference types="astro/client" />
|
||||||
47
src/layouts/BlogPost.astro
Normal file
47
src/layouts/BlogPost.astro
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
import type { CollectionEntry } from 'astro:content';
|
||||||
|
import BaseHead from '../components/BaseHead.astro';
|
||||||
|
import FormattedDate from '../components/FormattedDate.astro';
|
||||||
|
|
||||||
|
type Props = CollectionEntry<'blog'>['data'];
|
||||||
|
|
||||||
|
const { title, description, pubDate, updatedDate } = Astro.props;
|
||||||
|
|
||||||
|
const canonicalUrl = new URL(Astro.url.pathname, Astro.site);
|
||||||
|
|
||||||
|
const pubDateStr = `${pubDate.year}-${pubDate.month}-${pubDate.day}`;
|
||||||
|
const updatedDateStr = updatedDate ?
|
||||||
|
`${updatedDate.year}-${updatedDate.month}-${updatedDate.day}`
|
||||||
|
: pubDateStr;
|
||||||
|
---
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<BaseHead title={`${title} | joeac’s blog`} description={description} />
|
||||||
|
<link rel="stylesheet" href="/css/blog.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<article class="h-entry">
|
||||||
|
<aside>
|
||||||
|
<p>This is a blog post by <a class="p-author h-card" href="/">Joe Carstairs</a></p>
|
||||||
|
{ updatedDate
|
||||||
|
? (
|
||||||
|
<p>Updated: <FormattedDate date={updatedDateStr} className="dt-updated"/></p>
|
||||||
|
<p>Originally published: <FormattedDate date={pubDateStr} className="dt-published"/></p>
|
||||||
|
) : <p>Published: <FormattedDate date={pubDateStr} className="dt-published"/></p>
|
||||||
|
}
|
||||||
|
<p>Go back to his <a href="/blog">blog</a> if you like.</p>
|
||||||
|
<p><a class="u-url uid" href={canonicalUrl}>Permalink</a></p>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<h1 class="h-name">{title}</h1>
|
||||||
|
|
||||||
|
<p class="p-summary" set:html={description} />
|
||||||
|
|
||||||
|
<div class="e-content">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
17
src/layouts/Page.astro
Normal file
17
src/layouts/Page.astro
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
import BaseHead from "../components/BaseHead.astro";
|
||||||
|
|
||||||
|
const { title, description } = Astro.props;
|
||||||
|
---
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-GB">
|
||||||
|
<head>
|
||||||
|
<BaseHead title={title} description={description} />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<slot />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
20
src/pages/blog/[...slug].astro
Normal file
20
src/pages/blog/[...slug].astro
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
import { type CollectionEntry, getCollection } from 'astro:content';
|
||||||
|
import BlogPost from '../../layouts/BlogPost.astro';
|
||||||
|
|
||||||
|
export async function getStaticPaths() {
|
||||||
|
const posts = await getCollection('blog');
|
||||||
|
return posts.map((post) => ({
|
||||||
|
params: { slug: post.slug },
|
||||||
|
props: post,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
type Props = CollectionEntry<'blog'>;
|
||||||
|
|
||||||
|
const post = Astro.props;
|
||||||
|
const { Content } = await post.render();
|
||||||
|
---
|
||||||
|
|
||||||
|
<BlogPost {...post.data}>
|
||||||
|
<Content />
|
||||||
|
</BlogPost>
|
||||||
17
src/pages/blog/index.astro
Normal file
17
src/pages/blog/index.astro
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
import BaseHead from '../../components/BaseHead.astro';
|
||||||
|
import { SITE_TITLE, SITE_DESCRIPTION } from '../../consts';
|
||||||
|
import BlogFeed from '../../components/BlogFeed.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<BaseHead title={SITE_TITLE} description={SITE_DESCRIPTION} />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<BlogFeed headingLevel={1} />
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
14
src/pages/error.astro
Normal file
14
src/pages/error.astro
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
import Page from '../layouts/Page.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<Page title="Got lost?" description="Error page for Joe's personal website">
|
||||||
|
<main>
|
||||||
|
<h1>Got lost?</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If you’re on this page, something’s probably gone wrong. Try going to
|
||||||
|
my <a href="/">homepage</a> instead.
|
||||||
|
</p>
|
||||||
|
</main>
|
||||||
|
</Page>
|
||||||
11
src/pages/index.astro
Normal file
11
src/pages/index.astro
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
import BlogFeed from '../components/BlogFeed.astro';
|
||||||
|
import Me from '../components/Me.astro';
|
||||||
|
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
|
||||||
|
import Page from '../layouts/Page.astro';
|
||||||
|
---
|
||||||
|
|
||||||
|
<Page title={SITE_TITLE} description={SITE_DESCRIPTION}>
|
||||||
|
<Me />
|
||||||
|
<BlogFeed hideAuthor />
|
||||||
|
</Page>
|
||||||
17
src/pages/rss.xml.js
Normal file
17
src/pages/rss.xml.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import rss from '@astrojs/rss';
|
||||||
|
import { getCollection } from 'astro:content';
|
||||||
|
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
|
||||||
|
|
||||||
|
export async function GET(context) {
|
||||||
|
const posts = await getCollection('blog');
|
||||||
|
return rss({
|
||||||
|
title: SITE_TITLE,
|
||||||
|
description: SITE_DESCRIPTION,
|
||||||
|
site: context.site,
|
||||||
|
items: posts.map((post) => ({
|
||||||
|
...post.data,
|
||||||
|
link: `/blog/${post.slug}/`,
|
||||||
|
pubDate: new Date(post.data.pubDate.year, post.data.pubDate.month - 1, post.data.pubDate.day),
|
||||||
|
})),
|
||||||
|
});
|
||||||
|
}
|
||||||
6
tsconfig.json
Normal file
6
tsconfig.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"compilerOptions": {
|
||||||
|
"strictNullChecks": true
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user