The code and data behind xeiaso.net
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Xecast episode 3

Signed-off-by: Xe Iaso <me@xeiaso.net>

Xe Iaso fd024f11 f16f9747

+148 -27
+102
lume/src/_includes/podcast.njk
··· 1 + --- 2 + layout: base.njk 3 + --- 4 + 5 + <article class="prose dark:prose-invert max-w-none"> 6 + <h1 class="mb-2">{{title}}</h1> 7 + <p class="text-sm text-fg-3 dark:text-fgDark-3 my-1"> 8 + Published on <time datetime={{date | date("DATE")}}>{{date | date("DATE_US")}}</time>, {{ readingInfo.words }} words, {{ readingInfo.minutes }} minutes to read 9 + </p> 10 + 11 + {% if desc %} 12 + <p class="text-sm font-serif text-fg-3 dark:text-fgDark-3 my-1">{{desc}}</p> 13 + {% endif %} 14 + 15 + {% if patronExclusive %} 16 + <div class="bg-yellow-50 border-l-4 border-yellow-400 py-1 px-4 mb-4"> 17 + <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> 18 + </div> 19 + {% else %} 20 + {% if commit.hash != "development" %} 21 + {{ comp.ads() | safe }} 22 + {% endif %} 23 + {% endif %} 24 + 25 + {% if hero %} 26 + {{ comp.XeblogHero(hero) | safe }} 27 + <small class="text-xs text-fg-3 dark:text-fgDark-3 mb-2 mx-auto">{{hero.prompt}} - {{hero.ai}}</small> 28 + {% endif %} 29 + 30 + <center> 31 + <audio controls> 32 + <source 33 + src="{{podcast.link}}" 34 + type="audio/mpeg" 35 + /> 36 + </audio> 37 + </center> 38 + 39 + <a href="{{podcast.link}}">Download MP3</a> 40 + 41 + {{content | safe}} 42 + 43 + <hr/> 44 + 45 + <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 46 + xmlns="http://www.w3.org/2000/svg" 47 + class="icon icon-tabler icon-tabler-share-2 h-8 w-8" 48 + width=24 49 + height=24 50 + viewBox="0 0 24 24" 51 + stroke-width=2 52 + stroke="currentColor" 53 + fill="none" 54 + stroke-linecap="round" 55 + stroke-linejoin="round" 56 + > 57 + <path stroke="none" d="M0 0h24v24H0z" fill="none"/> 58 + <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"/> 59 + <path d="M12 14v-11"/> 60 + <path d="M9 6l3 -3l3 3"/> 61 + </svg> 62 + </button> 63 + 64 + <script type="module"> 65 + import swal from "/js/swal.js"; 66 + 67 + const shareButton = document.getElementById("shareButton"); 68 + function doShareButton() { 69 + const shareData = { 70 + title: document.title, 71 + url: window.location.href 72 + }; 73 + if (navigator.share && navigator.canShare(shareData)) { 74 + // console.log("(via navigator.share)"); 75 + navigator 76 + .share(shareData) 77 + .then(() => { 78 + console.log("Thanks for sharing!"); 79 + }) 80 + .catch(console.error); 81 + } else if (navigator.clipboard) { 82 + // console.log("(via navigator.clipboard)"); 83 + navigator 84 + .clipboard 85 + .writeText(shareData.url) 86 + .then(() => { 87 + console.log("Thanks for sharing!"); 88 + }) 89 + .catch(console.error); 90 + swal("Link copied to clipboard", "Feel free to paste it anywhere you like!", "success"); 91 + } else { 92 + console.log("can't share directly, but feel free to copy the url from addressbar manually"); 93 + swal("Can't share directly", "Feel free to copy the url from addressbar manually!", "info"); 94 + } 95 + } 96 + shareButton.addEventListener("click", doShareButton); 97 + </script> 98 + 99 + <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> 100 + 101 + <p class="mb-4">Tags: {{tags.join(", ")}}</p> 102 + </article>
+2 -2
lume/src/blog/2024/k8s-irc-client.mdx
··· 74 74 spec: 75 75 storage: 76 76 storageClassName: longhorn 77 - volumeMode: Block # or filesystem 77 + volumeMode: Block 78 78 accessModes: 79 - - ReadWriteOnce # Necessary as it's no longer has a default 79 + - ReadWriteOnce 80 80 resources: 81 81 requests: 82 82 storage: 64Gi
-12
lume/src/xecast/001.mdx
··· 10 10 11 11 <Picture path="xecast/episodes/001" /> 12 12 13 - <center> 14 - <audio controls> 15 - <source 16 - src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3" 17 - type="audio/mpeg" 18 - /> 19 - Your browser does not support the audio element. 20 - </audio> 21 - </center> 22 - 23 - [Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/001.mp3) 24 - 25 13 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). 26 14 27 15 <Conv name="Mimi" mood="happy">
-12
lume/src/xecast/002.mdx
··· 10 10 11 11 <Picture path="xecast/episodes/002" /> 12 12 13 - <center> 14 - <audio controls> 15 - <source 16 - src="https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3" 17 - type="audio/mpeg" 18 - /> 19 - Your browser does not support the audio element. 20 - </audio> 21 - </center> 22 - 23 - [Download MP3](https://cdn.xeiaso.net/file/christine-static/xecast/episodes/002.mp3) 24 - 25 13 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). 26 14 27 15 <Conv name="Mimi" mood="happy">
+43
lume/src/xecast/003.mdx
··· 1 + --- 2 + title: "Xecast Episode 3: The curse of the artist" 3 + date: 2024-08-25 4 + 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." 5 + podcast: 6 + link: "https://cdn.xeiaso.net/file/christine-static/xecast/episodes/003.mp3" 7 + length: "80793600" 8 + --- 9 + 10 + <Conv name="Mimi" mood="happy"> 11 + These show notes were generated using Google Gemini 1.5 Pro. Should this 12 + podcast take off, we'll find a better way to do this. 13 + </Conv> 14 + 15 + 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. 16 + 17 + ## Show Notes 18 + 19 + - **Vacation**: Xe discusses how they took a staycation instead of attending a conference, spending time not working and building a new PC. 20 + - Their new PC boasts DDR5 RAM, a Ryzen 9 7950X3D processor, 64GB of RAM, and a beautiful Fractal North case. 21 + - **`hdrwtch`**: A SaaS Xe built during their time off that lets users monitor web server headers via Telegram DMs. 22 + - `hdrwtch` was built using Go, HTMX, and a SQLite database compiled to WebAssembly. 23 + - Xe hasn't implemented paid tiers yet, as there's little demand for monitoring more than 50 server headers at a time. 24 + - Xe plans to add support for [expr](https://expr-lang.org/) to allow querying arbitrary headers. 25 + - https://hdrwtch.xeserv.us/ 26 + - **Homelab**: A patron asked Xe about their thoughts on their Kubernetes homelab setup, leading them to realize how it simplified their life. 27 + - In pursuing a more exciting homelab, Xe made it incredibly boring by automating everything, but they appreciate how effortless it has become. 28 + - This experience shifted their view on complexity in site reliability engineering. 29 + - **Complexity**: A Hacker News commenter inspired Xe to re-evaluate how they view complexity in software engineering. 30 + - The comment argued that the real conflict in SRE isn't simple vs. complex, but unique vs. standard. 31 + - Standard approaches, like Kubernetes, may be more complex to implement initially, but they lead to shared knowledge and transferable skills, ultimately simplifying operations. 32 + - Xe realized that their preference for "simple" solutions often resulted in unique snowflake systems that were harder to maintain in the long run. 33 + - 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. 34 + - **The Curse of the Artist**: Xe discusses the challenges of creative work, even after developing significant skill. 35 + - They outline their creative process, which relies heavily on inspiration and "festering" ideas until they demand to be written. 36 + - Xe emphasizes the importance of writing down ideas as they come, even if they seem trivial, to combat inconsistency in output. 37 + - They acknowledge the never-ending cycle of improvement and self-criticism that comes with creative work, dubbing it "The Curse of the Artist." 38 + - Xe encourages creatives to embrace the cringeworthy nature of their early work as proof of their progress and to resist deleting it. 39 + - **Tips for Writing**: Xe offers advice for aspiring writers: 40 + - **Answer three questions**: "What is there?" "Why should I care?" and "How did you get there?" 41 + - **Focus on the "Why"**: Integrating the topic into a broader context makes it more engaging and memorable. 42 + - **Embrace the Process**: Writing will feel frustrating at first, but the cringe is a sign of growth. 43 + - **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
··· 1 - layout: blog.njk 1 + layout: podcast.njk 2 2 type: blog 3 3 index: true 4 4 is_xecast: true