Astro initial commit

This commit is contained in:
Joe Carstairs
2024-03-30 16:32:17 +00:00
parent 9cb047768f
commit 261d89ebed
38 changed files with 7885 additions and 804 deletions

21
.gitignore vendored Normal file
View 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
View 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
View File

@@ -0,0 +1,4 @@
{
"recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"],
"unwantedRecommendations": []
}

11
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

View File

@@ -1,4 +1,5 @@
# personal-website
Joe Carstairs' personal website
## Invalidating the CloudFront cache

9
astro.config.mjs Normal file
View 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()],
});

View File

@@ -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>Hariris Sapiens on Religion | joeacs 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">Hararis <i>Sapiens</i> on Religion</h1>
<p class="p-summary">
In which I discuss why I think Hararis characterisation of religion
is inadequate because its too materialistic.
</p>
<div class="e-content">
<p>
Ive been slowly re-reading Yuval Noah Hararis 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>
Ive 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 heres 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 Hararis 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, its 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 wont be surprised at which
ones Im 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 Hararis 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>

View File

@@ -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 | joeacs 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 werent 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 clubs 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 Im sure.<br>
Now none of us can claim to be a Burns,<br>
Im no poetic master, still, Ill have a punt,<br>
though lets be clear, Ill do it on my terms.<br>
Ive everywhere avoided being blunt -<br>
politeness matters more than any schema -<br>
but it is hard when Islas such a cunt.<br>
It was a challenge to produce a terza rima<br>
I could recite withouten snoring;<br>
youve been so stiff I thought youse had oedema.<br>
The bother is this year is youll 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, Ive had to try!<br>
At least it cant be worse than the reply.<br>
</p>
<p>
Ill start with Audrey, the clubs senior member,<br>
for if theres something that I say which disconcerts her,<br>
its fine: the poor old girl, she wont remember.<br>
She likes to let us think shes a hard worker<br>
but were electing a third social sec…<br>
its pretty clear shes 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 Committees fickle trickles.<br>
Her modus operandi: <em>you cant rush art.</em><br>
Her reimbursements programmes going great;<br>
any day now, shell maybe even start.<br>
She cannot walk without Audrey, her mate:<br>
I wonder when theyre 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 ones 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>
Datings 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 hes one of Dantes demons…<br>
I guess its back to posters of Harry Styles.<br>
One day youll get a decent boy, keep dreamin;<br>
somewhere there waits a handsome Mr Collier.<br>
Hopefully when she meets him shell no be steamin.<br>
Hannah, Im not sure why you chose to maul your<br>
poor skeleton at Subway (shes 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 eer been seen?<br>
The energy she has is frankly wild.<br>
Ive 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 neer been worse defiled.<br>
She uses what her Maker has endowed her<br>
with: her recorder skills are off the charts;<br>
youse think Im joking, but I wouldnt 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, youll 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 wont deny I think its rather queer<br>
the things you do with chickpeas, but no matter.<br>
Youre keen, youre quick, youre cool, that much is clear.<br>
In fact, I think youd 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>
Youre keen for social sec. Youd suit the role<br>
because… Im not quite sure, its embdys 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 fronts bored out his skull.<br>
And since I mentioned Joe I hate to spoil<br>
it for you but youve got the inferior Joe,<br>
by Jove, no joke, its Jock heres got the style!<br>
Nah, write the boy a sonnet, get in the flow,<br>
Whatever you producell beat by thrice<br>
your Masters thesis. Whatd you got to show<br>
for months of hunting for the butterflies?<br>
There werent any. Oh, and have some sense,<br>
cos Ive heard rumours I assume theyre lies <br>
youve called yourself the poet in residence.<br>
You know you cant compete, drop the pretence.<br>
</p>
<p>
Tereza was our gear sec for last year.<br>
She helped herself to stuff: thats 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, shes not a natural.<br>
Shes 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 neer be quenched.<br>
Claims shes a pharmacist? So shes a dealer.<br>
Need some pills in a pinch? You call, shes 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, youve 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 Isaacs, couldve eer predicted<br>
youd drop the Eng for creative writing!<br>
now thats what I would call a self-inflicted<br>
inflection point! It must be quite enlightening,<br>
but that doesnt excuse when you give us an earful.<br>
The blood boils in our veins, the rage heightening,<br>
and youre an American, that makes me fearful.<br>
Whats 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, shes not here? Abandoned ship?<br>
She says shes informatics: so shes 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 hasnt she been on another club trip?<br>
Were cruel to focus on this list of vice;<br>
the fact remains: shes 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 didnt 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 names so irredeemably fucked<br>
theyve had to ditch the brand once and for all.<br>
Theres one lassie who I need not instruct<br>
What, these days, the Royal Bank is called<br>
cos NatWests nasty history of scandal<br>
didnt 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>
thats how it is, is it? All right, I see.<br>
</p>
<p>
Now, coming all the way from Glenmore Lodge,<br>
its Ellies turn! We have done what we can,<br>
although Im scared what shell put in my squash.<br>
She wasnt into Benji, but listen man,<br>
youre lucky that you dodged her drunken benders.<br>
Youll wake up in a tent in Kyrgystan,<br>
as for how you got there, no-one remembers,<br>
and if youd known youd be sleeping next to Ellie,<br>
you wouldve brought some fucking ear defenders.<br>
Shell 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>
Shes always at her Mountain Leader training,<br>
practicing her night nav in the locale,<br>
pursuing QMDs - unless its raining.<br>
But some water should not scare our gal!<br>
Shes 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>
Youths for the losers, lets get you a real man,<br>
mature and rugged, but kind and astute?<br>
Just make sure hes 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, its been like getting stones to bleed,<br>
but in Isla Burslems case weve 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 its quite the screed!<br>
Ill 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, hes disappointing, but on track.<br>
Whats he up to Isla: seven minutes? neat!<br>
Despite that, he is never holding back<br>
your blossoming romance with Dr Peat.<br>
Dont deny it, that launch was pretty hard!<br>
Its fifth base next: thats photos of his feet.<br>
Its fair to say her reputations marred.<br>
We all regret that we did once anoint<br>
her President: her premierships ill-starred.<br>
Hey - youre meant to be in charge of this joint!<br>
Youre seldom seen cos of the mountaineering<br>
meets that youre always on. Youd made your point<br>
before you chose to go off disappearing<br>
to <em>New Zealand</em>… we get the message! Plus<br>
weve had enough of all your domineering:<br>
maybe its time we put you on a bus!<br>
Nah, Im just joking. All Ive saids refutable.<br>
But the boys, we mean this next bit, all of us,<br>
so stop me Isla if this isnt 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 wasnt much, in our defence,<br>
the fact you used ChatGPTs a crime.<br>
I hope Ive not caused over much offence<br>
dont worry, that is it, Ive said my bit,<br>
so Ill turn from the ladies to the gents.<br>
Yeah, dont 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, dont send sincerity to piss!<br>
Why did God say hed 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>

View File

@@ -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 | joeacs 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 its 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 youve 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 wouldnt 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 theres no hope for real unity.
</p>
<p>
We can see that in our politics. Were 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 theres plenty of conflict happening on the small scale, too. Often its 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>
Its possible that youre going to be reading this right now with a heavy heart
because of a broken relationship in their life. And doesnt 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, doesnt 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 wasnt 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 wasnt 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 its 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 Edinburghs 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, Im 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 Id especially recommend this
one if youre new to church or havent been in a while. Youd 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 thats why
Easter is the best week of the year.
</p>
</div>
</article>
</body>
</html>

View File

@@ -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">
Hararis <i>Sapiens</i> on Religion
</a>
</li>
</ul>
</li>
</ul>
</section>
</body>
</html>

View File

@@ -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 youre on this page, somethings probably gone wrong. Try going to
my <a href="/">homepage</a> instead.
</p>
</section>
</body>
</html>

View File

@@ -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>. Im 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>
Im 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">
Hararis <i>Sapiens</i> on Religion
</a>
</li>
</ul>
</li>
</ul>
</section>
</body>
</html>

6979
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

19
package.json Normal file
View 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"
}
}

