<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on danbat.es</title><link>https://danbat.es/posts/</link><description>Recent content in Posts on danbat.es</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 19 Jan 2026 21:52:45 +0100</lastBuildDate><atom:link href="https://danbat.es/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting into Self-Hosting: More apps</title><link>https://danbat.es/posts/more-self-hosting/</link><pubDate>Wed, 14 Jan 2026 17:45:00 +0000</pubDate><guid>https://danbat.es/posts/more-self-hosting/</guid><description>&lt;p>Now that my &lt;a href="https://danbat.es/posts/self-hosting-intro/">first apps&lt;/a> are &lt;a href="https://danbat.es/posts/self-hosting-infrastructure/">reliable and accessible&lt;/a>, what next?&lt;/p>
&lt;p>More apps!&lt;/p>
&lt;h1 id="file-server">File server&lt;/h1>
&lt;p>&lt;a href="https://nextcloud.com/">Nextcloud&lt;/a> has a bunch of integrated offerings, but I mainly care about the central one: a solid file server for my personal cloud. This broadly takes over from my OneDrive and Google Drive, and is a single port of call for any documents and data I want to back up that don&amp;rsquo;t fall into other applications.&lt;/p>
&lt;h1 id="knowledgebase--notes">Knowledgebase &amp;amp; Notes&lt;/h1>
&lt;p>There are a lot of options out there for notetaking and personal knowledgebases. I landed on &lt;a href="https://triliumnotes.org/">Trilium Notes&lt;/a> for its hierarchical structure, quick navigation with commands, easy to use WYSIWYG editor, wide range of note types, and template support. It is one user per instance, so you&amp;rsquo;ll have to spin up more if anyone wants a separate one.&lt;/p></description><content>&lt;p>Now that my &lt;a href="https://danbat.es/posts/self-hosting-intro/">first apps&lt;/a> are &lt;a href="https://danbat.es/posts/self-hosting-infrastructure/">reliable and accessible&lt;/a>, what next?&lt;/p>
&lt;p>More apps!&lt;/p>
&lt;h1 id="file-server">File server&lt;/h1>
&lt;p>&lt;a href="https://nextcloud.com/">Nextcloud&lt;/a> has a bunch of integrated offerings, but I mainly care about the central one: a solid file server for my personal cloud. This broadly takes over from my OneDrive and Google Drive, and is a single port of call for any documents and data I want to back up that don&amp;rsquo;t fall into other applications.&lt;/p>
&lt;h1 id="knowledgebase--notes">Knowledgebase &amp;amp; Notes&lt;/h1>
&lt;p>There are a lot of options out there for notetaking and personal knowledgebases. I landed on &lt;a href="https://triliumnotes.org/">Trilium Notes&lt;/a> for its hierarchical structure, quick navigation with commands, easy to use WYSIWYG editor, wide range of note types, and template support. It is one user per instance, so you&amp;rsquo;ll have to spin up more if anyone wants a separate one.&lt;/p>
&lt;h1 id="audiobook-server">Audiobook Server&lt;/h1>
&lt;p>&lt;a href="https://danbat.es/posts/self-hosting-intro/">Liberating my music&lt;/a> got me thinking about other audio streams I&amp;rsquo;m reliant on a large corporation for. For quite a while I had an Audible plan I&amp;rsquo;d pause for 3 months, get billed for a month on, then pause for another 3 months. I&amp;rsquo;ve never been a serial audiobook listener, but I have 30-odd titles on the platform&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>It&amp;rsquo;d be great to have full control of the audiobooks I purchased, and luckily &lt;a href="https://getlibation.com/">Libation&lt;/a> does just that, downloading and decrypting my audible library.&lt;/p>
&lt;p>The definitive audiobook streaming app seems to be &lt;a href="https://www.audiobookshelf.org/">Audiobookshelf&lt;/a>, and for good reason. It&amp;rsquo;s a solid streamer with online metadata matching, and quite a strong beta mobile app (at least on Android).&lt;/p>
&lt;p>Another nice feature is that it doesn&amp;rsquo;t have its own system for storing media, so any directory of Audiobooks you point it to should work with it.&lt;/p>
&lt;h1 id="ebook-server">eBook Server&lt;/h1>
&lt;p>I was also in the Kindle ecosystem for a few years, so it would be great to move over my books from there into something I own and control.&lt;/p>
&lt;p>&lt;a href="https://grimmory.org/">Grimmory&lt;/a> is an e-book server with all the bells and whistles you can really ask for. My killer features are OPDS (open publication distribution system) support&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>, and an easy way to mass-input new books that they call a &amp;lsquo;bookdrop&amp;rsquo; folder. KOReader progress sync, online metadata matching, organisation into distinct libraries and shelves, and a competent (and customisable) built-in reader are all excellent for user experience too. It&amp;rsquo;s an insanely feature-rich application in this niche.&lt;/p>
&lt;h1 id="further-apps">Further apps&lt;/h1>
&lt;p>This setup ticks most of my boxes, but there&amp;rsquo;s always more to be done. These are the applications I&amp;rsquo;m looking at next:&lt;/p>
&lt;ul>
&lt;li>Collabora for online editing and collaboration of documents on Nextcloud.&lt;/li>
&lt;li>Dashy for a centralised dashboard for all my self-hosted apps. I&amp;rsquo;m not 100% certain I need this, but it&amp;rsquo;ll be interesting to try out.&lt;/li>
&lt;li>A Radarr/Sonarr stack including Jackett, qBittorrent (and a VPN, likely AirVPN), with Radarr importing Letterboxd lists.&lt;/li>
&lt;li>Learning Wireguard to work toward replacing Tailscale&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>You&amp;rsquo;ve made it to the end, thanks for reading this all! Please hit me up if you&amp;rsquo;d like to discuss anything self-hosting =)&lt;/p>
&lt;hr>
&lt;p>&lt;em>Edit 27/03/2026:&lt;/em>
So it looks like booklore got nuked by its maintainer on their way out&amp;hellip; so I&amp;rsquo;ve switched to the young successor project/fork Grimmory, and updated this post accordingly.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>It&amp;rsquo;s how I first got into the Foundation, Witcher, and Bobiverse series. The latter of which is sadly an audible exclusive.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Which makes it super easy to get books onto my KOReader-running devices.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></content></item><item><title>Getting into Self-Hosting: Infrastructure</title><link>https://danbat.es/posts/self-hosting-infrastructure/</link><pubDate>Tue, 13 Jan 2026 19:39:00 +0000</pubDate><guid>https://danbat.es/posts/self-hosting-infrastructure/</guid><description>&lt;p>&lt;a href="https://danbat.es/posts/self-hosting-intro/">So I&amp;rsquo;ve got my photos and music syncing and streaming&lt;/a>, but there are a holes to patch before I can actually rely on these services:&lt;/p>
&lt;ul>
&lt;li>How safe is my data now? Not very, it&amp;rsquo;ll be safer with &lt;strong>Regular Backups&lt;/strong>&lt;/li>
&lt;li>How do I access my services when I&amp;rsquo;m not on the local network? I don&amp;rsquo;t - &lt;strong>A VPN&lt;/strong> would help.&lt;/li>
&lt;li>The first time I know a service is down is when I need to use it and can&amp;rsquo;t. &lt;strong>Container &amp;amp; connectivity monitoring&lt;/strong>&lt;/li>
&lt;li>And how will I know if I&amp;rsquo;m over-extending my little N150? &lt;strong>Real-time system resource monitoring&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>It&amp;rsquo;s time for some Infra!&lt;/p></description><content>&lt;p>&lt;a href="https://danbat.es/posts/self-hosting-intro/">So I&amp;rsquo;ve got my photos and music syncing and streaming&lt;/a>, but there are a holes to patch before I can actually rely on these services:&lt;/p>
&lt;ul>
&lt;li>How safe is my data now? Not very, it&amp;rsquo;ll be safer with &lt;strong>Regular Backups&lt;/strong>&lt;/li>
&lt;li>How do I access my services when I&amp;rsquo;m not on the local network? I don&amp;rsquo;t - &lt;strong>A VPN&lt;/strong> would help.&lt;/li>
&lt;li>The first time I know a service is down is when I need to use it and can&amp;rsquo;t. &lt;strong>Container &amp;amp; connectivity monitoring&lt;/strong>&lt;/li>
&lt;li>And how will I know if I&amp;rsquo;m over-extending my little N150? &lt;strong>Real-time system resource monitoring&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>It&amp;rsquo;s time for some Infra!&lt;/p>
&lt;h1 id="backups">Backups&lt;/h1>
&lt;p>I&amp;rsquo;m running a daily backup of everything on my server that&amp;rsquo;s annoying, difficult or impossible to replace via &lt;a href="https://duplicati.com/">Duplicati&lt;/a> over SSH to a &lt;a href="https://www.hetzner.com/storage/storage-box/bx11/">1TB Hetzner Storage Box&lt;/a>&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>.&lt;/p>
&lt;p>With this I don&amp;rsquo;t have to think about manual backups, nor automated ones since I have duplicati &lt;a href="https://docs.duplicati.com/detailed-descriptions/sending-reports-via-email/sending-reports-with-email">alert me with an email for backup failures&lt;/a>. Everything I&amp;rsquo;ve added or modified in the day will be backed up overnight, and if it isn&amp;rsquo;t, I&amp;rsquo;ll get a report in my inbox.&lt;/p>
&lt;h1 id="vpn-access">VPN Access&lt;/h1>
&lt;p>It&amp;rsquo;s been pretty unanimously agreed that a VPN is the safest way to access self-hosted services out and about. This is where my FOSS philosophy falls apart a bit as &lt;a href="https://tailscale.com/">Tailscale&lt;/a> is just an insanely easy to use freemium option. Being free for up to 3 users and 100 devices, and plenty of client support, it&amp;rsquo;s a no-brainer, at least until I commit to rolling my own Wireguard.&lt;/p>
&lt;h2 id="tls-certificates">TLS Certificates&lt;/h2>
&lt;p>Tailscale makes it easy to connect to my services, but the experience of accessing them still feels a bit second-rate because they&amp;rsquo;re all on HTTP, requiring an exception to be set in the browser the first time they&amp;rsquo;re accessed; as well as being on forgettable port numbers. All in all, having to visit something like &lt;em>192.168.1.123:12345&lt;/em> isn&amp;rsquo;t a great user experience, especially when regularly met with &amp;ldquo;Your connection is insecure&amp;rdquo; messages.&lt;/p>
&lt;p>What&amp;rsquo;ll fix all this is proxy with signed certificates and some nice clean subdomains for each service. I&amp;rsquo;ve found &lt;a href="https://nginxproxymanager.com/">Nginx Proxy Manager&lt;/a> to be of great utility for this. Adding new &amp;lsquo;proxy hosts&amp;rsquo; is a breeze, and it looks after my Let&amp;rsquo;s Encrypt certificate. All I had to do was point the base domain to my server&amp;rsquo;s local IP, and expose my server&amp;rsquo;s subnet to my tailnet (Tailscale&amp;rsquo;s name for a group of devices interconnected on their platform).&lt;/p>
&lt;p>Now I can visit for example &lt;a href="https://immich.mydomain.tld">https://immich.mydomain.tld&lt;/a> with zero friction.&lt;/p>
&lt;h1 id="monitoring">Monitoring&lt;/h1>
&lt;p>But what if any of these important containers crash? I&amp;rsquo;ll know about it since I&amp;rsquo;ve got &lt;a href="https://uptimekuma.org/">Uptime Kuma&lt;/a> monitoring all my containers via docker socket. If any are down for 5 minutes&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup> and fail 3 consecutive 1 minute health checks, I&amp;rsquo;ll get an email about it. This is all shockingly easy to configure in-app.&lt;/p>
&lt;p>What if my broadband goes down? I&amp;rsquo;m monitoring that too. Reachability to both google.com and bbc.co.uk should be a reliable signal as to whether I can connect to the open internet. Further keeping an eye on my ISP, I&amp;rsquo;ve got &lt;a href="https://docs.speedtest-tracker.dev/">Speedtest Tracker&lt;/a> running (hourly on an odd minute) to check what speeds and ping I&amp;rsquo;m actually measurably getting.&lt;/p>
&lt;p>With all these containers, it&amp;rsquo;s nice to have one dashboard where I can actually see what system resources are in use. So far &lt;a href="https://nicolargo.github.io/glances/">Glances&lt;/a> has been a pretty slick one-page app for this.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>This is somewhat overkill since I&amp;rsquo;m only using about 10% of the total storage, but it&amp;rsquo;s fast and relatively cheap for fast remote storage. I had tried using Backblaze and similar competitors since they have a shockingly low price per terabyte, but I had repeated issues backing up to especially Backblaze due to their connectivity provider. I also wanted to see about finding a reliable and trustworthy european host, and Hetzner has ticked those boxes so far.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>IMHO there&amp;rsquo;s no need to check more often than this, if something stays down that&amp;rsquo;s when I need to care about it. This isn&amp;rsquo;t a commerical application, the main user is me. And I&amp;rsquo;d rather not add more traffic, resource utilisation, and data from my monitoring that I arguably don&amp;rsquo;t need.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></content></item><item><title>Getting into Self-Hosting</title><link>https://danbat.es/posts/self-hosting-intro/</link><pubDate>Mon, 12 Jan 2026 10:00:00 +0000</pubDate><guid>https://danbat.es/posts/self-hosting-intro/</guid><description>&lt;p>So I got into self-hosting&amp;hellip;&lt;/p>
&lt;p>I like configuring things, and hate subscriptions, so I&amp;rsquo;d been thinking about it for a while.&lt;/p>
&lt;p>Hating subscriptions, to start I only had two to rid myself of: Google One Basic, and Spotify Premium (&lt;a href="https://www.moneysavingexpert.com/news/2025/10/spotify-premium-price-rises/">which got a bump in October&lt;/a>).&lt;/p>
&lt;h1 id="the-hardware">The Hardware&lt;/h1>
&lt;p>Looking for a small, quiet, power efficient box with easy storage expansion, I landed on the Bee-link Me Mini. It has an Intel N150 processor, a pretty common (and powerful for its size and efficiency) little chip for mini-PCs with a base power usage of 6W, six M.2 slots for NVMe SSDs, two 2.5Gig ethernet ports, and barely makes a sound with its single fan.&lt;/p></description><content>&lt;p>So I got into self-hosting&amp;hellip;&lt;/p>
&lt;p>I like configuring things, and hate subscriptions, so I&amp;rsquo;d been thinking about it for a while.&lt;/p>
&lt;p>Hating subscriptions, to start I only had two to rid myself of: Google One Basic, and Spotify Premium (&lt;a href="https://www.moneysavingexpert.com/news/2025/10/spotify-premium-price-rises/">which got a bump in October&lt;/a>).&lt;/p>
&lt;h1 id="the-hardware">The Hardware&lt;/h1>
&lt;p>Looking for a small, quiet, power efficient box with easy storage expansion, I landed on the Bee-link Me Mini. It has an Intel N150 processor, a pretty common (and powerful for its size and efficiency) little chip for mini-PCs with a base power usage of 6W, six M.2 slots for NVMe SSDs, two 2.5Gig ethernet ports, and barely makes a sound with its single fan.&lt;/p>
&lt;p>Despite the six slots, I actually don&amp;rsquo;t need a ton of storage right now, maybe 100GB at most. But when I do, for reliability it&amp;rsquo;s best to have identical drives, so I need a drive manufacturer I can assume will still be around in a few years. With this in mind, I landed on three 1TB MP4LL&amp;rsquo;s from Teamgroup which were going for just under £50 a piece from OverclockersUK in August.&lt;/p>
&lt;h1 id="the-operating-system">The Operating System&lt;/h1>
&lt;p>One of the things that gave me the confidence to get started with this project was HexOS, a beta NAS (network attached storage) operating system built ontop of TrueNAS Community Edition (formerly &amp;lsquo;Scale&amp;rsquo;), that seeks to provide an easy and flexible NAS experience. In retrospect, I&amp;rsquo;m probably in the camp of NAS-builders who could get away with learning TrueNAS, as I&amp;rsquo;ve spent the majority of my time using HexOS there rather than the HexOS &amp;lsquo;Deck&amp;rsquo;, but you live and you learn.&lt;/p>
&lt;p>TrueNAS (and by extension HexOS) has a nice pre-packaged &amp;lsquo;Apps Market&amp;rsquo; that can simplify docker container installation, though more often than not you&amp;rsquo;re just writing a docker-compose file as a form in their UI.&lt;/p>
&lt;h1 id="first-applications">First Applications&lt;/h1>
&lt;h2 id="photos-immich">Photos: Immich&lt;/h2>
&lt;p>My main use for Google One Basic is Google Photos, and &lt;a href="https://immich.app/">Immich&lt;/a> is an amazing drop-in self-hosted replacement. It&amp;rsquo;s pretty popular too, so you can generally find some nice CLI tools for working with it. One example being &lt;a href="https://github.com/simulot/immich-go">Immich-Go&lt;/a> which made importing my photos from Google Takeout pretty painless.&lt;/p>
&lt;h2 id="music-navidrome">Music: Navidrome&lt;/h2>
&lt;p>Replacing Spotify Premium was less obvious. It took me some time to figure out that I didn&amp;rsquo;t want to copy over my library and listening habits like for like. Long playlists with sometimes one song per artist, and letting the algorithm dictate how I discover music (song by song), had started feeling less appealing.&lt;/p>
&lt;p>Albums and Extended Plays are the intended listening experience for the most part, so I went through my library picking out every album I definitely wanted to have access to, and every album with at least 2 songs I knew I liked. In the end I had about 87 albums/EPs/singles to cover every song or group of songs I liked enough to listen to the rest of the album.&lt;/p>
&lt;p>Wanting to actually support the artists I enjoy, and own the music I pay for, I buy everything I can on Bandcamp, and download albums in .FLAC from there. When this isn&amp;rsquo;t an option, I&amp;rsquo;ll hop on Soulseek.&lt;/p>
&lt;p>Looking for an actively developed, solid music streaming server with open compatibility, I landed on &lt;a href="https://www.navidrome.org/">Navidrome&lt;/a>. It supports most of the OpenSubSonic API, supports scrobbling to Last.FM&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>, and just works well.&lt;/p>
&lt;p>For clients, I&amp;rsquo;m using Symfonium on Android, and Supersonic on Desktop.&lt;/p>
&lt;p>To keep ontop of song metadata and to fetch covers and synced lyrics, I&amp;rsquo;m using &lt;a href="https://picard.musicbrainz.org/">MusicBrainz Picard&lt;/a> with the &lt;a href="https://github.com/protodeniz/picard-sozler">&amp;lsquo;Picard Sözler&amp;rsquo;&lt;/a> plugin to grab synced lyrics if any are available.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a href="https://www.navidrome.org/docs/usage/external-integrations/">If you give it an API key in the environment variables&lt;/a>. You can find me as &lt;a href="https://www.last.fm/user/danbat-es">danbat-es&lt;/a> over there, and you may recognise my profile picture from &lt;a href="https://danbat.es/posts/raytracing/">a previous post&lt;/a>.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></content></item><item><title>Raytracing</title><link>https://danbat.es/posts/raytracing/</link><pubDate>Thu, 29 May 2025 14:01:24 +0100</pubDate><guid>https://danbat.es/posts/raytracing/</guid><description>&lt;p>At the start of this year (2025), I had a lot of fun following some tutorials on Raytracing. Regardless of how much I&amp;rsquo;ll use this knowledge down the road, I can&amp;rsquo;t stress enough how interactive and engaging writing code for graphics is as someone who hasn&amp;rsquo;t before. Even if not the same one I did, I really do recommend trying it out.&lt;/p>
&lt;p>This also served as an excuse to try to firm up my very loose C++ &amp;lsquo;skills&amp;rsquo; and gain some more knowledge around how to work with it performantly and safely.&lt;/p></description><content>&lt;p>At the start of this year (2025), I had a lot of fun following some tutorials on Raytracing. Regardless of how much I&amp;rsquo;ll use this knowledge down the road, I can&amp;rsquo;t stress enough how interactive and engaging writing code for graphics is as someone who hasn&amp;rsquo;t before. Even if not the same one I did, I really do recommend trying it out.&lt;/p>
&lt;p>This also served as an excuse to try to firm up my very loose C++ &amp;lsquo;skills&amp;rsquo; and gain some more knowledge around how to work with it performantly and safely.&lt;/p>
&lt;p>Another point of inspiration was a &lt;a href="https://forums.tigsource.com/index.php?topic=40832.msg1363742#msg1363742">tigsource forum thread from Lucas Pope (dukope)&lt;/a> that showed up on HackerNews. The thread showed off a demo, and detailed his work in getting towards consistent dither moving with geometry in game.&lt;/p>
&lt;p>The tutorial in question was &lt;a href="https://raytracing.github.io/books/RayTracingInOneWeekend.html">&lt;em>Ray Tracing in One Weekend&lt;/em>&lt;/a> by Peter Shirley, Trevor David Black, and Steve Hollasch. Following this was a fun exploration into building a path tracer from scratch, and was very well taught and explained.&lt;/p>
&lt;p>This was my final render. It&amp;rsquo;s almost identical to Shirley et al.&amp;rsquo;s sample render, but since I finished off the last few chapters while acting as an organiser for Brighton&amp;rsquo;s Global Game Jam site, I added a bubble to try to scrape my way on-theme a bit. This isn&amp;rsquo;t actually a bubble though, as explained by the authors earlier in the tutorial, you can create a bubble-like object by placing a sphere of air inside a sphere of glass, as their relative refractive indices will have this effect.&lt;/p>
&lt;p>&lt;img alt="Many small spheres of varying colours, along with a big bubble-like sphere, polished metal-like sphere, glass sphere, and brown opaque sphere, on a flat grey floor, with a white sky behind them. There is a blur around the edges of the image as if it was taken by a real camera. All of the spheres are reflected in the bubble, metal, and glass spheres." src="https://danbat.es/posts/raytracing/images/rtweekend.png">&lt;/p>
&lt;p>If you&amp;rsquo;re wondering whats with all the spheres, you&amp;rsquo;re not alone. Raytracing in One Weekend deals exclusively with spheres as they&amp;rsquo;re a nice easy primitive to start working with. Its sequel book, &lt;a href="https://raytracing.github.io/books/RayTracingTheNextWeek.html">&lt;em>Ray Tracing: The Next Week&lt;/em>&lt;/a> dives in much deeper and shows how to make some more primitives like cubes and quadrilaterals, as well as materials like noise and texture maps and volumes, as well as adding in lighting and motion blur (&amp;ldquo;SpaceTime Ray Tracing&amp;rdquo; is a ridiculously cool name).&lt;/p>
&lt;p>Like with my last one, I added one thing to my final render not seen in the sample one, since I didn&amp;rsquo;t want the smoke cube to miss out on the fun:&lt;/p>
&lt;p>&lt;img alt="Lit by a single square light at the top of the image, several spheres and cubes hover above a floor of green cubes of diffing heights. One sphere is brown and in motion from left to right, another has an image of the earth as its texture, another is glass, another is emissive and reflects light like glass despite being a deep blue, another has a noisy black and white pattern circling it, and the last is metallic but very dull so reflects little. The cubes sit behind the spheres, one made of spheres itself, looking like a packed box of styrofoam, and the other, a solid block of fog or steam that absorbs the light and hides the dark grey background from view." src="https://danbat.es/posts/raytracing/images/rtnextweek.png">&lt;/p>
&lt;p>I haven&amp;rsquo;t yet got round to the third and final entry in the Raytracing series (&lt;a href="https://raytracing.github.io/books/RayTracingTheRestOfYourLife.html">&lt;em>Ray Tracing: The Rest of Your Life&lt;/em>&lt;/a>), but I do intend to at some point. The authors promise that it covers optimisation in a big way.&lt;/p>
&lt;p>Shirley et al.&amp;rsquo;s tutorials have made the concept of graphics programming very accessible to me - and they even reference interesting literature from the area too! Fascinating papers like &lt;a href="https://graphics.pixar.com/library/DistributedRayTracing/paper.pdf">&lt;em>Distributed Ray Tracing&lt;/em> by Robert L. Cook from Pixar&lt;/a>, and the furious yet justified &lt;a href="https://www.researchgate.net/publication/244986797_A_Pixel_Is_Not_A_Little_Square_A_Pixel_Is_Not_A_Little_Square_A_Pixel_Is_Not_A_Little_Square">&lt;em>A Pixel Is Not A Little Square, A Pixel Is Not A Little Square, A Pixel Is Not A Little Square&lt;/em> by Alvy Ray Smith&lt;/a>.&lt;/p>
&lt;p>Thanks for reading!&lt;/p>
&lt;p>All my code is available on GitHub below, but please do have a stab at them yourself first!
&lt;a href="https://github.com/danbates1452/rtweekend">In One Weekend&lt;/a>
&lt;a href="https://github.com/danbates1452/rtnextweek">The Next Week&lt;/a>&lt;/p></content></item><item><title>Time Travel Roundup</title><link>https://danbat.es/posts/time-travel-roundup/</link><pubDate>Thu, 29 May 2025 12:51:24 +0100</pubDate><guid>https://danbat.es/posts/time-travel-roundup/</guid><description>&lt;p>As a lover of science fiction and the time travel stories, in 2022, I started trying to write up the types/styles of fictional time travel I&amp;rsquo;ve encountered.&lt;/p>
&lt;p>By no means is this exhaustive, but it&amp;rsquo;s where I got to:&lt;/p>
&lt;hr>
&lt;ul>
&lt;li>Predestination - deterministic, will always be that way&lt;/li>
&lt;li>Butterfly effect - changes beget exponential changes&lt;/li>
&lt;li>Time as a force - resists change, often forcing a predetermined outcome&lt;/li>
&lt;li>Predictably changeable - changes what you&amp;rsquo;d expect&lt;/li>
&lt;/ul>
&lt;p>There are also some common scenarios:&lt;/p></description><content>&lt;p>As a lover of science fiction and the time travel stories, in 2022, I started trying to write up the types/styles of fictional time travel I&amp;rsquo;ve encountered.&lt;/p>
&lt;p>By no means is this exhaustive, but it&amp;rsquo;s where I got to:&lt;/p>
&lt;hr>
&lt;ul>
&lt;li>Predestination - deterministic, will always be that way&lt;/li>
&lt;li>Butterfly effect - changes beget exponential changes&lt;/li>
&lt;li>Time as a force - resists change, often forcing a predetermined outcome&lt;/li>
&lt;li>Predictably changeable - changes what you&amp;rsquo;d expect&lt;/li>
&lt;/ul>
&lt;p>There are also some common scenarios:&lt;/p>
&lt;ul>
&lt;li>Causal loops&lt;/li>
&lt;li>Stranded in another time&lt;/li>
&lt;li>Various paradoxes&lt;/li>
&lt;li>Diverging timelines&lt;/li>
&lt;li>Time agencies/authorities&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Ultimately, a the time travel in a story works how the writer wants it to, but what makes a time travel story good is consistency in their set rules, and the ability of the writer to use those rules to tell a compelling story.&lt;/p>
&lt;p>E.g. The backwards travel of Tenet is interesting for sure, but is it necessarily as compelling as something like The Time Traveller&amp;rsquo;s wife; where the protagonist lives with a debilitating genetic disease that causes him to randomly time travel unpredictably. Both have consistent rules, and the concept of a temporal cold war is thrilling and great trailer-bait, but the threat to a mans life of being thrust into unpredictable environments with no warning or preparation ultimately ends up being the more compelling story, at least to me.&lt;/p>
&lt;p>&lt;em>Edit 10/01/2025&lt;/em>: Though that may be largely because Nolan neglected to give John David Washington&amp;rsquo;s Protagonist a name other than &amp;lsquo;Protagonist&amp;rsquo;. And a lot of it comes down to your own weighting of high-concept vs a real feeling person in peril.&lt;/p>
&lt;hr>
&lt;p>Thanks for checking out my blog!&lt;/p></content></item><item><title>Hello World</title><link>https://danbat.es/posts/my-first-post/</link><pubDate>Wed, 27 Nov 2024 20:13:23 +0000</pubDate><guid>https://danbat.es/posts/my-first-post/</guid><description>&lt;p>For a while I&amp;rsquo;ve wanted a spot to write, be it project write-ups, retrospectives, the odd book review or attempt at my own fiction.&lt;/p>
&lt;p>This is for that.&lt;/p>
&lt;p>See you soon :)&lt;/p></description><content>&lt;p>For a while I&amp;rsquo;ve wanted a spot to write, be it project write-ups, retrospectives, the odd book review or attempt at my own fiction.&lt;/p>
&lt;p>This is for that.&lt;/p>
&lt;p>See you soon :)&lt;/p></content></item></channel></rss>