diff options
| author | Xe Iaso <me@xeiaso.net> | 2024-08-25 14:43:14 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2024-08-25 14:44:16 -0400 |
| commit | fd024f11a3afcb1691f60f90628c1bd1931aaec8 (patch) | |
| tree | 4a4ee2d7192a45f1c33b1ab7292b419b63f315c8 /lume | |
| parent | f16f97473a092d915d81997ac92d13fc648e3237 (diff) | |
| download | xesite-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.njk | 102 | ||||
| -rw-r--r-- | lume/src/blog/2024/k8s-irc-client.mdx | 4 | ||||
| -rw-r--r-- | lume/src/xecast/001.mdx | 12 | ||||
| -rw-r--r-- | lume/src/xecast/002.mdx | 12 | ||||
| -rw-r--r-- | lume/src/xecast/003.mdx | 43 | ||||
| -rw-r--r-- | lume/src/xecast/_data.yml | 2 |
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 |
