aboutsummaryrefslogtreecommitdiff
path: root/lume
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2024-08-25 14:43:14 -0400
committerXe Iaso <me@xeiaso.net>2024-08-25 14:44:16 -0400
commitfd024f11a3afcb1691f60f90628c1bd1931aaec8 (patch)
tree4a4ee2d7192a45f1c33b1ab7292b419b63f315c8 /lume
parentf16f97473a092d915d81997ac92d13fc648e3237 (diff)
downloadxesite-fd024f11a3afcb1691f60f90628c1bd1931aaec8.tar.xz
xesite-fd024f11a3afcb1691f60f90628c1bd1931aaec8.zip
Xecast episode 3
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'lume')
-rw-r--r--lume/src/_includes/podcast.njk102
-rw-r--r--lume/src/blog/2024/k8s-irc-client.mdx4
-rw-r--r--lume/src/xecast/001.mdx12
-rw-r--r--lume/src/xecast/002.mdx12
-rw-r--r--lume/src/xecast/003.mdx43
-rw-r--r--lume/src/xecast/_data.yml2
6 files changed, 148 insertions, 27 deletions
diff --git a/lume/src/_includes/podcast.njk b/lume/src/_includes/podcast.njk
new file mode 100644
index 0000000..09d5763
--- /dev/null
+++ b/lume/src/_includes/podcast.njk
@@ -0,0 +1,102 @@
+---
+layout: base.njk
+---
+
+<article class="prose dark:prose-invert max-w-none">
+ <h1 class="mb-2">{{title}}</h1>
+ <p class="text-sm text-fg-3 dark:text-fgDark-3 my-1">
+ Published on <time datetime={{date | date("DATE")}}>{{date | date("DATE_US")}}</time>, {{ readingInfo.words }} words, {{ readingInfo.minutes }} minutes to read
+ </p>
+
+ {% if desc %}
+ <p class="text-sm font-serif text-fg-3 dark:text-fgDark-3 my-1">{{desc}}</p>
+ {% endif %}
+
+ {% if patronExclusive %}
+ <div class="bg-yellow-50 border-l-4 border-yellow-400 py-1 px-4 mb-4">
+ <p class="text-yellow-700 text-sm font-semibold font-['Inter']">This content is exclusive to my patrons. If you are not a patron, please don't be the reason I need to make a process more complicated than the honor system. This will be made public in the future, once the series is finished.</p>
+ </div>
+ {% else %}
+ {% if commit.hash != "development" %}
+ {{ comp.ads() | safe }}
+ {% endif %}
+ {% endif %}
+
+ {% if hero %}
+ {{ comp.XeblogHero(hero) | safe }}
+ <small class="text-xs text-fg-3 dark:text-fgDark-3 mb-2 mx-auto">{{hero.prompt}} - {{hero.ai}}</small>
+ {% endif %}
+
+ <center>
+ <audio controls>
+ <source
+ src="{{podcast.link}}"
+ type="audio/mpeg"
+/>
+ </audio>
+ </center>
+
+ <a href="{{podcast.link}}">Download MP3</a>
+
+ {{content | safe}}
+
+ <hr/>
+
+ <button id="shareButton" type="button" class="rounded-md bg-white px-3.5 py-2.5 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50"> Share <svg
+ xmlns="http://www.w3.org/2000/svg"
+ class="icon icon-tabler icon-tabler-share-2 h-8 w-8"
+ width=24
+ height=24
+ viewBox="0 0 24 24"
+ stroke-width=2
+ stroke="currentColor"
+ fill="none"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ >
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
+ <path d="M8 9h-1a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-8a2 2 0 0 0 -2 -2h-1"/>
+ <path d="M12 14v-11"/>
+ <path d="M9 6l3 -3l3 3"/>
+ </svg>
+ </button>
+
+ <script type="module">
+ import swal from "/js/swal.js";
+
+ const shareButton = document.getElementById("shareButton");
+ function doShareButton() {
+ const shareData = {
+ title: document.title,
+ url: window.location.href
+ };
+ if (navigator.share && navigator.canShare(shareData)) {
+ // console.log("(via navigator.share)");
+ navigator
+ .share(shareData)
+ .then(() => {
+ console.log("Thanks for sharing!");
+ })
+ .catch(console.error);
+ } else if (navigator.clipboard) {
+ // console.log("(via navigator.clipboard)");
+ navigator
+ .clipboard
+ .writeText(shareData.url)
+ .then(() => {
+ console.log("Thanks for sharing!");
+ })
+ .catch(console.error);
+ swal("Link copied to clipboard", "Feel free to paste it anywhere you like!", "success");
+ } else {
+ console.log("can't share directly, but feel free to copy the url from addressbar manually");
+ swal("Can't share directly", "Feel free to copy the url from addressbar manually!", "info");
+ }
+ }
+ shareButton.addEventListener("click", doShareButton);
+ </script>
+
+ <p class="mb-4">Facts and circumstances may have changed since publication. Please contact me before jumping to conclusions if something seems wrong or unclear.</p>
+
+ <p class="mb-4">Tags: {{tags.join(", ")}}</p>
+</article> \ No newline at end of file
diff --git a/lume/src/blog/2024/k8s-irc-client.mdx b/lume/src/blog/2024/k8s-irc-client.mdx
index ddd5ae1..25de5a1 100644
--- a/lume/src/blog/2024/k8s-irc-client.mdx
+++ b/lume/src/blog/2024/k8s-irc-client.mdx
@@ -74,9 +74,9 @@ metadata:
spec:
storage:
storageClassName: longhorn
- volumeMode: Block # or filesystem
+ volumeMode: Block
accessModes:
- - ReadWriteOnce # Necessary as it's no longer has a default
+ - ReadWriteOnce
resources:
requests:
storage: 64Gi
diff --git a/lume/src/xecast/001.mdx b/lume/src/xecast/001.mdx
index dc40d5e..d2c056d 100644
--- a/lume/src/xecast/001.mdx
+++ b/lume/src/xecast/001.mdx
@@ -10,18 +10,6 @@ podcast:
<Picture path="xecast/episodes/001" />
-<center>
- <audio controls>
- <source
- src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3"
- type="audio/mpeg"
- />
- Your browser does not support the audio element.
- </audio>
-</center>
-
-[Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3)
-
Also catch Xecast on [YouTube](https://www.youtube.com/playlist?list=PLJDDsMrk2tSHFmE_KAQ8YzL6TzrNdCFrC) (I'll make a proper podcast feed soon, trying to de-scope so I can actually get things done).
<Conv name="Mimi" mood="happy">
diff --git a/lume/src/xecast/002.mdx b/lume/src/xecast/002.mdx
index 5e115d4..5ebd5b9 100644
--- a/lume/src/xecast/002.mdx
+++ b/lume/src/xecast/002.mdx
@@ -10,18 +10,6 @@ podcast:
<Picture path="xecast/episodes/002" />
-<center>
- <audio controls>
- <source
- src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3"
- type="audio/mpeg"
- />
- Your browser does not support the audio element.
- </audio>
-</center>
-
-[Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3)
-
Also catch Xecast on [YouTube](https://www.youtube.com/playlist?list=PLJDDsMrk2tSHFmE_KAQ8YzL6TzrNdCFrC) (I'll make a proper podcast feed soon, trying to de-scope so I can actually get things done).
<Conv name="Mimi" mood="happy">
diff --git a/lume/src/xecast/003.mdx b/lume/src/xecast/003.mdx
new file mode 100644
index 0000000..ef8fa6f
--- /dev/null
+++ b/lume/src/xecast/003.mdx
@@ -0,0 +1,43 @@
+---
+title: "Xecast Episode 3: The curse of the artist"
+date: 2024-08-25
+desc: "Xe returns while on vacation where they built a new PC, made a SaaS to check web server headers, and re-evaluated how they think about complexity."
+podcast:
+ link: "https://cdn.xeiaso.net/file/christine-static/xecast/episodes/003.mp3"
+ length: "80793600"
+---
+
+<Conv name="Mimi" mood="happy">
+ These show notes were generated using Google Gemini 1.5 Pro. Should this
+ podcast take off, we'll find a better way to do this.
+</Conv>
+
+Xe returns while on vacation where they built a new PC, made a SaaS to check web server headers, and re-evaluated how they think about complexity.
+
+## Show Notes
+
+- **Vacation**: Xe discusses how they took a staycation instead of attending a conference, spending time not working and building a new PC.
+ - Their new PC boasts DDR5 RAM, a Ryzen 9 7950X3D processor, 64GB of RAM, and a beautiful Fractal North case.
+- **`hdrwtch`**: A SaaS Xe built during their time off that lets users monitor web server headers via Telegram DMs.
+ - `hdrwtch` was built using Go, HTMX, and a SQLite database compiled to WebAssembly.
+ - Xe hasn't implemented paid tiers yet, as there's little demand for monitoring more than 50 server headers at a time.
+ - Xe plans to add support for [expr](https://expr-lang.org/) to allow querying arbitrary headers.
+ - https://hdrwtch.xeserv.us/
+- **Homelab**: A patron asked Xe about their thoughts on their Kubernetes homelab setup, leading them to realize how it simplified their life.
+ - In pursuing a more exciting homelab, Xe made it incredibly boring by automating everything, but they appreciate how effortless it has become.
+ - This experience shifted their view on complexity in site reliability engineering.
+- **Complexity**: A Hacker News commenter inspired Xe to re-evaluate how they view complexity in software engineering.
+ - The comment argued that the real conflict in SRE isn't simple vs. complex, but unique vs. standard.
+ - Standard approaches, like Kubernetes, may be more complex to implement initially, but they lead to shared knowledge and transferable skills, ultimately simplifying operations.
+ - Xe realized that their preference for "simple" solutions often resulted in unique snowflake systems that were harder to maintain in the long run.
+ - Xe recounted their experience at Heroku, where internal components were deployed using the same standardized process as customer apps, leading to deep platform expertise and efficient support.
+- **The Curse of the Artist**: Xe discusses the challenges of creative work, even after developing significant skill.
+ - They outline their creative process, which relies heavily on inspiration and "festering" ideas until they demand to be written.
+ - Xe emphasizes the importance of writing down ideas as they come, even if they seem trivial, to combat inconsistency in output.
+ - They acknowledge the never-ending cycle of improvement and self-criticism that comes with creative work, dubbing it "The Curse of the Artist."
+ - Xe encourages creatives to embrace the cringeworthy nature of their early work as proof of their progress and to resist deleting it.
+- **Tips for Writing**: Xe offers advice for aspiring writers:
+ - **Answer three questions**: "What is there?" "Why should I care?" and "How did you get there?"
+ - **Focus on the "Why"**: Integrating the topic into a broader context makes it more engaging and memorable.
+ - **Embrace the Process**: Writing will feel frustrating at first, but the cringe is a sign of growth.
+ - **Publish and Preserve**: Don't be afraid to share your work, even if it's imperfect, and resist the urge to delete it later.
diff --git a/lume/src/xecast/_data.yml b/lume/src/xecast/_data.yml
index 560eb62..6e2680e 100644
--- a/lume/src/xecast/_data.yml
+++ b/lume/src/xecast/_data.yml
@@ -1,4 +1,4 @@
-layout: blog.njk
+layout: podcast.njk
type: blog
index: true
is_xecast: true \ No newline at end of file