···11+---
22+layout: base.njk
33+---
44+55+<article class="prose dark:prose-invert max-w-none">
66+ <h1 class="mb-2">{{title}}</h1>
77+ <p class="text-sm text-fg-3 dark:text-fgDark-3 my-1">
88+ Published on <time datetime={{date | date("DATE")}}>{{date | date("DATE_US")}}</time>, {{ readingInfo.words }} words, {{ readingInfo.minutes }} minutes to read
99+ </p>
1010+1111+ {% if desc %}
1212+ <p class="text-sm font-serif text-fg-3 dark:text-fgDark-3 my-1">{{desc}}</p>
1313+ {% endif %}
1414+1515+ {% if patronExclusive %}
1616+ <div class="bg-yellow-50 border-l-4 border-yellow-400 py-1 px-4 mb-4">
1717+ <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>
1818+ </div>
1919+ {% else %}
2020+ {% if commit.hash != "development" %}
2121+ {{ comp.ads() | safe }}
2222+ {% endif %}
2323+ {% endif %}
2424+2525+ {% if hero %}
2626+ {{ comp.XeblogHero(hero) | safe }}
2727+ <small class="text-xs text-fg-3 dark:text-fgDark-3 mb-2 mx-auto">{{hero.prompt}} - {{hero.ai}}</small>
2828+ {% endif %}
2929+3030+ <center>
3131+ <audio controls>
3232+ <source
3333+ src="{{podcast.link}}"
3434+ type="audio/mpeg"
3535+/>
3636+ </audio>
3737+ </center>
3838+3939+ <a href="{{podcast.link}}">Download MP3</a>
4040+4141+ {{content | safe}}
4242+4343+ <hr/>
4444+4545+ <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
4646+ xmlns="http://www.w3.org/2000/svg"
4747+ class="icon icon-tabler icon-tabler-share-2 h-8 w-8"
4848+ width=24
4949+ height=24
5050+ viewBox="0 0 24 24"
5151+ stroke-width=2
5252+ stroke="currentColor"
5353+ fill="none"
5454+ stroke-linecap="round"
5555+ stroke-linejoin="round"
5656+ >
5757+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
5858+ <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"/>
5959+ <path d="M12 14v-11"/>
6060+ <path d="M9 6l3 -3l3 3"/>
6161+ </svg>
6262+ </button>
6363+6464+ <script type="module">
6565+ import swal from "/js/swal.js";
6666+6767+ const shareButton = document.getElementById("shareButton");
6868+ function doShareButton() {
6969+ const shareData = {
7070+ title: document.title,
7171+ url: window.location.href
7272+ };
7373+ if (navigator.share && navigator.canShare(shareData)) {
7474+ // console.log("(via navigator.share)");
7575+ navigator
7676+ .share(shareData)
7777+ .then(() => {
7878+ console.log("Thanks for sharing!");
7979+ })
8080+ .catch(console.error);
8181+ } else if (navigator.clipboard) {
8282+ // console.log("(via navigator.clipboard)");
8383+ navigator
8484+ .clipboard
8585+ .writeText(shareData.url)
8686+ .then(() => {
8787+ console.log("Thanks for sharing!");
8888+ })
8989+ .catch(console.error);
9090+ swal("Link copied to clipboard", "Feel free to paste it anywhere you like!", "success");
9191+ } else {
9292+ console.log("can't share directly, but feel free to copy the url from addressbar manually");
9393+ swal("Can't share directly", "Feel free to copy the url from addressbar manually!", "info");
9494+ }
9595+ }
9696+ shareButton.addEventListener("click", doShareButton);
9797+ </script>
9898+9999+ <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>
100100+101101+ <p class="mb-4">Tags: {{tags.join(", ")}}</p>
102102+</article>
+2-2
lume/src/blog/2024/k8s-irc-client.mdx
···7474spec:
7575 storage:
7676 storageClassName: longhorn
7777- volumeMode: Block # or filesystem
7777+ volumeMode: Block
7878 accessModes:
7979- - ReadWriteOnce # Necessary as it's no longer has a default
7979+ - ReadWriteOnce
8080 resources:
8181 requests:
8282 storage: 64Gi
-12
lume/src/xecast/001.mdx
···10101111<Picture path="xecast/episodes/001" />
12121313-<center>
1414- <audio controls>
1515- <source
1616- src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3"
1717- type="audio/mpeg"
1818- />
1919- Your browser does not support the audio element.
2020- </audio>
2121-</center>
2222-2323-[Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3)
2424-2513Also 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).
26142715<Conv name="Mimi" mood="happy">
-12
lume/src/xecast/002.mdx
···10101111<Picture path="xecast/episodes/002" />
12121313-<center>
1414- <audio controls>
1515- <source
1616- src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3"
1717- type="audio/mpeg"
1818- />
1919- Your browser does not support the audio element.
2020- </audio>
2121-</center>
2222-2323-[Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3)
2424-2513Also 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).
26142715<Conv name="Mimi" mood="happy">
+43
lume/src/xecast/003.mdx
···11+---
22+title: "Xecast Episode 3: The curse of the artist"
33+date: 2024-08-25
44+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."
55+podcast:
66+ link: "https://cdn.xeiaso.net/file/christine-static/xecast/episodes/003.mp3"
77+ length: "80793600"
88+---
99+1010+<Conv name="Mimi" mood="happy">
1111+ These show notes were generated using Google Gemini 1.5 Pro. Should this
1212+ podcast take off, we'll find a better way to do this.
1313+</Conv>
1414+1515+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.
1616+1717+## Show Notes
1818+1919+- **Vacation**: Xe discusses how they took a staycation instead of attending a conference, spending time not working and building a new PC.
2020+ - Their new PC boasts DDR5 RAM, a Ryzen 9 7950X3D processor, 64GB of RAM, and a beautiful Fractal North case.
2121+- **`hdrwtch`**: A SaaS Xe built during their time off that lets users monitor web server headers via Telegram DMs.
2222+ - `hdrwtch` was built using Go, HTMX, and a SQLite database compiled to WebAssembly.
2323+ - Xe hasn't implemented paid tiers yet, as there's little demand for monitoring more than 50 server headers at a time.
2424+ - Xe plans to add support for [expr](https://expr-lang.org/) to allow querying arbitrary headers.
2525+ - https://hdrwtch.xeserv.us/
2626+- **Homelab**: A patron asked Xe about their thoughts on their Kubernetes homelab setup, leading them to realize how it simplified their life.
2727+ - In pursuing a more exciting homelab, Xe made it incredibly boring by automating everything, but they appreciate how effortless it has become.
2828+ - This experience shifted their view on complexity in site reliability engineering.
2929+- **Complexity**: A Hacker News commenter inspired Xe to re-evaluate how they view complexity in software engineering.
3030+ - The comment argued that the real conflict in SRE isn't simple vs. complex, but unique vs. standard.
3131+ - Standard approaches, like Kubernetes, may be more complex to implement initially, but they lead to shared knowledge and transferable skills, ultimately simplifying operations.
3232+ - Xe realized that their preference for "simple" solutions often resulted in unique snowflake systems that were harder to maintain in the long run.
3333+ - 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.
3434+- **The Curse of the Artist**: Xe discusses the challenges of creative work, even after developing significant skill.
3535+ - They outline their creative process, which relies heavily on inspiration and "festering" ideas until they demand to be written.
3636+ - Xe emphasizes the importance of writing down ideas as they come, even if they seem trivial, to combat inconsistency in output.
3737+ - They acknowledge the never-ending cycle of improvement and self-criticism that comes with creative work, dubbing it "The Curse of the Artist."
3838+ - Xe encourages creatives to embrace the cringeworthy nature of their early work as proof of their progress and to resist deleting it.
3939+- **Tips for Writing**: Xe offers advice for aspiring writers:
4040+ - **Answer three questions**: "What is there?" "Why should I care?" and "How did you get there?"
4141+ - **Focus on the "Why"**: Integrating the topic into a broader context makes it more engaging and memorable.
4242+ - **Embrace the Process**: Writing will feel frustrating at first, but the cringe is a sign of growth.
4343+ - **Publish and Preserve**: Don't be afraid to share your work, even if it's imperfect, and resist the urge to delete it later.
+1-1
lume/src/xecast/_data.yml
···11-layout: blog.njk
11+layout: podcast.njk
22type: blog
33index: true
44is_xecast: true