update new article
This commit is contained in:
@@ -10,6 +10,10 @@ const style = css`
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-top: 0;
|
||||
}
|
||||
`;
|
||||
|
||||
export default defineComponent({
|
||||
@@ -28,9 +32,9 @@ export default defineComponent({
|
||||
{blogEntries.result.value?.map(_ => (
|
||||
<li key={_.slug}>
|
||||
<div class="entry">
|
||||
<RouterLink to={{ name: 'DjBlogEntry', params: { slug: _.slug }}}>{ _.title }</RouterLink>
|
||||
<span>-</span>
|
||||
<time datetime={ _.createdAt }>{ new Date(_.createdAt).toLocaleDateString() }</time>
|
||||
<span>-</span>
|
||||
<RouterLink to={{ name: 'DjBlogEntry', params: { slug: _.slug }}}>{ _.title }</RouterLink>
|
||||
</div>
|
||||
</li>
|
||||
)) ?? <li>Blog posts loading...</li>}
|
||||
|
||||
@@ -28,27 +28,32 @@ export const routes: RouteRecordRaw[] = [
|
||||
];
|
||||
|
||||
const styles = css`
|
||||
body {
|
||||
height: 100svh;
|
||||
}
|
||||
|
||||
.dj-blog-root {
|
||||
width: 100vw;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
margin: auto;
|
||||
width: 800px;
|
||||
|
||||
.container {
|
||||
width: 800px;
|
||||
.dot {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.spacer {
|
||||
flex: 1;
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
footer {
|
||||
color: gray;
|
||||
width: calc(100% - 10px);
|
||||
margin-bottom: 20px;
|
||||
width: 800px;
|
||||
font-style: italic;
|
||||
padding-left: 10px;
|
||||
margin-left: 10px;
|
||||
margin-bottom: 25px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
a {
|
||||
@@ -61,11 +66,12 @@ const styles = css`
|
||||
}
|
||||
|
||||
nav {
|
||||
width: 100%;
|
||||
font-size: 40px;
|
||||
margin-bottom: 40px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
text-decoration: none;
|
||||
text-align: right;
|
||||
width: 100%;
|
||||
|
||||
a, a:visited {
|
||||
color: var(--dj-palette3);
|
||||
@@ -73,11 +79,16 @@ const styles = css`
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
width: 100%;
|
||||
|
||||
.container {
|
||||
width: calc(100% - 20px);
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.dj-title {
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@@ -98,14 +109,14 @@ export default defineComponent({
|
||||
<>
|
||||
<div ref={carrier} class="tooltip-carrier" />
|
||||
<div class="dj-blog-root">
|
||||
<nav>
|
||||
<DjTooltip tooltip="flog, clog, bog, frog, cog, log, grog, fog, snog...">
|
||||
<RouterLink to={{ name: 'DjBlogMain' }}>
|
||||
dj blog
|
||||
</RouterLink>
|
||||
</DjTooltip>
|
||||
</nav>
|
||||
<div class="container">
|
||||
<nav>
|
||||
<DjTooltip tooltip="flog, clog, bog, frog, cog, log, grog, fog, snog...">
|
||||
<RouterLink to={{ name: 'DjBlogMain' }}>
|
||||
dj blog
|
||||
</RouterLink>
|
||||
</DjTooltip>
|
||||
</nav>
|
||||
<RouterView>
|
||||
{{
|
||||
default: ({ Component }: { Component: VNode }) => (Component &&
|
||||
@@ -120,11 +131,11 @@ export default defineComponent({
|
||||
}}
|
||||
</RouterView>
|
||||
</div>
|
||||
<div class="spacer" />
|
||||
<hr />
|
||||
<footer>
|
||||
<div class="bottom">
|
||||
<div>
|
||||
<a href="/">djledda.net</a> {new Date().getFullYear()} - <DjEmail>{() => "Contact"}</DjEmail>
|
||||
<a href="/">djledda.net</a> {new Date().getFullYear()}<span class="dot">·</span><DjEmail>{() => "Contact"}</DjEmail><span class="dot">·</span><a href="/blog/djblog.rss">RSS Feed</a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -6,7 +6,7 @@ import { addCSS, css } from "@/util.ts";
|
||||
|
||||
const styles = css`
|
||||
body {
|
||||
height: 100vh;
|
||||
height: 100svh;
|
||||
}
|
||||
|
||||
.dj-home-root {
|
||||
@@ -65,6 +65,7 @@ body {
|
||||
footer {
|
||||
margin-left: 10px;
|
||||
margin-bottom: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
|
||||
130
main.ts
130
main.ts
@@ -12,8 +12,90 @@ import { type DjAPIResult, type DjAPIResultMap } from "@/api.ts";
|
||||
|
||||
const utf8Decoder = new TextDecoder("utf-8");
|
||||
|
||||
const HOST = 'https://djledda.net';
|
||||
|
||||
const parser = new DOMParser();
|
||||
|
||||
async function getBlogEntries() {
|
||||
const paths: string[] = [];
|
||||
const contentDir = './public/blog/content/';
|
||||
for await (const dirEnt of Deno.readDir(contentDir)) {
|
||||
if (dirEnt.isFile && dirEnt.name.endsWith('.html')) {
|
||||
paths.push(`${contentDir}${dirEnt.name}`);
|
||||
}
|
||||
}
|
||||
const result: DjAPIResultMap['/blog-entries'] = [];
|
||||
for (const filePath of paths) {
|
||||
const content = await Deno.readTextFile(filePath);
|
||||
const dom = parser.parseFromString(content, 'text/html');
|
||||
const metadata = {
|
||||
slug: '',
|
||||
tags: [] as string[],
|
||||
guid: '',
|
||||
title: '',
|
||||
createdAt: '',
|
||||
updatedAt: '',
|
||||
};
|
||||
const metaTags = dom.querySelectorAll('meta') as unknown as NodeListOf<HTMLMetaElement>;
|
||||
for (const metaTag of metaTags) {
|
||||
const name = metaTag.attributes.getNamedItem('name')?.value ?? '';
|
||||
const content = metaTag.attributes.getNamedItem('content')?.value ?? '';
|
||||
if (name === 'title') {
|
||||
metadata.title = content;
|
||||
} else if (name === 'tags') {
|
||||
metadata.tags = content ? content.split(",") : [];
|
||||
} else if (name === 'guid') {
|
||||
metadata.guid = content;
|
||||
} else if (name === 'slug') {
|
||||
metadata.slug = content;
|
||||
} else if (name === 'updatedAt') {
|
||||
metadata.createdAt = content;
|
||||
} else if (name === 'createdAt') {
|
||||
metadata.updatedAt = content;
|
||||
}
|
||||
}
|
||||
result.push(metadata);
|
||||
}
|
||||
result.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
||||
return result;
|
||||
}
|
||||
|
||||
async function rss() {
|
||||
const articles = await getBlogEntries();
|
||||
|
||||
return `<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>djledda's blog</title>
|
||||
<description>djledda's personal blog</description>
|
||||
<link>${ HOST }/blog</link>
|
||||
<managingEditor>dan@djledda.net (Daniel Ledda)</managingEditor>
|
||||
<image>
|
||||
<title>djledda's blog</title>
|
||||
<url>${ HOST }/favicon.png</url>
|
||||
<link>${ HOST }/blog</link>
|
||||
<description>djledda's personal blog</description>
|
||||
</image>
|
||||
<language>en-au</language>
|
||||
<copyright>${ new Date().getFullYear() } djledda.net All rights reserved</copyright>
|
||||
<lastBuildDate>${ new Date(articles.at(-1)!.updatedAt).toUTCString() }</lastBuildDate>
|
||||
<pubDate>${ new Date(articles.at(-1)!.updatedAt).toUTCString() }</pubDate>
|
||||
<ttl>1440</ttl>
|
||||
|
||||
${ articles.map(article => `<item>
|
||||
<title>${ article.title }</title>
|
||||
<link>${ HOST }/blog/${ article.slug }</link>
|
||||
<pubDate>${ new Date(article.createdAt).toUTCString() }</pubDate>
|
||||
<author>dan@djledda.net (Daniel Ledda)</author>
|
||||
<guid>${ article.guid }</guid>
|
||||
</item>
|
||||
`).join('')}
|
||||
|
||||
<atom:link href="${ HOST }/blog/djblog.rss" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>`;
|
||||
}
|
||||
|
||||
function appHeaderScript(params: { ssrContext: DjSSRContext, entryPath: string }) {
|
||||
return `
|
||||
<title>${ toValue(params.ssrContext.head.title) }</title>
|
||||
@@ -53,8 +135,6 @@ for await (const entry of siteEntries("app")) {
|
||||
sites.push(entry);
|
||||
}
|
||||
|
||||
console.log(sites);
|
||||
|
||||
async function getAPIResponse(apiReq: Request): Promise<Response> {
|
||||
let jsonResponse: DjAPIResult | { error: string } | null = null;
|
||||
let status = 200;
|
||||
@@ -102,44 +182,7 @@ async function getAPIResponse(apiReq: Request): Promise<Response> {
|
||||
result.sort((a, b) => a.titleDe.localeCompare(b.titleDe));
|
||||
jsonResponse = result;
|
||||
} else if (apiPath === "/blog-entries") {
|
||||
const paths: string[] = [];
|
||||
const contentDir = './public/blog/content/';
|
||||
for await (const dirEnt of Deno.readDir(contentDir)) {
|
||||
if (dirEnt.isFile && dirEnt.name.endsWith('.html')) {
|
||||
paths.push(`${contentDir}${dirEnt.name}`);
|
||||
}
|
||||
}
|
||||
const result: DjAPIResultMap['/blog-entries'] = [];
|
||||
for (const filePath of paths) {
|
||||
const content = await Deno.readTextFile(filePath);
|
||||
const dom = parser.parseFromString(content, 'text/html');
|
||||
const metadata = {
|
||||
slug: '',
|
||||
tags: [] as string[],
|
||||
title: '',
|
||||
createdAt: '',
|
||||
updatedAt: '',
|
||||
};
|
||||
const metaTags = dom.querySelectorAll('meta') as unknown as NodeListOf<HTMLMetaElement>;
|
||||
for (const metaTag of metaTags) {
|
||||
const name = metaTag.attributes.getNamedItem('name')?.value ?? '';
|
||||
const content = metaTag.attributes.getNamedItem('content')?.value ?? '';
|
||||
if (name === 'title') {
|
||||
metadata.title = content;
|
||||
} else if (name === 'tags') {
|
||||
metadata.tags = content ? content.split(",") : [];
|
||||
} else if (name === 'slug') {
|
||||
metadata.slug = content;
|
||||
} else if (name === 'updatedAt') {
|
||||
metadata.createdAt = content;
|
||||
} else if (name === 'createdAt') {
|
||||
metadata.updatedAt = content;
|
||||
}
|
||||
}
|
||||
result.push(metadata);
|
||||
}
|
||||
result.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
||||
jsonResponse = result;
|
||||
jsonResponse = await getBlogEntries();
|
||||
}
|
||||
|
||||
if (!jsonResponse) {
|
||||
@@ -195,6 +238,13 @@ Deno.serve({
|
||||
response = await getAPIResponse(req);
|
||||
}
|
||||
|
||||
// RSS
|
||||
if (response === null) {
|
||||
if (pathname === '/blog/djblog.rss') {
|
||||
response = new Response(await rss(), { status: 200 });
|
||||
}
|
||||
}
|
||||
|
||||
// Public/static files
|
||||
if (response === null) {
|
||||
let filepath = join(".", "public", pathname);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<meta name="createdAt" content="2025-12-20T17:54:05.000Z">
|
||||
<meta name="updatedAt" content="2025-12-20T17:54:05.000Z">
|
||||
<meta name="tags" content="">
|
||||
<meta name="guid" content="4655d2b9-0c4b-4dd7-bf95-538d36166000">
|
||||
|
||||
<article>
|
||||
<p>
|
||||
|
||||
291
public/blog/content/straightjacket-of-indecision.html
Normal file
291
public/blog/content/straightjacket-of-indecision.html
Normal file
@@ -0,0 +1,291 @@
|
||||
<meta name="title" content="The Straightjacket of Indecision">
|
||||
<meta name="slug" content="straightjacket-of-indecision">
|
||||
<meta name="createdAt" content="2026-01-18T20:00:00.000Z">
|
||||
<meta name="updatedAt" content="2026-01-18T20:00:00.000Z">
|
||||
<meta name="tags" content="">
|
||||
<meta name="guid" content="5d3b68de-35fb-48da-8caf-8f6f1f6398f5">
|
||||
|
||||
<article>
|
||||
<p>
|
||||
Over the last six or seven years living abroad in the faraway place of
|
||||
Munich, Germany, I’ve often wondered when, or even whether, I might return
|
||||
home to Melbourne, Australia. Even though I never spent much time
|
||||
contemplating my distant future, my mother certainly didn’t let me forget
|
||||
that she wished to have me back at home sooner rather than later. I'd
|
||||
listen to her talk in absolutes every return visit, “when you’re back
|
||||
next year…,” and so on. I shrugged it off as just motherly love. I'm
|
||||
in Germany, Mum, and I’m staying here for now!
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Despite this, the thought in the back of my mind that this overseas
|
||||
journey would in all likelihood be ephemeral proved to be a constant
|
||||
burden. Wherever I went, whichever decision I made, the immense doubt
|
||||
haunted me. Before the COVID pandemic, I had originally planned
|
||||
to study my Master’s, probably work a couple of years at a local
|
||||
company “in the industry”, and then return home ideally feeling fulfilled and
|
||||
satisfied. Like I had earnt some kind of imaginary certificate of
|
||||
intercultural aptitude. Secretly however, I imagined falling in love
|
||||
with a beautiful German girl and living in the idyllic Bavarian
|
||||
countryside, happily ever after, even if I was unwilling to admit it
|
||||
even to myself.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
But given the retreat of pandemic-related restrictions and regulations was
|
||||
so gradual, as were too the many changes in my life circumstances
|
||||
in-between, it never seemed like quite the right time to draw a line in the
|
||||
sand. It would seem I became the frog in boiling water.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Finally, maybe around late 2023, things seemed to have settled. I chose to
|
||||
move into my own apartment, after my roommate moved in with his
|
||||
girlfriend. It became clear to me that I would soon have to give serious
|
||||
thought as to whether I wanted to return home, or if I wanted to seriously
|
||||
commit to “being German.” The weight I was carrying was growing
|
||||
heavier, and somehow I knew this was slowing me down. I just didn't
|
||||
realise how much exactly.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In the first few years here, sure—it never made much sense to paint my
|
||||
student dorm room or invest in expensive furniture, even once I began earning a
|
||||
full-time salary—I figured I probably wouldn’t be here much longer,
|
||||
anyway. But as the years went by and the dorm rooms became my own rental
|
||||
apartments, I could feel the desire to invest in long-term commitments grow
|
||||
stronger within me. Actually bringing any of them to fruition, on the other
|
||||
hand, seemed impossible. I could hardly bring myself to buy a
|
||||
dishwasher for the longest time: moving countries could have always been
|
||||
right around the corner, so I had better not waste the money and effort.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Never knowing when I was going to leave, I froze in the face of more
|
||||
important decisions, even ones that might have promised to greatly improve
|
||||
my quality of life, and that seemed frankly banal to outsiders. It plagued
|
||||
the back of my mind when searching for the motivation to meet people or go
|
||||
on dates. What if I eventually want to go home? Will she lose interest in me
|
||||
because I’m a flight risk?
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Whenever I would meet someone in my daily life, they would inevitably
|
||||
ask me whether I would like to stay in Germany forever or if I plan to
|
||||
move home at some stage. Over the years, I learnt to come with
|
||||
pre-prepared answers that suggested I was comfortable with my
|
||||
open-ended life abroad. But I wasn’t. I felt trapped, like I couldn’t
|
||||
go anywhere. Like I couldn’t start any meaningful projects. I wanted to
|
||||
take on so much more and feel resolute in each step. But I felt
|
||||
suffocated by the idea that the rug would soon be pulled out from under
|
||||
my feet.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I did however eventually start voicing the idea that, as long as I
|
||||
don’t meet anybody here that I come to love so much that I simply must
|
||||
stay, it would be better for me to go home. That was the beginning of
|
||||
the end, I suppose, but the thought was so limp in spirit that it
|
||||
hardly made any difference in my life. Instead it was the perfect
|
||||
excuse to remain undecided: at any moment, the love of my life could
|
||||
waltz around the corner. Ironically, this straitjacket of indecision
|
||||
all but prevented me from doing anything about my bachelorhood.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Things did improve; I grew adamant that I would break down old habits
|
||||
that were once born of helplessness. I found it increasingly easier to
|
||||
“just do things,” as the chronically online say, but there was an upper
|
||||
limit to their magnitude. Such things as buying more expensive home
|
||||
furnishings or making slightly more long-term commitments became easier
|
||||
(think “one year” rather than “a couple of months”), but nonetheless I
|
||||
stillfelt tremendously stuck.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In the summer of 2025, my parents visited and stayed with me for two
|
||||
months, during which we went on many European trips alongside my daily
|
||||
life in Munich. Afterwards, I joined them on the plane ride home and
|
||||
visited Melbourne. This time, it was outside of the usual Christmas
|
||||
holiday period so as to really get a sense of how life back home had
|
||||
changed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I stayed a month, bringing the total time spent with family and friends
|
||||
to three months, which was a lot of time for me after having lived for
|
||||
so long abroad. Alhoutgh I had visited for a month almost every year,
|
||||
this time around felt a bit different. I felt like I was actually back
|
||||
home, and not just peering through the window. Maybe it was the time of
|
||||
year, maybe because of the high school reunion I attended, or maybe
|
||||
even just due to how much time had passed since COVID. Whatever it was,
|
||||
those three months made their mark. After saying our goodbyes at the
|
||||
airport, I headed to stand in line at the first security checkpoint.
|
||||
After turning the corner, I lost sight of my parents, and my heart
|
||||
sank.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For the first time in seven years, something felt wrong. I didn’t want
|
||||
to leave any more. I realised that my time in Munich was over. After
|
||||
two years of deliberating over the minutiae of my life and where I
|
||||
lived, the epiphany seemed to come in an instant. It was emotional.
|
||||
There was no logical breakthrough. No intellectual victory. I was just
|
||||
homesick. After six years, no less.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once I arrived back in Munich, everything about this charming place
|
||||
became grossly annoying overnight. The northern winter annoyed me. The
|
||||
people annoyed me. My job annoyed me. My entire surroundings were so
|
||||
fastidious that I couldn’t wait to get home. Even the German language
|
||||
that has brought me so much joy to learn, to which I effortlessly
|
||||
dedicated so much time and interest; even it became a nuisance. I
|
||||
wanted my native tongue back. I wanted effortless freedom of expression
|
||||
back. I was imprinted with a culture when I was younger and I just
|
||||
wanted it back.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Paradoxically, though, I felt fully liberated all of a sudden. Free to
|
||||
do whatever I wanted. Having made the decision to pack up and leave
|
||||
filled me with such a profound sense of direction that everything else
|
||||
was able to just slide into place, as if a circuit had been completed.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
By forfeiting many potential futures for just one that I could count
|
||||
on, the organisation of the rest of my life was able to spontaneously
|
||||
emerge. I guess I always sensed this would happen, but I seriously
|
||||
underestimated the ramifications. A cataclysmic domino effect resolved
|
||||
a hierarchy of assumptions about who I was, where I was, and what I was
|
||||
doing, running incredibly deep. Before, I was basically floundering.
|
||||
Even though I could feel that I knew what feeling I wanted out of
|
||||
life—and indeed I strove to work towards it&mash;I was
|
||||
nonetheless totally directionless. And it was painful. Not so any more.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The irony of all this is that by making this decision, I suddenly feel
|
||||
like <em>I know what I’m doing here right now</em> and can arrange the
|
||||
coming months accordingly. I feel freer that ever to date people in
|
||||
Germany and with even more intention than I did before. I feel like I
|
||||
have permission to take on any domestic projects I feel like. Isn’t
|
||||
that strange? I sure thought so. In all honesty I expected the opposite
|
||||
outcome. But now there’s a timeline: I can see how it all fits into the
|
||||
grand plan.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<p>
|
||||
There are more reasons to move home, however, than just family and
|
||||
friends, as important as they are to me. They were simply the more
|
||||
obvious tip of the iceberg, as it were.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Trying to live in two cultures at once results in a kind of purgatory,
|
||||
and I suppose I never quite committed to living in one or the other.
|
||||
But over the last few years, especially upon contemplating the
|
||||
physiological and psychological impact of learnt helplessness, it
|
||||
became clear that there was a deep desire in me to self-actualise, and
|
||||
that it should be given more serious attention. During my preteen and
|
||||
early teen years, I was a prolific user of the Adobe suite, I loved to
|
||||
draw, write stories, and produce music. I loved to make silly games and
|
||||
build worlds with atmosphere. It was here where I was completely in my
|
||||
element, and I sense deep within myself that I need to reprise these
|
||||
pursuits. Alas, it would seem I can hardly find the time (or if I am
|
||||
honest, the energy) to invest in them. I have mostly blamed this on my
|
||||
day job, but it has become increasingly obvious that I’m mostly
|
||||
being stifled simply by <em>living alone in a foreign country</em>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The purpose of a culture is apparently to obviate the need to think
|
||||
about what to do as much as possible so as to free up energy for more
|
||||
niche specialisation. Having to think about how to greet somebody, or
|
||||
what is appropriate to do in public versus in private, or even what
|
||||
amount and what type of conversation is appropriate, and with
|
||||
whom—these are all things that are imparted simply by virtue of
|
||||
growing up in a particular culture. They are acquired in similar
|
||||
fashion to language (and some might say that these two are indeed
|
||||
exactly the same thing). If it weren’t for these effortless
|
||||
assumptions, it might become an exhausting moment-by-moment decision
|
||||
making process, in perpetuity. The broader cultural context can take
|
||||
care of much of this, both in the aforementioned sense of traditions
|
||||
and customs as well as by making use of particular industrial
|
||||
specialisations, such as manufacturing and the provision of services
|
||||
and application of expertise. This way, you can focus on you, so you
|
||||
can “relax into complexity”.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The imprinting of childhood seems especially important. It's possible,
|
||||
and certainly proven in the case of language acquisition, that children
|
||||
growing up with multiple cultural contexts in parallel find the
|
||||
context-switching relatively painless and easy, if not equally as easy
|
||||
as the monoculturally reared child. These additional cultures are like
|
||||
an extra sub-context within a single culture. Being “German” is, for
|
||||
example, another social language, with its own grammar, akin to
|
||||
attending church versus going to a bar. And it, too, has multiple
|
||||
manifestations.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
But I am not a child of Germany. Neither is German my native tongue. I
|
||||
may have long been a C2 speaker, and indeed, I live my life basically
|
||||
incognito unless I explicitly mention my background—no one really
|
||||
notices I’m not from around here. Yet no matter how good my language
|
||||
skills get, this mismatch still presents as an extra layer of
|
||||
abstraction. For the programmers out there: I do not feel like I’m
|
||||
running on “bare metal” like I do back home. The extra latency becomes
|
||||
cumulatively exhausting. I’m running in an interpreter, playing life on
|
||||
hard mode, when the opportunity to compile to machine code and switch
|
||||
to normal mode (or even easy) is right at my fingertips.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I previously described my circumstances as a purgatory, and this is an
|
||||
apt word to exemplify the cultural incongruencies. The word itself is
|
||||
frequently used—but only in English speaking cultures—in a
|
||||
looser sense to refer to a state of suffering that is almost always
|
||||
temporary, before a type of finalising “decision” relieves oneself of
|
||||
it. This is not so in other languages. Whilst the word and idea of a
|
||||
purgatory do exist in German (<em>Fegefeuer</em>), they don’t in this
|
||||
metaphorical sense. Many other types of analogies, turns of phrases,
|
||||
and cultural metaphors used in everyday life don't neatly map to one
|
||||
another (even though some do, thanks to the more remotely shared
|
||||
cultural and linguistic history).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I’ve come to believe that you might have to fully relinquish one
|
||||
cultural context for another in order to remove the extra cognitive
|
||||
burden. That would entail essentially “giving up” Australia once and
|
||||
for all to stay in Germany and focus on more specialised pursuits. Upon
|
||||
reflection, I think I really did do this for a few years, whilst I was
|
||||
still enthralled by the joy of learning a new language to proficiency,
|
||||
but its novelty soon faded.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When I use my computer, I always have two keyboard layouts active,
|
||||
depending on what I’m doing. One for writing German prose and
|
||||
messaging, and another with my “native” layout for everything else. I
|
||||
originally figured this two-pronged approach would make things easier,
|
||||
but really, it's constant chaos. Forever having one foot in each door
|
||||
is the same kind of chaos.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
As such, it now seems obvious to me that I have to return to a single
|
||||
keyboard layout and go home. If I want to “relax into complexity,” then
|
||||
I must free up as much energy as possible, and in making this decision
|
||||
I can feel another entanglement of helplessness slowly unravel.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
And this time, it’s a big one.
|
||||
</p>
|
||||
</article>
|
||||
52
public/static/assets/leaf-hrule.svg
Normal file
52
public/static/assets/leaf-hrule.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="600"
|
||||
height="200"
|
||||
viewBox="0 0 158.74999 52.916668"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="leaf-hrule.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.7071068"
|
||||
inkscape:cx="137.17871"
|
||||
inkscape:cy="316.78383"
|
||||
inkscape:window-width="1266"
|
||||
inkscape:window-height="1393"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g5" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><g
|
||||
id="g5"
|
||||
style="fill:#000000;stroke:#000000;stroke-opacity:1;stroke-width:1.3;stroke-dasharray:none;fill-opacity:1"><path
|
||||
id="path2-0"
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
|
||||
d="M 103.36799,2.0313828 C 97.919154,6.8995967 91.471199,11.753746 84.827928,14.831058 c -4.362977,1.802096 -7.940465,3.040049 -11.394641,4.403503 -3.454176,1.363449 -6.340528,3.057676 -8.267644,6.14033 -5.22085,8.35138 -2.842185,15.068204 -2.842185,18.481449 0,1.724681 -0.525164,2.55968 -1.088384,3.071689 -0.281623,0.256023 -0.581502,0.429253 -0.853178,0.571351 -0.271683,0.142059 -0.508375,0.220652 -0.726356,0.438636 l -0.312575,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.861888,0.72737 0.325042,0.274708 0.981643,0.921464 1.438104,1.018694 0.121413,-0.33841 0.149273,-0.378664 0.20343,-0.574424 0.08654,-0.303399 0.232353,-0.750599 0.467589,-1.236469 0.470475,-0.971733 1.282748,-2.076821 2.688155,-2.56133 1.994639,-0.687658 5.353958,-1.426431 8.946599,-2.343299 4.779239,-1.219641 10.22039,-3.069062 15.235023,-8.379103 3.958164,-4.191327 5.964278,-9.648825 8.06647,-14.648789 2.546547,-6.056845 4.690947,-13.8886065 5.770337,-18.4960119 z m -1.6799,2.6207028 C 99.213484,8.7236849 95.38472,13.701658 91.668482,16.58763 87.307543,19.974273 83.212921,21.794112 74.737857,30.305127 70.346392,34.715218 65.920596,41.07391 62.74313,46.05384 c 0.225405,-0.579954 0.367657,-1.301376 0.367657,-2.1975 0,-3.821879 -2.329429,-9.983672 2.722028,-18.064078 1.809189,-2.894025 4.502799,-4.488442 7.889987,-5.825454 3.387197,-1.337011 6.985264,-2.582493 11.406427,-4.408627 C 91.756327,12.8209 98.71462,7.200396 101.68809,4.6520856 Z m 0.41378,0.8876305 c -0.71109,2.8413561 -2.647102,8.5402999 -5.229556,14.6825349 -2.098514,4.991206 -4.085673,10.360534 -7.913256,14.413589 -4.882789,5.17043 -10.123643,6.948053 -14.857624,8.156201 -3.576477,0.912731 -6.922349,1.642756 -9.008606,2.362003 -0.373131,0.128561 -0.710252,0.293891 -1.014844,0.485256 3.110097,-4.803562 7.240508,-10.637834 11.291177,-14.705694 8.418826,-8.454539 12.395209,-10.186264 16.846328,-13.642933 3.719463,-2.888477 7.372902,-7.7041657 9.886381,-11.7509569 z"
|
||||
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /><path
|
||||
id="path2-0-3"
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
|
||||
d="M 52.941073,2.0313827 C 47.492246,6.8995966 41.044291,11.753746 34.40102,14.831058 c -4.362977,1.802096 -7.940465,3.040049 -11.394641,4.403503 -3.454176,1.363449 -6.340528,3.057676 -8.267644,6.14033 -5.22085,8.35138 -2.842185,15.068204 -2.842185,18.481449 0,1.724681 -0.525164,2.55968 -1.088384,3.071689 -0.281623,0.256023 -0.581502,0.429253 -0.853178,0.571351 -0.271683,0.142059 -0.508375,0.220652 -0.726356,0.438636 l -0.312575,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.861888,0.72737 0.325042,0.274708 0.981643,0.921464 1.438104,1.018694 0.121413,-0.33841 0.149273,-0.378664 0.20343,-0.574424 0.08654,-0.303399 0.232353,-0.750599 0.467589,-1.236469 0.470475,-0.971733 1.282748,-2.076821 2.688155,-2.56133 1.994639,-0.687658 5.353958,-1.426431 8.946599,-2.343299 4.779239,-1.219641 10.22039,-3.069062 15.235023,-8.379103 3.958164,-4.191327 5.964278,-9.648825 8.06647,-14.648789 2.546551,-6.056845 4.690938,-13.8886066 5.770328,-18.496012 z m -1.6799,2.6207028 C 48.786576,8.7236848 44.957812,13.701658 41.241574,16.58763 36.880635,19.974273 32.786013,21.794112 24.310949,30.305127 19.919484,34.715218 15.493688,41.07391 12.316222,46.05384 c 0.225405,-0.579954 0.367657,-1.301376 0.367657,-2.1975 0,-3.821879 -2.329429,-9.983672 2.722028,-18.064078 1.809189,-2.894025 4.502799,-4.488442 7.889987,-5.825454 3.387197,-1.337011 6.985264,-2.582493 11.406427,-4.408627 C 41.329419,12.8209 48.287712,7.2003959 51.261173,4.6520855 Z m 0.41378,0.8876305 c -0.711087,2.8413561 -2.647093,8.5403 -5.229547,14.682535 -2.098514,4.991206 -4.085673,10.360534 -7.913256,14.413589 -4.882789,5.17043 -10.123643,6.948053 -14.857624,8.156201 -3.576477,0.912731 -6.922349,1.642756 -9.008606,2.362003 -0.373131,0.128561 -0.710252,0.293891 -1.014844,0.485256 3.110097,-4.803562 7.240508,-10.637834 11.291177,-14.705694 8.418826,-8.454539 12.395209,-10.186264 16.846328,-13.642933 3.719463,-2.888477 7.372902,-7.7041657 9.886372,-11.750957 z"
|
||||
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /><path
|
||||
id="path2-0-0"
|
||||
style="baseline-shift:baseline;display:inline;overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.929481;stroke-dasharray:none;stroke-opacity:1;enable-background:accumulate;stop-color:#000000"
|
||||
d="m 153.79494,2.0313831 c -5.44882,4.868213 -11.89678,9.7223629 -18.54005,12.7996749 -4.36298,1.802096 -7.94047,3.040049 -11.39464,4.403503 -3.45418,1.363449 -6.34053,3.057676 -8.26765,6.14033 -5.22084,8.35138 -2.84218,15.068204 -2.84218,18.481449 0,1.724681 -0.52516,2.55968 -1.08838,3.071689 -0.28163,0.256023 -0.58151,0.429253 -0.85318,0.571351 -0.27168,0.142059 -0.50838,0.220652 -0.72636,0.438636 l -0.31257,0.312841 0.34742,0.273911 c 0,0 0.43272,0.34337 0.86189,0.72737 0.32504,0.274708 0.98164,0.921464 1.4381,1.018694 0.12141,-0.33841 0.14927,-0.378664 0.20343,-0.574424 0.0865,-0.303399 0.23235,-0.750599 0.46759,-1.236469 0.47047,-0.971733 1.28275,-2.076821 2.68815,-2.56133 1.99464,-0.687658 5.35396,-1.426431 8.9466,-2.343299 4.77924,-1.219641 10.22039,-3.069062 15.23502,-8.379103 3.95817,-4.191327 5.96428,-9.648825 8.06647,-14.648789 2.54656,-6.056845 4.69094,-13.8886069 5.77033,-18.4960119 z m -1.6799,2.620702 c -2.47459,4.0716 -6.30336,9.0495729 -10.0196,11.9355449 -4.36093,3.386643 -8.45556,5.206482 -16.93062,13.717497 -4.39147,4.410091 -8.81726,10.768783 -11.99473,15.748713 0.22541,-0.579954 0.36766,-1.301376 0.36766,-2.1975 0,-3.821879 -2.32943,-9.983672 2.72203,-18.064078 1.80919,-2.894025 4.5028,-4.488442 7.88998,-5.825454 3.3872,-1.337011 6.98527,-2.582493 11.40643,-4.408627 6.6271,-2.737281 13.58539,-8.3577849 16.55885,-10.9060959 z m 0.41378,0.887631 c -0.71108,2.841356 -2.64709,8.5402999 -5.22954,14.6825349 -2.09852,4.991206 -4.08568,10.360534 -7.91326,14.413589 -4.88279,5.17043 -10.12364,6.948053 -14.85762,8.156201 -3.57648,0.912731 -6.92235,1.642756 -9.00861,2.362003 -0.37313,0.128561 -0.71025,0.293891 -1.01484,0.485256 3.11009,-4.803562 7.2405,-10.637834 11.29117,-14.705694 8.41883,-8.454539 12.39521,-10.186264 16.84633,-13.642933 3.71946,-2.888477 7.3729,-7.7041657 9.88637,-11.7509569 z"
|
||||
sodipodi:nodetypes="csssssscccscssscsscccscssssccsssscsscs" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@@ -26,6 +26,7 @@
|
||||
--dj-palette1: #83a6bf;
|
||||
--dj-palette2: #5e81ac;
|
||||
--dj-palette3: #8fbcbb;
|
||||
--dj-prose: #98aab7;
|
||||
--dj-visited: #8d8bd5;
|
||||
--dj-bgpalette1: #2e3440;
|
||||
}
|
||||
@@ -43,7 +44,44 @@ html, body {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, nav, .dj-title, .roboto-slab {
|
||||
hr {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-image: linear-gradient(to right, transparent, var(--dj-prose), transparent);
|
||||
margin: 40px 0 40px 0;
|
||||
width: 100%;
|
||||
|
||||
&::before, &::after {
|
||||
content: ' ';
|
||||
position: absolute;
|
||||
display: block;
|
||||
margin: auto;
|
||||
left: 0;
|
||||
right: 0;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
&::before {
|
||||
background-color: var(--dj-bgpalette1);
|
||||
width: 74px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
width: 66px;
|
||||
height: 22px;
|
||||
background-color: var(--dj-prose);
|
||||
background-size: cover;
|
||||
mask-image: url('assets/leaf-hrule.svg');
|
||||
mask-size: cover;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
color: var(--dj-prose);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, nav, .dj-title {
|
||||
font-family: "Baskervville", serif;
|
||||
font-optical-sizing: auto;
|
||||
font-weight: 400;
|
||||
|
||||
Reference in New Issue
Block a user