View File

@@ -5,8 +5,8 @@
::backdrop {
/* Set sans-serif & mono fonts */
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir,
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
"Helvetica Neue", sans-serif;
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
"Helvetica Neue", sans-serif;
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
--standard-border-radius: 5px;
@@ -28,21 +28,21 @@
@media (prefers-color-scheme: dark) {
:root,
::backdrop {
color-scheme: dark;
--bg: #212121;
--accent-bg: #2b2b2b;
--text: #dcdcdc;
--text-light: #ababab;
--accent: #ffb300;
--accent-text: var(--bg);
--code: #f06292;
--preformatted: #ccc;
--disabled: #111;
color-scheme: dark;
--bg: #212121;
--accent-bg: #2b2b2b;
--text: #dcdcdc;
--text-light: #ababab;
--accent: #ffb300;
--accent-text: var(--bg);
--code: #f06292;
--preformatted: #ccc;
--disabled: #111;
}
/* Add a bit of transparency so light media isn't so glaring in dark mode */
img,
video {
opacity: 0.8;
opacity: 0.8;
}
}
@@ -164,19 +164,19 @@ h3 {
/* Reduce header size on mobile */
@media only screen and (max-width: 720px) {
h1 {
font-size: 2.5rem;
font-size: 2.5rem;
}
h2 {
font-size: 2.1rem;
font-size: 2.1rem;
}
h3 {
font-size: 1.75rem;
font-size: 1.75rem;
}
h4 {
font-size: 1.25rem;
font-size: 1.25rem;
}
}
@@ -297,10 +297,10 @@ header > nav a[aria-current="page"] {
/* Reduce nav side on mobile */
@media only screen and (max-width: 720px) {
header > nav a {
border: none;
padding: 0;
text-decoration: underline;
line-height: 1;
border: none;
padding: 0;
text-decoration: underline;
line-height: 1;
}
}
@@ -326,9 +326,9 @@ aside {
/* Make aside full-width on mobile */
@media only screen and (max-width: 720px) {
aside {
width: 100%;
float: none;
margin-inline-start: 0;
width: 100%;
float: none;
margin-inline-start: 0;
}
}
@@ -447,7 +447,7 @@ textarea:not([cols]) {
/* Add arrow to drop-down */
select:not([multiple]) {
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-size: 5px 5px, 5px 5px;
background-repeat: no-repeat;
@@ -512,7 +512,7 @@ input[type="radio"]:checked::after {
textarea,
select,
input {
width: 100%;
width: 100%;
}
}
@@ -583,7 +583,7 @@ cite {
}
dt {
color: var(--text-light);
color: var(--text-light);
}
/* Use mono font for code elements */
@@ -663,8 +663,8 @@ dialog::backdrop {
@media only screen and (max-width: 720px) {
dialog {
max-width: 100%;
margin: auto 1em;
max-width: 100%;
margin: auto 1em;
}
}

View File

@@ -5,13 +5,13 @@
@media (min-width: 48rem) {
.h-card {
display: flex;
gap: 1rem;
align-items: center;
display: flex;
gap: 1rem;
align-items: center;
}
.u-photo {
margin: 0;
margin: 0;
}
}

View File

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 949 KiB

View File

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 949 KiB

View 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)} />

View 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>

View 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
View 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>. Im 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>
Im 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
View File

@@ -0,0 +1,2 @@
export const SITE_TITLE = 'Joe Carstairs';
export const SITE_DESCRIPTION = 'Joes personal website.';

View File

@@ -0,0 +1,77 @@
---
title: Hararis Sapiens on Religion
description: >-
In which I discuss why I think Hararis characterisation of religion
is inadequate because its too materialistic.
pubDate:
year: 2024
month: 01
day: 14
---
Ive been slowly re-reading Yuval Noah Hararis 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.
Ive 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 heres 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 Hararis 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, its 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 wont be surprised at which
ones Im 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 Hararis 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.

View 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 werent 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 clubs 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 Im sure.<br>
Now none of us can claim to be a Burns,<br>
Im no poetic master, still, Ill have a punt,<br>
though lets be clear, Ill do it on my terms.<br>
Ive everywhere avoided being blunt -<br>
politeness matters more than any schema -<br>
but it is hard when Islas such a cunt.<br>
It was a challenge to produce a terza rima<br>
I could recite withouten snoring;<br>
youve been so stiff I thought youse had oedema.<br>
The bother is this year is youll 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, Ive had to try!<br>
At least it cant be worse than the reply.<br>
Ill start with Audrey, the clubs senior member,<br>
for if theres something that I say which disconcerts her,<br>
its fine: the poor old girl, she wont remember.<br>
She likes to let us think shes a hard worker<br>
but were electing a third social sec…<br>
its pretty clear shes 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 Committees fickle trickles.<br>
Her modus operandi: <em>you cant rush art.</em><br>
Her reimbursements programmes going great;<br>
any day now, shell maybe even start.<br>
She cannot walk without Audrey, her mate:<br>
I wonder when theyre 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 ones 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>
Datings 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 hes one of Dantes demons…<br>
I guess its back to posters of Harry Styles.<br>
One day youll get a decent boy, keep dreamin;<br>
somewhere there waits a handsome Mr Collier.<br>
Hopefully when she meets him shell no be steamin.<br>
Hannah, Im not sure why you chose to maul your<br>
poor skeleton at Subway (shes 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 eer been seen?<br>
The energy she has is frankly wild.<br>
Ive 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 neer been worse defiled.<br>
She uses what her Maker has endowed her<br>
with: her recorder skills are off the charts;<br>
youse think Im joking, but I wouldnt 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, youll 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 wont deny I think its rather queer<br>
the things you do with chickpeas, but no matter.<br>
Youre keen, youre quick, youre cool, that much is clear.<br>
In fact, I think youd make a damn good faffer:<br>
swoop down on distilleries like the Luftwaffe.<br>
And now we come to our girl Emily Topness!<br>
Youre keen for social sec. Youd suit the role<br>
because… Im not quite sure, its embdys 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 fronts bored out his skull.<br>
And since I mentioned Joe I hate to spoil<br>
it for you but youve got the inferior Joe,<br>
by Jove, no joke, its Jock heres got the style!<br>
Nah, write the boy a sonnet, get in the flow,<br>
Whatever you producell beat by thrice<br>
your Masters thesis. Whatd you got to show<br>
for months of hunting for the butterflies?<br>
There werent any. Oh, and have some sense,<br>
cos Ive heard rumours I assume theyre lies <br>
youve called yourself the poet in residence.<br>
You know you cant compete, drop the pretence.<br>
Tereza was our gear sec for last year.<br>
She helped herself to stuff: thats 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, shes not a natural.<br>
Shes 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 neer be quenched.<br>
Claims shes a pharmacist? So shes a dealer.<br>
Need some pills in a pinch? You call, shes 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, youve 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 Isaacs, couldve eer predicted<br>
youd drop the Eng for creative writing!<br>
now thats what I would call a self-inflicted<br>
inflection point! It must be quite enlightening,<br>
but that doesnt excuse when you give us an earful.<br>
The blood boils in our veins, the rage heightening,<br>
and youre an American, that makes me fearful.<br>
Whats 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, shes not here? Abandoned ship?<br>
She says shes informatics: so shes 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 hasnt she been on another club trip?<br>
Were cruel to focus on this list of vice;<br>
the fact remains: shes 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 didnt 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 names so irredeemably fucked<br>
theyve had to ditch the brand once and for all.<br>
Theres one lassie who I need not instruct<br>
What, these days, the Royal Bank is called<br>
cos NatWests nasty history of scandal<br>
didnt 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>
thats how it is, is it? All right, I see.<br>
Now, coming all the way from Glenmore Lodge,<br>
its Ellies turn! We have done what we can,<br>
although Im scared what shell put in my squash.<br>
She wasnt into Benji, but listen man,<br>
youre lucky that you dodged her drunken benders.<br>
Youll wake up in a tent in Kyrgystan,<br>
as for how you got there, no-one remembers,<br>
and if youd known youd be sleeping next to Ellie,<br>
you wouldve brought some fucking ear defenders.<br>
Shell 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>
Shes always at her Mountain Leader training,<br>
practicing her night nav in the locale,<br>
pursuing QMDs - unless its raining.<br>
But some water should not scare our gal!<br>
Shes 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>
Youths for the losers, lets get you a real man,<br>
mature and rugged, but kind and astute?<br>
Just make sure hes 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, its been like getting stones to bleed,<br>
but in Isla Burslems case weve 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 its quite the screed!<br>
Ill 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, hes disappointing, but on track.<br>
Whats he up to Isla: seven minutes? neat!<br>
Despite that, he is never holding back<br>
your blossoming romance with Dr Peat.<br>
Dont deny it, that launch was pretty hard!<br>
Its fifth base next: thats photos of his feet.<br>
Its fair to say her reputations marred.<br>
We all regret that we did once anoint<br>
her President: her premierships ill-starred.<br>
Hey - youre meant to be in charge of this joint!<br>
Youre seldom seen cos of the mountaineering<br>
meets that youre always on. Youd made your point<br>
before you chose to go off disappearing<br>
to <em>New Zealand</em>… we get the message! Plus<br>
weve had enough of all your domineering:<br>
maybe its time we put you on a bus!<br>
Nah, Im just joking. All Ive saids refutable.<br>
But the boys, we mean this next bit, all of us,<br>
so stop me Isla if this isnt 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 wasnt much, in our defence,<br>
the fact you used ChatGPTs a crime.<br>
I hope Ive not caused over much offence<br>
dont worry, that is it, Ive said my bit,<br>
so Ill turn from the ladies to the gents.<br>
Yeah, dont 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, dont send sincerity to piss!<br>
Why did God say hed 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>

View 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 its 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 youve 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 wouldnt 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 theres no hope for real unity.
We can see that in our politics. Were 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 theres plenty of conflict happening on the small scale, too. Often its 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.
Its possible that youre going to be reading this right now with a heavy heart
because of a broken relationship in their life. And doesnt 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, doesnt 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 wasnt 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 wasnt 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 its 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 Edinburghs 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, Im 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 Id especially recommend this
one if youre new to church or havent been in a while. Youd 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 thats why
Easter is the best week of the year.

19
src/content/config.ts Normal file
View 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
View File

@@ -0,0 +1,2 @@
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />

View 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} | joeacs 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
View 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>

View 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>

View 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
View 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 youre on this page, somethings probably gone wrong. Try going to
my <a href="/">homepage</a> instead.
</p>
</main>
</Page>

11
src/pages/index.astro Normal file
View 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
View 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
View File

@@ -0,0 +1,6 @@
{
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"strictNullChecks": true
}
}