<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mordecai Kipng'etich</title><link>https://insidemordecai.com/</link><description>Recent content on Mordecai Kipng'etich</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>mk@insidemordecai.com (Mordecai Kipng'etich)</managingEditor><webMaster>mk@insidemordecai.com (Mordecai Kipng'etich)</webMaster><lastBuildDate>Sun, 31 May 2026 21:26:22 +0300</lastBuildDate><atom:link href="https://insidemordecai.com/index.xml" rel="self" type="application/rss+xml"/><item><title>May 2026 Dispatch</title><link>https://insidemordecai.com/may-2026-dispatch/</link><pubDate>Sun, 31 May 2026 21:18:48 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/may-2026-dispatch/</guid><description>&lt;p&gt;Welcome back to &lt;strong&gt;Dispatch&lt;/strong&gt;, a personal roundup of videos, records, and anything that I found interesting this month.
Think of &lt;strong&gt;Dispatch&lt;/strong&gt; as my monthly mixtape from the internet with no real theme except “this was neat.”&lt;/p&gt;
&lt;p&gt;For a moment I considered skipping this Dispatch.
I had only saved most of these links but not described them which seemed like a tedious task.
This meant I had to quickly skim some of the older links to jog my memory and avoid inaccurate descriptions.
For one, I&amp;rsquo;ve learnt that I need to write a quick note for every single recommendation at the point of saving.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Videos
&lt;div id="videos" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/AZPq1m4Ikg4" target="_blank" rel="noreferrer"&gt;The BLUETOOTH CONNECTED Voice Actors&lt;/a&gt; - almost each one of us has heard of the classic &amp;ldquo;zee bluetooth device is connected successfully&amp;rdquo; and I really thought this video was about that voice actor but I was still equally impressed and left wondering if I can get in on the voice acting act.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/zK1CEXl1x-w" target="_blank" rel="noreferrer"&gt;Why You Can&amp;rsquo;t (Quite) Take a Train Across Africa&lt;/a&gt; - a bit of South African history primarily about Cecil Rhodes and why I think he deserves even more hate but predominantly about the difficulty of traversing the vast continent from Cape Town to Cairo.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/b4vPF2wiqpI" target="_blank" rel="noreferrer"&gt;Why Do the BEST Singers Always End Up Being British?&lt;/a&gt; - this is something I&amp;rsquo;ve noticed before but never thought to look into it. I think someone should make a video about British actors too.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/i_qy52fplBE" target="_blank" rel="noreferrer"&gt;How Bicycle Helmets Are Engineered to Protect Your Brain&lt;/a&gt; - this is one of those topics I didn&amp;rsquo;t know I was curious about but ended up being fully engrossed about the video especially with the direct and practical presentation style of the presenter.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Music
&lt;div id="music" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/GSKF-4jBJ-w" target="_blank" rel="noreferrer"&gt;&amp;lsquo;Human Nature&amp;rsquo; - Jan&amp;rsquo;s Collective Live (feat. Josh Babu) &lt;/a&gt;- Michael Jackson and I might be the only people who haven&amp;rsquo;t watched his movie but my YouTube feed has been full of MJ related content. This orchestral arrangement of &lt;em&gt;Human Nature&lt;/em&gt; is particularly impressive and beautifully done.&lt;/p&gt;
&lt;p&gt;In other news, I&amp;rsquo;ve discovered &lt;a href="https://www.genesisowusu.com/" target="_blank" rel="noreferrer"&gt;Genesis Owusu&lt;/a&gt; through &lt;a href="https://www.abc.net.au/triplej" target="_blank" rel="noreferrer"&gt;triple j&lt;/a&gt; from his &lt;a href="https://youtu.be/wcswg-Y9aEo" target="_blank" rel="noreferrer"&gt;&amp;lsquo;Paint It, Black&amp;rsquo; cover&lt;/a&gt;. And so far I&amp;rsquo;m loving his discography including the few songs I&amp;rsquo;ve heard from his new album such as &lt;em&gt;STAMPEDE&lt;/em&gt; and &lt;em&gt;RUNNIN OUTTA TIME&lt;/em&gt;.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Books
&lt;div id="books" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I haven&amp;rsquo;t finished a single book this month but I realised I didn&amp;rsquo;t mention my favourite book from April. &lt;em&gt;Swimming in the Dark&lt;/em&gt; by Tomasz Jedrowski was a beautiful read and I don&amp;rsquo;t I can describe it any better than how I did on my Goodreads review: &amp;ldquo;A quiet, aching book about forbidden love in Communist Poland, where the personal and political are impossible to untangle. The central moral dilemma hangs over every page. To betray your lover or country. The story is told in the past tense and addressed to Janusz meaning we get the sense of loss and feel the darkness from the first page. The prose is beautiful and vivid despite the bleakness of the world it describes. This is deeply moving and hard to put down.&amp;rdquo;&lt;/p&gt;
&lt;h2 class="relative group"&gt;Articles
&lt;div id="articles" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://robertbirming.com/how-kill-blog/" target="_blank" rel="noreferrer"&gt;How to kill a blog&lt;/a&gt; - for all the bloggers out there and those who want to join the want, please don&amp;rsquo;t go niche.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://robertbirming.com/dont-reject-yourself/" target="_blank" rel="noreferrer"&gt;Don&amp;rsquo;t reject yourself&lt;/a&gt; - in a similar fashion to the article above, just hit the publish button for the draft you have. Some of us as perfectionists but it gets to a point where you just have to release something&lt;/p&gt;
&lt;p&gt;&lt;a href="https://robotpaper.ai/software-engineering-practices-are-also-useful-for-token-reduction" target="_blank" rel="noreferrer"&gt;Software Engineering Practices (are also) Useful for Token Reduction&lt;/a&gt; - this is a clear reiteration on the importance of minimisation and maintaining good software engineering practices even more so with agents.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.chrbutler.com/signals-002-frame-vs-framer" target="_blank" rel="noreferrer"&gt;Signals #002: The Frame vs. The Framer&lt;/a&gt; - i consider this a hopeful food for thought for anyone who dreads an AI apocalypse. Christopher explores how AI benchmarks and automation operate inside human-defined constraints, so the deeper human role remains intact.&lt;/p&gt;</description></item><item><title>Blind Faith on Librarians</title><link>https://insidemordecai.com/blind-faith-on-librarians/</link><pubDate>Tue, 19 May 2026 18:29:17 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/blind-faith-on-librarians/</guid><description>&lt;p&gt;For most of this year, I&amp;rsquo;ve travelled every Thursday to and fro Nanyuki for work.
That is exciting on it&amp;rsquo;s own.
But&amp;hellip; on our first trip there, we had about an hour to spare before the business of the day and so we stopped by a mall for a quick snack and chill.
That was the best idea cause we soon spotted that the mall has a bookshop and the readers among us had their interest piqued.&lt;/p&gt;
&lt;p&gt;The place was called &lt;a href="https://wineandspine.co.ke/" target="_blank" rel="noreferrer"&gt;Wine &amp;amp; Spine&lt;/a&gt;.
First of all what a name!
Full props to the guy or girl that came up with that name, I wish I had so.
However, the shop was a bit pricey.
Actually not even that pricey, it&amp;rsquo;s just that some of us are used to thrifted books and even ebooks (aargh).
I can&amp;rsquo;t fault the vibes though, it was immaculate.&lt;/p&gt;
&lt;p&gt;I got myself a copy of &lt;em&gt;Kafka on the Shore&lt;/em&gt; by Haruki Murakami and I totally blame that book for my recent reading slump.
I have a thing where I find it difficult to pick up a book upon completing something amazing.
That was the case with my first foray into Haruki Murakami&amp;rsquo;s work.&lt;/p&gt;
&lt;p&gt;I tried &lt;em&gt;East of Eden&lt;/em&gt; by John Steinbeck and other classics, resumed a book I had abandoned but nothing scratched my reading itch.
The only thing that came close was &lt;em&gt;The Girl with the Louding Voice&lt;/em&gt; by Abi Daré which I have been slowly reading.
The reason I say &amp;lsquo;it comes close&amp;rsquo; is I find the broken English writing style a bit jarring despite that being the point of the writing, but the story is interesting so far.&lt;/p&gt;
&lt;p&gt;And so&amp;hellip; I was a bit excited when my weekly trips to Nanyuki returned cause Lord knows I needed a recommendation.&lt;/p&gt;
&lt;p&gt;The lovely lady at Wines &amp;amp; Spine was welcoming as always.
She could tell I was undecided as usual.
I wanted every single book on there.
I thought of getting &lt;em&gt;Another Country&lt;/em&gt; by James Baldwin who&amp;rsquo;s one of my favourite authors.
However, she shed a light on the fact that classics might not be the best cure to my reading slump.
I hadn&amp;rsquo;t thought of but it makes sense seeing I had tried a bunch of classics but only Abi Daré&amp;rsquo;s book, not a classic, could tickle my fancy.
My criteria before was looking for shorter reads forgetting that the same type of book in a shorter format was still the type of book I didn&amp;rsquo;t need.
Truly a lapse of judgement on my part.&lt;/p&gt;
&lt;p&gt;Anyway, once again I walked away with a book in hand, this time from an author I didn&amp;rsquo;t know and a book I had no idea of.
Total blind faith on this lady.
I was torn between &lt;em&gt;Theft&lt;/em&gt; by Abdulrazak Gurnah and my eventual pick by the same author.
Her other recommendations were &lt;em&gt;Augustown&lt;/em&gt; by Kei Miller and &lt;em&gt;Dance of The Jacaranda&lt;/em&gt; by Peter Kimani but perhaps they were not the right medicine for my problem according to the doctor.
Eventually, I settled on &lt;em&gt;By the sea&lt;/em&gt; by Abdulrazak Gurnah mostly based on the blurb at the back but also it being cheaper than &lt;em&gt;Theft&lt;/em&gt; 😂.&lt;/p&gt;
&lt;p&gt;I write this a few days after purchasing that book and I gotta say I love it so far.
I don&amp;rsquo;t want to make this a book review but I enjoy the subject matter and the writing style.
Abdulrazak&amp;rsquo;s words make me want to savour the book slowly with no rush whatsoever.&lt;/p&gt;
&lt;p&gt;So what&amp;rsquo;s the point of writing all this?
I don&amp;rsquo;t exactly know but perhaps a need to urge you all, readers and wannabe readers, to place your faith on a librarian or an avid reader for your next read.
Pop into a bookshop or library near you, mention your interests, lay bare your current situation and await a recommendation.
Perhaps, you might get a banger like I did.
If not, then at least their future recommendation will be more precise and better.&lt;/p&gt;
&lt;p&gt;This could also apply to other forms of media, so get out there for more human recommendations.&lt;/p&gt;</description></item><item><title>April 2026 Dispatch</title><link>https://insidemordecai.com/april-2026-dispatch/</link><pubDate>Thu, 30 Apr 2026 23:01:56 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/april-2026-dispatch/</guid><description>&lt;p&gt;Welcome back to &lt;strong&gt;Dispatch&lt;/strong&gt;, a personal roundup of videos, records, and anything that I found interesting this month.
Think of &lt;strong&gt;Dispatch&lt;/strong&gt; as my &lt;em&gt;hopefully&lt;/em&gt; monthly mixtape from the internet with no real theme except “this was neat.”&lt;/p&gt;
&lt;h2 class="relative group"&gt;Videos
&lt;div id="videos" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/hKTdEYRXbPQ" target="_blank" rel="noreferrer"&gt;This School Is Now our Family Home… Come Inside!&lt;/a&gt; - Renovation videos scratch my home design itch and this does that very well. The house has a charm that most modern houses lack and the owner made some amazing design choices while actively honouring the house&amp;rsquo;s past as a school.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8E53NelYsqw" target="_blank" rel="noreferrer"&gt;What do you do when life gives you a million lemons?&lt;/a&gt; - South of France is undoubtedly beautiful but add a lemon (yes, the citrus fruit) festival to it with a Luke O&amp;rsquo;Sullivan twist and that makes for an interesting video.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/rjxAYdUe8uU" target="_blank" rel="noreferrer"&gt;Something very weird is happening on Tinder&lt;/a&gt; - Christophe investigates why more and more dating profiles look normal up until you hit the last photo. The rabbit holes leads down to potential scams.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/LOL2c2UIjv4" target="_blank" rel="noreferrer"&gt;CHINA - Why did I not know China was like this?&lt;/a&gt; - who doesn&amp;rsquo;t love a hidden gem? This easily makes China climb up my travel wish list.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Music
&lt;div id="music" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/niuxr0QqMSg" target="_blank" rel="noreferrer"&gt;2500 Montréalers sing L. Cohen’s “Hallelujah” in perfect harmony at Place Des Arts&lt;/a&gt; - It’s quite amazing what a bunch of people can do in a choral setup with minimal practice.&lt;/p&gt;
&lt;p&gt;The only new full length album I listened to and really liked was WOR$T GIRL IN AMERICA by Slayyyter.
A friend of mine put me on &lt;a href="https://youtu.be/TZCE6PfaUWA" target="_blank" rel="noreferrer"&gt;CRANK&lt;/a&gt; and thank heavens they did cause the entire album is funky, ravey and stank-faceable.
CRANK IT (UH).&lt;/p&gt;
&lt;h2 class="relative group"&gt;Films &amp;amp; Shows
&lt;div id="films--shows" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I absolutely loved these shows that had their season finales air in April:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/tv/136311-shrinking" target="_blank" rel="noreferrer"&gt;Shrinking&lt;/a&gt; - tender is the word.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/tv/95557-invincible" target="_blank" rel="noreferrer"&gt;Invincible&lt;/a&gt; - they still need to improve the animation style but what a story.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/tv/125935-abbott-elementary" target="_blank" rel="noreferrer"&gt;Abbott Elementary&lt;/a&gt; - thank the Lord for mockumentary shows.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/tv/224372-a-knight-of-the-seven-kingdoms" target="_blank" rel="noreferrer"&gt;A Knight of the Seven Kingdoms&lt;/a&gt; - this is the only one I didn&amp;rsquo;t watch this month but since Dispatch didn&amp;rsquo;t even exist when it aired, I&amp;rsquo;ll make the exception. The show is a great relaxed prequel to Game of Thrones following Dunk &amp;amp; Egg (think Pod &amp;amp; Tyrion) while closely resembling the books. It remains my favourite show of the year&amp;hellip; so far at least.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;While I also enjoyed these movies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/movie/337404-cruella" target="_blank" rel="noreferrer"&gt;Cruella (2021)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.themoviedb.org/movie/438631-dune" target="_blank" rel="noreferrer"&gt;Dune (2021)&lt;/a&gt; - I finally gave in and fell head over heels . My initial thought was I&amp;rsquo;d watch in bits just due to the sheer length of the film and my time back then but I ended up watching it in one seating. I&amp;rsquo;ll definitely get to the second part soon in anticipation of the third.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="relative group"&gt;Podcast
&lt;div id="podcast" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.pushkin.fm/podcasts/big-lives/george-michael-beyond-the-scandal-behind-the-icon" target="_blank" rel="noreferrer"&gt;George Michael: Beyond the Scandal, Behind the Icon&lt;/a&gt; - The hosts cover star behind &amp;ldquo;Careless Whisper&amp;rdquo; beyond the headlines and scandals. They describe is as &amp;ldquo;a moving reexamination of fame, queerness, and survival in a decade that preferred not to look too closely&amp;rdquo; and I couldn&amp;rsquo;t agree more. This podcast is quickly becoming one of my favourites, and some other amazing episodes for me are that of &lt;a href="https://www.pushkin.fm/podcasts/big-lives/amy-winehouse-the-price-of-being-honest" target="_blank" rel="noreferrer"&gt;Amy Winehouse&lt;/a&gt; and &lt;a href="https://www.pushkin.fm/podcasts/big-lives/sir-david-attenborough-the-voice-of-the-natural-world-turns-100-from-big-lives" target="_blank" rel="noreferrer"&gt;Sir David Attenborough&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Articles
&lt;div id="articles" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kevquirk.com/how-i-discover-new-blogs" target="_blank" rel="noreferrer"&gt;How I Discover New Blogs&lt;/a&gt; - I&amp;rsquo;ve been asked this question more than once before and Kev very nicely answers it. I love it when bloggers link to other posts/blogs in their post and that&amp;rsquo;s my primary method of discovery.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That’s all for this month’s &lt;strong&gt;Dispatch&lt;/strong&gt;.
See you in May 🤞.&lt;/p&gt;</description></item><item><title>How I Migrated from Google Photos to iCloud Photos</title><link>https://insidemordecai.com/google-photos-to-icloud/</link><pubDate>Tue, 21 Apr 2026 21:31:41 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/google-photos-to-icloud/</guid><description>
&lt;div
id="accordion-2e841ff2ef804ae33f9d4d41c5e97af1"
class="border border-neutral-200 dark:border-neutral-700 rounded-lg overflow-hidden"
data-accordion="collapse"
data-accordion-separated="false"
&gt;
&lt;details
class="group border-none"
data-accordion-item
&gt;
&lt;summary class="flex w-full cursor-pointer items-center justify-between gap-4 px-4 py-3 text-left text-lg font-semibold text-neutral-900 dark:text-neutral-100"&gt;
&lt;span class="flex items-center gap-2"&gt;
&lt;span&gt;TLDR&lt;/span&gt;
&lt;/span&gt;
&lt;span class="accordion-chevron ms-auto flex h-5 w-5 items-center justify-center print:hidden"&gt;
&lt;span class="relative block icon"&gt;&lt;svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
&gt;
&lt;path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/&gt;
&lt;/svg&gt;
&lt;/span&gt;
&lt;/span&gt;
&lt;/summary&gt;
&lt;div class="px-4 pb-4 text-neutral-700 dark:text-neutral-300"&gt;
First of all, check out if you have the &lt;a href="https://support.apple.com/en-us/120924" target="_blank" rel="noreferrer"&gt;official Google Photos to iCloud Photos&lt;/a&gt; option available in &lt;a href="https://takeout.google.com/" target="_blank" rel="noreferrer"&gt;Google Takeout&lt;/a&gt;.
If not, then try out &lt;a href="https://github.com/garzj/google-photos-migrate" target="_blank" rel="noreferrer"&gt;google-photos-migrate&lt;/a&gt; for a simple way to merge your Takeout metadata files and the images.
&lt;/div&gt;
&lt;/details&gt;
&lt;/div&gt;
&lt;style&gt;
#accordion-2e841ff2ef804ae33f9d4d41c5e97af1 &gt; details + details {
border-top: 1px solid rgb(var(--color-neutral-200));
}
.dark #accordion-2e841ff2ef804ae33f9d4d41c5e97af1 &gt; details + details {
border-top-color: rgb(var(--color-neutral-700));
}
&lt;/style&gt;
&lt;style&gt;
#accordion-2e841ff2ef804ae33f9d4d41c5e97af1 details[data-accordion-item] &gt; summary .accordion-chevron {
transform: rotate(-90deg);
transition: transform 200ms ease-in-out;
}
#accordion-2e841ff2ef804ae33f9d4d41c5e97af1 details[data-accordion-item][open] &gt; summary .accordion-chevron {
transform: rotate(0deg);
}
&lt;/style&gt;
&lt;script&gt;
(() =&gt; {
const root = document.getElementById("accordion-2e841ff2ef804ae33f9d4d41c5e97af1");
if (!root) return;
const items = root.querySelectorAll("details[data-accordion-item]");
items.forEach((item) =&gt; {
item.addEventListener("toggle", () =&gt; {
if (!item.open) return;
items.forEach((other) =&gt; {
if (other !== item) other.removeAttribute("open");
});
});
});
})();
&lt;/script&gt;
&lt;p&gt;After years and years of Apple bugging me to upgrade to iCloud+, I finally jumped ship.
The logical next step was to migrate from Google Photos to iCloud Photos.
But let me tell you Maina, the process was not easy.&lt;/p&gt;
&lt;p&gt;I knew I would likely need to get my data from &lt;a href="https://takeout.google.com/" target="_blank" rel="noreferrer"&gt;Google Takeout&lt;/a&gt; and so I did.
The process was straightforward despite Google seemingly never updating that page.
In all honesty, the UX could be improved, and finding that page in the first place is its own challenge.
It honestly feels buried on purpose.&lt;/p&gt;
&lt;p&gt;Anyway, I downloaded my photos and that&amp;rsquo;s when I discovered every image file had a separate JSON file associated with it.
Turns out the images didn&amp;rsquo;t have any metadata embedded in them and if I were to upload them as-is, all the images would show as being from the day of the download.
The actual metadata was being stored in the JSON file.
What a pain in the a-&lt;/p&gt;
&lt;p&gt;However, I discovered there is an &lt;a href="https://support.apple.com/en-us/120924" target="_blank" rel="noreferrer"&gt;official migration&lt;/a&gt; option but lo and behold, Google didn&amp;rsquo;t offer it to me.
I had to figure out how to somehow merge my photos and the metadata files.
So it was back to the drawing board.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://exiftool.org/" target="_blank" rel="noreferrer"&gt;ExifTool&lt;/a&gt; emerged as the best option through my quick research with this &lt;a href="https://legault.me/post/correctly-migrate-away-from-google-photos-to-icloud" target="_blank" rel="noreferrer"&gt;article&lt;/a&gt; from Mathieu Legault (and others) shedding light on it.
I didn&amp;rsquo;t end up using the guide because once again, Google did what they do best.
They changed the metadata naming scheme with no backward compatibility, and somehow introduced filename inconsistencies too.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t the only one in this boat, so it was only a short time before I stumbled upon &lt;a href="https://blog.rpanachi.com/how-to-takeout-from-google-photos-and-fix-metadata-exif-info" target="_blank" rel="noreferrer"&gt;an elegant solution&lt;/a&gt; by Rodrigo Panachi.
He had a simple Ruby script to fix the filenames before using ExifTool.
That gave me the idea that perhaps there may be newer scripts out there that did everything.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s when I found what I was looking for, a tool called &lt;a href="https://github.com/garzj/google-photos-migrate" target="_blank" rel="noreferrer"&gt;google-photos-migrate&lt;/a&gt;.
It could do exactly what I wanted.
It resolves the filename issue, finds duplicates, moves errored images to a separate folder, and of course corrects the photo metadata.
The hassle afterwards is that if you already had some images on iCloud Photos, it would take some time for duplicates to surface and even longer to accurately recognise faces or even recognise them at all.&lt;/p&gt;
&lt;p&gt;But at least all your photos AND their metadata finally made it to your new home.&lt;/p&gt;</description></item><item><title>March 2026 Dispatch</title><link>https://insidemordecai.com/march-2026-dispatch/</link><pubDate>Tue, 31 Mar 2026 15:23:45 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/march-2026-dispatch/</guid><description>&lt;p&gt;A lot of individuals on the &amp;ldquo;indie web&amp;rdquo; have a periodic dump of links and I always find them cool, so why shouldn&amp;rsquo;t I give it a try?
Hopefully this series won&amp;rsquo;t be the only thing I post on this website.&lt;/p&gt;
&lt;p&gt;So&amp;hellip; welcome to &lt;strong&gt;Dispatch&lt;/strong&gt;, a personal roundup of videos, records, and anything that I found interesting this month.
Think of &lt;strong&gt;Dispatch&lt;/strong&gt; as my &lt;em&gt;hopefully&lt;/em&gt; monthly mixtape from the internet with no real theme except “this was neat.”&lt;/p&gt;
&lt;h2 class="relative group"&gt;Videos
&lt;div id="videos" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/If-XGaHZSts" target="_blank" rel="noreferrer"&gt;I made a SPACE MOVIE 🚀 without leaving my apartment&lt;/a&gt; - That is not clickbait, Caroline Klidonas did just that. This is a quirky video that will have you smiling.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/0f3RMYTCvMU" target="_blank" rel="noreferrer"&gt;Why the internet hates my surname&lt;/a&gt; - Luke O&amp;rsquo;Sullivan goes into an issue he faces with his second name on the internet and boy do I relate. It&amp;rsquo;s annoying that some modern systems still have issues or arbitrary restrictions when it comes to special characters.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/xOjOiIXO1P4" target="_blank" rel="noreferrer"&gt;The Novel Technologies Of Singapore&amp;rsquo;s Library System&lt;/a&gt; - Whoever titled this clearly had a blast and they deserve an award for enthusiasm. This is an interesting behind the scenes of a highly effective system from auto-sorting and cataloguing to book returns. You don&amp;rsquo;t have to love libraries to like this video.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/UecKUN9AUaM" target="_blank" rel="noreferrer"&gt;Can MKBHD&amp;rsquo;s Team Make ANY Phone Look Cinematic??&lt;/a&gt; - I watched this expecting a video akin to a tutorial but got something much better. It felt more like a short film festival from an insanely creative team. And it’s hilarious too.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/kKt46Lch2bo" target="_blank" rel="noreferrer"&gt;Why do office chairs have 5 legs?&lt;/a&gt; - If you&amp;rsquo;ve ever wondered (or not) why four legs might work for tables but not office chairs, this one&amp;rsquo;s for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/oIR8vd-bi8I" target="_blank" rel="noreferrer"&gt;If This Dam Fails, It Pollutes Half of Europe.&lt;/a&gt; - What On Earth Is This covers the back story of a toxic dam in Romania, how it came to be and the bleak future of it.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Music
&lt;div id="music" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Here are some albums I listened to this month for the first time and enjoyed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;J. Cole - The Fall-Off.&lt;/li&gt;
&lt;li&gt;Àsgeir - Julia.&lt;/li&gt;
&lt;li&gt;James Blake - Trying Times.&lt;/li&gt;
&lt;li&gt;Björk - Homogenic&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class="relative group"&gt;Books
&lt;div id="books" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I read only one book this month and I would totally recommend it.
&lt;em&gt;Kafka on the Shore&lt;/em&gt; by Haruki Murakami is a beautiful read.
However, I&amp;rsquo;d be lying if I said I fully understood everything but the journey was worthwhile.
It&amp;rsquo;s like an acid trip (not that I have indulged) on steroids with wild things happening.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Articles
&lt;div id="articles" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.escapistmagazine.com/tetris-anniversary-interview/" target="_blank" rel="noreferrer"&gt;Tetris at 40: A chat with creator Alexey Pajitnov – “I never imagined anything like what we see today”&lt;/a&gt; by The Escapist - if you&amp;rsquo;re like me and you love Tetris or are mildly interested in the game, then this is a lovely interview of the game creator. Additionally, you can watch Tetris the movie to quench that thirst.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.absurdpirate.com/performative-men-problem/" target="_blank" rel="noreferrer"&gt;The Performative Male “Problem”&lt;/a&gt; - some of us are not &amp;ldquo;performing&amp;rdquo; and simply love reading, wired headphones, records by female artists and whatever next thing that will be branded as performative.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gkeenan.co/avgb/fellas-is-it-gay-to-like-pop-music/" target="_blank" rel="noreferrer"&gt;Fellas, is it gay to like pop music? (or: “Toxic”)&lt;/a&gt; - not the first time linking to this article online but first time in this space. Plus the post is highly relatable for a bunch of fellas including myself.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That’s all for this month’s &lt;strong&gt;Dispatch&lt;/strong&gt;.
See you in April 🤞.&lt;/p&gt;</description></item><item><title>Re: FINE! I’ll Try Linux ONE MORE TIME...</title><link>https://insidemordecai.com/linux-one-more-time/</link><pubDate>Fri, 20 Mar 2026 16:46:28 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/linux-one-more-time/</guid><description>&lt;p&gt;Watching Linus Tech Tips&amp;rsquo; latest &lt;a href="https://youtu.be/kluoZ9RhmVo" target="_blank" rel="noreferrer"&gt;Linux challenge video&lt;/a&gt;, especially Linus&amp;rsquo; sections, is a genuinely painful experience.&lt;/p&gt;
&lt;p&gt;I might not be a Linux pro, but I sure am seasoned enough to know my way around.
And a few things immediately stood out.
So here&amp;rsquo;s a quick rundown of do&amp;rsquo;s and don&amp;rsquo;ts when picking a Linux distro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t bother with niche distros.&lt;/strong&gt; What I mean is don&amp;rsquo;t get caught up looking for a &amp;ldquo;gaming distro&amp;rdquo; or something overly specialised. Most of these are just mainstream distributions with a few extras pre-installed or minor tweaks. You can replicate all of that yourself, so it shouldn&amp;rsquo;t be your deciding factor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pick you preferred desktop environment first&lt;/strong&gt;. Start with the UI flavour you actually want to use (your desktop environment), then choose a popular distro that supports it well. For most people, that matters more than the distro itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid distros in transition&lt;/strong&gt;. I get why Pop OS was given another shot, especially after the feedback from the last challenge. But a bit of research goes a long way. COSMIC may be at version 1.0, but it&amp;rsquo;s still not fully stable, especially for the niche hardware or edge use cases like the one Linus tends to have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t rely on AI to pick your distro&lt;/strong&gt;. It&amp;rsquo;s often outdated, lacks nuance, and sometimes confidently wrong. That being said, AI can be genuinely useful for troubleshooting. It&amp;rsquo;s surprisingly effective for straightforward issues as long as you keep the usual LLM caveats in mind.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think most of the frustration came from the distro choice and doing the installation at a LAN event.
A more relaxed environment, without the pressure, would have helped a lot.&lt;/p&gt;
&lt;p&gt;Linux isn&amp;rsquo;t hard, everyone just needs to stop overthinking the entry point.
Most of the time I&amp;rsquo;ve broken my system, it was me, not the distro.
So&amp;hellip; just pick a popular mainstream distribution and play around.
With time, you&amp;rsquo;ll naturally get to the distrohopping phase.&lt;/p&gt;</description></item><item><title>Cloudflare Tunnel for Homelab Services</title><link>https://insidemordecai.com/homelab-cloudflare-tunnel/</link><pubDate>Mon, 09 Mar 2026 20:05:15 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/homelab-cloudflare-tunnel/</guid><description>&lt;p&gt;After getting my media stack stable as shown in my &lt;a href="https://insidemordecai.com/self-hosted-media-with-docker/" &gt;previous post&lt;/a&gt;, the next question was remote
access.&lt;/p&gt;
&lt;p&gt;As a side note, since I&amp;rsquo;ll be changing my homelab setup, I&amp;rsquo;m thinking of adding &lt;a href="https://tailscale.com/" target="_blank" rel="noreferrer"&gt;Tailscale&lt;/a&gt; as a VPN to securely connect to certain services.&lt;/p&gt;
&lt;p&gt;Anyway, I already manage my domains on Cloudflare, so using Cloudflare Tunnel would always the cleanest option.
I had used it before in Fedora and tried a containerized version on Arch.
So it was only natural for me to side-step to a Docker Compose setup.&lt;/p&gt;
&lt;p&gt;This is how I set mine up.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Why Cloudflare Tunnel
&lt;div id="why-cloudflare-tunnel" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No port forwarding&lt;/li&gt;
&lt;li&gt;No exposing my public IP&lt;/li&gt;
&lt;li&gt;Encrypted traffic by default&lt;/li&gt;
&lt;li&gt;Works well if you already use Cloudflare for DNS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s simple.
It&amp;rsquo;s predictable.
And it removes a lot of the usual home network headache.&lt;/p&gt;
&lt;p&gt;That being said, exposing internal services always carries risk.
Try to understand what you&amp;rsquo;re doing before making anything public.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Setup Process
&lt;div id="setup-process" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Create a tunnel from the Cloudflare dashboard: &lt;strong&gt;Zero Trust → Network → Connectors&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;After creating it, Cloudflare gives you a command to run the connector.
For Docker, it looks like this:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token randomTextHereAsTokenlSP1kY34p8^jKaX28XGo5xR5uVXftLHP0Y3+pBmT&lt;span class="nv"&gt;$jg&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Copy the token that appears after &lt;code&gt;--token&lt;/code&gt; and add it to your &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TOKEN=randomTextHereAsTokenlSP1kY34p8^jKaX28XGo5xR5uVXftLHP0Y3+pBmT$jg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deploy the container using your compose setup.
If you look at my setup in the previous post, I create a shared network.
This is simply to make it easy for the containers to communicate with each other since I have Cloudflared and the Arr Apps running in different stacks.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Application Routes
&lt;div id="application-routes" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Back in the Cloudflare dashboard, configure application routes for the tunnel.&lt;/p&gt;
&lt;p&gt;Each route maps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A public hostname (for example &lt;code&gt;seerr.yourdomain.com&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;To a local service (for example &lt;code&gt;http://seerr:5055&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can point different subdomains to different containers inside your Docker network.
Once saved, traffic flows through Cloudflare to your connector, and then into your local container.
No open ports required.&lt;/p&gt;
&lt;h2 class="relative group"&gt;A Note on Security
&lt;div id="a-note-on-security" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Just because you can expose something doesn&amp;rsquo;t mean you should.&lt;/p&gt;
&lt;p&gt;Make sure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Strong authentication is enabled (check out Explore Further section below for guide on Access Control)&lt;/li&gt;
&lt;li&gt;Default credentials are changed&lt;/li&gt;
&lt;li&gt;Services are updated&lt;/li&gt;
&lt;li&gt;You actually need remote access&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudflare Tunnel makes exposure safer, not magically safe.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re unsure, keep everything local.&lt;/p&gt;
&lt;h2 class="relative group"&gt;That&amp;rsquo;s It
&lt;div id="thats-it" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Once the tunnel is running, it&amp;rsquo;s mostly invisible.
It just works in the background.&lt;/p&gt;
&lt;p&gt;For me, this paired perfectly with my Docker media stack.
Clean internal networking, and controlled external access when needed.&lt;/p&gt;
&lt;p&gt;You can find compose files here:
&lt;a href="https://github.com/insidemordecai/homelab/tree/blog-media-stack-2026" target="_blank" rel="noreferrer"&gt;github.com/insidemordecai/homelab/tree/blog-media-stack-2026&lt;/a&gt;&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/" target="_blank" rel="noreferrer"&gt;Cloudflare Tunnel Official Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to &lt;a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/" target="_blank" rel="noreferrer"&gt;create a tunnel (dashboard)&lt;/a&gt; - step‑by‑step guide to creating and connecting your first tunnel directly from the Cloudflare dashboard.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://benjamintseng.com/2025/07/cloudflare-tunnels-for-your-home-server/" target="_blank" rel="noreferrer"&gt;Cloudflare Tunnels for Your Home Server&lt;/a&gt; - &lt;a href="https://benjamintseng.com/" target="_blank" rel="noreferrer"&gt;Benjamin Tseng &lt;/a&gt;has a solid section on authentication and access control that you can adapt for your media stack.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/selfhosted/comments/1bf9si9/guide_how_to_securely_gain_access_to_your_locally/" target="_blank" rel="noreferrer"&gt;How to SECURELY gain access to your locally self-hosted services from outside&lt;/a&gt; - a Reddit guide on &lt;a href="https://www.reddit.com/r/selfhosted/" target="_blank" rel="noreferrer"&gt;r/selfhosted&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cloudflare.com/securing-cloudflare-with-cloudflare-zero-trust/" target="_blank" rel="noreferrer"&gt;Securing Cloudflare with Cloudflare: a Zero Trust journey&lt;/a&gt; - a deeper dive into how Cloudflare applies Zero Trust principles to its own stack.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Self Hosted Media With Docker</title><link>https://insidemordecai.com/self-hosted-media-with-docker/</link><pubDate>Sat, 28 Feb 2026 12:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/self-hosted-media-with-docker/</guid><description>&lt;p&gt;I originally built this media stack as a complete beginner to homelabbing.
It started as a way to learn Docker while automating my setup and slowly turned into something I rely on daily.
Over time I refined it to the point where it runs quietly and flawlessly in the background.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m planning to migrate everything to Proxmox soon, so I&amp;rsquo;m posting my internal documentation before I tear it down.
This isn&amp;rsquo;t the only way to do it.
It&amp;rsquo;s simply how I did mine.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Hardware
&lt;div id="hardware" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This runs on my old laptop with an Intel Core i5-7200U with 8 gigs of DDR4 RAM and no dedicated GPU on bare metal Linux.
The distro doesn&amp;rsquo;t really matter since everything runs inside Docker but if you really need to know, I&amp;rsquo;ve used this setup with Arch Linux, Omarchy (which is basically pre-configured Arch) and CachyOS.
Nothing fancy.
No enterprise gear.
Just hardware I had lying around.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Why This Stack
&lt;div id="why-this-stack" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Jellyfin&lt;/strong&gt; because it&amp;rsquo;s open source. No paid tiers. No &amp;ldquo;upgrade to unlock this feature&amp;rdquo;. No authentication that needs to phone home. I want my media server to be mine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;qBittorrent&lt;/strong&gt; because it&amp;rsquo;s reliable and I&amp;rsquo;m used to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prowlarr&lt;/strong&gt; because managing indexers in one place is significantly cleaner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radarr / Sonarr / Bazarr&lt;/strong&gt; because automation is the whole point.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; because I can tear this down and spin it back up anywhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="relative group"&gt;Folder Mapping
&lt;div id="folder-mapping" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;At a high level, all the files live under &lt;code&gt;/data&lt;/code&gt; on the host.
This is my current structure:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;data
├── torrents
│ ├── completed
│ └── incomplete
└── media
├── movies
└── tv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create your directories before proceeding.
Here&amp;rsquo;s an easy command to run in your &lt;code&gt;/data&lt;/code&gt; directory if you want a
similar scheme:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p torrents/&lt;span class="o"&gt;{&lt;/span&gt;completed,incomplete&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mkdir -p media/&lt;span class="o"&gt;{&lt;/span&gt;movies,tv&lt;span class="o"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;Setup Process
&lt;div id="setup-process" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;The full &lt;code&gt;docker-compose.yml&lt;/code&gt; files and &lt;code&gt;.env.example&lt;/code&gt; templates live in
my homelab repository: &lt;a href="https://github.com/insidemordecai/homelab/tree/blog-media-stack-2026" target="_blank" rel="noreferrer"&gt;github.com/insidemordecai/homelab/tree/blog-media-stack-2026&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Clone it or download a zip of it.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Step 0
&lt;div id="step-0" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In the root directory, copy all &lt;code&gt;.env.example&lt;/code&gt; templates as &lt;code&gt;.env&lt;/code&gt; in
each subdirectory:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find . -name &lt;span class="s1"&gt;&amp;#39;.env.example&amp;#39;&lt;/span&gt; -execdir cp .env.example .env &lt;span class="se"&gt;\;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Navigate to the directory with the &lt;code&gt;docker-compose.yml&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Add your user to the &lt;code&gt;docker&lt;/code&gt; group so you don&amp;rsquo;t need &lt;code&gt;sudo&lt;/code&gt; for every
command:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo usermod -aG docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;newgrp docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Change ownership of the data volume specified in the &lt;code&gt;.env&lt;/code&gt; file so all
services can access it:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown -R 1000:1000 /data/volume/in/.env/file&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Create a shared Docker network: (I prefer this approach with Cloudflare Tunnels)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker network create stacknet&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Lastly, use the appropriate commands with the containers:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose up -d &lt;span class="c1"&gt;# to deploy containers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose stop &lt;span class="c1"&gt;# to stop containers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose rm &lt;span class="c1"&gt;# to remove containers (stop them first)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Now configure each application.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="caution"&gt;
&lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
&lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;
&lt;path fill="currentColor" d="M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-2.8-5.6-5.6-11.2-9.8-16.8l-50.6 58.8s-81.4-103.6-87.1-110.6C133.1 243.8 112 273.2 112 306.8C112 375.4 162.6 416 225.7 416z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="grow"&gt;
Caution
&lt;/div&gt;
&lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;&lt;code&gt;.env&lt;/code&gt; files in my repository are ignored by Git.
Do not commit or push tokens or credentials.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;qBittorrent
&lt;div id="qbittorrent" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://localhost:8080" target="_blank" rel="noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Launch qBittorrent and log in.
The username is &lt;code&gt;admin&lt;/code&gt; while the password is randomly generated on first launch.
To find the password:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker logs qbittorrent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Change the credentials under &lt;strong&gt;Web UI → Authentication&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Configure qBittorrent to your liking.
My preferences are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web UI → Authentication
&lt;ul&gt;
&lt;li&gt;Bypass authentication for clients on localhost&lt;/li&gt;
&lt;li&gt;Set &amp;ldquo;Ban client after consecutive failures&amp;rdquo; to 0 (be careful if
exposing qBittorrent)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Downloads → Saving Management
&lt;ul&gt;
&lt;li&gt;Default save path: &lt;code&gt;/data/torrents/completed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keep incomplete torrents in: &lt;code&gt;/data/torrents/incomplete&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enable Automatic torrent management&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Connections → Listening Port
&lt;ul&gt;
&lt;li&gt;Match whatever you forwarded on your router&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;BitTorrent
&lt;ul&gt;
&lt;li&gt;Configure queueing and seeding limits to your liking&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="relative group"&gt;Arr Apps
&lt;div id="arr-apps" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;h3 class="relative group"&gt;Prowlarr
&lt;div id="prowlarr" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://localhost:9696" target="_blank" rel="noreferrer"&gt;http://localhost:9696&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Go to &lt;strong&gt;Settings → Download Clients&lt;/strong&gt; and add qBittorrent.&lt;/p&gt;
&lt;p&gt;Match the Web UI port (default 8080) and enter credentials.
Host can be &lt;code&gt;qbittorrent&lt;/code&gt;, test and save.&lt;/p&gt;
&lt;p&gt;Add your indexers, test and save.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Flaresolverr
&lt;div id="flaresolverr" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;No configuration required in the container itself.&lt;/p&gt;
&lt;p&gt;In Prowlarr:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Settings → Indexers&lt;/li&gt;
&lt;li&gt;Add Flaresolverr&lt;/li&gt;
&lt;li&gt;Host: &lt;code&gt;http://flaresolverr:8191/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tag: &lt;code&gt;flaresolverr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Attach the tag to any problematic indexer that needs to bypass Cloudflare Captcha.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Radarr
&lt;div id="radarr" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://localhost:7878" target="_blank" rel="noreferrer"&gt;http://localhost:7878&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Media Management&lt;/strong&gt;, add Root Folder: &lt;code&gt;/data/media/movies&lt;/code&gt; (match your &lt;code&gt;docker-compose.yml&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Download Clients&lt;/strong&gt;, add qBittorrent (similar process to Prowlarr above) and test.&lt;/p&gt;
&lt;p&gt;Configure &lt;strong&gt;Remote Path Mapping&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host: &lt;code&gt;localhost&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Remote path: &lt;code&gt;/WHERE_YOUR_DATA_VOLUME_IS/data/torrents/completed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Local path: &lt;code&gt;/data/torrents/completed&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Copy the API key from &lt;strong&gt;Settings → General&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In Prowlarr:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Settings → Apps&lt;/li&gt;
&lt;li&gt;Add Radarr&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;http://container-name:port&lt;/code&gt; format in the Prowlarr/Radarr server field&lt;/li&gt;
&lt;li&gt;Paste the API key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My tweaks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Media Management
&lt;ul&gt;
&lt;li&gt;Check &amp;ldquo;Unmonitor Delete Movies&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Set &amp;ldquo;Proper and Repacks&amp;rdquo; to &amp;ldquo;Do Not Prefer&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Adjust Movie Folder Format (I include IMDb ID inline with &lt;a href="https://jellyfin.org/docs/general/server/media/movies" target="_blank" rel="noreferrer"&gt;Jellyfin&amp;rsquo;s naming scheme&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Custom Formats
&lt;ul&gt;
&lt;li&gt;Medium File Size - set your minimum and max file size for media downloaded and check &amp;lsquo;Required&amp;rsquo;. You can create another for Small and Large file sizes if desired.&lt;/li&gt;
&lt;li&gt;x264 - use preset under &lt;em&gt;Release Title&lt;/em&gt; and check &lt;em&gt;Required&lt;/em&gt; to find files encoded with H.264.&lt;/li&gt;
&lt;li&gt;x265 - use preset under &lt;em&gt;Release Title&lt;/em&gt; and check &lt;em&gt;Required&lt;/em&gt; to find files encoded with H.265.&lt;/li&gt;
&lt;li&gt;Repack/Proper from &lt;a href="https://trash-guides.info/Radarr/Radarr-collection-of-custom-formats/#repackproper" target="_blank" rel="noreferrer"&gt;TRaSH Guide&amp;rsquo;s Collection&lt;/a&gt; to allow Radarr to still pick repacks/proper files.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Profiles
&lt;ul&gt;
&lt;li&gt;Disable Remux, they tend to be large files.&lt;/li&gt;
&lt;li&gt;Score the custom formats according to preference e.g 1000 for Medium File Size, 100 for Repack/Proper and another score x264 and x265.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class="relative group"&gt;Sonarr
&lt;div id="sonarr" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://localhost:8989" target="_blank" rel="noreferrer"&gt;http://localhost:8989&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Same process as Radarr, but Root Folder: &lt;code&gt;/data/media/tv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Configure Download Client and Remote Path Mapping the same way.
Link Sonarr to Prowlarr the same way using the API key.&lt;/p&gt;
&lt;p&gt;In Media Management:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Follow &lt;a href="https://jellyfin.org/docs/general/server/media/shows" target="_blank" rel="noreferrer"&gt;Jellyfin TV naming scheme&lt;/a&gt; to Include IMDb ID in &lt;em&gt;Series Folder Format&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;em&gt;Rename Episodes&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 class="relative group"&gt;Bazarr
&lt;div id="bazarr" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://localhost:6767" target="_blank" rel="noreferrer"&gt;http://localhost:6767&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Sonarr&lt;/strong&gt;, enable and configure connection.
Set the minimum score in &lt;strong&gt;Options&lt;/strong&gt; to &lt;code&gt;90&lt;/code&gt; (TRaSH-Guide recommendation).&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Radarr&lt;/strong&gt;, enable and configure the connection.
Minimum score: &lt;code&gt;80&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Languages&lt;/strong&gt;, pick your desired language under &lt;em&gt;Languages Filter&lt;/em&gt;.
Create a Language Profile under &lt;em&gt;Languages Profile&lt;/em&gt; and assign it as default for Series and
Movies under &lt;em&gt;Default Language Profiles For Newly Added Shows&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Add subtitle providers under &lt;strong&gt;Settings → Providers&lt;/strong&gt;.
Create an account with a provider such as &lt;a href="https://opensubtitles.com" target="_blank" rel="noreferrer"&gt;opensubtitles.com&lt;/a&gt; first.&lt;/p&gt;
&lt;p&gt;Under &lt;strong&gt;Settings → Subtitles&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &amp;lsquo;Ignore Embedded PGS Subtitles&amp;rsquo; and &amp;lsquo;Ignore Embedded ASS Subtitles&amp;rsquo; under &lt;em&gt;Embedded Subtitles Handling&lt;/em&gt;. This is important if your media player has issues with these type of subtitles e.g Jellyfin for Samsung TV (check out &lt;a href="https://github.com/PatrickSt1991/Samsung-Jellyfin-Installer" target="_blank" rel="noreferrer"&gt;Jellyfin 2 Samsung&lt;/a&gt; and &lt;a href="https://github.com/Georift/install-jellyfin-tizen" target="_blank" rel="noreferrer"&gt;Install Jellyfin Tizen&lt;/a&gt; for how to sideload the app)&lt;/li&gt;
&lt;li&gt;Enable &amp;lsquo;Automatic Subtitles Audio Synchronization&amp;rsquo; under &lt;em&gt;Audio Synchronization / Alignment&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Score Threshold:
&lt;ul&gt;
&lt;li&gt;Series: &lt;code&gt;96&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Movies: &lt;code&gt;86&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="relative group"&gt;Jellyfin
&lt;div id="jellyfin" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://localhost:8096" target="_blank" rel="noreferrer"&gt;http://localhost:8096&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Complete initial setup in browser and map your libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Movies: &lt;code&gt;/data/media/movies&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TV: &lt;code&gt;/data/media/tv&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it.
Tweak the settings to your liking.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Jellyseerr
&lt;div id="jellyseerr" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note"&gt;
&lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
&lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class="grow"&gt;
Note
&lt;/div&gt;
&lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;And wouldn’t you know it, just after posting this article I learned that the Seerr team &lt;a href="https://docs.seerr.dev/blog/seerr-release" target="_blank" rel="noreferrer"&gt;announced&lt;/a&gt; they’ll be merging Overseerr and Jellyseerr.
You can find the &lt;a href="https://docs.seerr.dev/migration-guide" target="_blank" rel="noreferrer"&gt;migration guide here&lt;/a&gt;.
Also, you can find my Seerr implementation on my &lt;a href="https://github.com/insidemordecai/homelab" target="_blank" rel="noreferrer"&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://localhost:5055" target="_blank" rel="noreferrer"&gt;http://localhost:5055&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Follow the on-screen guide.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jellyfin hostname: &lt;code&gt;jellyfin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Leave the port as is unless you had changed this&lt;/li&gt;
&lt;li&gt;Test and save, the API keys will auto-configure&lt;/li&gt;
&lt;li&gt;Add Radarr and Sonarr&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 class="relative group"&gt;Firewall
&lt;div id="firewall" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;You may need to allow certain ports, but only if necessary.&lt;/p&gt;
&lt;p&gt;For example, if using &lt;code&gt;ufw&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow 6881/tcp &lt;span class="c1"&gt;#default qBittorrent listening port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ufw allow 6881/udp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Be deliberate.
Don&amp;rsquo;t open ports blindly.&lt;/p&gt;
&lt;h2 class="relative group"&gt;A Note on Exposing Services
&lt;div id="a-note-on-exposing-services" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;If you decide to expose any of these services outside your local network, understand the risks first.&lt;/p&gt;
&lt;p&gt;Do not just forward ports and hope for the best.
Use proper authentication, reverse proxies, or secure tunnels.
Know what you&amp;rsquo;re exposing and why.&lt;/p&gt;
&lt;p&gt;This stack runs perfectly fine entirely within a local network.
The next post will show &lt;a href="https://insidemordecai.com/homelab-cloudflare-tunnel/" &gt;how to use Cloudflare Tunnels to securely expose some services&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The full compose files and configuration templates are available here:
&lt;a href="https://github.com/insidemordecai/homelab/tree/blog-media-stack-2026" target="_blank" rel="noreferrer"&gt;github.com/insidemordecai/homelab/tree/blog-media-stack-2026&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This setup has been stable for me for a long time.
If I ever need to rebuild it on another machine, it&amp;rsquo;s just a matter of cloning the repo and running &lt;code&gt;docker compose up -d&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Next step: rebuilding this properly under Proxmox.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.servarr.com/" target="_blank" rel="noreferrer"&gt;Servarr Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://trash-guides.info/" target="_blank" rel="noreferrer"&gt;TRaSH Guides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TechHutTV/homelab/" target="_blank" rel="noreferrer"&gt;TechHut&amp;rsquo;s Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Migrating a Hugo Site from Cloudflare Pages to Workers</title><link>https://insidemordecai.com/hugo-migration-cloudflare-pages-workers/</link><pubDate>Sat, 21 Feb 2026 21:47:59 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/hugo-migration-cloudflare-pages-workers/</guid><description>&lt;p&gt;Cloudflare has been gently (and not so gently) nudging folks away from Pages for a while now.
Their new option, Workers, promised to be bigger and better but I didn&amp;rsquo;t need it since I run a simple static site.
Nonetheless, I tried deleting my Pages project to switch over, but it turns out you can&amp;rsquo;t do that with a single click if you have a lot of deployments.
Their guide didn&amp;rsquo;t seem as straightforward as I&amp;rsquo;d hoped, but looking back, it&amp;rsquo;s actually pretty easy.&lt;/p&gt;
&lt;p&gt;So&amp;hellip; I recently ran into an unrelated issue with my site, and my attempts to fix it pushed me try out different deployment environments.
In the process, I gave in and moved everything over to Workers.&lt;/p&gt;
&lt;p&gt;I won&amp;rsquo;t bore you with the why, the differences, or other minutiae.
Here&amp;rsquo;s what I&amp;rsquo;ll cover and how I did it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How to clean up old Cloudflare Pages project.&lt;/li&gt;
&lt;li&gt;Configuring your Hugo site for the switch&lt;/li&gt;
&lt;li&gt;Migrating to Workers.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class="relative group"&gt;Cleaning up the Old Pages Project
&lt;div id="cleaning-up-the-old-pages-project" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;The first obstacle, as mentioned, was simply &lt;strong&gt;getting rid of&lt;/strong&gt; the old Pages project.&lt;/p&gt;
&lt;p&gt;Cloudflare’s UI will happily let you click “Delete project” and then complain if you have a long deployment history.
At least that&amp;rsquo;s the limitation at the time of writing.
In my case I had hundreds of previous deployments since &lt;a href="https://insidemordecai.com/switched-to-cloudflare-pages/" &gt;switching to Cloudflare Pages&lt;/a&gt; back in 2023.
The workaround is a small Node tool they document that iterates through deployments and deletes them via the API.&lt;/p&gt;
&lt;p&gt;Here is there guide on the &lt;a href="https://developers.cloudflare.com/pages/platform/known-issues/#delete-a-project-with-a-high-number-of-deployments" target="_blank" rel="noreferrer"&gt;Known Issues page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I struggled with finding the correct Account ID, but even more with configuring the API token.
Here&amp;rsquo;s what to note / rough steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If you&amp;rsquo;re like me and only have a single account, simply click the menu button next to your account name in the Cloudflare dashboard and select &lt;strong&gt;Copy Account ID&lt;/strong&gt;. If that isn&amp;rsquo;t clear or you have multiple accounts, then follow the official guide: &lt;a href="https://developers.cloudflare.com/fundamentals/account/find-account-and-zone-ids/" target="_blank" rel="noreferrer"&gt;Find account and zone IDs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For the API token, simply head into your &lt;a href="https://dash.cloudflare.com/" target="_blank" rel="noreferrer"&gt;Cloudflare dashboard&lt;/a&gt; and go to &lt;strong&gt;My Profile&lt;/strong&gt; &amp;gt; &lt;strong&gt;API Tokens&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create Token&lt;/strong&gt; and pick the &lt;strong&gt;Create Custom Token&lt;/strong&gt; option.&lt;/li&gt;
&lt;li&gt;Give your token a name and these permissions:
&lt;ul&gt;
&lt;li&gt;Scope: &lt;strong&gt;account‑level&lt;/strong&gt;, not zone or user-level.&lt;/li&gt;
&lt;li&gt;Permission: &lt;code&gt;Cloudflare Pages: Edit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;You can define how long the token will stay active under the TTL section or simply delete it after using it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run the script to purge deployments until only the active deployment remains.&lt;/li&gt;
&lt;li&gt;Remove any custom domains in the Cloudflare Pages project setting and now delete the project.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s actually pretty straighforward.
Now we can think about migrating to Workers, but we first need to configure a few things.&lt;/p&gt;
&lt;h2 class="relative group"&gt;How to Deploy a Hugo Site on Cloudflare Workers
&lt;div id="how-to-deploy-a-hugo-site-on-cloudflare-workers" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;While Cloudflare hasn’t killed off Pages yet, it&amp;rsquo;s no secret that it isn’t getting the attention it used to.
They even recommend &lt;a href="https://blog.cloudflare.com/full-stack-development-on-cloudflare-workers/#start-with-workers" target="_blank" rel="noreferrer"&gt;starting with Workers&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Cloudflare Pages will continue to be supported, but, going forward, all of our investment, optimizations, and feature work will be dedicated to improving Workers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;Add a Wrangler Config
&lt;div id="add-a-wrangler-config" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Start by adding a &lt;code&gt;wrangler.jsonc&lt;/code&gt; file to the root of your site.
Workers use this file to understand how your Hugo site should be built and deployed.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;insidemordecai&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;compatibility_date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2026-02-21&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;assets&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;directory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./public&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;html_handling&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;auto-trailing-slash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;not_found_handling&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;404-page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;run_worker_first&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hugo --gc --minify&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;workers_dev&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;preview_urls&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Replace the &lt;code&gt;name&lt;/code&gt; field to match your domain or project name.
You can adjust the compatibility date to the day you’re generating the config.
The remaining defaults should work as-is.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Pin Workers to a Specific Hugo Version
&lt;div id="pin-workers-to-a-specific-hugo-version" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="note"&gt;
&lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
&lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class="grow"&gt;
Note
&lt;/div&gt;
&lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;This section is totally &lt;strong&gt;optional&lt;/strong&gt;. If you don&amp;rsquo;t need it, skip right ahead to the next section.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;While attempting to fix my previously mentioned unrelated issue, I tried to force Workers to use a specific Hugo version.
I wasted a lot of time trying this, but Workers kept using a different version.
After scouring the build logs, it turns out you don&amp;rsquo;t declare this in the &lt;code&gt;wrangler.jsonc&lt;/code&gt; file since that only makes it a runtime variable.&lt;/p&gt;
&lt;p&gt;You have two options if you want Workers to use a specific Hugo version:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;build.sh&lt;/code&gt; script and update the subsequent build line in the &lt;code&gt;wranger.jsonc&lt;/code&gt; file. It worked, though in the end I didn’t need it for my issue. I’d like to think someone out there might find it helpful though.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Pin to a specific Hugo version (update when needed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HUGO_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0.155.3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HUGO_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://github.com/gohugoio/hugo/releases/download/v&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HUGO_VERSION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/hugo_extended_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HUGO_VERSION&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_Linux-64bit.tar.gz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sL &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HUGO_URL&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; tar xz hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;HUGO_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production ./hugo --gc --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;chmod a+x build.sh &amp;amp;&amp;amp; ./build.sh&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Configure it in your Workers project setting under the &lt;em&gt;Variables and secrets&lt;/em&gt; option of the &lt;strong&gt;Build&lt;/strong&gt; sub-section.
&lt;ul&gt;
&lt;li&gt;Variable name: &lt;code&gt;HUGO_VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Value: &lt;code&gt;155.3&lt;/code&gt; (enter the version you want)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I didn’t realise the second option existed at first, so you’re welcome for the script.
Otherwise, I recommend the second option.
It’s what I used back in Cloudflare Pages, and it’s just neater.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Create the Workers Project
&lt;div id="create-the-workers-project" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;With everything in place, configure your Worker for deployment:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://dash.cloudflare.com/" target="_blank" rel="noreferrer"&gt;Cloudflare Dashboard&lt;/a&gt;, press the &lt;strong&gt;Add&lt;/strong&gt; button in the upper right corner, and select “Workers” from the drop down menu.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Continue with GitHub&lt;/strong&gt; (or your preferred option) and choose the project repository.&lt;/li&gt;
&lt;li&gt;Name your Workers project.&lt;/li&gt;
&lt;li&gt;Leave the rest at their defaults.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With everything configured, Workers will build the site and deploy it.
It should be live within a minute.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Configure Custom Domain
&lt;div id="configure-custom-domain" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Now it&amp;rsquo;s time to reconfigure the custom domains you used with your Pages project and be done with it, unless you want to stick with the default &lt;code&gt;*.workers.dev&lt;/code&gt; URL.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open your Workers project and navigate to the Settings tab.&lt;/li&gt;
&lt;li&gt;Under the &lt;strong&gt;Domains &amp;amp; Routes&lt;/strong&gt; sub-section, click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pick &lt;strong&gt;Custom Domain&lt;/strong&gt; and enter your domain name.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add domain&lt;/strong&gt; at the bottom and that&amp;rsquo;s it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cloudflare will handle DNS configuration automatically.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it, your Hugo site should be available on your domain in a couple of minutes.&lt;/p&gt;
&lt;p&gt;If you deploy often and plan to keep scaling, Workers feels like the right long-term home.
Pages still works, but it’s clear where Cloudflare’s focus is.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/host-and-deploy/host-on-cloudflare/" target="_blank" rel="noreferrer"&gt;Host on Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.cloudflare.com/full-stack-development-on-cloudflare-workers/" target="_blank" rel="noreferrer"&gt;Your frontend, backend, and database — now in one Cloudflare Worker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Workers &lt;a href="https://developers.cloudflare.com/workers/configuration/compatibility-dates/" target="_blank" rel="noreferrer"&gt;Compatibility dates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kahwee.com/2025/migrating-from-cloudflare-pages-to-workers/" target="_blank" rel="noreferrer"&gt;Migrating from Cloudflare Pages to Workers - Do You Even Need To?&lt;/a&gt; - a different method to migrate.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>2025 in Books</title><link>https://insidemordecai.com/2025-in-books/</link><pubDate>Tue, 06 Jan 2026 13:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/2025-in-books/</guid><description>&lt;p&gt;Like every previous year, Goodreads prompted me to set how many books I wanted to read as the year began.
&lt;a href="https://insidemordecai.com/2024-in-books/" &gt;I had read 28 books in 2024&lt;/a&gt; and you&amp;rsquo;d think this would have been the bare minimum for 2025, but no, I went a different route.
20 books seemed like a more reasonable target, with a twist: reading thiccc books.&lt;/p&gt;
&lt;p&gt;So&amp;hellip; I typed out my reading goals in my notes app:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Read 20 books&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Read at least one chunky book (~500 pages or more)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Read more African literature
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; at least one Kenyan author&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; at least one Chimamanda Ngozi Adichie book&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Start on the GOT/ASOIAF series, continue the Red Rising series&lt;/li&gt;
&lt;li&gt;&lt;input checked="" disabled="" type="checkbox"&gt; Read at least one (auto)biography or memoir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing I read 20 books in 2025 totalling 4,397 pages. My shortest book was Fyodor Dostoyesky&amp;rsquo;s Bobok with 22 pages and the longest book being Chimamanda Ngozi Adichie&amp;rsquo;s Half of a Yellow Sun with 435 pages."
width="2180"
height="1572"
src="https://insidemordecai.com/2025-in-books/img/2025-books-overview_hu_f90fc4642084017b.webp"
srcset="https://insidemordecai.com/2025-in-books/img/2025-books-overview_hu_f90fc4642084017b.webp 800w, https://insidemordecai.com/2025-in-books/img/2025-books-overview_hu_9ea8357d85d312b.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2025-in-books/img/2025-books-overview.webp"&gt;&lt;figcaption&gt;Overview of books I read in 2025&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;So, how did this all pan out?
I achieved my target, but not in terms of book size.
The upside is that my average page count was 219 pages, up from 192 pages in 2024.
Regarding &lt;em&gt;A Song of Ice and Fire&lt;/em&gt; (the book series that &lt;em&gt;Game of Thrones&lt;/em&gt; is based on), I never got to turn those pages but my priority was on the Dunk &amp;amp; Egg novellas due to the upcoming HBO series.
I read &lt;em&gt;A Knight of the Seven Kingdoms&lt;/em&gt; and loved it.
George R.R. Martin has a way with words and world-building that has you deeply fixated on the book.
I didn&amp;rsquo;t resume the Red Rising series and I really wish I had, though.
Perhaps I wouldn&amp;rsquo;t have had a major reading slump.
That said, it wasn&amp;rsquo;t a total loss.&lt;/p&gt;
&lt;p&gt;With that out of the way, here are all the books I read in 2025 and some details of my favourite picks.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="A collage of the book covers of all the books I read in 2025"
width="1484"
height="1604"
src="https://insidemordecai.com/2025-in-books/img/2025-reads_hu_73d60a1b4853ca03.webp"
srcset="https://insidemordecai.com/2025-in-books/img/2025-reads_hu_73d60a1b4853ca03.webp 800w, https://insidemordecai.com/2025-in-books/img/2025-reads_hu_c2bcfdbae39d5a35.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2025-in-books/img/2025-reads.webp"&gt;&lt;figcaption&gt;Books I read in 2025&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Out of everything I read, a few stood out from the rest.
My top recommendations in no particular order have to be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;James&lt;/em&gt; by Percival Everett&lt;/li&gt;
&lt;li&gt;&lt;em&gt;I Who Have Never Known Men&lt;/em&gt; by Jacqueline Harpman&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Martyr!&lt;/em&gt; by Kaveh Akbar&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Half of a Yellow Sun&lt;/em&gt; by Chimamanda Ngozi Adichie&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Misery&lt;/em&gt; by Stephen King&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;James&lt;/em&gt; is the first book (303 pages) I can remember ever reading in 24 hours.
It&amp;rsquo;s a reimagining of &lt;em&gt;Adventures of Huckleberry Finn&lt;/em&gt; told from Jim&amp;rsquo;s point of view.
He goes on a dangerous journey as a runaway slave until he can figure out how to rescue his family.
Percival Everett manages to weave in a bit of humour but even then, I can&amp;rsquo;t provide a description that will do this book justice.
Just simply read it.
If I was forced to pick my favourite book of the year, then this would be it.&lt;/p&gt;
&lt;p&gt;While &lt;em&gt;James&lt;/em&gt; was gripping in its momentum, the next book stayed with me for entirely different reasons.
&lt;em&gt;I Who Have Never Known Men&lt;/em&gt; is the only non-5 star read on this list but it started life as a 3 star read before its upgrade to 4 stars.
Simply because, the story stuck with me.
It felt like a new take on an old tired idea of being the last man standing on earth.
We follow the young main character alongside 39 other women in a dystopian and desolate world as the last people alive.
Along the way, we get glimpses of hope but it&amp;rsquo;s quickly dashed every single time right till the final traumatising sentence.
I have a positive spin on the outcome but I fear spoiling the book, so&amp;hellip; there&amp;rsquo;s a reply link at the bottom.&lt;/p&gt;
&lt;p&gt;Still thinking about meaning and survival, we move on to my next pick – &lt;em&gt;Martyr!&lt;/em&gt;.
Kaveh Akbar shifts between different points of view with lyrical writing and a unique structure to cover martyrdom.
The main character is an Iranian boy living in America exploring the idea of making your death matter.
Alongside this, the author covers themes of sobriety, grief, and identity with a sprinkle of humour to lighten the subject.
Again, if I had a gun to my head, then I&amp;rsquo;d pick this as my second favourite book of the year.&lt;/p&gt;
&lt;p&gt;One of my goals this year was to read more African literature, which is how I ended up with &lt;em&gt;Half of a Yellow Sun&lt;/em&gt;.
I&amp;rsquo;m always left in awe after watching a Chimamanda interview.
I get the need to protest or take an action.
I&amp;rsquo;d joke with myself that when I grow up, I want to be as eloquent as her.
However, it felt sacrilegious to have never read a book from her so I started off with this.
It&amp;rsquo;s a popular book and many Kenyans have at least heard of the title.
I was not surprised by the writing and the detail in the book.
What I wasn’t prepared for, though, were the events themselves.
I was shocked by the accounts of the characters.
The book is largely based on the Nigeria-Biafra war so this was a learning moment for me.
It showcases how tribalism can lead to widespread bloodshed and degradation of humanity.
Reading this in the present day made it feel uncomfortably relevant.
We aren&amp;rsquo;t taught about this war in school but it totally should especially with some local leaders spewing tribal rhetoric at the time of reading.
This book is a stark reminder that such division remains close to the surface, bubbling slowly as it waits for a moment of eruption.
It&amp;rsquo;s very reminiscent of other tragedies across Africa with many rooted in, perhaps unsurprisingly, colonial era divide-and-conquer tactics.&lt;/p&gt;
&lt;p&gt;After all that emotional weight, my next pick is something completely different, a little more unsettling – &lt;em&gt;Misery&lt;/em&gt;.
This was my first foray into Stephen King&amp;rsquo;s massive catalogue and I was not disappointed.
I mean what a writer!
The book is basically a chilling tale on how obsession can turn hellish and how far a &amp;ldquo;fan&amp;rdquo; can go.
It&amp;rsquo;s beautifully descriptive yet bleak in the best way and soul-crushing, especially because the horror feels so real and within the realms of possibility.
This is such a gut-wrenching, gripping and unforgettable story.&lt;/p&gt;
&lt;p&gt;So yeah, that was my reading year and those are my picks.&lt;/p&gt;
&lt;p&gt;Which one do you like the sound of?
How many books did you read?
What was your best read of the year?
Any other recommendations?
I&amp;rsquo;d love to hear from you all.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing my most read genres in 2025"
width="1710"
height="1638"
src="https://insidemordecai.com/2025-in-books/img/2025-reads-by-genre_hu_bff2010816760fed.webp"
srcset="https://insidemordecai.com/2025-in-books/img/2025-reads-by-genre_hu_bff2010816760fed.webp 800w, https://insidemordecai.com/2025-in-books/img/2025-reads-by-genre_hu_763275745a9244ab.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2025-in-books/img/2025-reads-by-genre.webp"&gt;&lt;figcaption&gt;My most read genres in 2025&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing the books I finished in each month of 2025"
width="1710"
height="2420"
src="https://insidemordecai.com/2025-in-books/img/2025-reads-by-month_hu_2f42a166fb4109b1.webp"
srcset="https://insidemordecai.com/2025-in-books/img/2025-reads-by-month_hu_2f42a166fb4109b1.webp 800w, https://insidemordecai.com/2025-in-books/img/2025-reads-by-month_hu_242bef791ad7e398.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2025-in-books/img/2025-reads-by-month.webp"&gt;&lt;figcaption&gt;Monthly overview of books I read in 2025&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>The Fragmentation Problem of Watch Lists</title><link>https://insidemordecai.com/watch-lists-federation/</link><pubDate>Wed, 24 Dec 2025 12:12:28 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/watch-lists-federation/</guid><description>&lt;blockquote&gt;&lt;p&gt;All I want for Christmas is to find that darn movie I’ve been meaning to watch. What was it called again? I could have sworn I bookmarked it somewhere…&lt;/p&gt;
&lt;p&gt;&amp;ndash; Janko Roettgers on &lt;a href="https://www.lowpass.cc/p/streaming-wish-lists-bookmarks-federation-netflix-plex" target="_blank" rel="noreferrer"&gt;Streaming wish lists are broken. Federation could fix them.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Like many of you, I have a list that endlessly grows and that is a list of shows and films I want to watch.
The process is always the same.
I find something I like from YouTube, or a friend, or an article and I simply append it to my master list.&lt;/p&gt;
&lt;p&gt;For a long time I tracked this on paper, but I made the switch to using &lt;a href="https://www.tvtime.com/" target="_blank" rel="noreferrer"&gt;TV Time&lt;/a&gt; very early on.
The process remained the same but my list was now more &amp;ldquo;mobile&amp;rdquo;.
With this switch to digital, my media tracking did not end up simpler, but much more segregated.
I had a long list on Netflix, another on Plex (when I liked it back then), with some on Showmax while others were somehow on Google as well.
Quitting Netflix made it quite a tedious process to migrate my watch list, but I soldiered on.
I doubled down on having everything on TV Time and my setup was everything I could wish for.
I could track what I wanted, get a heads up when my shows aired and plan around film releases.&lt;/p&gt;
&lt;p&gt;All was rosy until the frustrations crept in.
The app didn&amp;rsquo;t seem to improve, updates reduced, bugs here and there but that was just the tip of the iceberg.
My biggest drawback with the app was (and still is) how laggy it became over the years.
I would open the app and be faced with a spinning wheel for what seemed like an eternity.
Sometimes I&amp;rsquo;d simply go back to where I got my recommendation and screenshot the film/show name or write it down to add to TV Time later.&lt;/p&gt;
&lt;p&gt;The issues made it seem like I was moving back to the days when I had a single list on paper.&lt;/p&gt;
&lt;p&gt;So in 2024, I spent some time on many subreddits searching for a different solution.
Nothing could match my criteria and the perfect TV Time alternative eluded me.
The simplicity of my setup with how I could track both my films and shows in one place was what I liked most.
I didn&amp;rsquo;t want to opt for platforms that handle only one type of media.&lt;/p&gt;
&lt;p&gt;With no success in my search, I caved in and finally signed up to &lt;a href="https://letterboxd.com/" target="_blank" rel="noreferrer"&gt;Letterboxd&lt;/a&gt; and &lt;a href="https://www.serializd.com/" target="_blank" rel="noreferrer"&gt;Serializd&lt;/a&gt;.
I initially wanted to phase out TV Time but the force of habit made me think otherwise.
So&amp;hellip; I juggled and still juggle three applications.
Definitely not the ideal setup I signed up for.&lt;/p&gt;
&lt;p&gt;Anyway, the process of tracking anything goes like this nowadays: I watch a trailer that I like, fish out my phone, add it to TV Time, actively try to distinguish if the trailer is of a film/show and finally opening Letterboxd/Serializd to add it there too.
This is in stark contrast to when I would simply watch something, pull up my phone and add it to TV Time.&lt;/p&gt;
&lt;p&gt;I really wish there was a simpler way to have your data.
The huge issue in my case is having to do media tracking in multiple apps when federation seems like a logical solution.
Janko Roettgers wishes for a future where you simply add something on Netflix and it gets federated across different applications.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Instead of keeping all watch-list data in a silo, these services should enable consumers to opt into sharing it between services. That way, if I bookmark a movie on Netflix, the Netflix app shares that information with my Plex watch list. Once I watch it, it disappears from both lists again.&lt;/p&gt;
&lt;p&gt;Ideally, I’d want to have a bunch of different ways to enter this kind of data and just as many ways to consume it. Maybe I’d keep one master list maintained by Plex, Google, or another company. But I’d also want to be able to keep smashing that bookmark button in whatever streaming app I’m in and have all my lists across all providers update in real time.&lt;/p&gt;
&lt;p&gt;&amp;ndash; Janko Roettgers on &lt;a href="https://www.lowpass.cc/p/streaming-wish-lists-bookmarks-federation-netflix-plex" target="_blank" rel="noreferrer"&gt;Streaming wish lists are broken. Federation could fix them.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Federation isn&amp;rsquo;t sexy but oh boy is it useful.
Its end goal shouldn&amp;rsquo;t be social media lest it succumb to the same fate as the blockchain (stay with me) where ideology trumped practicality with crypto as its only major use case.
Media tracking seems more feasible and practical than social media that&amp;rsquo;s proven difficult and high stakes.
There won&amp;rsquo;t be a need for virality, moderation, or algorithmic manipulation.
Just simple, low-frequency data.&lt;/p&gt;
&lt;p&gt;The problem is who owns this data and not the platforms themselves.
I remember how once a movie left Netflix, that&amp;rsquo;s how it also simply ceased to exist in your watch list with no remnant of what used to be.
This is a loss of history and not just inconvenience.
You end up losing proof it ever mattered to you and that&amp;rsquo;s why federation makes sense.
The current solution makes the different places act like temporary custodians of this data.
I should be able to easily migrate something as personal as my taste in media between platforms.
Our bookmarks should be liberated and only then, will everyone (or at least those as nitpicky as myself) be happy.&lt;/p&gt;
&lt;p&gt;I know this is just but an idea that likely won&amp;rsquo;t materialise.
Different networks and platforms have an incentive to keep you locked in.
Watchlists act as an engagement tool to them.
A way to reduce their subscription churn rate.
What Janko Roettgers proposes benefits users, not platforms.&lt;/p&gt;
&lt;p&gt;For now we can hope for one neutral, user-controlled list where apps act as clients.
We can add once, mark as watched once, export our data anytime, and switch apps without losing years of history.&lt;/p&gt;
&lt;p&gt;I know no executive is reading this but I thought I&amp;rsquo;d chime in with my two cents.
A guy can only wish, and in that spirit, happy holidays.&lt;/p&gt;</description></item><item><title>Living With Too Many Recommendations</title><link>https://insidemordecai.com/living-with-too-many-recommendations/</link><pubDate>Wed, 10 Dec 2025 12:08:12 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/living-with-too-many-recommendations/</guid><description>&lt;p&gt;&lt;a href="https://www.youtube.com/@mkbhd" target="_blank" rel="noreferrer"&gt;Marques Brownlee&lt;/a&gt; sometimes mentions on his &lt;a href="https://www.youtube.com/@Waveform" target="_blank" rel="noreferrer"&gt;podcast&lt;/a&gt; that TV viewership of YouTube videos is on the rise.
I have to say I fall squarely within this camp.
The bigger screen makes everything, especially cinematic videos, so much more enjoyable.
Using the remote also feels far more seamless than using a phone.
A kid recently told me that&amp;rsquo;s the reason they watch Shorts on TV.
I refuse to go down that path, but I understand their logic.&lt;/p&gt;
&lt;p&gt;The downside to watching on TV is that I&amp;rsquo;m spending more time on the home page.
This habit has also spilled over onto my laptop.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve long had my YouTube bookmark set to lead me straight to my subscriptions page, where I would sift what I want to watch and add it to my Watch Later playlist.
That playlist became my home for all my media needs.
This worked flawlessly by allowing me to watch from my favourite creators while not falling into an uncontrollable crave for new videos.&lt;/p&gt;
&lt;p&gt;At the moment, I still operate from my Watch Later playlist but the source of the videos has changed.
Some still come from my subscription page, but an increasing amount is coming from our YouTube overlords.
The TV app spits you straight onto the home page where the almighty algorithm tries its best to grab you with its hooks.
And, well&amp;hellip; I&amp;rsquo;ve definitely been grabbed.
That sounded wrong 😂 but you get me.
I end up scrolling the home page as I add videos to my main playlist along the way.&lt;/p&gt;
&lt;p&gt;Perhaps ironically, I came across &lt;a href="https://youtu.be/-OjikK5APSk" target="_blank" rel="noreferrer"&gt;this video&lt;/a&gt; earlier today and it does seem to address a part of this issue (it doesn&amp;rsquo;t solve landing on the YT home page – I might just have to learn to avoid/tolerate it).
&lt;a href="https://www.youtube.com/@lillabjornstationery" target="_blank" rel="noreferrer"&gt;Lilla Björn Stationery&lt;/a&gt; recommends having a media journal.
She writes down all the videos she wants to watch in a list and crosses them off one by one.
She even went above and beyond to colour-code it depending on the type of video it is.
It feels a little extreme to keep tabs of your media this way but that is not far from what I used to do a couple years back.&lt;/p&gt;
&lt;p&gt;In high school, I used to have yearly notebooks where I&amp;rsquo;d jot down fun (questionable) stories, poems and other random things but there was always one constant in each notebook, a media section.
Being in a boarding school with no access to mobile phones or internet, I would always write down what I wanted to research, watch and listen to at the back of my book.
Once the school holiday began, I&amp;rsquo;d start with what was on my list before trying other things and the cycle would repeat itself in the next school term.
That&amp;rsquo;s not too far from what the video suggests.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d be lying if I said I&amp;rsquo;d do that again but it does beg me to question my intentionality in media consumption.
My system has worked for years, but it crumbles when I can&amp;rsquo;t avoid the home page.
Perhaps I can embrace it by choosing to only add a video to my Watch Later playlist if it appears on the first screen that pops up instead of scrolling endlessly.&lt;/p&gt;
&lt;p&gt;That way I can balance recommendations from the algorithm (which sometimes are golden), from friends and newsletters, and videos from my favourite creators.
As a personal recommendation, check out &lt;a href="https://www.tomscott.com/" target="_blank" rel="noreferrer"&gt;Tom Scott&lt;/a&gt;&amp;rsquo;s weekly &lt;a href="https://www.tomscott.com/newsletter/" target="_blank" rel="noreferrer"&gt;newsletter&lt;/a&gt;.
He shares about three good videos every Monday, some links to interesting articles and a few of his own stuff.&lt;/p&gt;
&lt;p&gt;Moral of the story: watch your YouTube habits.
It’s the one social platform that pretends it isn’t one.&lt;/p&gt;
&lt;p&gt;Anyway, go touch some grass and try some hobby.&lt;/p&gt;</description></item><item><title>Apple Music Replay 2025 (and a bit of Wrapped)</title><link>https://insidemordecai.com/apple-music-replay-2025/</link><pubDate>Wed, 03 Dec 2025 21:10:36 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/apple-music-replay-2025/</guid><description>&lt;p&gt;Besides Mariah Carey having fully thawed, it&amp;rsquo;s that time when we all realise how much we repeat the same tunes over and over while pretending we&amp;rsquo;ve discovered something new.
Just kidding.
Additionally, for the second year running, I&amp;rsquo;m prioritising posting my music recap on here.&lt;/p&gt;
&lt;p&gt;Overall, when it comes to the big number everyone likes to share, I had 57,645 total listening minutes – pretty much in line with every year from 2023.&lt;/p&gt;
&lt;p&gt;So&amp;hellip;. let&amp;rsquo;s get down to it.&lt;/p&gt;
&lt;p&gt;The elephant in the room is I actually stuck with Apple Music after &lt;a href="https://insidemordecai.com/spotify-to-apple-music/" &gt;switching to it&lt;/a&gt; back in February, so this year&amp;rsquo;s recap is a little fragmented.
I&amp;rsquo;ll probably post about my time away from Spotify at some point, but I&amp;rsquo;m enjoying my time off.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Screenshot of my 2025 Apple Music summary showing total minutes listened, top artists, top songs, and top albums."
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/overview-replay-2025_hu_98646de3c88ec420.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/overview-replay-2025_hu_98646de3c88ec420.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/overview-replay-2025.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/overview-replay-2025.webp"&gt;&lt;figcaption&gt;My 2025 Apple Music Replay Overview&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Screenshot of my 2025 Spotify Wrapped showing total minutes listened, top songs, top artists, and top genre."
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/overview-wrapped-2025_hu_376d115d33efc4df.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/overview-wrapped-2025_hu_376d115d33efc4df.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/overview-wrapped-2025.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/overview-wrapped-2025.webp"&gt;&lt;figcaption&gt;My 2025 Spotify Wrapped Overview&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Anyway, if we take a short view back to the recent past, I dove into Radiohead&amp;rsquo;s discography last year and &amp;ldquo;saying I love them is a massive understatement&amp;rdquo;.
I was shocked/disappointed that they didn&amp;rsquo;t make any of my 2024 list but my god are they all over it this year.
Oh, they showed up.&lt;/p&gt;
&lt;p&gt;I listened to Radiohead for a whopping 1,731 minutes, with &lt;em&gt;In Rainbows&lt;/em&gt; leading my Top Albums list.
&lt;em&gt;The Bends&lt;/em&gt; came in third, and &lt;em&gt;OK Computer&lt;/em&gt; rounded it out in ninth.
I never used to understand why certain songs of theirs held onto me, but the last year and a bit has made it very clear: give me anything melancholic, floaty, or drenched in bewitching vocals, and I&amp;rsquo;m gone.&lt;/p&gt;
&lt;p&gt;Durand Bernarr was my second-most-listened artist, and once again, I&amp;rsquo;m not shocked.
He released &lt;em&gt;BLOOM&lt;/em&gt; which took over my May, but he&amp;rsquo;s always been someone I revisit a lot.
His &lt;a href="https://youtu.be/klL7nY1HzaY" target="_blank" rel="noreferrer"&gt;Tiny Desk Concert&lt;/a&gt; is one of my all-time favourites, along with his many appearances on &lt;a href="https://www.youtube.com/@terrellgrice" target="_blank" rel="noreferrer"&gt;The TERRELL Show&lt;/a&gt;.
Now that I&amp;rsquo;ve mentioned Terrell: y&amp;rsquo;all need to seriously listen to &lt;em&gt;The Terrell One Million Show&lt;/em&gt; or &lt;a href="https://youtu.be/s4Y0N8qp4ZM" target="_blank" rel="noreferrer"&gt;watch it&lt;/a&gt;.
It&amp;rsquo;s rather amazing.
There are so many great covers and mashups on there.
&lt;em&gt;My Testimony / Let Go&lt;/em&gt; by Kelontae Gavin and &lt;em&gt;Masterpiece (Mona Lisa)&lt;/em&gt; by Riley are my favourites.
The latter was on repeat so much that my parent now randomly sings it whenever someone mentions the name &amp;ldquo;Mona Lisa&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Back to the recap: I&amp;rsquo;ll be honest, &lt;em&gt;Somebody That I Used To Know&lt;/em&gt; was the only Gotye song I knew since it went viral, until late last year when I discovered &lt;em&gt;State of the Art&lt;/em&gt; in some reaction video and immediately loved it.
That one and &lt;em&gt;Hearts a Mess&lt;/em&gt; are my favourites, but do yourself a favour and listen to his entire album, &lt;em&gt;Making Mirrors&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Melanie Fiona also had her moment in my year.
Her &lt;a href="https://youtu.be/mzG_v2TGddE" target="_blank" rel="noreferrer"&gt;appearance on the blue wall&lt;/a&gt; reminded me how incredible she is, and I ended up looping &lt;em&gt;It Kills Me&lt;/em&gt; and &lt;em&gt;4AM&lt;/em&gt; in March and April&amp;hellip; and apparently the entire year.
She really had a grasp on the 2000s music scene, and it&amp;rsquo;s such a shame she never got the recognition she deserved.&lt;/p&gt;
&lt;p&gt;To wrap things up: Tame Impala finally released something new, but I&amp;rsquo;m still stuck on &lt;em&gt;Currents&lt;/em&gt;.
I&amp;rsquo;ll definitely listen to it soon.
A &lt;a href="https://www.imdb.com/title/tt34966650/" target="_blank" rel="noreferrer"&gt;Jeff Buckley documentary&lt;/a&gt; also dropped, which I haven&amp;rsquo;t watched yet – but I enjoyed revisiting his 1994 album &lt;em&gt;Grace&lt;/em&gt;.
If you&amp;rsquo;ve listened or watched either, let me know how they are.&lt;/p&gt;
&lt;p&gt;I also enjoyed the latest rap entry by Joey Valence &amp;amp; Brae, &lt;em&gt;HYPERYOUTH&lt;/em&gt; in November.
Tyler, The Creator fans will definitely enjoy this too.
The features are great and their interview on &lt;a href="https://youtu.be/UUJQR3Q86TY" target="_blank" rel="noreferrer"&gt;turning the tables Podcast&lt;/a&gt; is a fun watch too.&lt;/p&gt;
&lt;p&gt;Finally, I surprisingly liked Spotify Wrapped this year, even though mine was based on only a few months of usage.
I guess they took the flack they got last year to heart – though with this year&amp;rsquo;s controversial headline about the platform and Daniel Ek, maybe not.&lt;/p&gt;
&lt;p&gt;Anyway, here are all the screenshots for you to scour through if you&amp;rsquo;re inclined.
I didn&amp;rsquo;t break down everything in them, but there are definitely some gems.&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s my little call to action, &lt;a href="https://insidemordecai.com/send-me-a-song/" &gt;send me a song&lt;/a&gt; recommendation from your recap, why you like it, and maybe a thought about mine (a song/artist you also love, a question, anything).
If you want, you can send your recap screenshot too.
My email inbox is open.&lt;/p&gt;
&lt;p&gt;For now – till next year.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-albums_hu_ed3de4747fd1ef6b.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-albums_hu_ed3de4747fd1ef6b.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-albums.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-albums.webp"&gt;&lt;figcaption&gt;My Apple Music Top Albums&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-artists_hu_4d6b40af401e8b69.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-artists_hu_4d6b40af401e8b69.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-artists.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-artists.webp"&gt;&lt;figcaption&gt;My Apple Music Top Artists&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-songs_hu_fe782fdda61d919c.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-songs_hu_fe782fdda61d919c.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-songs.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-songs.webp"&gt;&lt;figcaption&gt;My Apple Music Top Songs&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-genres_hu_ad8850d3aa2ffef7.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-genres_hu_ad8850d3aa2ffef7.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-genres.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-genres.webp"&gt;&lt;figcaption&gt;My Apple Music Top Genres&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-albums_hu_3c148f363bf7bbd0.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-albums_hu_3c148f363bf7bbd0.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-albums.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-albums.webp"&gt;&lt;figcaption&gt;My Apple Music Top Albums by Month&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-artists_hu_486d4832a464c383.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-artists_hu_486d4832a464c383.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-artists.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-artists.webp"&gt;&lt;figcaption&gt;My Apple Music Top Artists by Month&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-songs_hu_e2b1ca21ed999eb8.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-songs_hu_e2b1ca21ed999eb8.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-songs.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-replay-top-monthly-songs.webp"&gt;&lt;figcaption&gt;My Apple Music Top Songs by Month&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-albums_hu_1db218b8b2aaaefd.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-albums_hu_1db218b8b2aaaefd.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-albums.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-albums.webp"&gt;&lt;figcaption&gt;My Spotify Top Albums&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-genres_hu_c3f2bd7db440d1f0.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-genres_hu_c3f2bd7db440d1f0.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-genres.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-genres.webp"&gt;&lt;figcaption&gt;My Spotify Top Genres&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt=""
width="1080"
height="1920"
src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-songs_hu_41c2652991bff03a.webp"
srcset="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-songs_hu_41c2652991bff03a.webp 800w, https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-songs.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/apple-music-replay-2025/img/2025-wrapped-top-songs.webp"&gt;&lt;figcaption&gt;My Spotify Top Songs&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Linux Is Not a Religion</title><link>https://insidemordecai.com/linux-is-not-a-religion/</link><pubDate>Sat, 01 Nov 2025 13:48:22 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/linux-is-not-a-religion/</guid><description>&lt;p&gt;Guess what?
I use Arch btw 😂.
Kinda.
I got the &lt;a href="https://omarchy.org/" target="_blank" rel="noreferrer"&gt;Omarchy&lt;/a&gt; bug recently and migrated from vanilla Arch Linux — if you can call it that.&lt;/p&gt;
&lt;p&gt;For context, I&amp;rsquo;ve been a serious Linux dual-booter for nearly ten years but went full-time about four years ago.
I wouldn&amp;rsquo;t say I&amp;rsquo;m a Linux sage or a Penguin whisperer, but neither am I a noob.
I wouldn’t recommend Arch as a first Linux flavour for someone jumping ship from Windows 10 now that it&amp;rsquo;s discontinued — that honour probably goes to Linux Mint, but it&amp;rsquo;s becoming surprisingly easy to use.&lt;/p&gt;
&lt;p&gt;About a year and a half ago, I got myself a MacBook, and that presented the perfect opportunity to change my setup.
My interest in Arch had been growing, and I felt safe enough to risk stability now that my old laptop was relegated to backup duty for the shiny new kid on the block.
I booted Fedora off the HP and fired up &lt;code&gt;archinstall&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For the uninitiated, &lt;code&gt;archinstall&lt;/code&gt; is a simple automated install script for Arch Linux.
It simplifies the process greatly.
This reminded me of my first time installing Linux back in 2017 in the form of Kali Linux with its step-by-step Debian installer (I think that&amp;rsquo;s what it&amp;rsquo;s called?).
The installation was super straightforward and didn&amp;rsquo;t take long.
Heck, I even repeated it on an even older 2011 Dell Inspiron (the chunky kind).
Back to the story: I was greeted with a nice, minimal KDE Plasma desktop environment and everything was rosy.
It didn&amp;rsquo;t last long though — I quickly ran back to GNOME like the simpleton I am, but that wasn&amp;rsquo;t due to instability.
I had covered my bases there by opting for an LTS kernel from the get-go.
The switch was simply down to my preference for the clean GNOME experience and perhaps years of muscle memory.&lt;/p&gt;
&lt;p&gt;Then the YouTube gods performed their magic trick and made me question if they have my microphone tapped.
Videos of &lt;code&gt;archinstall&lt;/code&gt; started showing up — negative ones though.
I found creators (also, some bloggers and Redditors) looking down on people using install scripts like &lt;code&gt;archinstall&lt;/code&gt;.
Preaching that you must take the long, convoluted route, like it&amp;rsquo;s some rite of passage.
I mean, sure, it&amp;rsquo;s okay to take the scenic route if you want to learn, but that doesn&amp;rsquo;t have to be the constitutional method of installation.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s where it gets funny.
The same folks who claim Arch is about freedom and the choice to tinker are the ones deciding how &amp;ldquo;real&amp;rdquo; users should install it.
Isn&amp;rsquo;t that preaching water while drinking wine?
If you can&amp;rsquo;t accept someone&amp;rsquo;s way of setting up their system, maybe the whole philosophy flew right by you.
That&amp;rsquo;s just the epitome of Linux elitism.
Not everyone needs to spend a couple of hours (exaggerated of course) partitioning drives manually just to prove a point.
If anything, tools like &lt;code&gt;archinstall&lt;/code&gt; make Arch more accessible — less of a secret cult, more of an open invitation.
That should be celebrated, not mocked.&lt;/p&gt;
&lt;p&gt;So for goodness&amp;rsquo; sake, stop gatekeeping Arch Linux.
At the end of the day, the install command doesn’t define the user — the way they use and tweak their system does.&lt;/p&gt;
&lt;p&gt;My time with it has been amazing, and I will vehemently argue that Omarchy isn&amp;rsquo;t a distro but Arch with extra flair on top.
So in a sense, I still use Arch btw 😏.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/xEzy8WUNIqI" target="_blank" rel="noreferrer"&gt;Arch &amp;amp; Hyprland - The Future of Linux? by The Lunduke Journal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://antonvanassche.github.io/posts/2025/why-linux-is-both-a-religion-and-a-meme-and-thats-beautiful/" target="_blank" rel="noreferrer"&gt;Why Linux Is Both a Religion and a Meme (And That&amp;rsquo;s Beautiful) by Anton Van Assche&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@devikaaaa4/arch-linux-not-just-an-os-a-philosophy-of-choice-e88df6e5b9da" target="_blank" rel="noreferrer"&gt;🧠 Arch Linux: Not Just an OS — A Philosophy of Choice by Devika&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techtea.io/articles/2024/elitism-identity-open-source/" target="_blank" rel="noreferrer"&gt;Elitism, Identity, and the Open Source Community by Matthew (TechTea)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kevquirk.com/blog/this-is-whats-wrong-with-linux-community/" target="_blank" rel="noreferrer"&gt;This Is What&amp;rsquo;s Wrong With The Linux Community by Kev Quirk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Found the Cringe</title><link>https://insidemordecai.com/found-the-cringe/</link><pubDate>Mon, 13 Oct 2025 13:28:20 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/found-the-cringe/</guid><description>&lt;p&gt;Perhaps the universe willed me on after writing &lt;a href="https://insidemordecai.com/save-the-cringe/" &gt;the previous article&lt;/a&gt;, or maybe it was just sheer luck.
After expressing my regret about deleting old pieces and media, I decided to dig through some things in storage, and what a surprise lay before me.
I found a few old novels and novellas I’d completely forgotten about, and even better, a couple of notebooks were mixed in there too.&lt;/p&gt;
&lt;p&gt;All my early write-ups used to start on paper, and because of that, I now have access to some of my old poems, articles, and stories — some finished, others still in draft form.&lt;/p&gt;
&lt;p&gt;I won’t lie, they’re a bit cringey as expected, but over the coming weeks and months I’ll figure out how to upload them here.
I’m not planning to actively promote them, but I’m genuinely excited to have recovered what feels like my lost archives.&lt;/p&gt;
&lt;p&gt;Discovering them felt as if I’d stumbled upon a portable teleportation device.
In an instant I was pulled back: old habits, old friends, and familiar places flashing through my mind.
Each scribble, sketch up, sticky note, and all sorts of attachments in the notebooks carried a piece of who I used to be — a quiet reminder of how much of that version of me still lingers, and how much has changed.&lt;/p&gt;</description></item><item><title>Save the Cringe</title><link>https://insidemordecai.com/save-the-cringe/</link><pubDate>Tue, 30 Sep 2025 15:15:26 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/save-the-cringe/</guid><description>&lt;p&gt;I pride myself on having old photos backed up somewhere, and I also cheekily threaten some friends with posting their old photos but the irony never escapes me.&lt;/p&gt;
&lt;p&gt;It always seems much easier to laugh at others&amp;rsquo; old stuff than face your own.
So, my younger self went on an innocent purging spree of any photo I found somewhat embarrassing.
I even tore up some old writing from notebooks and deleted old blogs I had from about 2014.&lt;/p&gt;
&lt;p&gt;The purging spree might also have been down to a fear of judgement or a desire to curate an image but that feels like the least of my worries now.
The notion that an old piece of work is not fit for existence seems very archaic to me now.
Archiving is crucial — it&amp;rsquo;s why sites like &lt;a href="https://web.archive.org/" target="_blank" rel="noreferrer"&gt;The Wayback Machine&lt;/a&gt; exist, to recover our lost memories by preserving scraps of what might otherwise disappear.&lt;/p&gt;
&lt;p&gt;I get frustrated with my younger self when I recall some obscure memory, a project, a piece of writing, or a particular photo I can’t quite place.
I end up questioning whether my memory is playing tricks on me.
Did this moment even exist, or is my mind exaggerating it?&lt;/p&gt;
&lt;p&gt;Luckily, I recovered some of the important photos, but most of my old write-ups are gone forever.
The writing was probably not all that impressive and less polished than it is now (not that it is all that right now, but you get me), but that is perhaps what I crave.
There is a sense of growth in the cringe that comes with looking back.
Progress feels more real when you have tangible old pieces to measure yourself against.&lt;/p&gt;
&lt;p&gt;What this experience taught me is that there&amp;rsquo;s nothing wrong with &amp;lsquo;over-backup&amp;rsquo;.
I&amp;rsquo;m not at the hoarding level where I refuse to delete anything, but I pause and think before aimlessly purging now.
Maybe one day I&amp;rsquo;ll even celebrate the cringey stuff by sharing a crazy photo or video.
The funny thing is, I feel less ashamed of sharing an old cringey piece of writing than I do a photo but that&amp;rsquo;s a thought for another day.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve all had an embarrassing era: a deleted Tumblr page, old blogs, or near-ancient Facebook albums.
I think we should embrace the &amp;ldquo;mess&amp;rdquo; as part of the story.
I wish we all kept more of it — the raw, messy, and authentic proof of who we’ve been — because perfection was never the point.&lt;/p&gt;</description></item><item><title>Odie</title><link>https://insidemordecai.com/odie/</link><pubDate>Wed, 30 Jul 2025 20:58:21 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/odie/</guid><description>&lt;p&gt;The loss of a dear pet is one of the hardest things to bear.
I’ve lost pets before, in different ways, but nothing truly prepares you for the slow, painful anticipation of a loss you see coming.&lt;/p&gt;
&lt;p&gt;It all started when my guard dog, Odie, missed his rabies shot.
If only he could talk to remind us, nudge us.
I was oblivious, until a few nights back when the signs began to show.
The vet confirmed it, and more painfully still, there’s no choice but to watch him go, slowly.&lt;/p&gt;
&lt;p&gt;He’s fighting a battle he can’t win, and he seems to know it.
He isn’t wild or restless but just lies there quietly waiting for dusk to come.
His exit will be gracious (if that word even fits), full of dignity… but I still can’t bring myself to accept it.
Maybe writing this down, setting it free, will help.&lt;/p&gt;
&lt;p&gt;He may just be a guard dog, not a house pet curled up on the couch, but words can’t quite hold his absence and the emptiness left behind.
I named him after the dog from my favourite childhood movie — Garfield.
The resemblance was there — he had the same look, the same naivety and even the cheerfulness.
Not to forget his little beef with my cats (little Garfields themselves).
He was the bully though 😂.&lt;/p&gt;
&lt;p&gt;We expect him to guard the stars tonight but he is deeply missed.&lt;/p&gt;
&lt;p&gt;Run free, little one.&lt;/p&gt;</description></item><item><title>Send Me a Song</title><link>https://insidemordecai.com/send-me-a-song/</link><pubDate>Tue, 03 Jun 2025 13:06:58 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/send-me-a-song/</guid><description>&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="A wall graffiti with the text &amp;lsquo;if we ever stop talking, send me a song&amp;rsquo;"
width="1080"
height="783"
src="https://insidemordecai.com/send-me-a-song/img/graffiti_hu_8ddd1103acbbaa1.webp"
srcset="https://insidemordecai.com/send-me-a-song/img/graffiti_hu_8ddd1103acbbaa1.webp 800w, https://insidemordecai.com/send-me-a-song/img/graffiti.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/send-me-a-song/img/graffiti.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Someone shared this photo recently as a status update and it had me intrigued.
I didn’t want to repost it because I thought it had an air of &lt;em&gt;uncoolness&lt;/em&gt; but the statement is grounded in truth.&lt;/p&gt;
&lt;p&gt;We all have a unique relationship with music.
We scour different sources to discover new music.
Some of us go deep, digging through obscure corners of the internet for new gems.
Others stick to radio hits or build a collection of vinyls and high-end setups.&lt;/p&gt;
&lt;p&gt;Whatever the approach, music can be more than just a personal escape.
It can bridge the gap in our relationships.&lt;/p&gt;
&lt;p&gt;We lose touch with old friends as life changes.
Sometimes I want to reconnect with some but never quite know where to start.
There&amp;rsquo;s always the fear that a simple &amp;ldquo;hey&amp;rdquo; might open doors I&amp;rsquo;m not ready to walk through &amp;ndash; there&amp;rsquo;s always too many questions and much more explaining.&lt;/p&gt;
&lt;p&gt;But maybe music can be that spark.&lt;/p&gt;
&lt;p&gt;So, if you&amp;rsquo;re reading this and feel like reconnecting, you can send me a song, however you want.
It could be a tune that reminds you of yours truly, one I sang (or butchered), a new favourite, or one to express the pain I caused you or any other passionate feeling.&lt;/p&gt;
&lt;p&gt;And hey, it doesn&amp;rsquo;t have to be me.
If someone else comes to your mind, reach out to them.
I&amp;rsquo;m sure, just like me, they&amp;rsquo;d love to hear what&amp;rsquo;s playing on your end.&lt;/p&gt;</description></item><item><title>Email Is Not Dead</title><link>https://insidemordecai.com/email-is-not-dead/</link><pubDate>Thu, 08 May 2025 11:03:44 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/email-is-not-dead/</guid><description>&lt;p&gt;Guess what?
Email is not dead!
And this is yet another post about emails 😬&lt;/p&gt;
&lt;p&gt;Of course email is not dead and might not die any time soon but it might as well be declared a relic of the past in regards to informal communication and that’s quite sad.&lt;/p&gt;
&lt;p&gt;I feel like it should not be used purely for work, newsletters, scams, receiving codes when we sign up for yet another account and such.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;i have a quest for you - to make email something you cherish.
&amp;ndash; &lt;a href="https://j3s.sh/" target="_blank" rel="noreferrer"&gt;Jes Olson&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;There is something interesting about communicating through a slow medium in the modern age (relative to instant messaging) that gets rid of the pressure to be constantly accessible 24/7 and encourages a more thoughtful message.&lt;/p&gt;
&lt;p&gt;Also, please don’t make personal email formal with your ‘Best Regards’, ‘Sincerely’ and the many corporate alternatives out there.  Don’t bother with rules of capitalisation, play around ala Margo from John Green&amp;rsquo;s &lt;em&gt;Paper Towns&lt;/em&gt;.
Attach funky gif, rick-roll someone.
Spice it up a bit, show some personality.&lt;/p&gt;
&lt;p&gt;On a different note, I have recently reconnected with old friends via email.
Most of them find it odd but what’s a mere mortal got to do when someone changes their phone number for some reason or moves country and you lose touch.  Email often is the only constant in this case.&lt;/p&gt;
&lt;p&gt;We should use email more to connect with each other.
To start it off, if you have anything you want to share with me, send me one.
Ask me about my hometown or country, my experiences, previous topics I’ve written about, tech, music, reading, anything really.
Don’t be shy, just write away.&lt;/p&gt;
&lt;p&gt;If you don’t know where to get my details, hint hint, my &lt;a href="https://insidemordecai.com/contact/" &gt;contact page&lt;/a&gt; has something 😂.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://starbreaker.org/blog/tech/email-still-useful/index.html" target="_blank" rel="noreferrer"&gt;Email is Still Useful&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://j3s.sh/thought/there-is-beauty-in-the-minimalism-of-email.html" target="_blank" rel="noreferrer"&gt;there is beauty in the minimalism of email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.justuseemail.com/" target="_blank" rel="noreferrer"&gt;Just Use Email&lt;/a&gt; - a site dedicated to the various ways people and small to medium-sized businesses (SMBs) should Just Use Email&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.emailisnotdead.com/" target="_blank" rel="noreferrer"&gt;Email is not dead. But email IS changing.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Bye Spotify, Hello Apple Music</title><link>https://insidemordecai.com/spotify-to-apple-music/</link><pubDate>Wed, 02 Apr 2025 14:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/spotify-to-apple-music/</guid><description>&lt;p&gt;After 10 years on Sweden’s finest app, 4000+ liked songs, a bunch of playlists and 100+ albums, I made the switch to Cupertino just over a month ago.&lt;/p&gt;
&lt;p&gt;This wasn’t an easy decision to make.
It took a couple of months, and this time it might be for real.
I still love Spotify and it’s hard to hate on it.&lt;/p&gt;
&lt;h3 class="relative group"&gt;So… Why the Switch?
&lt;div id="so-why-the-switch" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;I know Spotify are trying to be profitable and being the everything audio app is their strategy but I like &lt;a href="https://btxx.org/posts/one-thing/" target="_blank" rel="noreferrer"&gt;my music player being just a music player&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Objectively, the app became a bit more bloated and messy as soon as they started shoving all the podcast crap down our throats, and that was just the start.
Don’t get me wrong, I do love me some podcasts, but the experience is quite lacklustre on the green behemoth compared to dedicated podcast apps.
On a side note, do yourself a favour and use Pocket Casts or something else for podcasts, you’ll thank me later.&lt;/p&gt;
&lt;p&gt;The algorithm, which I consider to be their biggest asset, started to deteriorate.
Connect bugged out on me for a couple of months.
Shuffle kept repeating the same five songs that also appeared on every playlist.
I got the same old recommendations and nothing that explored the waters like before.
I discovered more new songs from my social circles than my music player, unlike before.
All this, just started to stain the app’s experience for me.&lt;/p&gt;
&lt;p&gt;I first realised I wasn’t fully satisfied when YouTube Music officially launched in Kenya in 2023.
I gave their free trial a shot - twice actually.
The audio quality was slightly worse but the algorithm was significantly better.
I rediscovered old favourites and new songs that I would go back and add on my Spotify playlists.
Ultimately, I didn’t like the app but this proved once again that the streaming king didn’t have a firm grip on its throne.&lt;/p&gt;
&lt;p&gt;So, my 4-year student plan came to an end and this felt like the most natural time to start over.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Why Apple Music, Though?
&lt;div id="why-apple-music-though" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;I first felt the urge to switch when Apple introduced lossless audio, but back then, the experience on the other side was still amazing.
As soon as that changed, the lure of switching became greater.&lt;/p&gt;
&lt;p&gt;This is not my first rodeo with Tim Cook’s app but it sure does feel like a fresh start.
The UI is clean and more polished with less clutter like the TikTok-like feeds across the garden.
The lyrics view is amazing compared to how Spotify just regurgitates text from &lt;a href="https://www.musixmatch.com/" target="_blank" rel="noreferrer"&gt;Musixmatch&lt;/a&gt;.
The animated cover art is amazing.
It strikes a good balance between freshening things up while maintaining the ethos of the album cover unlike Canvas that I always disabled on the other side.&lt;/p&gt;
&lt;p&gt;The biggest difference though is the audio quality.
Audiophiles will tell you that you can’t truly experience lossless audio wirelessly due to the inherent deficiencies of Bluetooth.
That’s true, but I primarily use wired In-Ear Monitors (IEMs) and the difference is night and day.&lt;/p&gt;
&lt;p&gt;Adele does background vocals on &lt;a href="https://youtu.be/0N0RrFRPiKM" target="_blank" rel="noreferrer"&gt;My Yvonne by Jack Peñate&lt;/a&gt; and this was one of the first songs I played.
The difference in audio quality was immediately noticeable that it had me questioning if the arrangement was slightly different.&lt;/p&gt;
&lt;p&gt;It feels like tracks are more dynamic with a different mix and better instrument separation.
A drum might pack more punch, the bass might be tighter, the strings might be more lifelike, the vocals might have a slightly different timbre etc.
Every song is just a bit fuller.&lt;/p&gt;
&lt;p&gt;My appreciation of music has been refreshed and this makes the transition worth it.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Making The Jump
&lt;div id="making-the-jump" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;The process is quite easy with the different playlist transfer tools available, but one can struggle with the paradox of choice.&lt;/p&gt;
&lt;p&gt;I used a mix of the free offering by &lt;a href="https://www.songshift.com/" target="_blank" rel="noreferrer"&gt;SongShift&lt;/a&gt; and &lt;a href="https://playlistor.io/" target="_blank" rel="noreferrer"&gt;Playlistor&lt;/a&gt; and they were good.
They missed less than 4% of my library which isn’t all that good but not too bad.&lt;/p&gt;
&lt;p&gt;Another amazing and highly recommended tool is &lt;a href="https://www.obdura.com/playlisty/" target="_blank" rel="noreferrer"&gt;Playlisty&lt;/a&gt;.
It worked well for my short playlists, and I would have paid to use it, but I wanted something free.&lt;br&gt;
It remains my top recommendation though (plus its paid option is &lt;a href="https://insidemordecai.com/subscriptions/" &gt;not a subscription&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I highly recommend you read the comparison article linked below by &lt;a href="https://medium.com/@frida.beydon" target="_blank" rel="noreferrer"&gt;Frida B&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Not Gonna Lie, It’s Not All Sunshine and Rainbows
&lt;div id="not-gonna-lie-its-not-all-sunshine-and-rainbows" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;I struggled with the UX in Apple Music especially when it comes to library organisation and some other small things but I’ve got a hang of it all.&lt;/p&gt;
&lt;p&gt;I’m yet to miss the social aspect but I’m well aware I’ll have to contend with sticking out like a sore thumb while using the fruit company’s jukebox.&lt;/p&gt;
&lt;p&gt;The biggest thing I’m missing, though, is Spotify Connect.&lt;/p&gt;
&lt;p&gt;Connect is super easy and very useful.
I switch from my phone to laptop quite a lot and the ability to open the app anywhere and simply resume playback is great.
Frankly, Apple should blatantly copy this feature because Connect is woefully underrated.
I hate that I have to start my music all over when switching devices.
For now, AirPlay is a decent “equivalent” but this is only available in the walled garden.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Would I Ever Go Back?
&lt;div id="would-i-ever-go-back" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Right now, I simply don’t know.&lt;/p&gt;
&lt;p&gt;Spotify could fix some of the major grievances I had, finally ship HiFi at a decent price and I would switch back.
Apple could significantly change prices and I would reconsider.
Either of them could introduce a revolutionary feature and I would follow them or to throw a spanner in the works, I could do an A/B test and discover I can&amp;rsquo;t tell the difference between lossy and lossless audio and my life has been a lie.&lt;/p&gt;
&lt;p&gt;There are quite a number of things both companies or their competitors could do to sway me one way or another but I’m satisfied with where I am for at least the next couple of months.&lt;/p&gt;
&lt;p&gt;My ideal option would be simply owning my music with a collection of lossless audio files, an iPod Classic and a decent pair of IEMs but a guy can only dream for now.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Explore Further:
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/macoclock/playlist-transfer-tools-which-is-best-2c908f46d591" target="_blank" rel="noreferrer"&gt;Playlist Transfer Tools: Which is best?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/-a7hx7Iir7I" target="_blank" rel="noreferrer"&gt;Spotify VS Apple Music - Does lossless matter?&lt;/a&gt; - explains if your platform supports true lossless.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.earlab.com.au/guide/what-are-iems" target="_blank" rel="noreferrer"&gt;What are IEMs?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Blog Questions Challenge</title><link>https://insidemordecai.com/blog-questions-challenge/</link><pubDate>Tue, 07 Jan 2025 17:47:49 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/blog-questions-challenge/</guid><description>&lt;p&gt;I refreshed &lt;a href="https://www.goldenhillsoftware.com/unread/" target="_blank" rel="noreferrer"&gt;Unread&lt;/a&gt; a few moments ago only to find three posts with the same title as this.
And guess what?
They all coincidentally reference each other.&lt;/p&gt;
&lt;p&gt;I started with &lt;a href="https://kevquirk.com/blog/blog-questions-challenge" target="_blank" rel="noreferrer"&gt;Kev’s post&lt;/a&gt;, then &lt;a href="https://manuelmoreale.com/blog-questions-challenge" target="_blank" rel="noreferrer"&gt;Manu’s&lt;/a&gt; and finally &lt;a href="https://dltn.io/posts/blog-questions-challenge" target="_blank" rel="noreferrer"&gt;Dalton’s&lt;/a&gt;.
Upon reading those, I thought why not give this a go, after all, I’ve never participated in any blogging challenge.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Why did you start blogging in the first place?
&lt;div id="why-did-you-start-blogging-in-the-first-place" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This all started around 2014 in high school with my first blog.
Back then, I was very confident of my writing and even had the ambitions of publishing.
I no longer share that ambition with my younger self but I still enjoy the act of writing.&lt;/p&gt;
&lt;p&gt;I found writing to be an outlet to be more open and creative.
My blog was something some schoolmates found surprising in contrast to how I was a bit more reserved to some of them.&lt;/p&gt;
&lt;p&gt;At some point in my teenage years, my motivation was recognition and perhaps fame while trying to emulate my contemporaries and those I looked up to.
Ultimately, I still think the current iteration remains to be an outlet for what comes to mind.&lt;/p&gt;
&lt;h2 class="relative group"&gt;What platform are you using to manage your blog and why did you choose it?
&lt;div id="what-platform-are-you-using-to-manage-your-blog-and-why-did-you-choose-it" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I love the idea of static site generators with how flexible and extremely lightweight they are and as such I’m currently using &lt;a href="https://gohugo.io/" target="_blank" rel="noreferrer"&gt;Hugo&lt;/a&gt; hosted on &lt;a href="https://pages.cloudflare.com/" target="_blank" rel="noreferrer"&gt;Cloudflare Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hugo is file based where all my posts and configurations are just Markdown files granting me full control of my site unlike other closed and often bloated offerings.
It might not be the easiest option for those who are not tech-savvy but all it takes is a little curiosity and a can-do attitude to get started.&lt;/p&gt;
&lt;p&gt;The community behind Hugo is also a big factor behind my decision, I can easily find resources online to help me set up or fix something.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Have you blogged on other platforms before?
&lt;div id="have-you-blogged-on-other-platforms-before" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Yes!
I started with Blogger when Google+ was my jam.&lt;/p&gt;
&lt;p&gt;For most of my time writing online, I’ve had two concurrent blogs on different platforms sometimes due to my curiosity while constantly changing them.
Inevitably I’ve used Tumblr, WordPress, Medium and everything in between.&lt;/p&gt;
&lt;h2 class="relative group"&gt;How do you write your posts?
&lt;div id="how-do-you-write-your-posts" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I currently start my writing on Apple Notes with all the necessary Markdown syntax be it on my phone or laptop.
I try to &lt;a href="https://sive.rs/1s" target="_blank" rel="noreferrer"&gt;write one sentence per line&lt;/a&gt;.
Afterwards, it’s just a matter of quickly proofreading it, improving sentence structure if needed since I typically end up rambling on and finally correct grammar.
Of course mistakes end up on the published piece, I correct them sometimes, I never realise sometimes and sometimes I couldn’t care less.
It’s a part of blogging.&lt;/p&gt;
&lt;h2 class="relative group"&gt;When do you feel most inspired to write?
&lt;div id="when-do-you-feel-most-inspired-to-write" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Most of my posts tend to be in response to something new I have discovered, read or listened to.
This can be from my growing collections of blogs I read, podcasts, books I dive into, news stories and even music sometimes.&lt;/p&gt;
&lt;p&gt;Often times, though, inspiration comes when I least expect it to.
I might be in the shower, in public transport, running or walking.
In such a situation I simply just note something down on Apple Notes or record a voice memo and get to it when I have the time.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Do you publish immediately after writing, or do you let it simmer a bit as a draft?
&lt;div id="do-you-publish-immediately-after-writing-or-do-you-let-it-simmer-a-bit-as-a-draft" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I would love to say that I publish immediately after my final full stop but I rarely do that.
This post is one of those few instances I’ve done that.&lt;/p&gt;
&lt;p&gt;In some cases, I let it simmer for quite some time as I collect the necessary resources, information or form a coherent well articulated thought.&lt;/p&gt;
&lt;p&gt;On most occasions though, I let it sit for a few hours before hitting the enter button.&lt;/p&gt;
&lt;h2 class="relative group"&gt;What&amp;rsquo;s your favourite post on your blog?
&lt;div id="whats-your-favourite-post-on-your-blog" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Hmm, this is a tough question.
On some days it’s &lt;a href="https://insidemordecai.com/on-gamification/" &gt;I don’t like streaks&lt;/a&gt;, on another it’s &lt;a href="https://insidemordecai.com/on-single-use-devices/" &gt;On Single-Use Devices&lt;/a&gt; and sometimes &lt;a href="https://insidemordecai.com/joy-of-libraries/" &gt;The Joy of Libraries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Either way, I find Manu’s answer of “Always the next one” as the best way to look at this question.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Any future plans for your blog?
&lt;div id="any-future-plans-for-your-blog" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I find Hugo ticks all my boxes at the moment.
I’m also satisfied with &lt;a href="https://blowfish.page/" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt; by &lt;a href="https://n9o.xyz/" target="_blank" rel="noreferrer"&gt;Nuno Coração&lt;/a&gt;, it’s clean, well documented, constantly improving and I contribute to it at times.&lt;/p&gt;
&lt;p&gt;Basically, I don’t have immediate plans but I know for a fact something will change in the far future.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Those are my answers to the &lt;a href="https://bearblog.dev/" target="_blank" rel="noreferrer"&gt;Bear Blog&lt;/a&gt; challenge, it felt very therapeutic answering them and I would urge anybody with a website to answer them.
Let&amp;rsquo;s keep this rolling!&lt;/p&gt;</description></item><item><title>2024 in Books</title><link>https://insidemordecai.com/2024-in-books/</link><pubDate>Fri, 03 Jan 2025 15:10:17 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/2024-in-books/</guid><description>&lt;p&gt;This was meant to be posted end of last year but as a result of the festivities and perhaps procrastination, here we are.&lt;/p&gt;
&lt;p&gt;I wrapped up the year having read 28 books surpassing my reading goal of 20 books.
That may sound impressive but my 2024 reads were filled with small and medium sized books with my average page count being 192 pages proving that my fear of chunky books remains present.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing I read 28 books in 2024 being 5,385 pages. My shortest book was Leo Tolstoy&amp;rsquo;s The Death of Ivan Ilych at 86 pages long and the longest book being Yann Martel&amp;rsquo;s Life of Pi at 460 pages long."
width="1744"
height="1676"
src="https://insidemordecai.com/2024-in-books/img/overview_hu_66b89d11a23f59e6.webp"
srcset="https://insidemordecai.com/2024-in-books/img/overview_hu_66b89d11a23f59e6.webp 800w, https://insidemordecai.com/2024-in-books/img/overview_hu_dbd3b45ae2624ee8.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2024-in-books/img/overview.webp"&gt;&lt;figcaption&gt;Overview of books I read in 2024&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The books that really stood out for me and I highly recommend were Madeline Miller’s &lt;em&gt;The Song of Achilles&lt;/em&gt;, Philip Besson’s &lt;em&gt;Lie With Me&lt;/em&gt;, Ray Bradbury’s &lt;em&gt;Fahrenheit 451&lt;/em&gt;, Pierce Brown’s &lt;em&gt;Red Rising&lt;/em&gt; (which I intend to continue with the series) and Elif Shafak’s &lt;em&gt;The Island of Missing Trees&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="A collage of the book covers of all the books I read in 2024"
width="1512"
height="1668"
src="https://insidemordecai.com/2024-in-books/img/read-books_hu_b6c743026137eda8.webp"
srcset="https://insidemordecai.com/2024-in-books/img/read-books_hu_b6c743026137eda8.webp 800w, https://insidemordecai.com/2024-in-books/img/read-books_hu_2ae0ba92a2eaaec.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2024-in-books/img/read-books.webp"&gt;&lt;figcaption&gt;Books I read in 2024&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;A film that I find amazing and I’ve watched more than once is &lt;em&gt;Life of Pi&lt;/em&gt;.
Why am I talking about a film?
Well, I was rudely surprised that it’s actually based on a book.
I read it and loved it especially the exploration of Pi’s relationship with religion which was only briefly mentioned in the film.&lt;/p&gt;
&lt;p&gt;Anyway, my greatest discovery in the world of texts and characters was audiobooks as a direct result of a book slump.&lt;/p&gt;
&lt;p&gt;As reading slumps go, I had one during a period of uncertainty mid-2024.
I wasn’t interested in anything whatsoever and I had no way of getting out of this vicious rut.
Out of nowhere, the least expected item came to my rescue - &lt;em&gt;House of The Dragon&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I had never watched &lt;em&gt;Game of Thrones&lt;/em&gt; and I wasn’t intending to.
This was down to my preconceived notions, it being eight seasons long and the joke that is the series finale (spoiler alert: I watched all eight seasons in a week) but &lt;em&gt;House of The Dragon&lt;/em&gt; was still fresh and enticing…
I dove right in and binged season one, caught up with season two as it aired and after the final episode, I was sold on the entire &lt;em&gt;Game of Thrones&lt;/em&gt; franchise but more so the books as well.&lt;/p&gt;
&lt;p&gt;A friend suggested I should get an Audible free trial to read George R.R. Martin’s &lt;em&gt;Fire &amp;amp; Blood&lt;/em&gt; and so I gave this a go.
I got a wickedly nice three-month Audible Plus trial with two monthly credits.
Since I didn&amp;rsquo;t intend to keep the subscription, I hatched the quite original plan to &amp;ldquo;buy&amp;rdquo; all the chunky books on my to be read list.
With that, I finally tried out some of the free books only available with my Audible Plus trial.&lt;/p&gt;
&lt;p&gt;I had never seriously tried audiobooks before but what a lovely way to get off a reading slump!
I listen to a lot of podcasts so this came naturally to me.
I know some people don&amp;rsquo;t rate audiobooks but isn’t the end goal to consume high quality books so if someone prefers it in audio form then let them be.
Nevertheless, out of the need to be more attentive, my system was to listen to the books while following along the text on my Kindle and this served me well.&lt;/p&gt;
&lt;p&gt;I highly recommend audiobooks to anyone who has second-guessed them or if you want to get off a reading slump.&lt;/p&gt;
&lt;p&gt;Anyhow, here are two extra screenshots to summarise my 2024 reading, you can also have a look at my &lt;a href="https://goodreads.com/insidemordecai" target="_blank" rel="noreferrer"&gt;Goodreads&lt;/a&gt; profile for my book ratings/reviews or my &lt;a href="https://www.goodreads.com/user/year_in_books/2024/148227803" target="_blank" rel="noreferrer"&gt;2024 Year in Books&lt;/a&gt;.
Also, tell me about your 2025 reading goals/plans and recommend some reads you find interesting.&lt;/p&gt;
&lt;p&gt;Cheers ✌️&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing my most read genres in 2024"
width="1139"
height="1070"
src="https://insidemordecai.com/2024-in-books/img/most-read-genres_hu_fb841053812f8e92.webp"
srcset="https://insidemordecai.com/2024-in-books/img/most-read-genres_hu_fb841053812f8e92.webp 800w, https://insidemordecai.com/2024-in-books/img/most-read-genres.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2024-in-books/img/most-read-genres.webp"&gt;&lt;figcaption&gt;My most read genres in 2024&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="Image showing the books I finished in each month of 2024"
width="1170"
height="2127"
src="https://insidemordecai.com/2024-in-books/img/months-read_hu_8a6436621f231c7e.webp"
srcset="https://insidemordecai.com/2024-in-books/img/months-read_hu_8a6436621f231c7e.webp 800w, https://insidemordecai.com/2024-in-books/img/months-read.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/2024-in-books/img/months-read.webp"&gt;&lt;figcaption&gt;Books I finished in 2024 and the month I finished them in&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>The Joy of Libraries</title><link>https://insidemordecai.com/joy-of-libraries/</link><pubDate>Fri, 20 Dec 2024 17:35:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/joy-of-libraries/</guid><description>&lt;p&gt;James from &lt;em&gt;James’ Coffee Blog&lt;/em&gt; wrote &lt;a href="https://jamesg.blog/2024/11/28/joy-of-bookshops/" target="_blank" rel="noreferrer"&gt;The Joy of Bookshops&lt;/a&gt; and just the title sparked something within me inspiring this piece.&lt;/p&gt;
&lt;p&gt;I barely frequent bookshops or libraries.
Actually, I don’t think I remember the last time I was in one despite being an avid reader but when I try to recall them, I get pleasant memories.
It’s a fact that they were becoming less popular worldwide but perhaps the only good thing out of TikTok is that BookTok has rekindled reading.&lt;/p&gt;
&lt;p&gt;My experience and memories with libraries is more about the emotions and sensation than even the books themselves - which is odd.&lt;/p&gt;
&lt;p&gt;When I was a kid I used to visit &lt;em&gt;shagz&lt;/em&gt; (grandparent’s hometown) over the holidays.
Days would be spent reconnecting with cousins, telling stories, walking around the town and other typical activities but sometimes I went to the library.
This was the only public library in my &lt;em&gt;shagz&lt;/em&gt;.
It was grand and it felt like being transported to a different world when you walk in.&lt;/p&gt;
&lt;div class="width-patch"&gt;&lt;/div&gt;
&lt;div
id="carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
class="relative"
style="container-type: inline-size;"
data-twe-carousel-init
data-twe-ride="carousel"
data-twe-interval="2000"&gt;
&lt;div
class="absolute right-0 left-0 z-2 mx-[15%] mb-10 flex list-none justify-center p-0"
style="top: calc(100cqi * 9 / 16 - 2.5rem);"
data-twe-carousel-indicators&gt;
&lt;button
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide-to="0"
data-twe-carousel-active aria-current="true"
class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
aria-label="Slide 0"&gt;&lt;/button&gt;
&lt;button
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide-to="1"
class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
aria-label="Slide 1"&gt;&lt;/button&gt;
&lt;button
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide-to="2"
class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
aria-label="Slide 2"&gt;&lt;/button&gt;
&lt;button
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide-to="3"
class="mx-[3px] box-content h-[3px] w-[30px] flex-initial cursor-pointer border-0 border-y-[10px] border-solid border-transparent bg-neutral bg-clip-padding p-0 -indent-[999px] opacity-50 transition-opacity duration-[600ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"
aria-label="Slide 3"&gt;&lt;/button&gt;
&lt;/div&gt;
&lt;div
class="relative w-full after:clear-both after:block after:content-['']"
style="overflow-x: clip; overflow-y: visible;"&gt;
&lt;div
class="relative float-left -mr-[100%] w-full transition-transform ease-in-out motion-reduce:transition-none"
data-twe-carousel-item
style="transition-duration: 2000ms;"
data-twe-carousel-active&gt;
&lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
&lt;img
src="https://insidemordecai.com/joy-of-libraries/img/kabarnet-library-floating-view.webp"
class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
alt="carousel image 1"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div
class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
data-twe-carousel-item
style="transition-duration: 2000ms;"
&gt;
&lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
&lt;img
src="https://insidemordecai.com/joy-of-libraries/img/kabarnet-library-inside.webp"
class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
alt="carousel image 2"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div
class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
data-twe-carousel-item
style="transition-duration: 2000ms;"
&gt;
&lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
&lt;img
src="https://insidemordecai.com/joy-of-libraries/img/kabarnet-library-outside.webp"
class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
alt="carousel image 3"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div
class="relative float-left -mr-[100%] hidden w-full transition-transform ease-in-out motion-reduce:transition-none"
data-twe-carousel-item
style="transition-duration: 2000ms;"
&gt;
&lt;div class="single_hero_background relative overflow-hidden" style="aspect-ratio: 16 / 9;"&gt;
&lt;img
src="https://insidemordecai.com/joy-of-libraries/img/kabarnet-library-side-view.webp"
class="block absolute top-0 object-cover w-full h-full not-prose nozoom"
alt="carousel image 4"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;button
class="absolute top-0 left-0 z-2 flex w-[15%] items-center justify-center border-0 bg-none p-0 text-center opacity-50 transition-opacity duration-150 ease-[cubic-bezier(0.25,0.1,0.25,1.0)] hover:no-underline hover:opacity-90 hover:outline-none focus:no-underline focus:opacity-90 focus:outline-none motion-reduce:transition-none"
style="height: calc(100cqi * 9 / 16);"
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide="prev"&gt;
&lt;span class="inline-block h-8 w-8"&gt;
&lt;svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="4.5"
stroke="currentColor"
class="h-6 w-6"&gt;
&lt;path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" /&gt;
&lt;/svg&gt;
&lt;/span&gt;
&lt;span
class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
&gt;Previous&lt;/span
&gt;
&lt;/button&gt;
&lt;button
class="absolute top-0 right-0 z-[1] flex w-[15%] items-center justify-center border-0 bg-none p-0 text-center opacity-50 transition-opacity duration-150 ease-[cubic-bezier(0.25,0.1,0.25,1.0)] hover:no-underline hover:opacity-90 hover:outline-none focus:no-underline focus:opacity-90 focus:outline-none motion-reduce:transition-none"
style="height: calc(100cqi * 9 / 16);"
type="button"
data-twe-target="#carousel-1849e68a23cd28ab10c25048eb544025-1780252014572062243"
data-twe-slide="next"&gt;
&lt;span class="inline-block h-8 w-8"&gt;
&lt;svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="4.5"
stroke="currentColor"
class="h-6 w-6"&gt;
&lt;path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /&gt;
&lt;/svg&gt;
&lt;/span&gt;
&lt;span
class="!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]"
&gt;Next&lt;/span
&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;figcaption&gt;Photo credits: &lt;a href="https://www.facebook.com/KNLSKenya/posts/kabarnet-library-enjoys-a-serene-environment-at-its-location-making-it-an-exitin/947815905258042/"&gt;The Kenya National Library Service &lt;/a&gt;&lt;/figcaption&gt;
&lt;p&gt;The area was secluded among trees, it was calm with mostly the sounds of birds and nature and out of this serene environment sprang this stone library.
I remember the lady at the front desk was not too welcoming but that would never dampen my joy.
The building inside was massive with different sections depending on your age.
I always wanted to explore the big boys section, and I did sometimes, but the front desk lady had a keen eye.
There were books and more books towering over my younger self, you would think that was the entire knowledge base of the world but thank god I was wrong.&lt;/p&gt;
&lt;p&gt;Maybe I&amp;rsquo;m nostalgic with clouded memory and perhaps the library might not have the same feel to it, but the experience was glorious back then.&lt;/p&gt;
&lt;p&gt;Back in primary school, one of the schools I was at was still new and expanding and as such we had this tiny library.
That’s an overstatement, it was more of a small room you borrowed from but didn’t overstay your welcome.
There were books everywhere, on the shelves and piles on the floor.
At some point we had a requirement to read a certain number of books every week and have a short synopsis of them so this was somewhere I frequented.
The place might have seemed claustrophobic but that was far from what I felt.
It’s like getting a big tight hug or having a cup of hot chocolate when it’s cold outside.&lt;/p&gt;
&lt;p&gt;This experience isn’t just with physical libraries, I enjoy books based on experiences at bookshops or libraries.
Japanese books have beautiful covers and a subset within them are books with bookshops on the cover.
It’s basically a cheat code to have me read something, I mean that’s how Satoshi Yagisawa got me to read &lt;em&gt;Days at The Morisaki Bookshop&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I know this might not be representative of everyone’s experience with bookshops or libraries but these places are cozy and welcoming.&lt;/p&gt;
&lt;p&gt;If only they sold coffee then perhaps they might be profitable cause nothing beats reading with your favourite hot beverage by the side.
Paired up with the woody smell of old books, the moody lighting, the mosaic of textures when you run your fingers along book spines and the perfectly damped soundscape as if the books conspired to hush every sound that dared to intrude.
It’s a feeling that fully envelopes you and tingles all your senses, and boy oh boy would I want more of them in Kenya.&lt;/p&gt;</description></item><item><title>Spotify Wrapped 2024</title><link>https://insidemordecai.com/wrapped-2024/</link><pubDate>Wed, 11 Dec 2024 12:58:12 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/wrapped-2024/</guid><description>&lt;p&gt;I thought I’d post my Spotify Wrapped on this corner of the internet this year and not just on social media.&lt;/p&gt;
&lt;p&gt;It’s not Christmas, but it’s that time of the year to unwrap our music taste, discover how basic it is and have our egos crushed.
Being a Wednesday, I expected Wrapped to drop any time soon but nothing came while I jealously watched Apple Music users share their Replay.
As I drove back home, I kept wondering, who would end up on my list alongside Adele?&lt;/p&gt;
&lt;p&gt;I have a list of albums to get to, be it to explore new artists or delve deeper into the discographies of some of my favourite musicians.
Top on that was Pink Floyd’s &lt;em&gt;The Dark Side Of The Moon&lt;/em&gt; and Radiohead’s &lt;em&gt;In Rainbows&lt;/em&gt; and I managed to get to them.
Saying I love them is a massive understatement because I absolutely devoured those two albums, I was definitely expecting them to make an appearance.
Lo and behold, they did not make it.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="auto"
alt="My Spotify Wrapped 2024 summary with my top artists in this order: Beyonce, Adele, Billie Eilish, Doja Cat and James Blake. My top songs are Without You by TEEKS, Indigo Night by Tamino, Wanna Be by GloRilla with Megan Thee Stallion, BIRDS OF A FEATHER by Billie Eilish and Love In The Dark by Adele."
width="1067"
height="1896"
src="https://insidemordecai.com/wrapped-2024/img/wrapped-2024-summary_hu_36dc784e5a57f0ef.webp"
srcset="https://insidemordecai.com/wrapped-2024/img/wrapped-2024-summary_hu_36dc784e5a57f0ef.webp 800w, https://insidemordecai.com/wrapped-2024/img/wrapped-2024-summary.webp 1280w"
sizes="(min-width: 768px) 50vw, 65vw"
data-zoom-src="https://insidemordecai.com/wrapped-2024/img/wrapped-2024-summary.webp"&gt;&lt;figcaption&gt;My Spotify Wrapped 2024 Summary&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;I got home and my top two songs came as no surprise to me.
I have a soft spot for ballads that I can learn from while stretching my vocal pipes — no wonder Adele is my favourite artist.&lt;/p&gt;
&lt;p&gt;TEEKS has mentioned before that he listens to Adele and the inspiration is clear on &lt;em&gt;Without You&lt;/em&gt;.
He delivers an emotive performance with just the piano for accompaniment.
The background vocals join in and they are just so ethereal and velvety like embracing a cloud, the same could be said of Tamino’s Arabian touches.
I had never heard of Tamino before but &lt;em&gt;Indigo Night&lt;/em&gt; and &lt;em&gt;Habibi&lt;/em&gt; took over my life for some time.
The writing, tender runs and other captivating vocal nuances have you in awe.&lt;/p&gt;
&lt;p&gt;The simplicity in those songs make them stand out.
I want to me close my eyes and get lost in their world as sounds envelope my ears.&lt;/p&gt;
&lt;p&gt;The other top songs are:&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;GloRilla - Wanna Be (with Megan Thee Stallion)&lt;/li&gt;
&lt;li&gt;Billie Eilish - BIRDS OF A FEATHER&lt;/li&gt;
&lt;li&gt;Adele - Love In The Dark&lt;/li&gt;
&lt;li&gt;&lt;a href="https://open.spotify.com/playlist/37i9dQZF1FoK546cZ4ZKkr" target="_blank" rel="noreferrer"&gt;and here&amp;rsquo;s the full list.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I love Beyoncé and, retrospectively, it makes sense she appeared on my list but I did not expect her to top it.
I was in disbelief until I realised she dropped &lt;em&gt;COWBOY CARTER&lt;/em&gt; this year and I finally gave &lt;em&gt;RENAISSANCE&lt;/em&gt; another go on top of my usual Beyoncé rotations.
Clearly the data doesn’t lie, heck I was top 1% of her listeners.&lt;/p&gt;
&lt;p&gt;Billie Eilish had quite an amazing year.
&lt;em&gt;HIT ME HARD AND SOFT&lt;/em&gt; was a masterpiece in my books with great production from FINNEAS.
We get glimpses of Billie’s emotions with poignantly rich lyrics exploring different topics from love, sexuality, weight and everything in between.
This is an album where something will deeply resonate with you.&lt;/p&gt;
&lt;p&gt;I don’t have much to say about Doja Cat besides she’s a talented well-rounded artist.
&lt;a href="https://youtu.be/mXnJqYwebF8" target="_blank" rel="noreferrer"&gt;&lt;em&gt;Mooo!&lt;/em&gt;&lt;/a&gt; is a satirical play on words and classic tunes while poking fun at the rap landscape of the time.
You could say the track was childish, but it was fun.
I still love it and that’s what got me onto her music back then.&lt;/p&gt;
&lt;p&gt;James! James! James!
My friends will probably tell you he’s the only artist I speak so much about besides the obvious one starting with an A.
He’s my favourite male vocalist and producer of recent years with his angelic voice. 
I constantly revisit &lt;em&gt;Friends That Break Your Heart&lt;/em&gt; which was my first full album from him.
It’s the easiest entry point into his rich catalogue that stretches all the way back to his experimental electronic origins.&lt;/p&gt;
&lt;p&gt;Perhaps this list wasn’t a surprise after all.&lt;/p&gt;
&lt;p&gt;My top genres would probably have been Pop, Rap, R&amp;amp;B, Rock and EDM, in that order, if Spotify had included them this year.
That’s just one of the disappointing misses of Spotify Wrapped 2024.
Who would have guessed firing the entire office would be a detriment to them?&lt;/p&gt;
&lt;p&gt;Anyway, what was on your Spotify Wrapped this year? And what would you definitively recommend I should listen to?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://open.spotify.com/playlist/37i9dQZF1FoK546cZ4ZKkr" target="_blank" rel="noreferrer"&gt;Here&amp;rsquo;s my Top Songs of 2024 playlist&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Spotify Wrapped 2023 &amp;amp; 2022
&lt;div id="spotify-wrapped-2023--2022" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I won&amp;rsquo;t retroactively post articles of my previous ones but here&amp;rsquo;s the data, playlists and social media posts of the time.&lt;/p&gt;
&lt;h3 class="relative group"&gt;2023
&lt;div id="2023" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Top Songs&lt;/th&gt;
&lt;th&gt;Top Artists&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. RAYE - Escapism. (with 070 Shake)&lt;/td&gt;
&lt;td&gt;1. James Blake&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. James Blake - Mile High (feat. Travis Scott)&lt;/td&gt;
&lt;td&gt;2. Metro Boomin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Metro Boomin - Creepin&amp;rsquo; (with The Weeknd &amp;amp; 21 Savage)&lt;/td&gt;
&lt;td&gt;3. Doja Cat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Frank Ocean - Pink + White&lt;/td&gt;
&lt;td&gt;4. Adele&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Metro Boomin - Metro Spider (with Young Thug)&lt;/td&gt;
&lt;td&gt;5. Rihanna&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minutes Listened&lt;/strong&gt;: 56,787&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Top Genre&lt;/strong&gt;: Pop, Rap, Pop Dance, R&amp;amp;B, Alternative R&amp;amp;B&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Playlist:&lt;/strong&gt; &lt;a href="https://open.spotify.com/playlist/37i9dQZF1FabUsjBl7QvHA" target="_blank" rel="noreferrer"&gt;Top Songs of 2023&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Social Media Posts:&lt;/strong&gt; &lt;a href="https://x.com/insidemordecai/status/1729900380262178852" target="_blank" rel="noreferrer"&gt;Tweet&lt;/a&gt;, &lt;a href="https://www.threads.net/@insidemordecai/post/C0PKAqWiHe5" target="_blank" rel="noreferrer"&gt;Thread&lt;/a&gt;, &lt;a href="https://bsky.app/profile/insidemordecai.com/post/3kfdoo4cemf2j" target="_blank" rel="noreferrer"&gt;Skeet&lt;/a&gt; 😂&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 class="relative group"&gt;2022
&lt;div id="2022" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m still shocked by the total minutes listened but I guess that&amp;rsquo;s what endless hours of programming uni projects does to your stats.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Top Songs&lt;/th&gt;
&lt;th&gt;Top Artists&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. James Blake - Life Is Not The Same&lt;/td&gt;
&lt;td&gt;1. Adele&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. FKA Twigs - Two Weeks&lt;/td&gt;
&lt;td&gt;2. Kendrick Lamar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Lil Dicky - Molly (feat. Brendon Urie of Panic at the Disco)&lt;/td&gt;
&lt;td&gt;3. Kanye West&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Elaine - You&amp;rsquo;re the One&lt;/td&gt;
&lt;td&gt;4. Doja Cat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Doja Cat - Streets&lt;/td&gt;
&lt;td&gt;5. James Blake&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minutes Listened&lt;/strong&gt;: 117,052 🤯&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Top Genre&lt;/strong&gt;: Pop, Rap, Alternative R&amp;amp;B, EDM, Afropop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Playlist:&lt;/strong&gt; &lt;a href="https://open.spotify.com/playlist/37i9dQZF1F0sijgNaJdgit" target="_blank" rel="noreferrer"&gt;Top Songs of 2022&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Social Media Posts:&lt;/strong&gt; &lt;a href="https://x.com/insidemordecai/status/1597981761652547584" target="_blank" rel="noreferrer"&gt;Tweet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 class="relative group"&gt;2018 - 2021
&lt;div id="2018---2021" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;Sadly, I just have the playlists from between 2018 and 2021 but not any other data.
I can only recall that Adele topped the list every year and there was an increase in minutes listened every consecutive year.&lt;/p&gt;
&lt;p&gt;With that, cheers ✌️.&lt;/p&gt;</description></item><item><title>Fear of Being Cancelled</title><link>https://insidemordecai.com/cancelled/</link><pubDate>Thu, 28 Nov 2024 12:54:53 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/cancelled/</guid><description>&lt;p&gt;While relaxing with a freshly brewed cup of coffee in hand, I got this wave of inspiration.
The thought was always around but I could never find a way to put it in writing.
This time I was enthralled in a flow state, the words were floating around, spilling onto my keyboard and within no time I was done with the draft of my &lt;a href="https://insidemordecai.com/pronouns/" &gt;previous post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I gave it a quick read and for the first time I knew I had to ask someone else to review my work.&lt;/p&gt;
&lt;p&gt;I don’t like having my creation “reviewed” or “approved” since after all, this is MY personal corner of the internet.&lt;/p&gt;
&lt;p&gt;The reason for this exception is I was dealing with a contentious topic and of course I didn’t want to offend anyone.
You have tread delicately nowadays and walk on egg shells while handling certain topics.
Additionally, you could put out something and have it haunt your future self.
Is that the best way to live?
I doubt that.&lt;/p&gt;
&lt;p&gt;I think the problem is we are living publicly either through social media or under the media’s watchful eye if somehow you are a celebrity reading my site.
Previously you would stumble your way through your mistakes and come out the other end a better human without fear of some old tweet resurfacing.
Sadly, that’s no longer possible.&lt;/p&gt;
&lt;p&gt;We should have more leeway since each one of us changes their ideologies and opinions throughout their life.
If you don’t then, you’re not growing or good on you for getting it right from the beginning.&lt;/p&gt;</description></item><item><title>I Struggle with Some Pronouns</title><link>https://insidemordecai.com/pronouns/</link><pubDate>Sat, 16 Nov 2024 16:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/pronouns/</guid><description>&lt;p&gt;I struggle with the pronouns ‘they/them’ but let’s get things straight, I do not hate or discriminate against people who use these pronouns or the queer community at large.
Quite contrary so please approach this with an open mind.&lt;/p&gt;
&lt;p&gt;Genuine relationships are hard to come by, so you do you.
You may not feel comfortable in your own skin or fit a certain mould, and to each their own.
I’ll say goodbye to your old name and call you by your new one.  I’ll even make sure others respect your wishes and help you feel comfortable.&lt;/p&gt;
&lt;p&gt;What I struggle with is referring to a single person as ‘they/them’.
My challenge might stem from trying to be grammatically correct.  In that sense, I recognise ‘they’ as a third person pronoun that pairs with the verb ‘are,’ and that’s where difficulty lies.
‘Are’ just oozes plurality making it difficult to say something like ‘they are eating’ to describe someone’s actions.
Additionally, it can be hard to comprehend, especially if the person you’re speaking to isn’t aware you are referring to a single individual.&lt;/p&gt;
&lt;p&gt;Should communication be challenging?
Definitely not.
That’s why, in most cases, I don’t mind if someone mispronounces something or has a typo as long as the message gets across.  Regarding pronouns, I think this is one of those situations where everything is evolving right in front of us.
All I can do is be open-minded, adapt and treat everyone like I’d want to be treated.&lt;/p&gt;
&lt;p&gt;You might ask yourself, how does this affect me given my location?
I barely get to refer to someone using ‘they’ due to the rarity of finding non-binary individuals.
Despite that, in random discussions, I end up talking about some non-binary people, such as Sam Smith due to my love for music.
Another situation is social media.
I form connections with various people and I respect them.
I actually refer to them using their preferred pronouns, though sometimes I might forget or slip and use a binary pronoun.
That’s probably down to English and years of language habit.&lt;/p&gt;
&lt;p&gt;I’m curious about your feedback and would genuinely like to get your take on this.
There’s a &lt;a href="https://insidemordecai.com/reply-by-email/" &gt;reply-by-email&lt;/a&gt; link at the bottom (please keep responses respectful).
Share materials with me, your experience, and let’s have a genuine chat.&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;</description></item><item><title>Iron Sky by Paolo Nutini</title><link>https://insidemordecai.com/iron-sky/</link><pubDate>Wed, 16 Oct 2024 16:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/iron-sky/</guid><description>&lt;p&gt;There are some songs that just feel grand and Iron Sky is absolutely one of them.&lt;/p&gt;
&lt;p&gt;The songs starts off with a slow and deep string.
You almost get the feeling something heavy is lingering which is foreshadowing the message that Paolo will deliver.
Some piano chords join in with the drums for percussion.&lt;/p&gt;
&lt;p&gt;27 seconds into the song is when Paolo soulfully comes in.
With his raspy yet powerful voice, he enunciates his words and paints an image.
The image is that of a city that is working FOR something or someone bigger similar to slavery.
How people are turning to religion for salvation, but he questions if that is the ultimate source of power.&lt;/p&gt;
&lt;p&gt;In the chorus, the painting is that of how people in authority use love and hate to politically charge us against each other.
We are urged to overcome fear and get freedom.&lt;/p&gt;
&lt;p&gt;After a couple bars of instrumentations and reflection, the painting continues.
You get to see how governments can skew reality and truth in their favour and how the masses can quickly gobble it up.
We blindly follow those filled with greed, bitterness and hate.&lt;/p&gt;
&lt;p&gt;As we return back to the chorus, we find it slightly changed.
Passionate as ever but now some brass instruments chime in.
Contrary to the first chorus where Paolo was making an observation and addressing us, this time he uses the pronouns ‘we’ to show he is part of us and wants us to unite - “we’ll rise.”&lt;/p&gt;
&lt;p&gt;We also get the refrain where he urges us to hold on despite the all-consuming emotions used against us.&lt;/p&gt;
&lt;p&gt;On top of that he brilliantly weaves in a powerful excerpt of Charlie Chaplin’s speech from The Great Dictator (1940).&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;To those who can hear me, I say, do not despair.&lt;br&gt;
The misery that is now upon us is but the passing of greed, the bitterness of men who fear the way of human progress.
The hate of men will pass, and dictators die, and the power they took from the people will return to the people.&lt;br&gt;
And so long as men die, liberty will never perish.
Don&amp;rsquo;t give yourselves to these unnatural men!&lt;br&gt;
Machine men with machine minds and machine hearts!&lt;br&gt;
You are not machines, you are not cattle, you are men!
You, the people, have the power to make this life free and beautiful, to make this life a wonderful adventure.
Let us use that power.&lt;br&gt;
Let us all unite!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I haven’t watched the film but it is a satirical comedy by Charlie Chaplin.
The situation was dire considering he was known for silent pictures.
This time he talks and voices his disapproval of the atrocities that was happening in Europe as World War II began.&lt;/p&gt;
&lt;p&gt;Throughout Charlie Chaplin’s speech, the guitarist strums along as the excerpt is used to stylise the message Paolo has been painting.
The instrumentation builds up as well as Charlie and we conclude that ultimately the power is with the people.&lt;/p&gt;
&lt;p&gt;The final painting is that of a nation that is divided by the political class.&lt;/p&gt;
&lt;p&gt;We come back to the chorus feeling charged with this newfound knowledge.
We can unite and rise over the current lows of our cold society and freedom is nigh.&lt;/p&gt;
&lt;p&gt;After following Paolo’s journey through the song, you get the urge to start a revolution.&lt;/p&gt;
&lt;p&gt;Many find Charlie Chaplin’s speech in the film to be one of the greatest speeches and I agree with them.
It is about the climate in the late 1930s but boy oh boy is it still relevant today.
In the end it’s about the love for humanity among all.&lt;/p&gt;
&lt;p&gt;Iron Sky adds to that and is relevant in the political landscape in Kenya right now with the recent anti-government protests but also in most parts of the world.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/ELKbtFljucQ" target="_blank" rel="noreferrer"&gt;Paolo Nutini - Iron Sky&lt;/a&gt; - live session at Abbey Road.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/J7GY1Xg6X20" target="_blank" rel="noreferrer"&gt;Charlie Chaplin’s final speech from The Great Dictator in full&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Sn-41BmWxJA" target="_blank" rel="noreferrer"&gt;Mo Adeniran performing Iron Sky on The Voice UK&lt;/a&gt; during his Blind Audition - this is how I discovered the song a couple of years back. Spoiler alert: he picked Jennifer Hudson and eventually won the season.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/k8bVG8XC-4I" target="_blank" rel="noreferrer"&gt;The Great Dictator trailer&lt;/a&gt; - more of a clip than a trailer but I guess it still works and it’s quite metaphorical.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/The_Great_Dictator" target="_blank" rel="noreferrer"&gt;The Great Dictator’s Wikipedia page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Reply by Email</title><link>https://insidemordecai.com/reply-by-email/</link><pubDate>Tue, 10 Sep 2024 17:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/reply-by-email/</guid><description>&lt;p&gt;Years ago, I left comments on people’s blogs which led to interesting discussions and even friendships.
I&amp;rsquo;d like to return to that habit because it encourages interactions, and learning.&lt;/p&gt;
&lt;p&gt;A few months back, I responded to a post by &lt;a href="https://niqwithq.com/" target="_blank" rel="noreferrer"&gt;Niq&lt;/a&gt; via email and I found the interaction quite pleasant albeit short.
He even shared with me extra details on my latest post at that point.&lt;/p&gt;
&lt;p&gt;Through this interaction, I realised the benefits of this feature on a website, which led me down a rabbit hole of old posts I read before from Niq and &lt;a href="https://kevquirk.com/" target="_blank" rel="noreferrer"&gt;Kev Quick&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That’s when I noticed many independent blogs have a &amp;lsquo;Reply by Email&amp;rsquo; option.
I liked it due to its simplicity.&lt;/p&gt;
&lt;p&gt;So you might ask yourself, what is &amp;lsquo;Reply by Email&amp;rsquo;?
It’s simply a way to leave a comment but via email 😂&lt;/p&gt;
&lt;p&gt;Email has been there for years and everyone has it so you don’t need to create an account to leave a comment.
It also minimises spam because few will put in the effort just to send irrelevant comments.
Additionally, email encourages fleshed-out responses unlike the quick &amp;rsquo;nice read&amp;rsquo; comments typical on social media.&lt;/p&gt;
&lt;p&gt;I could go on but I recommend you read &lt;a href="https://niqwithq.com/posts/reply-by-email" target="_blank" rel="noreferrer"&gt;Niq’s&lt;/a&gt; and &lt;a href="https://kevquirk.com/blog/online-conversations-website-engagement" target="_blank" rel="noreferrer"&gt;Kev Quirk’s post&lt;/a&gt; on it.&lt;/p&gt;
&lt;p&gt;With all that, I got to working, developed the feature for &lt;a href="https://blowfish.page/" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;, and it’s now live on this website - feel free to give it a try.&lt;/p&gt;</description></item><item><title>On Single-Use Devices</title><link>https://insidemordecai.com/on-single-use-devices/</link><pubDate>Wed, 21 Aug 2024 12:00:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/on-single-use-devices/</guid><description>&lt;p&gt;Recently, I find myself watching and reading materials on single-use devices. My YouTube home page is filled with videos about iPods, e-readers, dumbphones, and other similar devices.&lt;/p&gt;
&lt;p&gt;Why do I gravitate towards content about dedicated devices? Why are more people creating content around this topic? I’ve also noticed more content about physical media and ownership.&lt;/p&gt;
&lt;p&gt;While going through my bags in my room earlier last month, I found an old digicam, a Sony Cyber-shot W710, and to my surprise, it worked perfectly. I could still post the old photos on it to social media, and no one would question the image quality. I mean, it would lose when put side by side with a Google Pixel, but it was a cheap entry-level digicam back then. Since discovering it, I get the urge to take more photos; I even went on a run with it since it’s pocketable.&lt;/p&gt;
&lt;p&gt;Modern smartphones will be better than most single-use devices, but sometimes they can suffer from being a ‘Jack of all trades and master of none.’ &lt;a href="https://www.youtube.com/@diggingthegreats" target="_blank" rel="noreferrer"&gt;Digging The Greats&lt;/a&gt; in his iPod miniseries (linked below) analogised this to a Swiss army knife. When you want to do some task, you don&amp;rsquo;t instinctively go for the multi-tool but rather a dedicated more capable tool.&lt;/p&gt;
&lt;p&gt;The main areas that appeal to me about single-use devices are that they excel at what they are made for and they don’t carry the baggage of distractions that come about with smartphones. I’ll use the example of an e-reader. &lt;a href="https://insidemordecai.com/wishlist-to-reality/" &gt;I own a Kindle&lt;/a&gt; and I can confidently say it is significantly superior to a smartphone or an iPad at reading. The screen is perfect, the battery lasts an eternity, and to tie in the other aforementioned reason, I get to have a proper reading session where I am not bombarded with notifications and other forms of distractions.&lt;/p&gt;
&lt;p&gt;It’s not the manufacturer’s fault, but big tech companies want eyeballs on their apps, and this has brought forth dire consequences, but that’s a topic for another day.&lt;/p&gt;
&lt;p&gt;I think the popularity of these devices will continue increasing as more and more people want to rid themselves of dependency on smartphones.&lt;/p&gt;
&lt;p&gt;Truth be told, there is also a huge aspect of nostalgia that gets me (and probably a lot more people) googly eyes. Is that even a saying/phrase? I think you know what I mean though.&lt;/p&gt;
&lt;p&gt;I never thought I’d be the one to enjoy this regression back to the mid-2000s, but I kinda like it. A dumbphone for calls, messages, MPESA, and basic functionality, iPods for music, e-readers for reading, a camera for photography.&lt;/p&gt;
&lt;p&gt;While we’re at that, can someone make a dumbphone with decent Spotify (where&amp;rsquo;s lossless audio?) and a proper digital-to-analog converter (DAC)? Please!&lt;/p&gt;
&lt;h2 class="relative group"&gt;Digging The Greats&amp;rsquo; iPod Miniseries
&lt;div id="digging-the-greats-ipod-miniseries" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;From time to time, I watch videos by Digging The Greats and he just started this 4-part miniseries of his experience listening to music on just an iPod for a month. The first video is what made me want to make this post of what&amp;rsquo;s been on my mind and as such I also recommend watching the miniseries.&lt;/p&gt;
&lt;p&gt;He naturally goes through various stages until his eventual resolution to make technology work for him and more of a tool.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://youtu.be/Ou2dW4qebbw" target="_blank" rel="noreferrer"&gt;Using This iPod For 30 Days Changed My Life&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/t9TZh0oNAHQ" target="_blank" rel="noreferrer"&gt;The REAL Reason Algorithms are Bad For Culture (iPod Week 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/_L-WUrZ7tJM" target="_blank" rel="noreferrer"&gt;I Dumb-i-fied my iPhone and Got My Life Back (iPod Week 3)&lt;/a&gt; - personal favourite!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/VzKr-tMr8qQ" target="_blank" rel="noreferrer"&gt;How to Use Technology WITHOUT the Addiction (iPod Week 4)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Google ‘Killing’ Products Is Just a Marketing Issue</title><link>https://insidemordecai.com/google-killing-products-marketing-issue/</link><pubDate>Mon, 12 Aug 2024 16:05:11 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/google-killing-products-marketing-issue/</guid><description>&lt;p&gt;Recently, &lt;a href="https://arstechnica.com/gadgets/2024/08/google-kills-chromecast-replaces-it-with-apple-tv-and-roku-ultra-competitor/" target="_blank" rel="noreferrer"&gt;Google ‘killed’ Chromecast&lt;/a&gt; and launched a new product. As expected, media outlets ran with titles in the vein of ‘Yet another Google product is killed’.&lt;/p&gt;
&lt;p&gt;It’s odd, but not surprising, that Google keeps ‘killing’ beloved products that are recognisable in favour of the sometimes bland ones, with added complexity and a touch of confusion for the end-customer.&lt;/p&gt;
&lt;p&gt;They also have an &lt;a href="https://www.computerworld.com/article/3482057/google-gemini-assistant.html" target="_blank" rel="noreferrer"&gt;identity crisis with Gemini and Assistant&lt;/a&gt;. Heck, Bard was a really good name and they had some sort of clear distinction back then. Look at the Google Duo, Google Meet (Original), and &lt;a href="https://www.wired.com/story/google-meet-duo-video-chat-app-merger/" target="_blank" rel="noreferrer"&gt;Google Meet mess&lt;/a&gt;, but I digress.&lt;/p&gt;
&lt;p&gt;In this case, Google didn’t really kill Chromecast but rather rebranded it into a much more capable device with a generic name. You can’t convince me Google TV Streamer was the best name they could come up with. The problem is, with time, we’ll just get used and possibly attached to this name right in time for them to ditch it.&lt;/p&gt;
&lt;p&gt;They somehow always make it seem like they have killed certain products when in most cases they could easily spin it off that they’ve merged features into another product while retaining a beloved name.&lt;/p&gt;
&lt;p&gt;If marketed properly, then we wouldn’t have the infamous &lt;a href="https://killedbygoogle.com/" target="_blank" rel="noreferrer"&gt;Google Graveyard&lt;/a&gt;, or the bodies would have been significantly fewer.&lt;/p&gt;
&lt;p&gt;Ultimately, I think it’s a marketing issue.&lt;/p&gt;</description></item><item><title>I don't like streaks</title><link>https://insidemordecai.com/on-gamification/</link><pubDate>Wed, 24 Jul 2024 15:10:32 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/on-gamification/</guid><description>&lt;p&gt;Apple is working on bringing watchOS 11 in a few weeks, and one of the features that got people excited is the &lt;a href="https://www.theverge.com/2024/6/13/24175506/apple-watch-watchos-11-rest-days-wearables" target="_blank" rel="noreferrer"&gt;ability to have rest days on the Apple Watch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It’s amazing how that wasn’t possible before, but I’m glad it’s here. The human body needs to rest, and as such you wouldn’t expect someone to work out every day just to close their ring.&lt;/p&gt;
&lt;p&gt;A lot of apps employ similar gamification strategies, which is unhealthy, and I hate it.&lt;/p&gt;
&lt;p&gt;I used to be a huge Snapchat user, and its streaks feature ensured I opened the app every single day even if I wasn’t inclined to do so. That little fire emoji next to a friend’s name with the number of how many consecutive days you’ve sent pictures to each other was really valuable.&lt;/p&gt;
&lt;p&gt;However, things started changing. On top of outgrowing the app, it started to feel like I’m forcing myself to keep the 1000+ streaks active.&lt;/p&gt;
&lt;p&gt;It’s quite telling when it reaches a point where you’re doing the bare minimum just to keep a streak active.&lt;/p&gt;
&lt;p&gt;On Snapchat, that’s usually a black photo with a lightning bolt or fire emoji. On Duolingo, that’s taking one short lesson or a practice session.&lt;/p&gt;
&lt;p&gt;I mean, it’s desperate if a Bible app introduces gamification. Yes, you can spin it that it’s getting people to read a scripture every day but that’s not usually the case. Someone can simply open the app and close it swiftly after. I began to dislike this feature in YouVersion Bible &lt;a href="https://medium.com/sketchpad/broken-streaks-and-broken-hearts-fdc6427d8749" target="_blank" rel="noreferrer"&gt;and I’m not alone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Those are just three examples of apps that I quit or barely use because of gamification.&lt;/p&gt;
&lt;p&gt;I think we, as developers, should re-evaluate if apps really need gamification added to them. For some, the strategy is to ensure constant use of their apps but it shouldn’t be the case.&lt;/p&gt;
&lt;p&gt;Of course, it will seem like turning a huge ship since in most cases some big tech is involved but generally, something needs to change as it’s clearly becoming unhealthy for most.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/6gRcbeFnucA?t=1957" target="_blank" rel="noreferrer"&gt;Inside the global computer crash&lt;/a&gt; - have a listen to this The Vergecast podcast (starts after the &lt;a href="https://www.theverge.com/24201803/crowdstrike-microsoft-it-global-outage-airlines-banking" target="_blank" rel="noreferrer"&gt;Crowdstrike IT outage discussion&lt;/a&gt;) where &lt;a href="https://en.wikipedia.org/wiki/Adrian_Hon" target="_blank" rel="noreferrer"&gt;Adrian Hon&lt;/a&gt; talks about his experience with Fitness apps and his approach to co-creating the popular fitness game &lt;a href="https://zrx.app/" target="_blank" rel="noreferrer"&gt;&lt;em&gt;Zombies, Run!&lt;/em&gt;&lt;/a&gt; without including streaks and aggressive notifications but relying solely on a good storyline/motivator:&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/sketchpad/broken-streaks-and-broken-hearts-fdc6427d8749" target="_blank" rel="noreferrer"&gt;Broken Streaks and Broken Hearts&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cheers ✌️&lt;/p&gt;</description></item><item><title>Western Hypocrisy on Chinese EVs</title><link>https://insidemordecai.com/western-hypocrisy-on-chinese-evs/</link><pubDate>Sat, 15 Jun 2024 19:31:28 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/western-hypocrisy-on-chinese-evs/</guid><description>&lt;p&gt;Recently, The Verge had &lt;a href="https://www.theverge.com/2024/6/12/24176871/eu-additional-tariffs-chinese-ev-imports" target="_blank" rel="noreferrer"&gt;this headline&lt;/a&gt; about the EU imposing more tariffs on Chinese electric vehicles (EVs). This mirrors similar actions by the US and to me, it screams of hypocrisy.&lt;/p&gt;
&lt;p&gt;On one hand, Western countries preach free trade yet these tariffs clearly contradict that. I know this might be to protect their local markets/companies but what irks me the most is this is particularly something that hinders the global effort towards tackling climate change.&lt;/p&gt;
&lt;p&gt;They talk about countries switching to clean energy within a certain timeframe and sometimes in a condescending manners when to be fair most African countries rely on mainly green sources of energy - I acknowledge generalising.&lt;/p&gt;
&lt;p&gt;It feels wrong when China have put their money where their mouth is and developed something that is good for the global goal of decarbonisation and all that. They are producing really good EVs from the likes of BYD at a lower price than its competitors.&lt;/p&gt;
&lt;p&gt;Look at European brand, most of them manufacture their EVs in China, leveraging Chinese EV architecture that they have clearly perfected.&lt;/p&gt;
&lt;p&gt;There is the argument that the Chinese government is unfairly playing its hand with the subsidies but I don’t think the end-consumer cares.&lt;/p&gt;
&lt;p&gt;These tariffs and similar discussions shouldn’t be a thing when your goal is to transition from internal combustion engine (ICE) vehicles rapidly.&lt;/p&gt;
&lt;p&gt;The relevant people should practice what they preach and foster actual competition that will result in better innovation around battery tech and ultimately economies of scale will work its wonders to bring EVs to the masses.&lt;/p&gt;</description></item><item><title>Wishlist to Reality</title><link>https://insidemordecai.com/wishlist-to-reality/</link><pubDate>Sun, 24 Dec 2023 17:39:54 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/wishlist-to-reality/</guid><description>&lt;p&gt;We all have those items that linger in our Amazon baskets. For over a year, the Kindle Paperwhite sat patiently on my wish list, awaiting the moment when I could muster enough willpower (and perhaps some extra cash under my mattress) to check out.&lt;/p&gt;
&lt;p&gt;Finally, I stumbled upon someone with a Kindle device, but it was the Basic version. Everything about it appealed to me, including the smaller size that I had previously thought would be less than ideal. This alone convinced me to finally get my own Kindle Basic.&lt;/p&gt;
&lt;p&gt;Just go ahead and check out if you have a product that you&amp;rsquo;ve wanted for some time.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m definitely not promoting needless spending. Heck, I waited a bit longer to snag a Black Friday offer. My philosophy is that you should only do this for items that have gathered dust in your basket but you find yourself going back to frequently.&lt;/p&gt;
&lt;p&gt;So, just get that Kindle.&lt;/p&gt;</description></item><item><title>Less Technical, More Think Pieces</title><link>https://insidemordecai.com/more-think-pieces/</link><pubDate>Mon, 27 Nov 2023 18:03:23 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/more-think-pieces/</guid><description>&lt;p&gt;Some of you might have noticed that I&amp;rsquo;m gradually shifting the tone and style of my writings on this blog. I&amp;rsquo;m moving away from more technical articles to focus on personal opinion pieces. While still centred around tech, these posts will lean less on &amp;lsquo;how-to&amp;rsquo; and more on &amp;lsquo;here&amp;rsquo;s why.&amp;rsquo;&lt;/p&gt;
&lt;p&gt;I may include a few technical articles occasionally but not too often. Additionally, I might explore other topics of interest.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to box myself into a small corner, considering that my life has been anything but that. Looking at &lt;a href="https://manuelmoreale.com" target="_blank" rel="noreferrer"&gt;Manu Moreale&amp;rsquo;s blog&lt;/a&gt; and &lt;a href="https://47nil.com" target="_blank" rel="noreferrer"&gt;47nil&lt;/a&gt; among others, I&amp;rsquo;ve come to appreciate the freedom to write as little as a one-liner, a paragraph, or something longer, without feeling compelled to reach a certain length.&lt;/p&gt;</description></item><item><title>On Subscriptions</title><link>https://insidemordecai.com/subscriptions/</link><pubDate>Thu, 09 Nov 2023 15:05:53 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/subscriptions/</guid><description>&lt;p&gt;Roundabout 100 people from the streets, ask them about subscriptions, and you&amp;rsquo;ll find that nearly everyone is familiar with the concept, unlike a few years ago - at least here in Kenya. Most likely, the majority among them have an active subscription.&lt;/p&gt;
&lt;p&gt;Do I like subscriptions? Not really, but I don&amp;rsquo;t have a strong opposition to them, especially when done right.&lt;/p&gt;
&lt;p&gt;What I definitely don&amp;rsquo;t like is everything becoming a subscription - seems everything has got a toll booth these days. From the controversial &lt;a href="https://adguard.com/en/blog/subscriptions-cars-mercedes-netflix.html" target="_blank" rel="noreferrer"&gt;locking certain built-in features in vehicles behind a paywall&lt;/a&gt; to certain platforms offering subscriptions but still bombarding you with ads - it&amp;rsquo;s like paying for a quiet library and getting a live concert.&lt;/p&gt;
&lt;p&gt;Subscriptions used to be an ad-free and privary-respecting alternative to the free services we are used to.&lt;/p&gt;
&lt;p&gt;One bad example is the entertainment industry - not only is it getting pricier but also more fragmented. It&amp;rsquo;s increasingly becoming better and easier to resort to piracy and use solutions like &lt;a href="https://www.plex.tv/" target="_blank" rel="noreferrer"&gt;Plex&lt;/a&gt;/&lt;a href="https://jellyfin.org/" target="_blank" rel="noreferrer"&gt;Jellyfin&lt;/a&gt; or your local media player.&lt;/p&gt;
&lt;p&gt;Perhaps we should switch to local-first solutions or self-hosting everything but not everyone is tech-savvy enough to DJ their own digital content.&lt;/p&gt;
&lt;p&gt;Most of the content on the web is a labour of love and for now, I support subcriptions especially when it contributes to the creation of content I enjoy but I hope something changes, be it the profit-hungry business models or the economic system itself.&lt;/p&gt;
&lt;p&gt;To conclude, have a listen to this Vergecast podcast that delves into the dilemma of self-hosting: &lt;a href="https://youtu.be/07vW-wX_5NI?si=vIiVmA45ZottIHIt" target="_blank" rel="noreferrer"&gt;An impossible journey into self-hosting | The Vergecast&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Switched to Cloudflare Pages</title><link>https://insidemordecai.com/switched-to-cloudflare-pages/</link><pubDate>Fri, 18 Aug 2023 00:00:00 +0000</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/switched-to-cloudflare-pages/</guid><description>&lt;p&gt;For about a month, this website was not sending data to &lt;a href="https://www.goatcounter.com/" target="_blank" rel="noreferrer"&gt;GoatCounter&lt;/a&gt;. I managed to resolve this but the rabbit hole led me to rediscover &lt;a href="https://pages.cloudflare.com" target="_blank" rel="noreferrer"&gt;Cloudflare Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I still love and recommend GitHub Pages&lt;/strong&gt;, with a simple GitHub Action you can deploy your project and even &lt;a href="https://insidemordecai.com/custom-domains-with-github-pages/" &gt;make use of custom domains&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Anyway, for my use case, the top alternatives were Cloudflare Pages and &lt;a href="https://www.netlify.com/" target="_blank" rel="noreferrer"&gt;Netlify&lt;/a&gt;. I currently manage domains on Cloudflare making it the obvious choice.&lt;/p&gt;
&lt;p&gt;Some of &lt;strong&gt;the benefits of Cloudflare Pages&lt;/strong&gt; include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fast site performance on the Cloudflare network.&lt;/li&gt;
&lt;li&gt;Easy to add a custom domain especially so if you use Cloudflare for domain management.&lt;/li&gt;
&lt;li&gt;Free SSL certificate with any plan.&lt;/li&gt;
&lt;li&gt;Ability to have preview deployments before rolling to production.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The process of switching over was smooth. I connected Cloudflare Pages with my Git repository, set up build settings (just selecting Hugo as my framework) and deployed it. &lt;strong&gt;That easy!&lt;/strong&gt; In my case, to setup a custom domain, Cloudflare simply added the necessary DNS records automatically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That&amp;rsquo;s the update&lt;/strong&gt;, for a guide on setting up Cloudflare Pages, have a look at &lt;a href="https://developers.cloudflare.com/pages/get-started/guide/" target="_blank" rel="noreferrer"&gt;Cloudflare Docs&lt;/a&gt; or this &lt;a href="https://youtu.be/MTc2CTYoszY" target="_blank" rel="noreferrer"&gt;YouTube Video&lt;/a&gt;&lt;/p&gt;</description></item><item><title>State of Social Media and My Journey Through It</title><link>https://insidemordecai.com/state-of-social-media/</link><pubDate>Mon, 14 Aug 2023 09:50:00 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/state-of-social-media/</guid><description>&lt;p&gt;On 7th October 2022, Elon Musk concluded his purchase of Twitter and it has been quite a journey since then. A journey Reddit took a liking to.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take it back: the year is 2012, and behind my parent&amp;rsquo;s back, I joined Facebook and revelled in this new world, all the while trying to be discreet. This did not last long, but surprisingly, I was not scolded. We had a talk of how I should use it and it was free rein from there.&lt;/p&gt;
&lt;p&gt;Cue in a spree of joining every imaginable social media platform. It was love at first sight when I created my first Twitter account in 2013 but my teenage self picked up the bad habit of tweeting every minute from TV shows, and to this day, I still get tagged in those old cringe tweets.&lt;/p&gt;
&lt;p&gt;Google+ came onto the scene and I have to admit that was one of the best platforms, alongside Twitter, if not the best.&lt;/p&gt;
&lt;p&gt;Blogging became a huge thing and I jumped right in. However, one thing I regret is deleting my old blogs. I understand how cathartic that could have been but I have come to appreciate the importance of maintaining an archive where you can revisit your earlier work and perhaps find joy in observing your progress (or lack thereof) over time.&lt;/p&gt;
&lt;p&gt;Facebook faced the Cambridge Analytica scandal and consequently I deleted most of my accounts in 2018/19 but replaced some with a clear focus on privacy.&lt;/p&gt;
&lt;p&gt;Circle back to Elon&amp;rsquo;s takeover of Twitter and alternative platforms like Mastodon rise but this time I&amp;rsquo;m not hasty in joining them.&lt;/p&gt;
&lt;p&gt;Meta capitalised on Twitter&amp;rsquo;s issues by launching Threads, and technically, every Instagram user already had an account. To me, it felt like it was launched prematurely. It was great but it lacked a lot of features and Meta wasn&amp;rsquo;t as aggressive as I expected in achieving feature parity with Twitter and building upon that.&lt;/p&gt;
&lt;p&gt;In the same week, I got an invite into &lt;a href="https://blueskyweb.xyz/blog/6-13-2023-what-is-bluesky" target="_blank" rel="noreferrer"&gt;BlueSky&lt;/a&gt; and it was amazing. It was everything I had hoped for albeit the userbase was minuscule. It had the same vibe as Twitter in its early days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Will the alternatives dethrone Twitter?&lt;/strong&gt; Unlikely. Twitter is the juggernaut that popularised &amp;lsquo;microblogging&amp;rsquo; and it will take a lot to bring it down. Perhaps Elon himself will do that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So, what does the future hold?&lt;/strong&gt; I don&amp;rsquo;t know but juggling between Twitter, its alternatives and other platforms can be tiring. Ideally, platforms would be interoperable.&lt;/p&gt;
&lt;p&gt;This will likely be a battle between protocols rather than the apps themselves. For example, Mastodon is built on top of &lt;a href="https://www.theverge.com/2023/4/20/23689570/activitypub-protocol-standard-social-network" target="_blank" rel="noreferrer"&gt;ActivityPub&lt;/a&gt;, which enjoys support of multiple companies, while BlueSky utilises the &lt;a href="https://atproto.com/" target="_blank" rel="noreferrer"&gt;AT Protocol&lt;/a&gt;. If one of these protocols (or a new one) gains significant traction then the social networking landscape will change drastically. In theory, we wouldn&amp;rsquo;t be tied to an organisation or a CEO which is quite exciting. Hopefully in the end we don’t all gravitate back towards a centralised platform.&lt;/p&gt;
&lt;p&gt;I, for one, hope personal websites make a comeback. A place to call your home base.&lt;/p&gt;</description></item><item><title>Enough with the Bloat</title><link>https://insidemordecai.com/bloatware/</link><pubDate>Fri, 19 May 2023 09:00:57 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/bloatware/</guid><description>&lt;p&gt;For the love of God, please stop installing bloatware on your computer. I have noticed that people have a tendency to install every software they stumble upon, despite the fact that modern operating systems have a lot of features built-in.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll use Windows as an example, as it has the largest market share and a lot of people have this tendency. For example, if all you do with zip files is extract them, then Windows has you covered - you don&amp;rsquo;t need WinRAR. Additionally, many people overlook the built-in disk cleanup utility provided by Windows. It&amp;rsquo;s a powerful tool to clean up temporary files, various clutter as well as chunks left after Windows updates. Why do you need a registry cleaner, a cleanup utility or some driver pack installer? It&amp;rsquo;s most likely just malware. Don&amp;rsquo;t even mention those free antivirus software like McAfee - they&amp;rsquo;re totally pointless.&lt;/p&gt;
&lt;p&gt;Finally, if you only open PDFs but don&amp;rsquo;t manipulate them, please don&amp;rsquo;t install that Adobe software or Nitro PDF just for that. It&amp;rsquo;s like trying to kill a bug with a car - your default browser has the capability to view PDFs.&lt;/p&gt;
&lt;p&gt;I could go on and on but that&amp;rsquo;s enough for now.&lt;/p&gt;
&lt;p&gt;Perhaps it&amp;rsquo;s a lack of understanding of newer applications and operating systems, or being stuck in the days of Windows Vista. Having a million apps will just slow down your computer, be a pain to update, or worse, be a potential cyber threat. Just don&amp;rsquo;t install bloat on your computer.&lt;/p&gt;</description></item><item><title>What Happens When You Type 'google.com' Into Your Browser</title><link>https://insidemordecai.com/tracing-url-request/</link><pubDate>Fri, 14 Apr 2023 00:00:00 +0000</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/tracing-url-request/</guid><description>
&lt;div
class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
&gt;
&lt;span
class="text-primary-400 pe-3 flex items-center"
&gt;
&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/span&gt;
&lt;span
class="dark:text-neutral-300"
&gt;This article was done in fulfillment of an assignment for a Software Engineering course.&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Billions of people on earth open their browsers everyday and type their favourite website&amp;rsquo;s URL - be it a social media site or some news outlet. Depending on your internet speed, this might be a matter of milliseconds but have you ever wondered what happens behind the scenes? I&amp;rsquo;ll get into that, hint - it&amp;rsquo;s a lot.&lt;/p&gt;
&lt;h2 class="relative group"&gt;DNS Request
&lt;div id="dns-request" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Your browser does not know what &amp;lsquo;google.com&amp;rsquo; is so as soon a you hit enter, it tries to resolve this into an IP address - it does this using a DNS (Domain Name System) lookup. This is where your browser checks different locations for cached DNS data starting from its own cache, operating system, router and finally the DNS server at your Internet Service Provider (ISP). In the event the IP address of the website you want to visit can&amp;rsquo;t be found, your browser does a recursive DNS lookup where it asks multiple DNS servers around the internet which in turn ask other DNS servers until it gets the DNS record.&lt;/p&gt;
&lt;p&gt;At this point the DNS record is cached so that future requests for the same domain can be resolved more quickly.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Firewall
&lt;div id="firewall" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Once the browser sends a request, before it gets to the server it will pass through a firewall.&lt;/p&gt;
&lt;p&gt;A firewall is a network security device that monitors incoming and outgoing network traffic and decides whether to allow or block specific traffic based on a defined set of security rules.&lt;/p&gt;
&lt;p&gt;Its main function is to protect the network from threat actors so when you type &lt;code&gt;google.com&lt;/code&gt;, the request passes through the firewall on its way to Google&amp;rsquo;s servers where depending on the security rules access may be denied.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Browser Performs TCP 3-Way Handshake
&lt;div id="browser-performs-tcp-3-way-handshake" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Packets from the browser are sent to the server the IP address connects to using transmission control protocol (TCP). This is because TCP/IP is reliable and ensures data is sent in the correct order with no packetloss which is crucial when trying to load a website.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what happens:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The browser sends the initial packet with a SYN (SYNchronize) header bit to establish connection. (&amp;ldquo;Hey, are you available next Tuesday?&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Upon receiving, the web server sends back a SYN-ACK (SYNchronize-ACKnowledge). (&amp;ldquo;Hey, yes I am free.&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;The browser send back ACK. (&amp;ldquo;A-Okay, let&amp;rsquo;s talk.&amp;rdquo;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is the 3-way handshake after which a socket is created. This is a two way communication link that facilitates transfer of data.&lt;/p&gt;
&lt;p&gt;Most websites have migrated to HTTPS which encrypts the web traffic so if you had typed &lt;code&gt;http://www.google.com&lt;/code&gt;, the web server will return a 301 error code for Permanent Redirect. The browser will be redirected to &lt;code&gt;https://www.google.com&lt;/code&gt; but it will first send a FIN packet, the server will respond with ACK and the socket is closed afterwhich the browser will attempt to connect to the redirected link.&lt;/p&gt;
&lt;p&gt;The DNS request and the 3-way handshake happen again as well as a SSL/TLS handshake. This is a negotiation between two parties on a network to establish the details of their connection. It determines what version of SSL/TLS will be used in the session, which cipher suite will encrypt communication, verifies the server (and sometimes also the client), and establishes that a secure connection is in place before transferring data.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Other Concepts To Know
&lt;div id="other-concepts-to-know" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;h3 class="relative group"&gt;Load Balancing
&lt;div id="load-balancing" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;A load balancer sits in front of a server and distributes network traffic across all servers capable of fulfilling those request. It does this through various load balancing methods but its ultimate goal is to ensure no single server is overloaded by maximizing speed and capacity.&lt;/p&gt;
&lt;p&gt;It is important to know that it is very likely that the first connection to &lt;code&gt;google.com&lt;/code&gt; was made to a load balancer instead of actual web servers due to the large amount of traffic they receive.&lt;/p&gt;
&lt;p&gt;If a server goes down, traffic is sent ot the remaining servers and if a new server is added, the load balancer starts sending requests to it.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Web Servers vs. Application Servers
&lt;div id="web-servers-vs-application-servers" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;In a typical deployment, a website that provides both static and dynamically generated content runs web servers for the static content and application servers to generate content dynamically.&lt;/p&gt;
&lt;p&gt;A web server is a computer program whose fundamental job is to accept and fulfill requests from clients for static content from a website (HTML pages, files, images, video, and so on).&lt;/p&gt;
&lt;p&gt;An application server&amp;rsquo;s fundamental job is to provide its clients with access to what is commonly called business logic, which generates dynamic content; that is, it’s code that transforms data to provide the specialized functionality offered by a business, service, or application.&lt;/p&gt;
&lt;p&gt;All in all, the two concepts differ but they are usually deployed together to fulfill the request of a user for a website&amp;rsquo;s content.&lt;/p&gt;
&lt;p&gt;For the case of typing &lt;code&gt;google.com&lt;/code&gt; into your browser, their web server will receive your request and process it, generate a response (static content) and send it back to the user&amp;rsquo;s browser to render the web page. The web server will also get in touch with the application server to generate search results and in some complex cases, it may need to make a request to a database server.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Database Server
&lt;div id="database-server" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;A database server runs a Database Management System (DBMS) and provides database services to clients. Its main role is to receive requests from client machines, search for the required data, and pass back the results. It consists of physical hardware as well as the software that runs the database.&lt;/p&gt;
&lt;p&gt;It is a crucial component in the client-server computing environment where it provides business-critical information requested by the client systems. This information is sent back to the user and their browser will render it.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Browser Renders The Content
&lt;div id="browser-renders-the-content" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Once the browser has received the response from the servers, it inspects the response headers for information on how to render the resource.&lt;/p&gt;
&lt;p&gt;In the response, there is a &lt;code&gt;Content-Type&lt;/code&gt; header that tells the browser which resource it has received in the response body. For the case of a HTML file, the browser will render the structure of the page and if it gets other resources such as CSS, JavaScript or images, it will render them accordingly.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Summing Up
&lt;div id="summing-up" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This is the simplified final flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On pressing enter, the browser finds the website&amp;rsquo;s IP address with the help of a DNS server.&lt;/li&gt;
&lt;li&gt;The browser then makes a connection with the web server (either directly or through a load balancer) using TCP/IP to send a copy of the website.&lt;/li&gt;
&lt;li&gt;All the while, the back and forth communication passes through firewalls and if everything is approved, the servers (web, application and database server) start sending the website&amp;rsquo;s content in small chunks (data packets).&lt;/li&gt;
&lt;li&gt;The browser assembles the small chunks and renders the page to the user.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You have successfully landed on &lt;code&gt;google.com&lt;/code&gt; or any other website after multiple steps that barely takes more than a second.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/mobile/what-happens-when-you-type-a-url-into-your-browser/" target="_blank" rel="noreferrer"&gt;AWS: What happens when you type a URL into your browser?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisco.com/c/en/us/products/security/firewalls/what-is-a-firewall.html" target="_blank" rel="noreferrer"&gt;Cisco: What Is a Firewall?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ssl.com/article/ssl-tls-handshake-overview/" target="_blank" rel="noreferrer"&gt;SSL.com: The SSL/TLS Handshake: an Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://moz.com/learn/seo/http-status-codes" target="_blank" rel="noreferrer"&gt;Moz: HTTP Status Codes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nginx.com/resources/glossary/load-balancing/" target="_blank" rel="noreferrer"&gt;NGINX: What Is Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nginx.com/resources/glossary/application-server-vs-web-server/" target="_blank" rel="noreferrer"&gt;NGINX: What Is an Application Server vs. a Web Server?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phoenixnap.com/kb/what-is-a-database-server" target="_blank" rel="noreferrer"&gt;phoenixNAP: What Is a Database Server &amp;amp; What Is It Used For?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>I'm Ditching VS Code</title><link>https://insidemordecai.com/why-im-leaving-vs-code-for-vim/</link><pubDate>Wed, 15 Feb 2023 00:00:00 +0000</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/why-im-leaving-vs-code-for-vim/</guid><description>&lt;p&gt;My journey has been one where I find a text editor I like and I settle with that. I learnt programming around 2015 but nothing too serious, heck, I used Notepad on Windows. By 2016, I got more into it, discovered &lt;a href="https://en.wikipedia.org/wiki/Atom_%28text_editor%29" target="_blank" rel="noreferrer"&gt;Atom&lt;/a&gt; and immediately fell in love with it.&lt;/p&gt;
&lt;p&gt;It was marketed towards the kind of person who would tinker with things to suite their needs. Superficially though, I also liked the default colour scheme - One Dark.&lt;/p&gt;
&lt;p&gt;Atom was my ride-or-die even though &lt;a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer"&gt;VS Code&lt;/a&gt; had gained some traction by now but that was until I joined uni in 2018. I noticed students who were more experienced than I was using VS Code, the least I could do was give it a try. I adopted it and it has been my preferred text editor. So what&amp;rsquo;s changed?&lt;/p&gt;
&lt;h2 class="relative group"&gt;Why I Still Like VS Code
&lt;div id="why-i-still-like-vs-code" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Yes, I still like VS Code. I have it configured as best as I can to how I like, it&amp;rsquo;s easy to tweak so we could make a case for why I shouldn&amp;rsquo;t leave it.&lt;/p&gt;
&lt;p&gt;It has an integrated terminal, an entire marketplace for extensions, easily syncs my settings and has lots of themes. Also, any new technology or programming language will most likely have a guide on how to setup VS Code for it. It can act like an IDE or a simple text editor.&lt;/p&gt;
&lt;p&gt;I still prefer using it for larger projects such as mobile development with Flutter because &lt;strong&gt;it gets the job done.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These and many more are the reasons why year on year, VS Code leads in various surveys.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Why Vim?
&lt;div id="why-vim" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;My previous encounter with Vim was the classic, enter and get stuck trying to exit. That was until I enrolled for a &lt;a href="https://www.alxafrica.com/programme_post/full-stack-software-engineer/" target="_blank" rel="noreferrer"&gt;Software Engineering course with ALx Africa&lt;/a&gt; and we had to use Vim full time.&lt;/p&gt;
&lt;p&gt;I watched a lot of tutorials on YouTube and one channel that kept popping up was &lt;a href="https://www.youtube.com/c/theprimeagen" target="_blank" rel="noreferrer"&gt;ThePrimeagen&lt;/a&gt;. Using VS Code after watching him felt inefficient. I mean the dude was flying through, I couldn&amp;rsquo;t keep up but it inspired me.&lt;/p&gt;
&lt;p&gt;Vim is &lt;strong&gt;minimal with great freedom&lt;/strong&gt; on how maximal you want to make it. I mean minimalism is not the current trend but I still practice some of the learnings from it.&lt;/p&gt;
&lt;p&gt;Coupled with the fact that as a Linux user, I often use the terminal, Vim was essentially shouting my name.&lt;/p&gt;
&lt;h2 class="relative group"&gt;The Switch
&lt;div id="the-switch" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;My course forced me to dive headfirst into Vim since we had to SSH into remote servers and the terminal was our only option.&lt;/p&gt;
&lt;p&gt;We had a two-week period to get the gist of things so my plan was to quickly learn the basics before slowly swimming to the deep end.&lt;/p&gt;
&lt;p&gt;Vimtutor came to the rescue in learning Vim movements and other basic commands, it&amp;rsquo;s literally a program that runs you through a tutorial of vim.&lt;/p&gt;
&lt;p&gt;I later realised we didn&amp;rsquo;t need to SSH into ALx Africa&amp;rsquo;s servers, that was just an easier way to facilitate those who don&amp;rsquo;t use Linux or don&amp;rsquo;t have easy access to computers. At this point, I could use VS Code on my PC and forget about Vim but I had the itch from my Atom days to stick and tinker around.&lt;/p&gt;
&lt;p&gt;It felt amazing to use Vim, maybe I&amp;rsquo;m better than everyone else 😂.&lt;/p&gt;
&lt;h2 class="relative group"&gt;How&amp;rsquo;s the going?
&lt;div id="hows-the-going" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s been about 4 months now, and I&amp;rsquo;m not ThePrimeagen level but I feel comfortable with Vim.&lt;/p&gt;
&lt;p&gt;I mentioned Vim comes with great freedom on how maximal you want to make it, I started with the simple basics of adding line numbers, configuring indentation, syntax processing etc.&lt;/p&gt;
&lt;p&gt;Thereafter, I discovered &lt;a href="https://www.youtube.com/c/TJDeVries" target="_blank" rel="noreferrer"&gt;TJ Devries&lt;/a&gt; and opted to go with &lt;a href="https://neovim.io/" target="_blank" rel="noreferrer"&gt;Neovim&lt;/a&gt; due to some good defaults it packs and the community behind it. I slowly added more to my config, setup plugins, language support and even migrated from Vimscript to Lua.&lt;/p&gt;
&lt;p&gt;Currently I use it for most of my projects.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Conclusion
&lt;div id="conclusion" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;So why I&amp;rsquo;m I ditching VS Code? I like the minimal nature of Vim, the fact it&amp;rsquo;s terminal-based, the endless configuration options and it&amp;rsquo;s just fun. Perhaps ditching is overexaggerating but I will use VS Code way less than I used to. Who knows, I might switch back to it in the far future.&lt;/p&gt;
&lt;p&gt;Vim is a great tool but can be very overwhelming with its steep learning curve. The trick is to add things bit by bit as well as understanding what you add to you config rather than blindly copying someone&amp;rsquo;s setup. That being said, here&amp;rsquo;s my dotfiles for inspiration.&lt;/p&gt;
&lt;p&gt;It is also an interesting and fun rabbit hole to go down from vanilla Vim to the variety of flavours. There&amp;rsquo;s always something to learn.&lt;/p&gt;
&lt;p&gt;Till next time, cheers.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Explore Further
&lt;div id="explore-further" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opensource.com/resources/what-vim" target="_blank" rel="noreferrer"&gt;What is Vim?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Setting up Custom Domains on GitHub Pages</title><link>https://insidemordecai.com/custom-domains-with-github-pages/</link><pubDate>Mon, 09 Jan 2023 00:00:00 +0000</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/custom-domains-with-github-pages/</guid><description>&lt;p&gt;GitHub Pages publishes your site on a domain that looks like &lt;code&gt;USERNAME.github.io&lt;/code&gt;. This is all fine and good but you can make it yours by adding a custom domain and still benefit from the free hosting.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Prerequisites
&lt;div id="prerequisites" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;The only prerequisites are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Own a domain or have access to one.&lt;/li&gt;
&lt;li&gt;Have a site making use of GitHub Pages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Have a look at &lt;a href="https://insidemordecai.com/how-i-created-my-site-for-free/" target="_blank" rel="noreferrer"&gt;how I created this site for free with Hugo and GitHub pages&lt;/a&gt; to get you started if you do not have a site up and running.&lt;/p&gt;
&lt;p&gt;For the domain, you can buy yourself one on &lt;a href="https://namecheap.com" target="_blank" rel="noreferrer"&gt;Namecheap&lt;/a&gt; or &lt;a href="https://domains.google.com" target="_blank" rel="noreferrer"&gt;Google Domains&lt;/a&gt; or any other registrar. They are relatively inexpensive.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Update Your DNS Settings
&lt;div id="update-your-dns-settings" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I typically add my custom domain to GitHub Pages at the end after configuring my DNS settings.&lt;/p&gt;
&lt;div
class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
&gt;
&lt;span
class="text-primary-400 pe-3 flex items-center"
&gt;
&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/span&gt;
&lt;span
class="dark:text-neutral-300"
&gt;Your DNS records should point to &lt;code&gt;USERNAME.github.io&lt;/code&gt; and NOT the repository name. Once set up, GitHub will figure out which page to serve.&lt;/span&gt;
&lt;/div&gt;
&lt;h3 class="relative group"&gt;Configure a subdomain
&lt;div id="configure-a-subdomain" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;If you own a subdomain such as&lt;code&gt;blog.example.com&lt;/code&gt; then all you have to do is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Head over to where you manage your DNS configurations (typically your registrar)&lt;/li&gt;
&lt;li&gt;Add a CNAME pointing to your GitHub Page. For my other blog, &lt;a href="https://auto.insidemordecai.com" target="_blank" rel="noreferrer"&gt;auto.insidemordecai.com&lt;/a&gt;, that meant adding a CNAME record called &lt;code&gt;auto&lt;/code&gt; that points to &lt;code&gt;insidemordecai.github.io&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I recommend leaving the TTL setting in Auto until you understand more about it then you can tweak to your liking.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Configure an apex domain
&lt;div id="configure-an-apex-domain" class="anchor"&gt;&lt;/div&gt;
&lt;/h3&gt;
&lt;p&gt;For an apex domain such as &lt;code&gt;example.com&lt;/code&gt; or this site, then the steps are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Head over to where you manage your DNS configurations (typically your registrar)&lt;/li&gt;
&lt;li&gt;Add four A records with the name as your apex domain (in my case, &lt;code&gt;insidemordecai.com&lt;/code&gt;) that each point to &lt;a href="https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-an-apex-domain" target="_blank" rel="noreferrer"&gt;GitHub Pages&amp;rsquo; IP addresses as seen here&lt;/a&gt; (just copy-paste).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I recommend also setting up a configuration for a &lt;code&gt;www&lt;/code&gt; subdomain as it is easy for someone to assume your site&amp;rsquo;s address starts as so. The steps for this are the same as above, for me that meant creating a CNAME record named &lt;code&gt;www&lt;/code&gt; pointing to &lt;code&gt;insidemordecai.github.io&lt;/code&gt;&lt;/p&gt;
&lt;h2 class="relative group"&gt;Update Your GitHub Repository
&lt;div id="update-your-github-repository" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Head over to your GitHub repository and navigate to the GitHub Pages settings.&lt;/li&gt;
&lt;li&gt;Under &amp;lsquo;Custom domain&amp;rsquo;, type your custom domain and click save.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GitHub will check for the DNS configuration we made and your site should be live on this new address in a few. To not spook the visitors of your site when their browser warns them of an unsecure site, you can check the &lt;strong&gt;Enforce HTTPS&lt;/strong&gt; box on this page.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Fix GitHub Actions Removing the CNAME File
&lt;div id="fix-github-actions-removing-the-cname-file" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;After adding your custom domain to the site&amp;rsquo;s repository, GitHub commits a CNAME file but if you have a GitHub Actions workflow then this file is deleted with every new change and your site is inaccessible.&lt;/p&gt;
&lt;p&gt;For Hugo sites, we can fix this by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On the root of our repository, create a directory called &lt;code&gt;static&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Navigate into the new directory and create a file called &lt;code&gt;CNAME&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Edit the file to have a single line that is just your custom domain, either your apex domain (&lt;a href="https://insidemordecai.com" target="_blank" rel="noreferrer"&gt;&lt;code&gt;insidemordecai.com&lt;/code&gt;&lt;/a&gt;) or your subdomain (&lt;a href="https://auto.insidemordecai.com" target="_blank" rel="noreferrer"&gt;&lt;code&gt;auto.insidemordecai.com&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Push your local changes to GitHub.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You&amp;rsquo;re done!&lt;/p&gt;
&lt;p&gt;Till next time, feel free to reach out. Cheers!&lt;/p&gt;</description></item><item><title>How I Created My Site For Free with Hugo and GitHub Pages</title><link>https://insidemordecai.com/how-i-created-my-site-for-free/</link><pubDate>Mon, 26 Dec 2022 08:37:27 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/how-i-created-my-site-for-free/</guid><description>&lt;p&gt;If you are like me, then you&amp;rsquo;ve probably wanted to create a personal site but the available options were either expensive or simply not good enough. That was until I learnt of static site generators and their simplicity. This blog you are reading is made using Hugo and hosted on GitHub.&lt;/p&gt;
&lt;p&gt;Here is the process:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Installing Hugo&lt;/li&gt;
&lt;li&gt;Creating your new hugo site&lt;/li&gt;
&lt;li&gt;Building the site&lt;/li&gt;
&lt;li&gt;Hosting with GitHub Pages&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 class="relative group"&gt;Installing Hugo
&lt;div id="installing-hugo" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This part may differ based on your development setup. I&amp;rsquo;d recommend Chocolatey for Windows and Homebrew for Mac but Hugo has &lt;a href="https://gohugo.io/installation" target="_blank" rel="noreferrer"&gt;documentation on the many installation methods.&lt;/a&gt; For Linux, Hugo is most likely on your distribution&amp;rsquo;s repository but you can check out the documentation.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Creating Your New Hugo Site
&lt;div id="creating-your-new-hugo-site" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open your console, navigate to where you want to save your site and run &lt;code&gt;hugo new site .&lt;/code&gt; to create the site in the current directory. If you&amp;rsquo;d like to create the site in a new directory, run &lt;code&gt;hugo new site SITE_NAME&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Look for a Hugo theme and setup the site skeleton based on the theme&amp;rsquo;s documentation. I personally use &lt;a href="https://nunocoracao.github.io/blowfish" target="_blank" rel="noreferrer"&gt;Blowfish&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I recommend downloading themes as a &lt;a href="https://git-scm.com/book/en/v2/Git-Tools-Submodules" target="_blank" rel="noreferrer"&gt;Git Submodule&lt;/a&gt; as this will make it easier to update them. It&amp;rsquo;s also important to choose a theme with great documentation for your ease of use.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Building The Site
&lt;div id="building-the-site" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;At this point we already have a skeleton of a site and we can run &lt;code&gt;hugo server&lt;/code&gt; at the root of our site. This will also allow us to observe the changes we make and their effect. You can run &lt;code&gt;hugo server -D&lt;/code&gt; if you want to test out with some draft posts as by default Hugo doesn&amp;rsquo;t show drafts.&lt;/p&gt;
&lt;p&gt;Your site is now available at &lt;a href="http://localhost:1313" target="_blank" rel="noreferrer"&gt;localhost:1313&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google as well as your theme&amp;rsquo;s documentation will be your friend from hereon. You can check out the exampleSite and other sites that use the same theme for inspiration.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Hosting with GitHub Pages
&lt;div id="hosting-with-github-pages" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;strong&gt;public&lt;/strong&gt; GitHub repository named &lt;code&gt;YOUR_GITHUB_USERNAME.github.io&lt;/code&gt; but can use any other name. (we&amp;rsquo;ll get to that later)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As you might have noticed, when you run &lt;code&gt;hugo&lt;/code&gt; or &lt;code&gt;hugo server&lt;/code&gt;, some directories are created. These aren&amp;rsquo;t required and therefore we can create a .gitignore file and add &lt;code&gt;/public&lt;/code&gt; and &lt;code&gt;/resources&lt;/code&gt; to it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push your changes to the GitHub repository we created.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up GitHub Actions by creating a file in &lt;code&gt;.github/workflows/gh-pages.yml&lt;/code&gt;. &lt;a href="https://gohugo.io/hosting-and-deployment/hosting-on-github/#build-hugo-with-github-action" target="_blank" rel="noreferrer"&gt;Copy the content of the file from this section of the Hugo documentation.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What this does is once GitHub notices changes to your main branch, it will perform a set of actions to publish your site to &lt;code&gt;gh-pages&lt;/code&gt; branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push the GitHub Actions file and you&amp;rsquo;re done.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your site is now live at &lt;code&gt;YOUR_GITHUB_USERNAME.github.io&lt;/code&gt;. If you chose to use a different repository name then your site is live at &lt;code&gt;YOUR_GITHUB_USERNAME.github.io/REPOSITORY_NAME&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Some YouTube channels that I found helpful when creating my site were &lt;a href="https://www.youtube.com/@ChrisStayte" target="_blank" rel="noreferrer"&gt;Chris Stayte&lt;/a&gt;, &lt;a href="https://www.youtube.com/@EricMurphyxyz" target="_blank" rel="noreferrer"&gt;Eric Murphy&lt;/a&gt; and &lt;a href="https://www.youtube.com/@LukeSmithxyz" target="_blank" rel="noreferrer"&gt;Luke Smith&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Till next time, feel free to reach out. Cheers!&lt;/p&gt;</description></item><item><title>Things To Do After Installing Fedora Workstation</title><link>https://insidemordecai.com/fedora-linux-setup-guide/</link><pubDate>Thu, 27 Oct 2022 23:05:20 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/fedora-linux-setup-guide/</guid><description>&lt;p&gt;This is exactly as the title suggest - setting up &lt;a href="https://getfedora.org" title="Fedora - Welcome to Freedom." target="_blank" rel="noreferrer"&gt;Fedora Workstation&lt;/a&gt;, feel free to follow my guide tweaking where necessary.&lt;/p&gt;
&lt;h2 class="relative group"&gt;DNF Configuration
&lt;div id="dnf-configuration" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;By default DNF is slow (maybe DNF5 might change that in the future), to fix that we shall add a DNF flag to allow more than one download at a time and set yes as the default option for future DNF commands.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;max_parallel_downloads=10&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee -a /etc/dnf/dnf.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;defaultyes=True&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo tee -a /etc/dnf/dnf.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;System Update
&lt;div id="system-update" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf update -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;Enable RPM Fusion
&lt;div id="enable-rpm-fusion" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This will give us access to way more apps/software that are not available on the standard Fedora repository.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-&lt;span class="k"&gt;$(&lt;/span&gt;rpm -E %fedora&lt;span class="k"&gt;)&lt;/span&gt;.noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-&lt;span class="k"&gt;$(&lt;/span&gt;rpm -E %fedora&lt;span class="k"&gt;)&lt;/span&gt;.noarch.rpm
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf groupupdate core&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;For more information, check out the &lt;a href="https://rpmfusion.org/Configuration" title="RPM Fusion&amp;#39;s Configuration Page" target="_blank" rel="noreferrer"&gt;RPM Fusion&lt;/a&gt; website&lt;/p&gt;
&lt;h2 class="relative group"&gt;Enable Flathub
&lt;div id="enable-flathub" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Older Fedora versions ship with a filtered Flathub enabled,therefore, we need to add &lt;a href="https://flathub.org" title="An app store and build service for Linux" target="_blank" rel="noreferrer"&gt;unfiltered Flathub&lt;/a&gt; to use their store.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;Install Media Codecs
&lt;div id="install-media-codecs" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;After setting up RPM Fusion, you can add these multimedia packages:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf groupupdate multimedia --setop&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;install_weak_deps=False&amp;#34;&lt;/span&gt; --exclude&lt;span class="o"&gt;=&lt;/span&gt;PackageKit-gstreamer-plugin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf groupupdate sound-and-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf group upgrade --with-optional Multimedia&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Recently, Fedora removed some hardware accelerated codecs from their default install but the guys at RPM Fusion have done their magic. Head over to the &lt;a href="https://rpmfusion.org/Howto/Multimedia" title="RPM Fusion&amp;#39;s Multimedia Page" target="_blank" rel="noreferrer"&gt;Multimedia page of RPM Fusion&lt;/a&gt; and under the Hardware Accelerated Codec section, pick the command(s) for your setup. For those running Intel 5th Gen (Broadwell) and above pick the &lt;code&gt;intel-media-driver&lt;/code&gt; option while those running older processors can opt for &lt;code&gt;libva-intel-driver&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For more information, check out the &lt;a href="https://rpmfusion.org/Configuration" title="RPM Fusion&amp;#39;s Configuration Page" target="_blank" rel="noreferrer"&gt;RPM Fusion&lt;/a&gt; website.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Add Extra Fonts
&lt;div id="add-extra-fonts" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install fira-code-fonts &lt;span class="s1"&gt;&amp;#39;mozilla-fira*&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;google-roboto*&amp;#39;&lt;/span&gt; -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;For compatibility, Microsoft fonts may be needed:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install -y curl cabextract xorg-x11-font-utils fontconfig
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;!--
And finally adding, [an alternative to proprietary fonts:][fedora-better-fonts]
```sh
sudo dnf copr enable dawid/better_fonts -y
sudo dnf install fontconfig-font-replacements -y
```
--&gt;
&lt;p&gt;I also add these fonts to &lt;code&gt;~/.local/share/fonts&lt;/code&gt; since I use them in my terminal emulator and other apps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dtinth/comic-mono-font" title="A legible monospace font... the very typeface you’ve been trained to recognize since childhood" target="_blank" rel="noreferrer"&gt;Comic Mono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/epk/SF-Mono-Nerd-Font" title="Apple&amp;#39;s SF Mono font patched with the Nerd Fonts patcher" target="_blank" rel="noreferrer"&gt;SF Mono Nerd Font&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div
class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
&gt;
&lt;span
class="text-primary-400 pe-3 flex items-center"
&gt;
&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/span&gt;
&lt;span
class="dark:text-neutral-300"
&gt;If not satisfied, there is always the option of adding fonts into the fonts directory from Windows or another Operating System&lt;/span&gt;
&lt;/div&gt;
&lt;h2 class="relative group"&gt;Install GNOME Tweaks
&lt;div id="install-gnome-tweaks" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;This allows us to make some customization changes like adding/removing titlebar buttons (maximize/minimize), changing themes and fonts among other things. I tend to change the Monospace Text font to a Nerd Font.&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install gnome-tweaks&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In my experience, changing these helps a lot:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hinting&lt;/strong&gt;: Slight&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antialiasing&lt;/strong&gt;: Subpixel (this may vary depending on your display setup).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use &lt;a href="https://github.com/lassekongo83/adw-gtk3" title="An unofficial GTK3 port of libadwaita." target="_blank" rel="noreferrer"&gt;adw-gtk3&lt;/a&gt; as the theme for legacy apps for them to look more cohesive with other apps using &lt;a href="https://gitlab.gnome.org/GNOME/libadwaita" title="Libadwaita on GNOME&amp;#39;s GitLab - Building blocks for modern GNOME applications" target="_blank" rel="noreferrer"&gt;libadwaita&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Install Apps and Extensions
&lt;div id="install-apps-and-extensions" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;Apps I use include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browsers&lt;/strong&gt;: Firefox (flatpak version), &lt;a href="https://brave.com/" title="Brave Browser - Browser Privately!" target="_blank" rel="noreferrer"&gt;Brave Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coding&lt;/strong&gt;: VS Code, &lt;a href="https://developer.android.com/studio" title="The official Integrated Development Environment (IDE) for Android app development." target="_blank" rel="noreferrer"&gt;Android Studio&lt;/a&gt;, Neovim&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming&lt;/strong&gt;: Steam&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multimedia&lt;/strong&gt;: Spotify, VLC, Jellyfin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal Emulator&lt;/strong&gt;: Alacritty (including &lt;a href="https://github.com/Stunkymonkey/nautilus-open-any-terminal" title="Nautilus plugin to allow opening any terminal" target="_blank" rel="noreferrer"&gt;nautilus-open-any-terminal&lt;/a&gt; and &lt;a href="https://starship.rs/" title="Command line prompt" target="_blank" rel="noreferrer"&gt;starship&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Torrent Client&lt;/strong&gt;: qBittorrent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utilities&lt;/strong&gt;: htop, &lt;a href="https://xtremedownloadmanager.com/" title="Powerfull download accelerator and video downloader." target="_blank" rel="noreferrer"&gt;Xtreme Download Manager&lt;/a&gt; (only for YouTube and large downloads)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Others&lt;/strong&gt;: Discord, Extension Manager, gThumb, &lt;a href="https://protonvpn.com/support/official-linux-vpn-fedora/" title="ProtonVPN installation guide for Fedora" target="_blank" rel="noreferrer"&gt;ProtonVPN&lt;/a&gt;, &lt;a href="https://pwr-solaar.github.io/Solaar/" title="Linux Device Manager for Logitech Unifying Receivers and Devices." target="_blank" rel="noreferrer"&gt;Solaar&lt;/a&gt; (for Logitech peripherals)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Afterwards, I remove the extra apps thats I don&amp;rsquo;t need, for me these include totem (GNOME Videos), GNOME Weather, Firefox (pre-installed version), GNOME Terminal etc.&lt;/p&gt;
&lt;p&gt;Typically I play around with some extensions or have mixed feelings about some (&lt;strong&gt;*&lt;/strong&gt;) but these are the extensions that I install from the Extensions Manager app and use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppIndicator and KStatusNotifierItem Support&lt;/li&gt;
&lt;li&gt;Blur my Shell &lt;strong&gt;*&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Caffeine&lt;/li&gt;
&lt;li&gt;Dash to Dock&lt;/li&gt;
&lt;li&gt;GSConnect&lt;/li&gt;
&lt;li&gt;Pano - Clipboard Manager&lt;/li&gt;
&lt;li&gt;Rounded Window Corners&lt;/li&gt;
&lt;/ul&gt;
&lt;div
class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
&gt;
&lt;span
class="text-primary-400 pe-3 flex items-center"
&gt;
&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;/span&gt;
&lt;span
class="dark:text-neutral-300"
&gt;I do not recommend installing a lot of extensions as they could slow down your system or some could be left unmaintained/lose support across GNOME updates.&lt;/span&gt;
&lt;/div&gt;
&lt;h2 class="relative group"&gt;Firefox Tweaks
&lt;div id="firefox-tweaks" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;On Firefox, YouTube shows the scrollbars in fullscreen which makes it very easy for me to accidentally click it and suddenly move down the page. To fix this, I add this line to my &lt;a href="https://ublockorigin.com/" title="uBlock Origin - Free, open-source ad content blocker." target="_blank" rel="noreferrer"&gt;uBlock Origin&lt;/a&gt; filter:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;www.youtube.com##ytd-app:style(overflow: hidden !important;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;That line disables YouTube&amp;rsquo;s scroll-to-comments &amp;ldquo;feature&amp;rdquo; which to me is not as important but used to be to quickly check video publish date.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.reddit.com/r/firefox/comments/lija24/comment/gph104v/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3" title="comment on r/Firefox" target="_blank" rel="noreferrer"&gt;Credit: This Reddit comment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;By default, hardware acceleration is disabled but head over to &lt;code&gt;about:config&lt;/code&gt; and toggle this option:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;media.ffmpeg.vaapi.enabled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I&amp;rsquo;ve also noticed that the flatpak version of Firefox does not have two finger swipe by default, run this command to fix that:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo flatpak override --env&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;MOZ_ENABLE_WAYLAND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 class="relative group"&gt;Setup Coding Environment and Dotfiles
&lt;div id="setup-coding-environment-and-dotfiles" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;I usually create a directory in &lt;code&gt;~&lt;/code&gt; where I set up Flutter and any other SDK in this directory. Afterwards, I create another directory in &lt;code&gt;~&lt;/code&gt; to store most of my projects.&lt;/p&gt;
&lt;p&gt;At this point, I clone my &lt;a href="https://github.com/insidemordecai/.dotfiles" title="My dotfiles backup repository on GitHub" target="_blank" rel="noreferrer"&gt;dotfiles backup&lt;/a&gt; into &lt;code&gt;~&lt;/code&gt; and run the script to setup my config files.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Make It Yours
&lt;div id="make-it-yours" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Change wallpaper&lt;/li&gt;
&lt;li&gt;Schedule night light&lt;/li&gt;
&lt;li&gt;Add online accounts&lt;/li&gt;
&lt;li&gt;Mute system sounds and mic&lt;/li&gt;
&lt;li&gt;Switch to 24h clock format&lt;/li&gt;
&lt;li&gt;Add, reorder and remove items from the dock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, feel free to reach out.&lt;/p&gt;
&lt;p&gt;Cheers ✌️&lt;/p&gt;
&lt;h2 class="relative group"&gt;Note To Self
&lt;div id="note-to-self" class="anchor"&gt;&lt;/div&gt;
&lt;/h2&gt;
&lt;p&gt;The curled scripts below are meant for my personal use. It performs most of the things listed in this article apart from: installing extensions, installing Android Studio, Firefox tweaks, changing GNOME Tweaks, setting up Flutter&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -o- https://raw.githubusercontent.com/insidemordecai/.dotfiles/main/quick-setup/fedora.sh &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -o- https://raw.githubusercontent.com/insidemordecai/.dotfiles/main/quick-setup/rpm-apps-install.sh &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -o- https://raw.githubusercontent.com/insidemordecai/.dotfiles/main/quick-setup/flatpaks-install.sh &lt;span class="p"&gt;|&lt;/span&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;!-- Links - place alphabetically --&gt;</description></item><item><title>Hello World</title><link>https://insidemordecai.com/hello-world/</link><pubDate>Thu, 27 Oct 2022 12:00:39 +0300</pubDate><author>mk@insidemordecai.com (Mordecai Kipng'etich)</author><guid>https://insidemordecai.com/hello-world/</guid><description>&lt;p&gt;Thank you for passing by.&lt;/p&gt;
&lt;p&gt;This is just a short introduction piece to mention what I intend to do with this website. Very much like how printing &amp;ldquo;Hello world&amp;rdquo; is usually the first thing one learns when they begin programming.&lt;/p&gt;
&lt;p&gt;I plan on this being more like a frankenstein of a blog and a portfolio - blogfolio, is that even a word? It will host articles on things I find interesting around tech including concept breakdowns, Linux and FOSS or how-tos just for my referral in the future and in the process benefit whoever stumbles upon this.&lt;/p&gt;
&lt;p&gt;Also, as a side-effect, this website will function as a landing page to replace link aggregators like &lt;a href="https://linktr.ee/" title="Linktree is a freemium social media reference landing page." target="_blank" rel="noreferrer"&gt;Linktree&lt;/a&gt; that I currently use.&lt;/p&gt;
&lt;p&gt;As this is a static site, currently a comment section is not implemented and I am not sure if I&amp;rsquo;ll do so. I am weighing up the pros and cons of having it but we&amp;rsquo;ll see how this goes.&lt;/p&gt;
&lt;p&gt;Anyway, feel free to reach out to me. You can have a look at my &lt;a href="https://insidemordecai.com/about/" &gt;About&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;</description></item></channel></rss>