<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>James Tsetsekas</title><description>JamesTsetsekas&apos;s personal blog, I enjoy the process of building something using any technology stack</description><link>https://blog.jamestsetsekas.com/</link><item><title>Fix: LNbits Stopped Working — LND TLS Certificate Expired</title><link>https://blog.jamestsetsekas.com/posts/fix-lnbits-lnd-tls-certificate-expired/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/fix-lnbits-lnd-tls-certificate-expired/</guid><description>How to diagnose and fix an expired LND TLS certificate on Umbrel that silently breaks LNbits and other services connecting over gRPC.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If your LNbits instance suddenly stops working and you can’t figure out why, check your LND TLS certificate — it might have expired. This happened to me recently and it took a while to track down, so I’m documenting it here in case it helps someone else.&lt;/p&gt;
&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;/h2&gt;
&lt;p&gt;My LNbits instance suddenly stopped connecting to LND. Requests were failing and LNbits couldn’t communicate with the Lightning node at all. No useful error messages — just broken.&lt;/p&gt;
&lt;p&gt;After digging in, the root cause turned out to be an &lt;strong&gt;expired LND TLS certificate&lt;/strong&gt;. LND doesn’t auto-renew its TLS certs, so after enough time they silently expire and break anything that connects to LND over gRPC — including LNbits, ThunderHub, Ride The Lightning, or any other service that talks to your node.&lt;/p&gt;
&lt;h2 id=&quot;how-to-check&quot;&gt;How to Check&lt;/h2&gt;
&lt;p&gt;SSH into your Umbrel and check the cert expiry:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;openssl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; x509&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -enddate&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -noout&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -in&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.cert&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the date shown is in the past, that’s your problem.&lt;/p&gt;
&lt;h2 id=&quot;the-fix&quot;&gt;The Fix&lt;/h2&gt;
&lt;h3 id=&quot;1-ssh-into-your-umbrel&quot;&gt;1. SSH into your Umbrel&lt;/h3&gt;
&lt;h3 id=&quot;2-optional-back-up-the-old-cert-and-key&quot;&gt;2. (Optional) Back up the old cert and key&lt;/h3&gt;
&lt;p&gt;In case you need to reference them later:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.cert&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.cert.bak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.key&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.key.bak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-delete-the-old-cert-and-key&quot;&gt;3. Delete the old cert and key&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.cert&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.key&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;4-restart-lnd&quot;&gt;4. Restart LND&lt;/h3&gt;
&lt;p&gt;From the Umbrel app dashboard, or via CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;/umbrel/scripts/app restart lightning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LND will generate a fresh TLS certificate on startup.&lt;/p&gt;
&lt;h3 id=&quot;5-restart-lnbits&quot;&gt;5. Restart LNbits&lt;/h3&gt;
&lt;p&gt;So it picks up the new cert:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;~&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;/umbrel/scripts/app restart lnbits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After this, LNbits should reconnect to LND immediately.&lt;/p&gt;
&lt;h2 id=&quot;heads-up&quot;&gt;Heads Up&lt;/h2&gt;
&lt;p&gt;LND does &lt;strong&gt;not&lt;/strong&gt; auto-renew its TLS certificate. This will happen again eventually. Consider setting a reminder to check the expiry date periodically, or set up a cron job to alert you before it expires.&lt;/p&gt;
&lt;p&gt;You can check when your new cert expires with the same command:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;openssl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; x509&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -enddate&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -noout&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -in&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/umbrel/app-data/lightning/data/lnd/tls.cert&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hope this saves someone a few hours of debugging!&lt;/p&gt;</content:encoded></item><item><title>Migrating UmbrelOS to a Larger SSD: A Step-by-Step Guide</title><link>https://blog.jamestsetsekas.com/posts/umbrel_ssd_migration/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/umbrel_ssd_migration/</guid><description>A detailed guide on upgrading your Umbrel node&apos;s external SSD from a full 1TB drive to a larger 2TB drive, preserving all blockchain data with minimal downtime.</description><pubDate>Wed, 01 Oct 2025 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running a full Bitcoin node with &lt;code&gt;txindex=1&lt;/code&gt; on UmbrelOS is rewarding, but it can quickly eat up storage. My 1TB external SSD hit 100% capacity, causing Bitcoin Core to crash with “No space left on device” errors. To keep my archival node running without pruning, I upgraded to a 2TB SSD while preserving all blockchain data. Here’s how I migrated everything seamlessly, step by step.&lt;/p&gt;
&lt;h2 id=&quot;why-upgrade&quot;&gt;Why Upgrade?&lt;/h2&gt;
&lt;p&gt;As of October 2025, the Bitcoin blockchain is ~640–660 GB for raw blocks, but with &lt;code&gt;txindex=1&lt;/code&gt;, chainstate, and other data, my node consumed ~885 GB. A 1TB drive was no longer enough. Upgrading to a 2TB SSD gave me room to grow while keeping all my data intact.&lt;/p&gt;
&lt;h2 id=&quot;what-youll-need&quot;&gt;What You’ll Need&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Old SSD&lt;/strong&gt;: Your current external drive (e.g., 1TB, mounted at &lt;code&gt;/mnt/umbrel-ssd&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New SSD&lt;/strong&gt;: A larger drive (e.g., 2TB, like a Samsung Evo 2.5” SATA in a USB 3.0 enclosure).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Umbrel node&lt;/strong&gt;: Running UmbrelOS, stopped (&lt;code&gt;sudo systemctl stop umbrel&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basic Linux skills&lt;/strong&gt;: Familiarity with commands like &lt;code&gt;lsblk&lt;/code&gt;, &lt;code&gt;nano&lt;/code&gt;, and &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;step-by-step-migration&quot;&gt;Step-by-Step Migration&lt;/h2&gt;
&lt;h3 id=&quot;1-stop-umbrel&quot;&gt;1. Stop Umbrel&lt;/h3&gt;
&lt;p&gt;Ensure Umbrel is stopped to prevent data corruption during the copy:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-verify-the-new-ssd&quot;&gt;2. Verify the New SSD&lt;/h3&gt;
&lt;p&gt;Plug in your new SSD and check if it’s detected:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;lsblk&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -o&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; NAME,SIZE,FSTYPE,MOUNTPOINT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look for a ~1.8T drive (e.g., &lt;code&gt;/dev/sdc&lt;/code&gt;) with no mountpoint. If it’s not listed, check &lt;code&gt;dmesg | tail -n 20&lt;/code&gt; for USB detection issues.&lt;/p&gt;
&lt;h3 id=&quot;3-partition-and-format-the-new-ssd&quot;&gt;3. Partition and Format the New SSD&lt;/h3&gt;
&lt;p&gt;If your UmbrelOS lacks &lt;code&gt;parted&lt;/code&gt;, install it:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; apt-get&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; parted&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Partition the new SSD (replace &lt;code&gt;/dev/sdc&lt;/code&gt; with your drive’s name from &lt;code&gt;lsblk&lt;/code&gt;):&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; parted&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In parted:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mklabel gpt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mkpart primary ext4 0% 100%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;quit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Format the partition:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mkfs.ext4&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -L&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel-ssd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdc1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;4-copy-data-to-the-new-ssd&quot;&gt;4. Copy Data to the New SSD&lt;/h3&gt;
&lt;p&gt;Mount the new SSD:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mkdir&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd-new&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdc1&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd-new&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy all data from the old SSD to the new one (~885 GB may take 1–3 hours):&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; rsync&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -avh&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --progress&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd/&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd-new/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify the copy:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; du&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -sh&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd/&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; du&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -sh&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd-new/&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensure sizes match (~885G for the &lt;code&gt;umbrel&lt;/code&gt; directory).&lt;/p&gt;
&lt;h3 id=&quot;5-swap-the-drives&quot;&gt;5. Swap the Drives&lt;/h3&gt;
&lt;p&gt;Unmount both drives:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umount&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umount&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd-new&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mount the new SSD to the original path:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdc1&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;df&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -h&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see ~1.8T total, ~885G used.&lt;/p&gt;
&lt;h3 id=&quot;6-update-etcfstab&quot;&gt;6. Update /etc/fstab&lt;/h3&gt;
&lt;p&gt;Get the new SSD’s UUID:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; blkid&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdc1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edit &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /etc/fstab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add or replace the line for &lt;code&gt;/mnt/umbrel-ssd&lt;/code&gt; with:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;UUID&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;your-uuid-here&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; /mnt/umbrel-ssd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ext4&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; defaults&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Test the configuration:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If no errors, it’s set to mount automatically on boot.&lt;/p&gt;
&lt;h3 id=&quot;7-start-umbrel&quot;&gt;7. Start Umbrel&lt;/h3&gt;
&lt;p&gt;Restart Umbrel:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Monitor Bitcoin Core logs:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;tail&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd/umbrel/app-data/bitcoin/data/bitcoin/debug.log&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look for normal sync activity (no disk space errors). Check the Umbrel dashboard in your browser to confirm everything’s running.&lt;/p&gt;
&lt;h2 id=&quot;post-migration&quot;&gt;Post-Migration&lt;/h2&gt;
&lt;p&gt;Your node should now run on the 2TB SSD with ~855 GB free, ready for future blockchain growth. You can safely unplug the old 1TB SSD or wipe it for reuse:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; wipefs&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -a&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /dev/sdb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tips&quot;&gt;Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Backup fstab&lt;/strong&gt;: Before editing, copy it (&lt;code&gt;sudo cp /etc/fstab /etc/fstab.bak&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check logs&lt;/strong&gt;: If Umbrel doesn’t start, use &lt;code&gt;sudo systemctl status umbrel&lt;/code&gt; or check logs for errors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;USB 3.0&lt;/strong&gt;: Ensure your enclosure and port support USB 3.0 for faster transfers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This migration kept my node running without resyncing, saving days of downtime. With the extra space, I’m set for years of Bitcoin and Lightning transactions. Happy nodding!&lt;/p&gt;</content:encoded></item><item><title>Why did Satoshi Nakamoto Create Bitcoin?</title><link>https://blog.jamestsetsekas.com/posts/why-did-satoshi-create-bitcoin/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/why-did-satoshi-create-bitcoin/</guid><description>Exploring the motivations behind the creation of the world&apos;s first decentralized currency and how it was designed as a response to the 2008 financial crisis.</description><pubDate>Mon, 12 May 2025 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bitcoin often sparks debates about its value, technology, and investment potential. But to truly grasp its significance, we need to step back and ask: why did Satoshi Nakamoto create Bitcoin in the first place? At a time when global financial systems are under strain, understanding Satoshi’s motivations offers a fresh perspective on this revolutionary idea.&lt;/p&gt;
&lt;h3 id=&quot;the-enigma-of-satoshi&quot;&gt;The Enigma of Satoshi&lt;/h3&gt;
&lt;p&gt;Satoshi Nakamoto, Bitcoin’s pseudonymous creator, remains one of history’s greatest mysteries. Early on, many tried to unmask Satoshi, speculating about candidates across the globe. Yet, Satoshi’s anonymity seems deliberate. By using a Japanese name, British spellings, and operating during American hours, Satoshi crafted a persona that defies pinpointing—a masterclass in obfuscation.&lt;/p&gt;
&lt;p&gt;This anonymity wasn’t just self-preservation. A known creator could have become a figurehead, their words and past scrutinized to undermine Bitcoin’s mission. A leaderless system, free from personal biases or affiliations, was essential for Bitcoin to thrive as a decentralized network. Satoshi’s vanishing act ensured the focus remained on the idea, not the individual—a selfless gift to the project and the world.&lt;/p&gt;
&lt;h3 id=&quot;the-backdrop-of-crisis&quot;&gt;The Backdrop of Crisis&lt;/h3&gt;
&lt;p&gt;Bitcoin launched on January 9, 2009, amid the Great Financial Crisis. The first block Satoshi mined included a telling message: a headline about a looming bank bailout. This wasn’t a random choice—it was a statement. The crisis exposed deep flaws in the financial system, as governments bailed out “too big to fail” banks by printing money, shielding them from the consequences of their own risks.&lt;/p&gt;
&lt;p&gt;This wasn’t fairness—it was favoritism. Profits stayed private, but losses were socialized, borne by ordinary people. Money printing didn’t create wealth out of thin air; it diluted the purchasing power of existing money. If the money supply grows by 10%, the value of everyone’s savings effectively drops by a similar margin—a hidden tax on the masses to prop up the elite.&lt;/p&gt;
&lt;p&gt;Satoshi likely saw this coming. While the crisis unfolded, Bitcoin had been in development for years. Unlike reactive protests demanding reform, Satoshi built a proactive solution—a system designed to enforce fairness and transparency through unchangeable rules.&lt;/p&gt;
&lt;h3 id=&quot;a-vision-for-true-fairness&quot;&gt;A Vision for True Fairness&lt;/h3&gt;
&lt;p&gt;Satoshi’s goal was radical: eliminate the possibility of bailouts entirely. Bitcoin’s decentralized structure ensures no central authority can step in to save failing entities. This creates a form of pure capitalism—harsh, yes, but immune to the abuses of power that plagued traditional finance. By removing the ability to print money at will, Satoshi stripped away the mechanisms that benefit those closest to the financial “spigot”—the so-called insiders who profit first from new money.&lt;/p&gt;
&lt;p&gt;Instead, Bitcoin operates on a fixed supply schedule, with new coins distributed through a transparent, global competition: mining. This levels the playing field, rewarding participants based on effort, not connections. More revolutionary still, Bitcoin incentivizes saving over spending. In a world of inflation, where money loses value over time, Bitcoin’s increasing scarcity means its purchasing power can grow—a system that rewards those who hold rather than those who borrow or speculate.&lt;/p&gt;
&lt;h3 id=&quot;a-new-financial-paradigm&quot;&gt;A New Financial Paradigm&lt;/h3&gt;
&lt;p&gt;Satoshi envisioned a paradigm shift: a deflationary system where money gains value over time, not loses it. Traditional finance, driven by inflation, encourages spending and debt, benefiting those who control money creation. Bitcoin flips this on its head, empowering savers and challenging the inflationary status quo.&lt;/p&gt;
&lt;p&gt;At its core, Bitcoin was born from a rejection of systemic inequity. Satoshi didn’t just protest the failures of 2009—they built an alternative. As financial systems face new pressures today, Bitcoin’s original mission remains as relevant as ever: a fairer, more transparent way to store and transfer value, free from the whims of the powerful.&lt;/p&gt;</content:encoded></item><item><title>Why Finance Elites Shun Bitcoin</title><link>https://blog.jamestsetsekas.com/posts/why-finance-elites-shun-bitcoin/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/why-finance-elites-shun-bitcoin/</guid><description>Unpacking the skepticism of the professional elite toward Bitcoin and exploring why financial experts remain resistant to Bitcoin adoption.</description><pubDate>Sun, 11 May 2025 17:41:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;why-mbas-and-finance-elites-shun-bitcoin&quot;&gt;Why MBAs and Finance Elites Shun Bitcoin&lt;/h1&gt;
&lt;h2 id=&quot;unpacking-the-skepticism-of-the-professional-elite-toward-bitcoin&quot;&gt;Unpacking the skepticism of the professional elite toward Bitcoin&lt;/h2&gt;
&lt;p&gt;Imagine a heated dinner conversation with a group of MBAs—sharp, successful, and steeped in the world of high finance. You bring up Bitcoin, predicting it could reshape global markets. Eyes roll. One quips, “It’s a speculative bubble.” Another dismisses it as “a toy for tech bros.” Why does this crowd, so adept at spotting trends, consistently write off Bitcoin?&lt;/p&gt;
&lt;p&gt;The answer lies not in a lack of intelligence but in a unique blend of trust, social dynamics, and decision-making habits that define the professional elite—MBAs, consultants, and finance professionals. Let’s dive into why they remain Bitcoin skeptics.&lt;/p&gt;
&lt;h3 id=&quot;the-trust-intelligence-nexus&quot;&gt;The Trust-Intelligence Nexus&lt;/h3&gt;
&lt;p&gt;To understand this disconnect, picture a framework plotting Bitcoin belief against two axes: intelligence and trust in the system. Bitcoin enthusiasts fall into two camps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hype-Driven Optimists&lt;/strong&gt;: Those who see Bitcoin’s past price surges and bet on future gains, often without deep analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Informed Maximalists&lt;/strong&gt;: Those who, after extensive research, view Bitcoin’s rise as inevitable due to its fixed supply, decentralized design, and the flaws of fiat currencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Maximalists tend to combine high intellect with profound distrust in traditional institutions, often sparked by studying central bank policies or systemic inefficiencies. The professional elite, however, occupy a different space: they’re undeniably bright but deeply invested in the system’s ability to function. They believe well-designed policies and competent leadership can keep the financial world humming. This trust blinds them to Bitcoin’s appeal as a hedge against systemic failure.&lt;/p&gt;
&lt;h3 id=&quot;the-elite-bubble&quot;&gt;The Elite Bubble&lt;/h3&gt;
&lt;p&gt;MBAs and finance professionals thrive in a high-stakes, meritocratic world where success demands more than smarts. It requires fitting in—mastering corporate culture, building networks, and proving loyalty to employers. At the heart of this is a core belief: follow the system’s rules, and you’ll climb the ladder to promotions and prestige.&lt;/p&gt;
&lt;p&gt;This mindset fosters a kind of social insularity. The elite move in tight circles, where ideas gain traction only if endorsed by peers. Bitcoin, championed by outsiders like coders, libertarians, or retail investors, doesn’t make the cut. To them, it’s a fringe phenomenon, unworthy of serious attention. If their colleagues aren’t buzzing about it, it must be irrelevant—a fad for those outside their polished world.&lt;/p&gt;
&lt;h3 id=&quot;heuristics-at-work&quot;&gt;Heuristics at Work&lt;/h3&gt;
&lt;p&gt;The elite also rely on razor-sharp heuristics to navigate their fast-paced lives. They’re trained to filter noise, spotting red flags in complex deals or pitches. Bitcoin, on first glance, sets off alarms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Volatility&lt;/strong&gt;: Wild price swings suggest instability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technical complexity&lt;/strong&gt;: Challenging to understand without dedicated study&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negative associations&lt;/strong&gt;: Often linked to scams or illicit activity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A quick dive into its basics often raises more questions than answers, reinforcing their skepticism.&lt;/p&gt;
&lt;p&gt;Bitcoin’s own mantra—“don’t trust, verify”—ironically works against it here. Unlike a layperson who might invest based on a trusted friend’s tip, the elite demand a thorough understanding before committing. But their packed schedules leave little room for the deep research needed to grasp Bitcoin’s nuances. And since their peers show no interest, there’s no social pressure to dig deeper. The result? Bitcoin stays flagged as a risky distraction.&lt;/p&gt;
&lt;h3 id=&quot;looking-forward&quot;&gt;Looking Forward&lt;/h3&gt;
&lt;p&gt;Bitcoin’s mechanics—its halving cycles, capped supply, and growing adoption—suggest its value will keep climbing. As its price surges, the professional elite may face a reckoning, forced to confront their misjudgments. But their trust in the system and insular networks mean they’ll likely be among the last to embrace it, lagging behind less skeptical adopters.&lt;/p&gt;
&lt;p&gt;For now, the finance elite remain confident in their dismissal, perched in their metaphorical towers. Bitcoin, meanwhile, marches forward, unbothered by their skepticism.&lt;/p&gt;</content:encoded></item><item><title>The Pragmatic Programmer: Timeless Lessons for Software Developers in 2025</title><link>https://blog.jamestsetsekas.com/posts/the-pragmatic-programmer/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/the-pragmatic-programmer/</guid><description>Andy Hunt and Dave Thomas&apos; The Pragmatic Programmer offers enduring wisdom for developers, blending practical tips with a mindset for excellence in software craftsmanship.</description><pubDate>Sat, 10 May 2025 17:41:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/em&gt; by Andy Hunt and Dave Thomas, first published in 1999, remains a cornerstone for software developers 26 years later. Celebrating its 20th anniversary with an updated edition in 2019, this classic has guided generations of programmers, earning spots on countless “Top Ten” lists and becoming a staple for new hires at tech companies. Its language-agnostic wisdom—focusing on the essence of software development—continues to resonate in 2025, even amidst AI-driven coding tools and shifting methodologies. Let’s explore its core lessons, why it endures, and how it applies to today’s tech landscape.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the book: &lt;a href=&quot;https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052/&quot;&gt;The Pragmatic Programmer by Andy Hunt and Dave Thomas&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;core-philosophy-craftsmanship-over-code&quot;&gt;Core Philosophy: Craftsmanship Over Code&lt;/h3&gt;
&lt;p&gt;Hunt and Thomas frame programming as a craft, urging developers to take pride in their work. The “pragmatic” mindset prioritizes practicality, adaptability, and continuous learning over rigid adherence to tools or trends. The book’s structure—71 concise tips across nine chapters—distills complex ideas into actionable advice, from writing clean code to managing career growth. Its central metaphor, the “broken windows” theory, warns against neglecting small issues: unfixed bugs or messy code signal apathy, leading to larger systemic failures.&lt;/p&gt;
&lt;p&gt;Key principles include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DRY (Don’t Repeat Yourself)&lt;/strong&gt;: Avoid duplication in code, processes, or documentation to reduce errors and maintenance costs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Orthogonality&lt;/strong&gt;: Design components to be independent, so changes in one don’t ripple through others, enhancing flexibility.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tracer Bullets&lt;/strong&gt;: Build minimal, end-to-end prototypes to test concepts quickly, like a tracer bullet illuminating a target.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ruthless Testing&lt;/strong&gt;: Automate tests to catch issues early, ensuring reliability as systems grow.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Kaizen (Continuous Improvement)&lt;/strong&gt;: Always seek to refine your skills, tools, and processes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These ideas, while foundational, remain relevant in 2025 as developers navigate microservices, cloud-native apps, and AI-assisted coding environments like GitHub Copilot.&lt;/p&gt;
&lt;h3 id=&quot;why-it-endures-timeless-and-practical&quot;&gt;Why It Endures: Timeless and Practical&lt;/h3&gt;
&lt;p&gt;The book’s staying power lies in its focus on mindset over technology. As Hunt and Thomas note, “We’re not tied to a specific language or framework—we’re about the principles that apply everywhere.” This universality resonates: whether you’re writing Python for machine learning or Rust for blockchain, the advice holds. Goodreads reviews praise its clarity, with one user noting, “It’s like having a mentor who’s seen it all.” Companies like Google and Microsoft still distribute it to new hires, reflecting its role as a developer rite of passage.&lt;/p&gt;
&lt;p&gt;The 2019 edition updated examples for modern contexts—replacing Perl with Python and addressing Agile methodologies—but the core lessons didn’t need much change. In 2025, as AI tools automate rote coding, the book’s emphasis on critical thinking, problem-solving, and adaptability feels more vital than ever. For instance, the tip “Learn at Least One New Language Every Year” encourages versatility, a skill crucial when AI shifts focus from syntax to architecture.&lt;/p&gt;
&lt;h3 id=&quot;key-takeaways-for-2025-developers&quot;&gt;Key Takeaways for 2025 Developers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Embrace Automation, but Stay Sharp&lt;/strong&gt;: The book’s push for automation (e.g., automated testing, build scripts) aligns with 2025’s DevOps culture. Yet, it warns against over-reliance on tools—AI may write code, but understanding its intent and quality remains your responsibility.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code for Humans, Not Machines&lt;/strong&gt;: Tips like “Use Plain Text for Storage” and “Make It Easy to Reuse” emphasize readability and maintainability, critical when collaborating on distributed teams or open-source projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stay Curious&lt;/strong&gt;: The authors advocate for a “stonecutter’s mindset”—small, consistent efforts lead to mastery. In 2025, this means exploring emerging fields like quantum computing or Web3 while honing fundamentals.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Avoid Technical Debt&lt;/strong&gt;: The “broken windows” metaphor applies to modern microservices: neglecting small issues (e.g., untested APIs) can cascade into outages, as seen in recent cloud provider incidents.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On X, developers like @CodeWisdom share, “Rereading The Pragmatic Programmer in 2025—still the best advice for avoiding tech debt and building systems that last.” Its principles even apply to non-coding roles: product managers can use “tracer bullets” to test MVPs, while CTOs can apply orthogonality to team structures.&lt;/p&gt;
&lt;h3 id=&quot;critiques-and-limitations&quot;&gt;Critiques and Limitations&lt;/h3&gt;
&lt;p&gt;While widely praised, some critiques have emerged. Beginners may find the book’s breadth overwhelming, as it assumes familiarity with coding concepts. Others note its examples, even in the 2019 edition, feel dated—references to “text editors” over IDEs don’t fully reflect 2025’s AI-driven workflows. Additionally, it lacks depth on modern concerns like security in distributed systems or ethical AI development, though its principles can be adapted to these areas.&lt;/p&gt;
&lt;h3 id=&quot;reflections-a-guide-for-the-future&quot;&gt;Reflections: A Guide for the Future&lt;/h3&gt;
&lt;p&gt;The Pragmatic Programmer remains a must-read in 2025 because it transcends trends, offering a mindset for navigating tech’s rapid evolution. Its lessons—prioritize clarity, automate wisely, and never stop learning—are timeless, whether you’re a junior developer or a seasoned architect. For those in AI-heavy workflows, it’s a reminder to focus on the “why” behind the code, not just the “how.” As Andy Hunt recently shared on X, “Pragmatism isn’t about following the latest fad—it’s about building what works, for now and the future.”&lt;/p&gt;
&lt;p&gt;For anyone aiming to excel in software development, this book is a blueprint for craftsmanship. Its 20-year legacy proves its value, and in 2025, it’s as essential as ever for creating robust, adaptable, and human-centered software. Whether you’re new to coding or mentoring the next generation, The Pragmatic Programmer will guide you from journeyman to master.&lt;/p&gt;</content:encoded></item><item><title>Bitcoin Treasuries Boom: Why 2025 Will Be the Year of Corporate Adoption</title><link>https://blog.jamestsetsekas.com/posts/bitcoin-treasuries-boom-why-2025-will-be-the-year-of-corporate-adoption/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/bitcoin-treasuries-boom-why-2025-will-be-the-year-of-corporate-adoption/</guid><description>MicroStrategy and Metaplanet lead the Bitcoin treasury trend, and with the FASB rule change, 2025 is poised for a surge in corporate adoption as companies seek to hedge inflation and boost value.</description><pubDate>Fri, 09 May 2025 17:41:00 GMT</pubDate><content:encoded>&lt;p&gt;As Bitcoin solidifies its role as a store of value, companies like MicroStrategy and Metaplanet have set a precedent by adopting it as a treasury asset, reaping significant financial rewards. In 2025, I believe we’ll see a wave of corporations follow suit, driven by Bitcoin’s deflationary nature, evolving market dynamics, a shifting regulatory landscape, and the pivotal FASB rule change. Let’s explore the trend, the pioneers, and why this year could mark a turning point for corporate Bitcoin adoption.&lt;/p&gt;
&lt;h3 id=&quot;the-pioneers-microstrategy-and-metaplanet&quot;&gt;The Pioneers: MicroStrategy and Metaplanet&lt;/h3&gt;
&lt;p&gt;MicroStrategy, under Michael Saylor’s leadership, kicked off the corporate Bitcoin treasury trend in August 2020. As of May 5, 2025, the company holds 555,450 BTC, valued at over $52 billion at current prices around $94,300 per Bitcoin. Their average purchase price of $66,384 per coin reflects a strategic dollar-cost averaging approach, yielding a profit of over 40%. MicroStrategy’s stock (MSTR) has soared, with a 440% gain in 2024 alone, outpacing Bitcoin’s 132% growth that year. The company has become a proxy for Bitcoin exposure, raising $42 billion through equity and debt to fund further purchases, positioning itself as a Bitcoin development company.&lt;/p&gt;
&lt;p&gt;Metaplanet, often dubbed “Japan’s MicroStrategy,” began its Bitcoin journey in April 2024. By April 11, 2025, the Tokyo-listed firm held 4,206 BTC, worth $341.72 million, comprising over 34% of its market cap. Metaplanet’s stock surged 1,923% in 2024, reflecting investor enthusiasm. The company has raised funds through zero-interest bonds and stock offerings, aiming for 10,000 BTC by year-end. CEO Simon Gerovich has emphasized not just financial gains but also promoting Bitcoin adoption in Asia, including launching Bitcoin Magazine Japan to educate and onboard users.&lt;/p&gt;
&lt;h3 id=&quot;why-companies-are-turning-to-bitcoin&quot;&gt;Why Companies Are Turning to Bitcoin&lt;/h3&gt;
&lt;p&gt;Bitcoin’s appeal as a treasury asset lies in its limited 21-million-coin supply and deflationary nature, making it a hedge against fiat currency depreciation. MicroStrategy and Metaplanet’s success demonstrates how Bitcoin can rejuvenate corporate balance sheets. For instance, Metaplanet transformed from a struggling hospitality firm to a market leader, hitting a $1 billion market cap in January 2025. Similarly, MicroStrategy’s Bitcoin strategy has made it a top-performing stock, outshining traditional tech giants.&lt;/p&gt;
&lt;p&gt;The trend isn’t limited to these two. Tether, the stablecoin issuer, holds over 100,000 BTC as of Q1 2025, while companies like Tesla (9,720 BTC) and India’s Jetking Infotrain have also embraced Bitcoin as a reserve asset. Even smaller firms like KULR Technology and Kontrol Technologies are joining the fray, investing millions despite Bitcoin’s high prices, signaling confidence in its long-term value.&lt;/p&gt;
&lt;h3 id=&quot;the-fasb-rule-change-a-game-changer&quot;&gt;The FASB Rule Change: A Game-Changer&lt;/h3&gt;
&lt;p&gt;A significant catalyst for corporate adoption is the Financial Accounting Standards Board (FASB) rule change, effective January 1, 2025. Under Accounting Standards Update (ASU) 2023-08, companies must now measure Bitcoin and other qualifying crypto assets at fair value each reporting period, with changes in fair value recorded directly in net income. Previously, Bitcoin was treated as an indefinite-lived intangible asset, recorded at cost less impairment, meaning companies could only report losses, not gains, until sold. This asymmetry deterred many firms due to the inability to reflect Bitcoin’s price appreciation on their balance sheets.&lt;/p&gt;
&lt;p&gt;The new fair-value accounting rule allows companies to report both gains and losses in real time, aligning Bitcoin’s treatment with other financial assets like equities. This provides a clearer picture of a company’s financial health, as the market value of Bitcoin holdings is now reflected quarterly. For firms like MicroStrategy and Tesla, this means unrealized Bitcoin gains—such as MicroStrategy’s $15 billion profit on its holdings—can now boost reported earnings, making Bitcoin a more attractive treasury asset.&lt;/p&gt;
&lt;h3 id=&quot;why-2025-will-be-the-year-of-adoption&quot;&gt;Why 2025 Will Be the Year of Adoption&lt;/h3&gt;
&lt;p&gt;With the FASB rule change removing a major accounting barrier, I believe 2025 will see an explosion of corporate Bitcoin treasury adoption for several reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pro-Bitcoin Sentiment and Policy Shifts&lt;/strong&gt;: The U.S. government’s move to establish a Strategic Bitcoin Reserve in March 2025, under President Trump’s executive order, has given companies a green light. This pro-Bitcoin stance, coupled with spot Bitcoin ETFs amassing over $100 billion in assets, reduces perceived risks for corporations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;FASB’s Fair-Value Boost&lt;/strong&gt;: The FASB rule, now in effect, not only allows recognition of unrealized gains but also increases transparency for investors, as companies must disclose significant holdings and reconcile balances. This clarity encourages more firms to adopt Bitcoin without fear of one-sided impairment losses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Market Dynamics and FOMO&lt;/strong&gt;: With Bitcoin’s price stabilizing around $94,300 after hitting $108,250 in December 2024, companies are racing to accumulate before prices climb higher. Bitwise CIO Matt Hougan predicted hundreds of companies would adopt Bitcoin within 18 months from January 2025, a timeline that aligns with this year. The success of early adopters like MicroStrategy, whose Bitcoin holdings outstrip annual mining output, fuels this FOMO.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Global Momentum&lt;/strong&gt;: Beyond the U.S., Asian firms like Metaplanet are leading regional adoption. Forecasts suggest over 60% of large Asian corporations will integrate crypto by year-end, driven by economic challenges like Japan’s yen depreciation. Europe’s The Blockchain Group, holding 600 BTC, also signals a broader trend.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Shareholder Pressure&lt;/strong&gt;: Companies like Microsoft and Amazon face shareholder proposals to add Bitcoin to their treasuries. While not all succeed, the growing advocacy reflects a shift in corporate finance priorities, especially for firms seeking to diversify or boost stock volatility in competitive sectors.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;challenges-and-criticisms&quot;&gt;Challenges and Criticisms&lt;/h3&gt;
&lt;p&gt;Despite the momentum, challenges remain. Bitcoin’s volatility—evidenced by a 12% drop in Q1 2025—poses risks of unrealized losses, as seen during past bear markets. The FASB rule, while beneficial, introduces earnings volatility, as price swings now directly impact net income. Regulatory uncertainties, particularly around environmental concerns tied to mining, and complex custody requirements for public companies add friction. Critics also argue that focusing on Bitcoin can distract from core business operations, as some say MicroStrategy’s software business has been overshadowed by its Bitcoin strategy.&lt;/p&gt;
&lt;p&gt;However, these risks are increasingly mitigated by better custody solutions (e.g., Metaplanet’s partnership with Hoseki) and market maturity. The reputational risk of holding Bitcoin has faded as it becomes a mainstream financial instrument, with reduced use in illicit transactions.&lt;/p&gt;
&lt;h3 id=&quot;looking-ahead&quot;&gt;Looking Ahead&lt;/h3&gt;
&lt;p&gt;The corporate Bitcoin treasury trend, supercharged by the FASB rule change, is more than a fad—it’s a strategic evolution. MicroStrategy and Metaplanet have shown how Bitcoin can transform corporate value, and their playbook is now widely accessible, especially with fair-value accounting in play. With 70 companies already holding Bitcoin by late 2024, and larger firms like Meta (20x MicroStrategy’s size) considering similar moves, 2025 could see an unprecedented surge in adoption. This aligns with your own interest in Bitcoin’s potential, as we’ve discussed strategies to leverage its growth without selling your holdings unless prices hit $450,000.&lt;/p&gt;
&lt;p&gt;If hundreds of companies join the trend, as Hougan predicts, Bitcoin’s price could soar due to increased demand, potentially exceeding annual production. For investors, this signals a pivotal moment: Bitcoin is no longer just a speculative asset but a cornerstone of forward-thinking corporate finance. As we move deeper into 2025, expect more companies to embrace the Bitcoin standard, reshaping global finance in the process.&lt;/p&gt;</content:encoded></item><item><title>Bitcoin Core&apos;s OP_RETURN Limit Removal: A Controversial Step Toward Flexibility</title><link>https://blog.jamestsetsekas.com/posts/bitcoin-cores-op_return-limit-removal-sparks-debate/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/bitcoin-cores-op_return-limit-removal-sparks-debate/</guid><description>Bitcoin Core&apos;s decision to remove the OP_RETURN limit in its next release has divided the community, raising questions about network efficiency, spam, and Bitcoin&apos;s core mission.</description><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On May 5, 2025, Bitcoin Core developers announced a controversial decision to remove the 80-byte limit on OP_RETURN outputs in the next software release, as detailed in a GitHub post by developer Greg Sanders. This change, formalized in pull requests #32359 and #32406, eliminates restrictions on embedding arbitrary data in Bitcoin transactions, a move that has ignited fierce debate within the Bitcoin community. While supporters argue it aligns policy with real-world usage and improves network efficiency, critics warn it risks bloating the blockchain and diluting Bitcoin’s financial focus. Here’s a breakdown of the decision, its implications, and the community’s divided response.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the announcement: &lt;a href=&quot;https://github.com/bitcoin/bitcoin/pull/32359&quot;&gt;GitHub PR #32359&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;what-is-op_return-and-why-the-limit&quot;&gt;What is OP_RETURN and Why the Limit?&lt;/h3&gt;
&lt;p&gt;OP_RETURN is a Bitcoin transaction output that allows small amounts of data—such as timestamps or cryptographic commitments—to be stored on the blockchain without bloating the unspent transaction output (UTXO) set. Introduced in 2014, the 80-byte limit was a “gentle signal” to discourage non-financial data, like inscriptions popularized during the 2024 Ordinals craze, from overwhelming block space. However, users have bypassed this cap using complex methods, such as embedding data in Taproot transactions or fake public keys, which Sanders argues causes more harm than the limit itself.&lt;/p&gt;
&lt;p&gt;The limit was a standardness rule, not a consensus rule, meaning it governed transaction relaying, not block inclusion. Miners often ignored it, processing data-heavy transactions for higher fees, which exposed the cap’s ineffectiveness.&lt;/p&gt;
&lt;h3 id=&quot;the-decision-why-remove-the-limit&quot;&gt;The Decision: Why Remove the Limit?&lt;/h3&gt;
&lt;p&gt;The proposal, initiated by Bitcoin pioneer Peter Todd at Chaincode Labs’ request, considered three options: keeping, raising, or removing the cap. Removal gained “broad, though not unanimous, support,” per Sanders. Key arguments for lifting the limit include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cleaner UTXO Set&lt;/strong&gt;: Consolidating data into provably unspendable OP_RETURN outputs reduces bloat compared to workarounds that misuse spendable scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Consistency&lt;/strong&gt;: Aligning Bitcoin Core with miner practices and other node implementations ensures predictable relay and fee estimation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transparency&lt;/strong&gt;: Removing the cap encourages “cleaner” data use, as inscriptions become less opaque and easier to audit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Supporters like Pieter Wuille argue that market-driven fees, not arbitrary caps, should regulate block space, reflecting Bitcoin’s ethos of minimal rules. BitMEX Research supports the change, noting it could boost on-chain applications, driving transaction volume.&lt;/p&gt;
&lt;h3 id=&quot;the-backlash-spam-and-mission-creep&quot;&gt;The Backlash: Spam and Mission Creep&lt;/h3&gt;
&lt;p&gt;Critics, including prominent Bitcoiners, see the decision as a dangerous shift. Samson Mow, CEO of JAN3, called it “undesirable,” urging node operators to stick with Bitcoin Core 29.0 or switch to Bitcoin Knots, which maintains stricter rules. Luke Dashjr, a Bitcoin Knots maintainer, labeled it “utter insanity,” warning of increased spam and a departure from Bitcoin’s financial focus. Marty Bent of Ten31 Fund highlighted the lack of consensus, noting on X that the process felt coercive.&lt;/p&gt;
&lt;p&gt;Concerns include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blockchain Bloat&lt;/strong&gt;: Critics fear unrestricted OP_RETURN could incentivize spam, like the 2023 Ordinals congestion that forced Binance to pause withdrawals.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Philosophical Drift&lt;/strong&gt;: Some, like Jason Hughes, warn that prioritizing data storage over monetary use risks turning Bitcoin into a “worthless altcoin.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Centralized Decision-Making&lt;/strong&gt;: Accusations of censorship on GitHub, with dissenting comments allegedly deleted, fuel claims of a “developer cabal.” Giacomo Zucco called moderators “out of control.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Adam Back, a Bitcoin veteran, cautioned that even policy changes can have economic side effects, urging caution.&lt;/p&gt;
&lt;h3 id=&quot;implications-and-broader-context&quot;&gt;Implications and Broader Context&lt;/h3&gt;
&lt;p&gt;The removal is a policy shift, not a consensus change, so node operators can opt out by running older versions or alternatives like Bitcoin Knots, which holds ~5% of nodes. Bitcoin’s price has remained stable at ~$94,300, suggesting market indifference so far. However, the debate ties into larger discussions about Bitcoin’s programmability, with proposals like OP_CAT (BIP-347) gaining traction for enabling advanced scripting.&lt;/p&gt;
&lt;p&gt;Proponents see this as a step toward flexibility, supporting use cases like sidechains and DeFi bridges, as Karbon noted on X. Critics, however, fear a slippery slope toward Ethereum-like complexity, with Kurt Wuckert Jr. arguing it exposes Bitcoin Core’s centralized control.&lt;/p&gt;
&lt;h3 id=&quot;reflections&quot;&gt;Reflections&lt;/h3&gt;
&lt;p&gt;Bitcoin Core’s OP_RETURN limit removal highlights a tension between innovation and Bitcoin’s minimalist roots. Supporters view it as a pragmatic nod to how the network is already used, promising cleaner data practices and broader utility. Critics argue it risks spam and erodes Bitcoin’s core mission as sound money, compounded by a perceived lack of community consensus. The controversy underscores Bitcoin’s governance challenges: with ~99% of nodes running Core, decisions by a small developer group carry outsized weight.&lt;/p&gt;
&lt;p&gt;For users and traders, the change could increase transaction activity and fees, per BitMEX, but also introduce volatility if spam concerns materialize. As Bitcoin evolves, this debate—echoing past battles like the 2014 OP_RETURN Wars—tests its ability to balance utility with its foundational principles. Whether a step forward or a misstep, the decision will shape Bitcoin’s trajectory into 2026.&lt;/p&gt;</content:encoded></item><item><title>Shelling Out: Nick Szabo&apos;s Pioneering Theory on the Origins of Money</title><link>https://blog.jamestsetsekas.com/posts/shelling-out-the-origins-of-money/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/shelling-out-the-origins-of-money/</guid><description>Nick Szabo&apos;s Shelling Out explores the evolutionary origins of money, tracing how collectibles like wampum shells enabled cooperation and wealth transfer in early human societies.</description><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;Shelling Out: The Origins of Money&lt;/em&gt;, originally published in 2002, Nick Szabo, a polymath and early cryptocurrency visionary, offers a groundbreaking theory on how money emerged among early humans. Drawing on anthropology, evolutionary psychology, and economics, Szabo argues that collectibles—items like wampum shells, beads, and flints—served as proto-money, enabling cooperation, wealth transfer, and survival in ways other species couldn’t achieve. This seminal essay, still influential among Bitcoin developers and economists, reframes money as a tool for solving social dilemmas, with implications for understanding digital currencies today. Here’s a deep dive into Szabo’s insights and their enduring relevance.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the essay: &lt;a href=&quot;https://nakamotoinstitute.org/shelling-out/&quot;&gt;Shelling Out by Nick Szabo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-puzzle-why-collectibles&quot;&gt;The Puzzle: Why Collectibles?&lt;/h3&gt;
&lt;p&gt;Szabo begins with a historical anecdote: 17th-century American colonists, short on coins, adopted wampum—clam shell beads used by Native Americans—as legal tender from 1637 to 1661. These shells, strung into necklaces, were not mere decorations but a functional currency, traded far inland and even used for loans. This puzzled Europeans, who saw only gold and silver as “real” money. Szabo uses this to frame a broader question: why did early humans, often on the brink of starvation, invest time in crafting seemingly frivolous items like shell necklaces, beads, or unusable flint blades?&lt;/p&gt;
&lt;p&gt;His answer: these “collectibles” were not frivolous but critical to survival. They acted as proto-money, facilitating wealth transfers in trade, marriage, inheritance, tribute, and dispute resolution. Unlike modern money, collectibles had low velocity, changing hands rarely but adding immense value in high-stakes transactions. Szabo’s interdisciplinary approach—blending Carl Menger’s monetary theory with evolutionary biology—reveals how these objects solved cooperation problems that other animals couldn’t.&lt;/p&gt;
&lt;h3 id=&quot;collectibles-as-proto-money&quot;&gt;Collectibles as Proto-Money&lt;/h3&gt;
&lt;p&gt;Szabo defines collectibles as durable, scarce items—like shells, teeth, or ostrich eggshell beads—that served as stores of wealth and media of exchange. Archaeological evidence supports this: beads from South Africa’s Blombos Cave (75,000 BP) and Kenya’s Rift Valley (40,000 BP) show early humans crafted these items with skill, suggesting a practice dating back to Homo sapiens’ emergence. Unlike Neanderthals, who rarely collected such items, Homo sapiens used them prolifically, correlating with a tenfold population density increase in Europe around 40,000 BP.&lt;/p&gt;
&lt;p&gt;Drawing on Menger’s 1892 theory, Szabo explains how collectibles evolved from barter. Barter required a “double coincidence of wants,” limiting trade due to mismatched needs and trust issues. Collectibles bypassed this by acting as a medium that didn’t require simultaneous exchange, enabling delayed reciprocity. For example, a tribe could trade surplus meat for shells during a hunt, later using those shells to buy food during scarcity. This reduced the need for trust or complex favor-tracking, making trade viable between antagonistic tribes.&lt;/p&gt;
&lt;h3 id=&quot;solving-cooperation-dilemmas&quot;&gt;Solving Cooperation Dilemmas&lt;/h3&gt;
&lt;p&gt;Szabo roots his theory in evolutionary psychology, citing John Maynard Smith’s work on evolutionary stable strategies. Humans faced cooperation challenges like the Prisoner’s Dilemma, where cheating often trumped mutual benefit. Collectibles mitigated this by serving as “formal tokens of delayed reciprocal altruism,” as Szabo echoes Richard Dawkins. They enabled wealth transfers in key institutions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Starvation Insurance&lt;/strong&gt;: Collectibles allowed tribes to trade food or foraging rights during shortages, as seen in the !Kung San’s hxaro system, where beads bought access to neighboring territories.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Marriage&lt;/strong&gt;: Bride prices, often paid in collectibles, balanced unequal contributions between clans, forming closed-loop cycles of exchange.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inheritance&lt;/strong&gt;: Heirlooms passed wealth to kin, securing survival across generations, unlike other species.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tribute&lt;/strong&gt;: Victors extracted collectibles from the defeated, simplifying payment schedules and reducing violence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dispute Resolution&lt;/strong&gt;: Collectibles like wampum paid “blood money” to settle disputes, curbing vendettas.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These institutions, Szabo argues, gave Homo sapiens a survival edge, explaining their population boom over Neanderthals, despite similar brain sizes and tools.&lt;/p&gt;
&lt;h3 id=&quot;attributes-of-collectibles&quot;&gt;Attributes of Collectibles&lt;/h3&gt;
&lt;p&gt;Szabo identifies three key traits that made collectibles effective proto-money:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Wearable or hideable to prevent loss or theft, like necklaces or buried caches.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unforgeable Costliness&lt;/strong&gt;: Hard to fake, with value tied to rarity or labor, such as intricate shell beads or mammoth ivory carvings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verifiable Value&lt;/strong&gt;: Easily appraised through simple observation, ensuring trust in transactions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These traits, universal across cultures, explain why humans instinctively collect rare items. Szabo suggests this “collecting instinct” is genetically evolved, as archaeologist Mary C. Stiner notes: “Ornamentation is universal among modern human foragers.” By 700 BC, Lydian coins refined these traits, standardizing value and boosting trade velocity, but collectibles laid the foundation.&lt;/p&gt;
&lt;h3 id=&quot;relevance-to-bitcoin-and-beyond&quot;&gt;Relevance to Bitcoin and Beyond&lt;/h3&gt;
&lt;p&gt;Szabo’s essay, written before Bitcoin’s 2008 inception, is prescient for its parallels to digital currencies. Bitcoin shares collectibles’ traits: its fixed 21 million coin supply is unforgeably costly (via mining), secure (via cryptography), and verifiable (via blockchain). As a decentralized ledger, it bypasses trust issues, much like wampum did for tribes. Szabo’s influence on Bitcoin is widely noted—some speculate he’s Satoshi Nakamoto, though he denies it. On X, users like @BitcoinIsSaving cite Shelling Out as “required reading” for understanding Bitcoin’s roots in monetary evolution.&lt;/p&gt;
&lt;p&gt;The essay also critiques fiat currencies, echoing &lt;em&gt;Broken Money&lt;/em&gt; and &lt;em&gt;The Bitcoin Standard&lt;/em&gt;. Unlike collectibles or Bitcoin, fiat lacks scarcity, losing value to inflation. Szabo notes the 20th-century collectibles boom (e.g., eBay’s art market) as a hedge against fiat’s flaws, a trend still relevant in 2025.&lt;/p&gt;
&lt;h3 id=&quot;critiques-and-reflections&quot;&gt;Critiques and Reflections&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Shelling Out&lt;/em&gt; is lauded for its originality, blending anthropology with game theory to explain money’s origins. Its dense, academic style can challenge casual readers, but its insights are profound. Critics note Szabo’s focus on collectibles may underplay other factors, like language, in human cooperation. Some question whether collectibles’ low velocity truly rivaled modern money’s impact, though Szabo emphasizes their role in high-value, infrequent transfers.&lt;/p&gt;
&lt;p&gt;For Bitcoin enthusiasts, economists, or anthropology buffs, &lt;em&gt;Shelling Out&lt;/em&gt; is a foundational text. It reframes money not as a government invention but as an emergent solution to human social dilemmas, with Bitcoin as its digital heir. Szabo’s vision—rooted in 75,000-year-old shell beads—offers a timeless lens on why we value scarcity and how it shapes our future.&lt;/p&gt;</content:encoded></item><item><title>Broken Money: Decoding the Past, Present, and Future of Money with Lyn Alden</title><link>https://blog.jamestsetsekas.com/posts/broken-money-decoding-the-past-and-future-of-money/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/broken-money-decoding-the-past-and-future-of-money/</guid><description>Lyn Alden&apos;s Broken Money explores the evolution of money through technology, critiques the failing fiat system, and highlights Bitcoin&apos;s potential to reshape global finance.</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;Broken Money: Why Our Financial System is Failing Us and How We Can Make It Better&lt;/em&gt;, Lyn Alden, a renowned investment strategist blending engineering and finance expertise, offers a masterful exploration of money’s evolution and its future. Published in August 2023, the book has sold over 100,000 copies, hit #1 in three Amazon categories, and earned endorsements from figures like Jack Dorsey and Jeff Booth. Alden traces money from ancient ledgers to Bitcoin, arguing that our fiat system—plagued by debt and inflation—is broken, and decentralized technologies offer a path to freedom and stability. Here’s a deep dive into Alden’s insights and why this book is a must-read.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the book: &lt;a href=&quot;https://www.amazon.com/Broken-Money-Financial-System-Failing/dp/1119884438/&quot;&gt;Broken Money by Lyn Alden&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-evolution-of-money-a-technological-lens&quot;&gt;The Evolution of Money: A Technological Lens&lt;/h3&gt;
&lt;p&gt;Alden frames money as a ledger—a system to track value—evolving through technological advancements. Part 1 of &lt;em&gt;Broken Money&lt;/em&gt; explores ancient systems, from Mesopotamian clay tablets to gold, which outcompeted other commodities due to its durability and scarcity. Part 2 covers proto-banking and the rise of fiat currencies, accelerated by the telegraph’s ability to speed transactions. Alden reconciles two monetary theories—credit-based (debt as money) and commodity-based (gold, shells)—arguing that money is fundamentally a ledger, whether governed by nature or institutions.&lt;/p&gt;
&lt;p&gt;Her historical sweep is engaging yet rigorous, showing how technology drives monetary change. For example, gold’s slow settlement lost out to faster fiat systems in the telecommunication age, giving banks and central banks unprecedented power. This sets the stage for her critique of today’s financial system.&lt;/p&gt;
&lt;h3 id=&quot;the-broken-fiat-system&quot;&gt;The Broken Fiat System&lt;/h3&gt;
&lt;p&gt;Alden argues that the modern fiat system, untethered from gold since 1971, is failing due to excessive debt, inflation, and inequality. With 160+ currencies, most devalue rapidly outside their borders, creating a fragmented, barter-like global economy. She highlights how central banks’ money printing—evident in 2008 and 2020—erodes purchasing power, disproportionately harming those in poorer nations or without assets. Chapter 16, praised by readers for its clarity, dissects these flaws, showing how inflation quietly transfers wealth to those closest to the “money printers.”&lt;/p&gt;
&lt;p&gt;Alden’s data-driven approach shines: global debt has soared, and structural fiscal deficits now drive inflation more than monetary policy. She warns of instability, citing long-term debt cycles and moral hazards like bailouts. Her engineering perspective adds rigor, making complex concepts accessible without jargon, as noted in Goodreads reviews: “I went from a 2/10 to a 5/10 in understanding these systems overnight.”&lt;/p&gt;
&lt;h3 id=&quot;bitcoin-and-the-future-of-money&quot;&gt;Bitcoin and the Future of Money&lt;/h3&gt;
&lt;p&gt;Part 5 of &lt;em&gt;Broken Money&lt;/em&gt; explores digital innovations, with Bitcoin as a standout. Alden views it as a “commodity ledger” merging credit and hard money virtues: its 21 million coin cap ensures scarcity, while its decentralized blockchain offers speed and security. Unlike fiat, Bitcoin resists debasement, and unlike gold, it settles instantly across borders. She compares it to historical (gold) and current (fiat) systems, arguing only Bitcoin delivers a “strong currency” with privacy, auditability, and freedom from control.&lt;/p&gt;
&lt;p&gt;Alden addresses criticisms, like Bitcoin’s energy use, by framing it as a trade-off for an incorruptible ledger. She’s skeptical of altcoins and central bank digital currencies (CBDCs), which risk surveillance and control. However, some critics, like Reddit’s r/btc community, argue she overstates Bitcoin’s virtues, citing her “disingenuous” small-block stance, though this is a niche debate.&lt;/p&gt;
&lt;h3 id=&quot;a-human-centric-perspective&quot;&gt;A Human-Centric Perspective&lt;/h3&gt;
&lt;p&gt;What sets &lt;em&gt;Broken Money&lt;/em&gt; apart is its focus on money’s human impact. Alden examines how fiat systems entrench power, limiting financial freedom, especially in authoritarian regimes. Part 6 explores cryptography and open networks, framing Bitcoin as a tool for human rights, as endorsed by Alex Gladstein: “A story about freedom versus control.” Her personal background—rising from poverty to a macro analyst—adds empathy, emphasizing how broken money fails the vulnerable.&lt;/p&gt;
&lt;p&gt;Readers on X praise her clarity, with @markjeffrey calling it a “Guns, Germs, and Steel of money,” explaining “what works, why it stops working, and why the next thing rises.” The book’s modular design lets readers jump to topics like Bitcoin or banking without losing context, making it versatile for novices and experts.&lt;/p&gt;
&lt;h3 id=&quot;critiques-and-reflections&quot;&gt;Critiques and Reflections&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Broken Money&lt;/em&gt; isn’t flawless. Some find the early chapters slow, and beginners may struggle with macroeconomic concepts. Critics argue Alden’s Bitcoin optimism downplays its volatility and regulatory risks, and her libertarian leanings may alienate fiat defenders. The audiobook, narrated by Guy Swann, faces minor criticism for background noise, though its 17-hour depth is lauded.&lt;/p&gt;
&lt;p&gt;Yet, with over 1,000 reviews across Amazon and Goodreads, the book’s impact is undeniable. It’s a “must-read” for understanding money’s past and future, as Jeff Booth notes: “A brilliant journey through economic and social well-being.” Alden’s blueprint—embracing decentralized systems like Bitcoin—offers hope for a fairer financial order, though she acknowledges the entrenched power of central banks.&lt;/p&gt;
&lt;p&gt;For anyone navigating inflation, curious about Bitcoin, or seeking to decode global finance, &lt;em&gt;Broken Money&lt;/em&gt; is a game-changer. It’s not just about money—it’s about reclaiming freedom in a system rigged against the many.&lt;/p&gt;</content:encoded></item><item><title>The Big Print: Fixing America&apos;s Broken Money with Sound Money Solutions</title><link>https://blog.jamestsetsekas.com/posts/the-big-print-fixing-america-with-sound-money/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/the-big-print-fixing-america-with-sound-money/</guid><description>Lawrence Lepard&apos;s The Big Print exposes the flaws in America&apos;s fiat monetary system, tracing its history and advocating Bitcoin and sound money to address inflation and inequality.</description><pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;The Big Print: What Happened to America and How Sound Money Will Fix It&lt;/em&gt;, Lawrence Lepard, a veteran investment manager and sound money advocate, delivers a passionate and accessible critique of America’s broken monetary system. Published in February 2025, the book, with a foreword by Max Keiser, argues that decades of fiat currency mismanagement—marked by money printing and debt—have fueled inflation, wealth inequality, and economic dysfunction. Lepard proposes a return to sound money, with Bitcoin as a key solution, to restore fairness and prosperity. Here’s a deep dive into Lepard’s compelling narrative and its call to action.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the book: &lt;a href=&quot;https://www.amazon.com/Big-Print-Happened-America-Sound/dp/1599474379/&quot;&gt;The Big Print by Lawrence Lepard&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-problem-a-broken-monetary-system&quot;&gt;The Problem: A Broken Monetary System&lt;/h3&gt;
&lt;p&gt;Lepard structures &lt;em&gt;The Big Print&lt;/em&gt; in two parts: “The Problem” and “The Solution.” In the first, he traces the unraveling of America’s monetary system, pinpointing the 1971 Nixon Shock—when the U.S. abandoned the gold standard—as a turning point. Since then, the M2 money supply has grown at a 6.8% annual rate, outpacing economic growth and driving inflation. He cites staggering figures: U.S. federal debt has ballooned to $37 trillion, with interest expenses climbing, while the middle class struggles with rising costs for housing, healthcare, and education.&lt;/p&gt;
&lt;p&gt;Drawing on Austrian economics, Lepard argues that fiat money, controlled by the Federal Reserve, incentivizes consumption and borrowing over saving, punishing the thrifty. Policies like quantitative easing and zero interest rates have inflated asset bubbles, widening the wealth gap. He weaves personal anecdotes—like his experiences during the 2008 financial crisis—with historical events, making complex concepts relatable. As he puts it, “The money is broken,” and its effects—erosion of purchasing power and economic instability—touch everyone.&lt;/p&gt;
&lt;h3 id=&quot;the-root-causes-fiat-and-central-banking&quot;&gt;The Root Causes: Fiat and Central Banking&lt;/h3&gt;
&lt;p&gt;Lepard’s critique centers on central banking, particularly the Federal Reserve’s role in manipulating interest rates and printing money. He argues this distorts markets, citing the 2008 crisis as a symptom of “cheap money” fueling bubbles. Unlike &lt;em&gt;The Lords of Easy Money&lt;/em&gt;, which dissects the Fed’s failures, &lt;em&gt;The Big Print&lt;/em&gt; offers a broader history, from the Fed’s 1913 creation to modern debt spirals, while staying accessible to non-experts.&lt;/p&gt;
&lt;p&gt;He highlights inflation’s real-world impact: official rates often understate true cost-of-living increases, squeezing the average worker. Lepard warns of an impending crisis, potentially an “inflationary depression,” as debt and money printing collide with economic stagnation. His urgency resonates on X, where he (@LawrenceLepard) calls for “fixing the money to fix the world.”&lt;/p&gt;
&lt;h3 id=&quot;the-solution-sound-money-and-bitcoin&quot;&gt;The Solution: Sound Money and Bitcoin&lt;/h3&gt;
&lt;p&gt;In the second part, Lepard champions sound money—assets like gold, silver, and Bitcoin with scarce, stable supplies. Bitcoin, with its 21 million coin cap and decentralized blockchain, is his centerpiece. He explains its mechanics simply: a digital ledger secured by proof-of-work, immune to manipulation. Bitcoin’s advantages—portability, divisibility, and scarcity—make it a modern alternative to gold, though Lepard acknowledges its volatility.&lt;/p&gt;
&lt;p&gt;He offers practical advice for protecting wealth, urging readers to invest in hard assets to hedge inflation. Lepard envisions Bitcoin as a tool for systemic reform, enabling a monetary reset that prioritizes fairness. While he doesn’t address counterarguments like central bank digital currencies (CBDCs), his focus on Bitcoin’s transparency and user governance is compelling. As one Amazon reviewer noted, “It’s a clear way out of this with the use of sound money.”&lt;/p&gt;
&lt;h3 id=&quot;strengths-and-critiques&quot;&gt;Strengths and Critiques&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;The Big Print&lt;/em&gt; shines for its clarity and storytelling. Lepard’s personal journey—from Harvard MBA to Bitcoin advocate—adds authenticity, while charts and footnotes ground his arguments. Readers praise its accessibility, with one calling it “a Paul Revere’s ride through the ills of the central banking system.” The audiobook, narrated by Walker America, includes an 87-page PDF with visuals, enhancing its impact.&lt;/p&gt;
&lt;p&gt;Critics note minor flaws: some charts are hard to read in print, and the book leans heavily on Bitcoin without fully exploring alternatives or risks like regulatory bans. Its Austrian economics bias may alienate readers who favor Keynesian policies, but Lepard’s data-driven approach mitigates this. Compared to &lt;em&gt;The Bitcoin Standard&lt;/em&gt;, it’s less theoretical and more practical, focusing on America’s unique challenges.&lt;/p&gt;
&lt;h3 id=&quot;impact-and-reflections&quot;&gt;Impact and Reflections&lt;/h3&gt;
&lt;p&gt;With endorsements from Max Keiser and praise on X for “orange-pilling” readers, &lt;em&gt;The Big Print&lt;/em&gt; is a rallying cry for sound money advocates. It’s resonated widely, from Bitcoin conferences to everyday readers feeling inflation’s pinch. Lepard’s mantra—“fix the money, fix the world”—encapsulates his hope that Bitcoin can restore the post-WWII American dream.&lt;/p&gt;
&lt;p&gt;The book is a must-read for anyone grappling with rising costs or curious about Bitcoin’s role in economic reform. While its optimism about Bitcoin’s adoption may face hurdles, Lepard’s blend of history, personal insight, and actionable advice makes &lt;em&gt;The Big Print&lt;/em&gt; a powerful guide to navigating today’s monetary mess and building a sounder future.&lt;/p&gt;</content:encoded></item><item><title>The Bitcoin Standard: A Vision for Sound Money in a Digital Age</title><link>https://blog.jamestsetsekas.com/posts/the-bitcoin-standard/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/the-bitcoin-standard/</guid><description>Saifedean Ammous&apos; The Bitcoin Standard explores the history of money, the flaws of fiat currencies, and Bitcoin&apos;s potential as a decentralized, sound money alternative.</description><pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;The Bitcoin Standard: The Decentralized Alternative to Central Banking&lt;/em&gt;, Saifedean Ammous, an Austrian school economist, delivers a compelling case for Bitcoin as the future of money. Published in 2018, the book traces the evolution of money from seashells to gold to fiat currencies, arguing that Bitcoin’s fixed supply and decentralized nature make it the ultimate “sound money.” With over a million copies sold in 39 languages, it’s a cornerstone for Bitcoin enthusiasts, praised by figures like Michael Saylor, who credits it for MicroStrategy’s $425 million Bitcoin investment. Here’s a deep dive into Ammous’ arguments, Bitcoin’s role, and the book’s impact.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the book: &lt;a href=&quot;https://www.amazon.com/Bitcoin-Standard-Decentralized-Alternative-Central/dp/1119473861&quot;&gt;The Bitcoin Standard by Saifedean Ammous&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-evolution-of-money&quot;&gt;The Evolution of Money&lt;/h3&gt;
&lt;p&gt;Ammous begins by exploring money’s history, emphasizing “salability”—how well a medium transmits value across scale (divisibility), space (portability), and time (store of value). Early forms like seashells and limestone worked in small communities but failed to scale. Gold emerged as the ideal money due to its high stock-to-flow ratio, meaning its supply grows slowly relative to existing stock, preserving value. The gold standard fueled global trade and prosperity in the 19th century, but governments abandoned it in the 20th century, notably with the 1971 Nixon Shock, ushering in fiat currencies—money backed by decree, not commodities.&lt;/p&gt;
&lt;p&gt;Fiat money, Ammous argues, is “unsound” because governments can print it at will, causing inflation and eroding savings. He cites historical examples, like Rome’s monetary debasement, linking unsound money to civilizational decline. This sets the stage for Bitcoin, introduced by Satoshi Nakamoto in 2008 as a “peer-to-peer electronic cash system” free from third-party trust.&lt;/p&gt;
&lt;h3 id=&quot;bitcoin-as-sound-money&quot;&gt;Bitcoin as Sound Money&lt;/h3&gt;
&lt;p&gt;Ammous dedicates only 20-30% of the book to Bitcoin, focusing first on monetary theory. He argues Bitcoin excels as sound money due to its properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fixed Supply&lt;/strong&gt;: Capped at 21 million coins, Bitcoin’s supply is immune to inflation, unlike fiat currencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Divisibility&lt;/strong&gt;: Bitcoin is divisible to 0.00000001 units (satoshis), enabling transactions of any size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portability&lt;/strong&gt;: As digital cash, Bitcoin transfers value globally in minutes, unlike gold’s physical constraints.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Its decentralized ledger, secured by proof-of-work, ensures integrity without relying on any single party.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ammous envisions Bitcoin as a “digital gold,” primarily a store of value and settlement network rather than a currency for daily transactions. Off-chain solutions like exchanges handle smaller trades, while Bitcoin’s blockchain settles large, trustless transactions. He believes this makes Bitcoin a potential global reserve currency, restoring the stability of the gold standard era but with digital efficiency.&lt;/p&gt;
&lt;h3 id=&quot;critiquing-fiat-and-central-banking&quot;&gt;Critiquing Fiat and Central Banking&lt;/h3&gt;
&lt;p&gt;Rooted in Austrian economics, Ammous is sharply critical of fiat systems and Keynesian policies. He argues that fiat money incentivizes short-term spending over saving, fostering a “high time-preference” culture of consumption and debt. Sound money like Bitcoin, with its fixed supply, encourages long-term thinking, as seen in historical societies that built enduring structures like cathedrals. Central banks, he claims, exacerbate instability through money printing, fueling bubbles and inequality.&lt;/p&gt;
&lt;p&gt;Critics note Ammous’ bias against centralized systems, with some calling his rhetoric “polemical” or overly simplistic, lumping all modern economic woes under “Keynesian economics.” For instance, he attributes Europe’s Dark Ages partly to the lack of sound money, a claim skeptics argue ignores other factors like political fragmentation. Yet, his punchy summaries make complex ideas accessible, earning praise for clarity.&lt;/p&gt;
&lt;h3 id=&quot;bitcoins-challenges-and-promise&quot;&gt;Bitcoin’s Challenges and Promise&lt;/h3&gt;
&lt;p&gt;Ammous addresses common criticisms: Is Bitcoin mining wasteful? He argues its energy use secures an incorruptible ledger, a worthwhile trade-off. Is it for criminals? He counters that fiat cash is more anonymous, and Bitcoin’s transparency aids tracking. Can governments ban it? While possible, he believes Bitcoin’s decentralized nature and growing adoption—evident in El Salvador’s legal tender status—make suppression difficult.&lt;/p&gt;
&lt;p&gt;He’s less optimistic about altcoins, viewing them as speculative “shitcoins” driven by easy money, lacking Bitcoin’s integrity. Recent X posts reflect this sentiment, with Ammous expressing confidence in Bitcoin’s trajectory, citing 360,000 additional blocks since 2018 as evidence of its resilience.&lt;/p&gt;
&lt;h3 id=&quot;impact-and-reflections&quot;&gt;Impact and Reflections&lt;/h3&gt;
&lt;p&gt;The Bitcoin Standard is a polarizing yet influential work. Supporters like NFL star Russel Okung and Mises Institute’s Jeff Deist call it a “must-read” for understanding monetary tech and fiat’s flaws. Critics, however, find its libertarian tone and anti-government stance excessive, arguing that global trade thrives despite fiat systems. Still, its impact is undeniable: it inspired MicroStrategy’s massive Bitcoin bet and shaped El Salvador’s adoption strategy.&lt;/p&gt;
&lt;p&gt;For readers, the book offers a rigorous yet readable journey through monetary history and Bitcoin’s potential to disrupt central banking. It’s not a technical guide but a philosophical and economic manifesto. While Ammous’ vision of a Bitcoin standard faces hurdles—regulatory resistance, public skepticism, and volatility—his case for sound money resonates in an era of rising debt and inflation. Whether you’re a bitcoin skeptic or enthusiast, The Bitcoin Standard challenges you to rethink what money is and could be.&lt;/p&gt;</content:encoded></item><item><title>The Price of Tomorrow: Embracing Deflation for an Abundant Future</title><link>https://blog.jamestsetsekas.com/posts/the-price-of-tomorrow/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/the-price-of-tomorrow/</guid><description>Jeff Booth&apos;s The Price of Tomorrow argues that technology-driven deflation is inevitable, challenging our debt-fueled economy and offering a path to abundance through Bitcoin and systemic change.</description><pubDate>Sat, 03 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;The Price of Tomorrow: Why Deflation is the Key to an Abundant Future&lt;/em&gt;, Jeff Booth, a seasoned tech entrepreneur, delivers a compelling case for why technology is driving an unstoppable wave of deflation that will reshape our economy. Drawing on his experience founding BuildDirect and navigating decades of technological disruption, Booth argues that our debt-heavy, inflation-based economic system is fundamentally misaligned with the deflationary force of technology. He warns of widespread unemployment and economic instability unless we embrace deflation, rethink work, and adopt solutions like Bitcoin. Here’s a breakdown of Booth’s provocative thesis and its implications for our future.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the book: &lt;a href=&quot;https://www.amazon.com/Price-Tomorrow-Deflation-Abundant-Future/dp/1999257405&quot;&gt;The Price of Tomorrow by Jeff Booth&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-deflationary-power-of-technology&quot;&gt;The Deflationary Power of Technology&lt;/h3&gt;
&lt;p&gt;Booth begins with a core premise: technology is inherently deflationary, driving down the cost of goods and services by increasing efficiency. From smartphones to AI, technological advancements deliver more value for less cost—think of how Zoom replaced costly long-distance calls or how Amazon slashed retail prices. He cites staggering data: between 2000 and 2018, global debt surged from $62 trillion to $247 trillion to achieve just $46 trillion in GDP growth, a diminishing return fueled by easy credit. This artificial growth masks the reality that technology should be making life cheaper, yet housing, healthcare, and education costs keep rising due to debt-driven inflation.&lt;/p&gt;
&lt;p&gt;Booth challenges the narrative that inflation is inevitable. Central banks, through quantitative easing and low interest rates, print money to prop up an outdated system, creating asset bubbles and inequality. Meanwhile, technology’s deflationary force—evident in industries like retail and transportation—clashes with this approach, threatening economic stability. As Booth puts it, “On one side, we have this incredible deflationary force driven by technology, and on the other side, we have a force trying to stop it. That force is a money printing machine.”&lt;/p&gt;
&lt;h3 id=&quot;the-debt-trap-and-economic-fragility&quot;&gt;The Debt Trap and Economic Fragility&lt;/h3&gt;
&lt;p&gt;A central concern in &lt;em&gt;The Price of Tomorrow&lt;/em&gt; is the global economy’s reliance on unsustainable debt. Booth illustrates this with the U.S.-China trade dynamic: the U.S., with 70% of GDP from consumer spending, borrows heavily to fuel consumption, while China, with lower wages and export-driven growth, buys U.S. debt to keep the cycle going. This “vendor financing” keeps interest rates low but widens trade deficits and inflates asset prices. In 2018, the U.S. budget deficit hit $800 billion, exacerbated by tax cuts that boosted consumption but deepened debt.&lt;/p&gt;
&lt;p&gt;Booth references Ray Dalio’s four levers to escape debt: austerity, debt restructuring, wealth redistribution, or money printing. Central banks favor the latter, but Booth argues this is futile in a deflationary world, leading to instability and polarization. He warns that combining debt with deflation is toxic, as borrowers struggle to repay fixed debts with shrinking incomes.&lt;/p&gt;
&lt;h3 id=&quot;creative-destruction-and-network-effects&quot;&gt;Creative Destruction and Network Effects&lt;/h3&gt;
&lt;p&gt;Booth highlights how technology’s “creative destruction” disrupts traditional industries, citing Amazon’s dominance over retailers like Walmart and Home Depot. Platforms like Amazon, Facebook, and Airbnb leverage network effects—where value grows exponentially with users—to create winner-take-all markets. These platforms aggregate supply (e.g., videos on YouTube, homes on Airbnb) and let it compete, driving prices down and concentrating power. Unlike past monopolies that raised prices, today’s tech giants offer better services at lower costs, making them hard to regulate.&lt;/p&gt;
&lt;p&gt;This deflationary trend, while beneficial for consumers, destroys jobs. Booth predicts widespread technological unemployment as AI and automation outperform humans in skilled roles. He cites Mark Carney’s comparison of AI to electricity but argues AI’s exponential intelligence surpasses past innovations, amplifying its disruptive impact.&lt;/p&gt;
&lt;h3 id=&quot;bitcoin-a-deflationary-solution&quot;&gt;Bitcoin: A Deflationary Solution&lt;/h3&gt;
&lt;p&gt;Booth sees Bitcoin as a critical piece of the solution, aligning with technology’s deflationary nature. Unlike fiat currencies devalued by printing, Bitcoin’s fixed supply of 21 million coins ensures absolute scarcity, making it an “incorruptible global currency” for a deflationary economy. He argues that an inflationary monetary system, reliant on debt and money printing, is fragile and unsustainable. Bitcoin, by contrast, allows prices to naturally fall as technology reduces costs, enhancing purchasing power.&lt;/p&gt;
&lt;p&gt;Recent discussions on X echo this sentiment, with users like @MasonFoard noting that Bitcoin’s neutrality complements technology-driven deflation, unlike manipulative fiat systems. Booth’s advocacy for Bitcoin isn’t utopian; he acknowledges political resistance, as governments prioritize short-term stability over long-term reform.&lt;/p&gt;
&lt;h3 id=&quot;a-call-to-action&quot;&gt;A Call to Action&lt;/h3&gt;
&lt;p&gt;Booth doesn’t claim to have all the answers but urges a global conversation to rethink our economic paradigm. He proposes letting deflation run its course, allowing technology to lower costs and reimagining work in a job-scarce world. This could mean universal basic income, new education models, or decentralized systems enabled by Bitcoin. He warns that resisting deflation through more debt will widen inequality and fuel unrest, as seen in growing global polarization.&lt;/p&gt;
&lt;p&gt;The book’s strength lies in its accessible style, avoiding jargon to make complex ideas digestible. Readers on Amazon praise its clarity and prescience, though some question whether technology’s deflationary force can outpace inflationary policies like Federal Reserve money printing. Booth’s call to action resonates: “We need to build a new framework for our local and global economies, and soon; we need to accept deflation and embrace the abundance it can bring.”&lt;/p&gt;
&lt;h3 id=&quot;reflections&quot;&gt;Reflections&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;The Price of Tomorrow&lt;/em&gt; is a thought-provoking wake-up call, blending economics, technology, and policy to challenge conventional wisdom. Booth’s thesis—that technology-driven deflation is inevitable and Bitcoin offers a path forward—is bold and polarizing. While skeptics may doubt deflation’s dominance given persistent inflation, his data-driven arguments and real-world examples, like Amazon’s rise, make a strong case. For anyone interested in economics, technology, or Bitcoin’s role in our future, this book is a must-read. It’s not just about tomorrow’s price—it’s about reimagining abundance in a world transformed by technology.&lt;/p&gt;</content:encoded></item><item><title>Immich: Your Self-Hosted Google Photos Alternative for Private Photo and Video Management</title><link>https://blog.jamestsetsekas.com/posts/immich/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/immich/</guid><description>Discover Immich, a high-performance, open-source, self-hosted photo and video management solution that rivals Google Photos while prioritizing privacy and control.</description><pubDate>Fri, 02 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In an era where cloud services like Google Photos dominate photo and video storage, privacy concerns and subscription costs are pushing users toward self-hosted alternatives. Enter Immich, a powerful, open-source photo and video management solution that mirrors Google Photos’ functionality while keeping your data on your own server. With features like mobile apps, AI-powered organization, and a polished user interface, Immich is quickly becoming the go-to choice for privacy-conscious users. Here’s a deep dive into why Immich stands out and how it can transform your photo management.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Learn more about Immich: &lt;a href=&quot;https://immich.app/&quot;&gt;Official Immich Website&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;why-choose-a-self-hosted-solution&quot;&gt;Why Choose a Self-Hosted Solution?&lt;/h3&gt;
&lt;p&gt;Cloud-based services like Google Photos offer convenience, but they come with trade-offs: your photos and videos are stored on corporate servers, subject to data mining, and tied to recurring fees. Self-hosting with Immich gives you full control over your data, ensuring privacy and eliminating subscription costs. By running Immich on your own hardware—be it a NAS, Raspberry Pi, or Linux server—you own your memories outright. Plus, with a one-time investment in storage, you can often surpass the capacity of cloud plans.&lt;/p&gt;
&lt;p&gt;Immich, launched in 2022 by Alex Tran, was born from a personal need: a privacy-focused, user-friendly alternative to Google Photos that didn’t compromise on features. Its rapid development and active community make it a standout in the self-hosted space.&lt;/p&gt;
&lt;h3 id=&quot;key-features-of-immich&quot;&gt;Key Features of Immich&lt;/h3&gt;
&lt;p&gt;Immich’s feature set rivals commercial offerings, making it a compelling replacement for Google Photos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mobile Apps with Automatic Backup&lt;/strong&gt;: Immich offers polished iOS and Android apps that automatically back up photos and videos, with options to sync over Wi-Fi or via VPNs like Tailscale for remote access. Users praise the seamless experience, with background uploads freeing up device storage.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI-Powered Organization&lt;/strong&gt;: Using machine learning, Immich auto-tags photos based on content and employs facial recognition to group images by people. While not as refined as Google Photos, its DBSCAN algorithm improves accuracy over time, making searches intuitive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Timeline and Location Views&lt;/strong&gt;: Browse photos chronologically or on an interactive map using geotags, perfect for reliving trips or organizing memories.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Multi-User and Sharing&lt;/strong&gt;: Immich supports multiple users, shared albums, and external link sharing, ideal for families or collaborative projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexible Storage&lt;/strong&gt;: Store photos on a NAS or local drive, with customizable folder structures. External libraries can be linked, and a CLI simplifies bulk uploads.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open-Source and Free&lt;/strong&gt;: Licensed under AGPLv3, Immich is free to use, with a transparent roadmap aiming for a stable release in 2025.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recent updates, like Immich 1.132, have improved syncing and mobile UI, with features like deduplication and better video thumbnails on the horizon.&lt;/p&gt;
&lt;h3 id=&quot;setting-up-immich&quot;&gt;Setting Up Immich&lt;/h3&gt;
&lt;p&gt;Installing Immich is straightforward, especially for those familiar with Docker. Here’s a quick guide to get started:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prepare Your Hardware&lt;/strong&gt;: Use a Linux server, NAS, or even a Raspberry Pi with sufficient storage (e.g., a 2TB drive). A modest setup with 4GB RAM and a dual-core CPU works for small libraries, but disable machine learning for low-power devices like a Chrome Box to avoid crashes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Install via Docker&lt;/strong&gt;: Download the docker-compose.yml and .env files from Immich’s GitHub. Customize the UPLOAD_LOCATION in .env for your storage path, then run:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;docker&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; compose&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; up&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -d&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access the web interface&lt;/strong&gt; at &lt;a href=&quot;http://localhost:2283&quot;&gt;http://localhost:2283&lt;/a&gt;, create an admin account, and configure users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set Up Mobile Apps&lt;/strong&gt;: Install the Immich app from the iOS or Android store, enter your server URL (e.g., via a reverse proxy like Caddy for HTTPS), and enable auto-backup.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Secure Access&lt;/strong&gt;: Use a reverse proxy or VPN (e.g., Tailscale) for external access, and back up the Immich data directory to an off-site location with encrypted scripts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For large libraries, bulk uploads via CLI are efficient, though initial imports from iCloud may be slow due to re-downloading.&lt;/p&gt;
&lt;h3 id=&quot;pros-and-cons&quot;&gt;Pros and Cons&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Privacy-focused, with data stored locally&lt;/li&gt;
&lt;li&gt;Feature-rich, with mobile apps and AI tools&lt;/li&gt;
&lt;li&gt;Free and open-source, with an active community&lt;/li&gt;
&lt;li&gt;Intuitive UI, comparable to Google Photos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Still in beta, with potential bugs (not for sole backups)&lt;/li&gt;
&lt;li&gt;Resource-intensive with machine learning enabled&lt;/li&gt;
&lt;li&gt;Setup requires technical knowledge, unlike cloud services&lt;/li&gt;
&lt;li&gt;Facial recognition and search lag behind Google Photos&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;immich-vs-alternatives&quot;&gt;Immich vs. Alternatives&lt;/h3&gt;
&lt;p&gt;Compared to other self-hosted options like PhotoPrism or Nextcloud Memories, Immich shines for its mobile-first design and Google Photos-like experience. PhotoPrism offers robust WebDAV support but has a clunkier UI and weaker AI. Nextcloud Memories is great for Nextcloud users but less polished standalone. DigiKam, while easier to set up, lacks Immich’s mobile apps and server focus. For most, Immich’s balance of features and usability makes it the top choice.&lt;/p&gt;
&lt;h3 id=&quot;reflections&quot;&gt;Reflections&lt;/h3&gt;
&lt;p&gt;Immich is a game-changer for anyone seeking a private, cost-effective alternative to Google Photos. Its modern design, mobile apps, and AI features make it accessible yet powerful, though its beta status means it’s not yet a primary backup solution. For tech-savvy users with a NAS or home server, Immich offers unmatched control over precious memories. As it nears a stable release, it’s poised to redefine self-hosted photo management. If you’re tired of Big Tech’s grip on your photos, Immich is worth exploring—your own cloud awaits.&lt;/p&gt;</content:encoded></item><item><title>The Evolutionary Roots of Money: How Scarcity Shaped Humanity and Bitcoin</title><link>https://blog.jamestsetsekas.com/posts/once-in-a-species/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/once-in-a-species/</guid><description>Exploring how Homo sapiens&apos; obsession with scarcity, from ancient shell beads to Bitcoin, drove our evolutionary success and the future of money.</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;em&gt;Once-in-a-Species&lt;/em&gt;, Jesse Myers tackles a profound question: why did Homo sapiens outcompete Neanderthals and other early human subspecies, and how does this relate to Bitcoin’s rise? By integrating anthropology, neuroscience, and Austrian economics, Myers argues that our species’ unique obsession with scarcity—seen in 142,000-year-old shell beads—sparked the concept of money, enabling large-scale societal coordination and human flourishing. This same drive, he suggests, culminates in Bitcoin, a form of money with absolute scarcity. Here’s a breakdown of Myers’ fascinating argument and its implications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Read the original article: &lt;a href=&quot;https://www.onceinaspecies.com/p/once-in-a-species-73b&quot;&gt;Once in a Species by Jesse Myers&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;the-neanderthal-mystery-why-us&quot;&gt;The Neanderthal Mystery: Why Us?&lt;/h3&gt;
&lt;p&gt;For years, it was assumed Homo sapiens prevailed over Neanderthals due to superior intelligence, tools, or language. However, archaeological evidence challenges this. Neanderthals created art, like 66,000-year-old handprints in Maltravieso, Spain, and used tools as sophisticated as ours. Their brains were comparable in size, and they may have honored their dead with flowers. Yet, after Homo sapiens arrived in Europe ~45,000 years ago, Neanderthals quickly vanished. What was our edge?&lt;/p&gt;
&lt;p&gt;Myers highlights a key difference: Homo sapiens compulsively collected seashells and crafted them into beads, a behavior dating back at least 142,000 years. Neanderthals, with only one known instance of shell bead jewelry, rarely did this. While they could engage in symbolic acts, they lacked our intense drive. Myers suggests this wasn’t just about beauty—it was the seed of an economic revolution.&lt;/p&gt;
&lt;h3 id=&quot;shell-beads-as-proto-money-an-economic-lens&quot;&gt;Shell Beads as Proto-Money: An Economic Lens&lt;/h3&gt;
&lt;p&gt;Citing Nick Szabo’s &lt;em&gt;Shelling Out&lt;/em&gt;, Myers uses Austrian economics to reframe shell beads as proto-money. Austrian thinkers like Carl Menger explain how commodities become money: first valued as collectibles, then recognized for inter-subjective value, and eventually used in trade. Scarce and labor-intensive, shell beads were perfect for this, serving as a store of value for significant exchanges like peacemaking or marriage.&lt;/p&gt;
&lt;p&gt;Anthropologists often see beads as symbols of identity or status, but Myers critiques this view for ignoring their economic role. By valuing scarce objects, Homo sapiens developed a system that transcended barter’s limitations, laying the groundwork for complex societies.&lt;/p&gt;
&lt;h3 id=&quot;a-genetic-quirk-the-neuroscience-of-scarcity&quot;&gt;A Genetic Quirk: The Neuroscience of Scarcity&lt;/h3&gt;
&lt;p&gt;Myers points to a 2022 study by Pinson et al., which found a single amino acid mutation in the TKTL1 gene, unique to Homo sapiens. This mutation, likely occurring 300,000–160,000 years ago, boosts neuron production in the frontal lobe’s outer layers, areas crucial for abstract thought. This supercharged our ability to value scarce objects like seashells, unlike Neanderthals, who lacked this mutation and showed less interest in collectibles.&lt;/p&gt;
&lt;p&gt;This genetic difference explains why we obsessively gathered shells while Neanderthals did not. It wasn’t about being smarter but about a heightened drive for symbolic behavior, particularly appreciating rarity.&lt;/p&gt;
&lt;h3 id=&quot;money-the-foundation-of-civilization&quot;&gt;Money: The Foundation of Civilization&lt;/h3&gt;
&lt;p&gt;Myers argues that our love of scarcity enabled Homo sapiens to support 10 times the population density of Neanderthals in the same regions. He draws on Robin Dunbar’s research, which shows barter-based societies are capped at ~150 individuals due to the complexity of tracking debts. Money overcomes this by enabling trustless transactions, fostering trade and alliances across tribes.&lt;/p&gt;
&lt;p&gt;With money, tribes could negotiate peace, trade, and form mutual-security alliances, creating multi-tribal societies. This coordination gave Homo sapiens a competitive advantage over solitary Neanderthal tribes. Myers asserts that money, born from our fascination with scarcity, is the cornerstone of human civilization.&lt;/p&gt;
&lt;h3 id=&quot;bitcoin-the-ultimate-scarce-asset&quot;&gt;Bitcoin: The Ultimate Scarce Asset&lt;/h3&gt;
&lt;p&gt;Myers connects this ancient story to the present, framing Bitcoin as the pinnacle of our species’ quest for scarcity. For 142,000 years, humans have sought scarcer forms of money, from shells to gold. Bitcoin, with its fixed 21 million coin supply, achieves “absolute scarcity,” addressing gold’s practical flaws. This aligns with our hardwired drive to value rarity, explaining the passion of Bitcoin advocates.&lt;/p&gt;
&lt;p&gt;Myers calls this a “once-in-a-species” moment, a historic monetary shift we’re witnessing just 16 years into Bitcoin’s existence. It’s the fulfillment of a 300,000-year pursuit of perfect scarcity.&lt;/p&gt;
&lt;h3 id=&quot;reflections&quot;&gt;Reflections&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Once-in-a-Species&lt;/em&gt; masterfully weaves anthropology, neuroscience, and economics to redefine what makes us human. Our genetic predisposition to value scarcity sparked money, civilization, and now Bitcoin. While some may question Bitcoin’s inevitability, Myers’ narrative offers a compelling lens on our past and future. In a digital age, this story highlights how our ancient impulses—whether for shells or satoshis—continue to shape our world.&lt;/p&gt;</content:encoded></item><item><title>Create a local WordPress environment with  Lando</title><link>https://blog.jamestsetsekas.com/posts/create-a-local-wordpress-environment-with-lando/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/create-a-local-wordpress-environment-with-lando/</guid><description>Create a local WordPress environment with  Lando.</description><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;create-a-local-wordpress-environment-with-lando&quot;&gt;Create a local WordPress environment with Lando&lt;/h1&gt;
&lt;p&gt;May 5, 2024&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Local development environments are as unique as the developers that work on them. But that’s not exactly right. Local development environments should be as unique as each group of developers that work on them. Every developer on a team should be spinning up the same environment in the same way.&lt;/p&gt;
&lt;p&gt;I’ve been using Local as my local development environment for WordPress for the last few years. It worked well until my team started to grow. Now it has become hard get someone up and running quickly. There were too many things to install and everyone had to manage their own installation.&lt;/p&gt;
&lt;p&gt;So after a couple weeks of exploring, I landed on &lt;a href=&quot;https://lando.dev/&quot;&gt;Lando&lt;/a&gt;. A huge shout out to the fine folks at &lt;a href=&quot;https://rareview.com/&quot;&gt;Rareview&lt;/a&gt; for introducing me to this great tool. We build on the shoulders of giants so it’s always good to celebrate those you learn from.&lt;/p&gt;
&lt;p&gt;Here’s what we will be setting up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A WordPress environment with:
&lt;ul&gt;
&lt;li&gt;PHP 8.2&lt;/li&gt;
&lt;li&gt;MySQL database&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Running on Nginx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Composer to manage plugins and themes&lt;/li&gt;
&lt;li&gt;WP-CLI&lt;/li&gt;
&lt;li&gt;Mailhog for testing emails&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alrighty, lets get started.&lt;/p&gt;
&lt;h2 id=&quot;install-docker-and-lando&quot;&gt;Install Docker and Lando&lt;/h2&gt;
&lt;p&gt;Lando is an abstraction layer on top of Docker. So you need to install Docker. Luckily the &lt;a href=&quot;https://docs.docker.com/get-docker/&quot;&gt;Docker&lt;/a&gt; and &lt;a href=&quot;https://docs.lando.dev/getting-started/&quot;&gt;Lando&lt;/a&gt; documentation is pretty good. Follow them to get everything installed and then come back to this post once you’re done.&lt;/p&gt;
&lt;h2 id=&quot;get-the-wordpress-environment-set-up&quot;&gt;Get the WordPress environment set up&lt;/h2&gt;
&lt;p&gt;With everything installed we can now move on.&lt;/p&gt;
&lt;p&gt;Lando works on the concept of a &lt;code&gt;lando.yml&lt;/code&gt; file. This file contains all of the configuration for our environment. Lando also has this concept of recipes. Recipes are a combination of services and tooling that you can set for the environment. And Lando has one for WordPress.&lt;/p&gt;
&lt;p&gt;The WordPress recipe is great, it comes with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Your choice of webserver (Apache or Nginx)&lt;/li&gt;
&lt;li&gt;Your choice of database (mariadb, mysql, postgres)&lt;/li&gt;
&lt;li&gt;Composer&lt;/li&gt;
&lt;li&gt;WP-CLI&lt;/li&gt;
&lt;li&gt;xDebug&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, create a &lt;code&gt;lando.yml&lt;/code&gt; file in the root of your project and add the following&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: my-wp-starter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;recipe: wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;config:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  php: 8.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  composer_version: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  webroot: .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  database: mysql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  cache: redis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ssl: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  via: nginx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  xdebug: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lets break this down.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;name&lt;/code&gt; is the name of the project.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;recipe&lt;/code&gt; is the recipe we want to use&lt;/p&gt;
&lt;p&gt;&lt;code&gt;config&lt;/code&gt; is where you can define settings for your specific setup. In our setup, we are doing a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;php is set to use version 8.2&lt;/li&gt;
&lt;li&gt;Composer version is set to 2&lt;/li&gt;
&lt;li&gt;webroot is set to the root of the project, this is where WordPress should be (should be not is, we’ll get to that later) installed&lt;/li&gt;
&lt;li&gt;The database is set to use mysql with Redis as the object cache&lt;/li&gt;
&lt;li&gt;SSL is false as we don’t have a cert to use in this setup&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;via&lt;/code&gt; key tells Lando what web server to use when serving the website, in our case it’s nginx&lt;/li&gt;
&lt;li&gt;xdebug is on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From here you can run &lt;code&gt;lando start&lt;/code&gt; in your terminal and Lando will work with Docker to set up the environment. But this only sets up the environment, you still need to install WordPress.&lt;/p&gt;
&lt;p&gt;Instead of manually downloading WordPress and installing it ourselves, we will automate this using some bash scripts and Lando’s build steps feature.&lt;/p&gt;
&lt;h3 id=&quot;automate-installing-wordpress&quot;&gt;Automate installing WordPress&lt;/h3&gt;
&lt;p&gt;Lando gives us something called build steps. Build steps are things that happen when you build a Lando environment for the first time. There are different build steps for different points in time.&lt;/p&gt;
&lt;p&gt;The cool thing here is that you can use build steps to run bash scripts. So let’s do this to automate downloading and installing WordPress.&lt;/p&gt;
&lt;p&gt;Add the following to the lando.yml file&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;services:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  appserver:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    build:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - cp wp-config-local.php wp-config.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    run:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - .lando/run.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your lando.yml file should now look like this&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: my-wp-starter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;recipe: wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;config:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  php: 8.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  composer_version: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  webroot: .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  database: mysql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  cache: redis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ssl: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  via: nginx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  xdebug: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;services:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  appserver:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    build:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - cp wp-config-local.php wp-config.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    run:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - .lando/run.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Lets unpack what’s going on here.&lt;/p&gt;
&lt;p&gt;Lando works off the concept of services, an environment built on Lando might have one service for the app, one service for the server and one service for the database. We can run &lt;code&gt;lando info&lt;/code&gt; to see the services in use and what their names are.&lt;/p&gt;
&lt;p&gt;The service that runs WordPress is named appserver. So we configure a few things to happen at the build step and the run step.&lt;/p&gt;
&lt;p&gt;The build step happens before the environment is run. The script we added will copy ‘wp-config-local.php’ to ‘wp-config.php’. We haven’t set that up yet so lets do it now. Create a local wp-config-local.php file and add the following to it:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;?php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * The base configuration for WordPress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * The wp-config.php creation script uses this file during the installation.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * You don&apos;t have to use the website, you can copy this file to &quot;wp-config.php&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * and fill in the values.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * This file contains the following configurations:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * * Database settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * * Secret keys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * * Database table prefix&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * * ABSPATH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * @link &amp;#x3C;https://wordpress.org/documentation/article/editing-wp-config-php/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * @package WordPress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// ** Database settings - You can get this info from your web host ** //&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/** This will ensure these are only loaded on Lando  */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if (getenv(&apos;LANDO&apos;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	/** The name of the database for WordPress */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	define(&apos;DB_NAME&apos;, &apos;wordpress&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	/** MySQL database username */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	define(&apos;DB_USER&apos;, &apos;wordpress&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	/** MySQL database password */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	define(&apos;DB_PASSWORD&apos;, &apos;wordpress&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	/** MySQL hostname */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	define(&apos;DB_HOST&apos;, &apos;database&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	/** URL routing (Optional, may not be necessary) */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	// define(&apos;WP_HOME&apos;,&apos;&amp;#x3C;http://mysite.lndo.site&gt;&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	// define(&apos;WP_SITEURL&apos;,&apos;&amp;#x3C;http://mysite.lndo.site&gt;&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/** Database charset to use in creating database tables. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;DB_CHARSET&apos;, &apos;utf8&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/** The database collate type. Don&apos;t change this if in doubt. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;DB_COLLATE&apos;, &apos;&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/**#@+&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * Authentication unique keys and salts.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * Change these to different unique phrases! You can generate these using&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * the {@link &amp;#x3C;https://api.wordpress.org/secret-key/1.1/salt/&gt; WordPress.org secret-key service}.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * You can change these at any point in time to invalidate all existing cookies.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * This will force all users to have to log in again.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * @since 2.6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;AUTH_KEY&apos;,         &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;SECURE_AUTH_KEY&apos;,  &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;LOGGED_IN_KEY&apos;,    &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;NONCE_KEY&apos;,        &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;AUTH_SALT&apos;,        &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;SECURE_AUTH_SALT&apos;, &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;LOGGED_IN_SALT&apos;,   &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;NONCE_SALT&apos;,       &apos;put your unique phrase here&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/**#@-*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * WordPress database table prefix.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * You can have multiple installations in one database if you give each&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * a unique prefix. Only numbers, letters, and underscores please!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$table_prefix = &apos;wp_&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * For developers: WordPress debugging mode.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * Change this to true to enable the display of notices during development.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * It is strongly recommended that plugin and theme developers use WP_DEBUG&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * in their development environments.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * For information on other constants that can be used for debugging,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * visit the documentation.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; * @link &amp;#x3C;https://wordpress.org/documentation/article/debugging-in-wordpress/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;define(&apos;WP_DEBUG&apos;, false);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* Add any custom values between this line and the &quot;stop editing&quot; line. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/* That&apos;s all, stop editing! Happy publishing. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/** Absolute path to the WordPress directory. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if (!defined(&apos;ABSPATH&apos;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	define(&apos;ABSPATH&apos;, __DIR__ . &apos;/&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/** Sets up WordPress vars and included files. */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;require_once ABSPATH . &apos;wp-settings.php&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The code above is pretty much the default base wp-config.php file but we’ve added the Lando defaults for the database details. This will save us having to enter the database details later.&lt;/p&gt;
&lt;p&gt;Next is the &lt;code&gt;run&lt;/code&gt; step, This step happens after the environment is built and is running. This is when we want install WordPress.&lt;/p&gt;
&lt;p&gt;We will do this using a bash script named run.sh that’s saved in a .lando directory. We put this in it’s own file because we need to write some if statements in our script, which isn’t supported in YAML.&lt;/p&gt;
&lt;p&gt;Create a new directory called .lando, we’ll use this directory to store all Lando related files from now on.&lt;/p&gt;
&lt;p&gt;Now create a file called run.sh and put the following in it.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if [ ! -d &quot;./wp-admin&quot; ]; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core download&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if ! $(wp core is-installed); then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core install --url=&quot;http://$LANDO_APP_NAME.lndo.site&quot; --title=&quot;WP Starter&quot; --admin_user=&quot;admin&quot; --admin_password=&quot;password&quot; --admin_email=&quot;admin@$LANDO_APP_NAME.lndo.site&quot; --skip-email&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We are doing two things here using the WP-CLI that’s included in our environment.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We are checking if wp-admin exists, if it does then there is a good chance WordPress is already downloaded so we don’t need to download it again.&lt;/li&gt;
&lt;li&gt;We are checking if WordPress is installed, if not then we install it with some defaults.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--url&lt;/code&gt; is the site url, we are using a default Lando environment variable here (&lt;code&gt;$LANDO_APP_NAME&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--title&lt;/code&gt; is the site title&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--admin_user&lt;/code&gt; and &lt;code&gt;--admin_password&lt;/code&gt; is the admin username and password, make these something more secure than what I’ve used please.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--admin_email&lt;/code&gt; sets the admin email and the &lt;code&gt;--skip-email&lt;/code&gt; flag stops WordPress from sending out a notification to the admin user.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is also where copying the wp-config.php file is helpful, because we’ve done that we don’t need to worry about the database connection.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;**WP-CLI**&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The WP-CLI is an amazing tool that can help you automate management of your sites. I highly recommend checking out the &lt;a href=&quot;https://make.wordpress.org/cli/handbook/&quot;&gt;documentation&lt;/a&gt; and playing around with it if you haven’t already.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you happened to have run &lt;code&gt;lando start&lt;/code&gt; before, the build step won’t run again. Instead we can run &lt;code&gt;lando rebuild&lt;/code&gt; to rebuild the environment, rebuilding the environment will trigger the build. &lt;code&gt;lando rebuild&lt;/code&gt; will also start the environment up as well.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;**lando destroy**&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can also run &lt;code&gt;lando destroy&lt;/code&gt; to remove the containers and volumes, essentially blowing away the full installation, then &lt;code&gt;lando start&lt;/code&gt; will start from scratch&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We should get an output in the terminal that looks like this.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A terminal window showing results of running lando rebuild in the terminal. It reads &amp;#x27;Name: my-wp-starter, Location: saved location of the project, Services: appserver_nginx, appserver, database, URLS: Appserver nginx urls: https://localhost:59622 [301], http://localhost:59622 [301],\nhttp://my-wp-starter.lndo.site/ [200],\nhttps://my-wp-starter.lndo.site/ [200]&quot; width=&quot;575&quot; height=&quot;228&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image.BMxPuraZ_Z2he3Ov.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Open up one of the urls that end in ‘.lndo.site/’ and you should see you’re WordPress site.&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;1024&quot; height=&quot;895&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-1-1024x895.D0EVI02l_m0xz.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;You can now commit this to a repo and send it to everyone that needs a WordPress environment spun up.&lt;/p&gt;
&lt;p&gt;But we’re not stopping here, we’re going to make it extra nice by adding a few more features.&lt;/p&gt;
&lt;h2 id=&quot;proxying-to-a-proper-local-environment&quot;&gt;Proxying to a ‘proper’ local environment&lt;/h2&gt;
&lt;p&gt;You might’ve noticed the url we got is ends in lndo.site, this is because Lando &lt;a href=&quot;https://docs.lando.dev/core/v3/proxy.html&quot;&gt;reverse proxies&lt;/a&gt; localhost to a *.lndo.site domain. But this means we need to use *.lndo.site domains for our local development. It also means we need to online in order to build.&lt;/p&gt;
&lt;p&gt;We will be changing the url to use our own custom domain, this also means we are not reliant on Lando’s DNS so we can work offline.&lt;/p&gt;
&lt;p&gt;To do this we will change our configuration in .lando.yml and add the custom domain to our hosts file.&lt;/p&gt;
&lt;h3 id=&quot;set-up-the-proxy&quot;&gt;Set up the proxy&lt;/h3&gt;
&lt;p&gt;Lando lets us set up proxies ourselves. We will proxy our Nginx service to resolve to our custom domain, which will be wp-starter.local.&lt;/p&gt;
&lt;p&gt;Add the following to the .lando.yml file&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;proxy:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  appserver_nginx:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - wp-starter.local&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The .lando.yml file should look like this&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;name: my-wp-starter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;recipe: wordpress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;config:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  php: 8.2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  composer_version: 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  webroot: .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  database: mysql&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  cache: redis&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ssl: false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  via: nginx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  xdebug: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;services:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  appserver:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    build:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - cp wp-config-local.php wp-config.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    run:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - .lando/run.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;proxy:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  appserver_nginx:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - wp-starter.local&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;modify-hosts-file&quot;&gt;Modify hosts file.&lt;/h3&gt;
&lt;p&gt;Now we’ll modify our hosts file to point 127.0.0.1 (localhost) to wp-starter.local. This will be different based on your OS, so I suggest looking up some instructions based on your OS.&lt;/p&gt;
&lt;p&gt;Here’s what it looks like on my Windows machine.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;127.0.0.1 wp-starter.local&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, because we will be rebuilding this from scratch, we’ll need to change the run.sh script to install WordPress with our new domain.&lt;/p&gt;
&lt;h3 id=&quot;modify-the-runsh-script&quot;&gt;Modify the run.sh script&lt;/h3&gt;
&lt;p&gt;Change the run.sh script we created earlier, from this:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if [ ! -d &quot;./wp-admin&quot; ]; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core download&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if ! $(wp core is-installed); then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core install --url=&quot;http://$LANDO_APP_NAME.lndo.site&quot; --title=&quot;WP Starter&quot; --admin_user=&quot;admin&quot; --admin_password=&quot;password&quot; --admin_email=&quot;admin@$LANDO_APP_NAME.lndo.site&quot; --skip-email&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To this:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if [ ! -d &quot;./wp-admin&quot; ]; then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core download&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if ! $(wp core is-installed); then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	wp core install --url=&quot;http://wp-starter.local&quot; --title=&quot;WP Starter&quot; --admin_user=&quot;admin&quot; --admin_password=&quot;password&quot; --admin_email=&quot;admin@wp-starter.local&quot; --skip-email&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;fi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With all of that done, we will blow away everything and start fresh. Run &lt;code&gt;lando destroy --volumes&lt;/code&gt;. This will destroy the Docker containers and volumes, removing all data.&lt;/p&gt;
&lt;p&gt;Then delete all of the files created during the WordPress installation. Your file structure should look like this:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.lando&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  - run.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.lando.yml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wp-config-local.php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now run &lt;code&gt;lando start&lt;/code&gt; and wait for the environment to spin up. You should see the new domain appear in the final output.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;A terminal window showing results of running lando rebuild in the terminal. It reads &amp;#x27;Name: my-wp-starter, Location: saved location of the project, Services: appserver_nginx, appserver, database, URLS: Appserver nginx urls: https://localhost:59665 [301], http://localhost:59666 [301],\nhttp://wp-starter.local/ [200],\nhttps://wp-starter.local/ [200]&quot; width=&quot;427&quot; height=&quot;175&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-2.CuSy_cym_23zwpD.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Click on that url and you should see your site running on the domain of your choice.&lt;/p&gt;
&lt;h2 id=&quot;manage-plugins-and-themes-with-composer&quot;&gt;Manage plugins and themes with Composer&lt;/h2&gt;
&lt;p&gt;OK, so we’ve set up Lando to spin up a WordPress environment for us with some nice defaults, downloading and installing WordPress along the way. We then set it up to proxy a custom domain locally.&lt;/p&gt;
&lt;p&gt;Take a break at this point, you’ve made some huge progress. Go get some coffee or do some jumping jacks 🙂&lt;/p&gt;
&lt;p&gt;Once you’re done with your break, lets talk about managing plugins.&lt;/p&gt;
&lt;p&gt;With our current setup, we can start building our site and installing plugins and themes all we want. But checking in every single theme and plugin we use for our site can make the project pretty big and we probably want to leave all of that ourside of our git repo.&lt;/p&gt;
&lt;p&gt;What we can do instead is manage our plugins using Composer, a package manager built for PHP.&lt;/p&gt;
&lt;p&gt;Head to the &lt;a href=&quot;https://getcomposer.org/&quot;&gt;Composer&lt;/a&gt; website and download and install Composer, then come back and continue the tutorial.&lt;/p&gt;
&lt;h3 id=&quot;composer-and-wpackagist-for-wordpress&quot;&gt;Composer and WPackagist for WordPress&lt;/h3&gt;
&lt;p&gt;WordPress doesn’t have the best reputation for managing plugins and themes from a developer experience point of view, a lot of the times you manually install them and you check everything into version control. Or you manage them outside of version control and reinstall them everytime a new environment is set up.&lt;/p&gt;
&lt;p&gt;WPackagist is a Composer repository that aims to solve this by mirroring the WordPress plugin and theme repositories.&lt;/p&gt;
&lt;p&gt;This lets us install themes and plugins just we would for a php or npm package. The main advantage is that it puts this configuration into code, reducing clutter in our codebase while still making it easy to get multiple developers set up with the same plugins and themes.&lt;/p&gt;
&lt;h3 id=&quot;create-the-composerjson-file&quot;&gt;Create the composer.json file&lt;/h3&gt;
&lt;p&gt;For our starter we will install two plugins, Debug bar and Query monitor. And also the GeneratePress theme using Composer.&lt;/p&gt;
&lt;p&gt;The first thign to do is to create a composer.json file in the root of our project. Do that and add the following to it.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;name&quot;: &quot;ptd/wp-starter&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;description&quot;: &quot;My WP Starter&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;repositories&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            &quot;type&quot;: &quot;composer&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;            &quot;url&quot;: &quot;https://wpackagist.org&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &quot;require&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        &quot;wpackagist-plugin/debug-bar&quot;: &quot;1.1.4&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        &quot;wpackagist-plugin/query-monitor&quot;: &quot;dev-trunk&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        &quot;wpackagist-theme/generatepress&quot;: &quot;*&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now if you were to run &lt;code&gt;composer install&lt;/code&gt;, Composer will to go to &lt;a href=&quot;http://wpackagist.org&quot;&gt;wpackagist.org&lt;/a&gt; and pull down the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version 1.1.4 of the debug bar plugin&lt;/li&gt;
&lt;li&gt;The latest version of the query monitor plugin&lt;/li&gt;
&lt;li&gt;The latest version of the GeneratePress theme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Composer will also save them in the correct locations automatically.&lt;/p&gt;
&lt;h3 id=&quot;automating-with-events&quot;&gt;Automating with events&lt;/h3&gt;
&lt;p&gt;To automate this we can use events. Events in Lando are just like build steps, except they run every time the environment starts up. We want to do it here because the Composer.json file might change during development so we want to update it every time. If nothing has change then Composer is smart enough to not do anything.&lt;/p&gt;
&lt;p&gt;We do this in pretty much the same way as before, using a bash script.&lt;/p&gt;
&lt;p&gt;First, add the following code to your lando.yml file:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;events:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pre-start:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - appserver: .lando/pre-start.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will run the script found at .lando/pre-start.sh before our WordPress service (appserver) starts. We haven’t created this script yet so let’s do that now. Create the script inside the .lando folder and add this to it:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;composer update&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;composer install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it. All we had to add was the composer commands we want to run every time the environment starts up. We run update first to update the composer.lock file in case something had changed since the last time we ran composer install. We’ll get an error if we haven’t done this. Then we run &lt;code&gt;composer install&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now if you run &lt;code&gt;lando start&lt;/code&gt;, the script will run and download the plugins and themes for you.&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;706&quot; height=&quot;670&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-4.BVxaEXxQ_1MhBfP.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;1024&quot; height=&quot;562&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-3-1024x562.wZKYzrXj_19kXq4.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;There is one little inconvenience though, Composer will only download and install the plugin for you, it won’t actually activate it.&lt;/p&gt;
&lt;p&gt;We can automate this too by targeting a different event.&lt;/p&gt;
&lt;p&gt;Add the following to the lando.yml under the events section of the file.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  post-start:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - appserver: .lando/post-start.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It should look like this&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;events:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  pre-start:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - appserver: .lando/pre-start.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  post-start:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    - appserver: .lando/post-start.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will run the script found at .lando/post-start.sh after our WordPress service (appserver) starts. We run this after because we need WordPress up and running before activating any plugins.&lt;/p&gt;
&lt;p&gt;Lets also create our post-start.sh script and add the following to it.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Activate all other plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wp plugin activate --all&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;wp theme activate generatepress&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will use WP-CLI to activate all installed plugins and the GeneratePress theme.&lt;/p&gt;
&lt;p&gt;Now whenever you start your environment, Lando will automatically install all plugins and themes in composer.json and activate them via the wp-cli. Saving you a couple of small but annoying steps. Yay for automation!&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;1024&quot; height=&quot;756&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-5-1024x756.DW-Ll8vD_ZEk7Sv.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;We’re very close now to finishing the environment but there is one more tool that I think is crucial for developing websites, and that’s Mailhog.&lt;/p&gt;
&lt;h2 id=&quot;adding-mailhog&quot;&gt;Adding Mailhog&lt;/h2&gt;
&lt;p&gt;Mailhog is an awesome tool you can use to trap any emails being sent by the website. This means you can use it to test outgoing emails without worrying about accidentally sending a bunch of emails to everyone in the world.&lt;/p&gt;
&lt;p&gt;The first thing we need to do is add the service to our config. Add the following under the services key in the .lando.yml file&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  mailhog:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    type: mailhog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    portforward: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    hogfrom:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      - appserver&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let’s break this down.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We are creating a new service called ‘mailhog’.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt; is set to Mailhog because we are using the Mailhog service&lt;/li&gt;
&lt;li&gt;&lt;code&gt;portforward&lt;/code&gt; is set to true so we can access it externally in the browser.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hogfrom&lt;/code&gt; is set to the WordPress service (appserver) so it will capture emails from that service.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is all we need to do for the .lando.yml file. The next thing we need to do is to create little plugin to tell WordPress to send emails through to our Mailhog service.&lt;/p&gt;
&lt;h3 id=&quot;getting-mailhogs-internal-connection-information&quot;&gt;Getting Mailhogs internal connection information&lt;/h3&gt;
&lt;p&gt;We can use lando info to get the internal connection information for Mailhog. Find the internal_connection property and note down the host and port. We will use these in our code snippet.&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;446&quot; height=&quot;136&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/Mailhog-Lando-Info.rNTQ3IB5_16Q8wO.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once you have that, create a new must use plugin and add the following code to it.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;?php&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Plugin Name: WP Starter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Description: A little utility plugin for the Lando development environment post. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Version: 1.0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;function wpStarter_forceEmailToMailhog($phpmailer)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    if (getenv(&apos;LANDO&apos;)) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;IsSMTP();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;Host = &apos;mailhog&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;Port = 1025;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;Username = &apos;&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;Password = &apos;&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        $phpmailer-&gt;SMTPAuth = true;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;add_action(&apos;phpmailer_init&apos;, &apos;wpStarter_forceEmailToMailhog&apos;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The plugin hooks into the ‘phpmailer_init’ hook and changes where the WordPress phpmailer is sending outgoing email to. We also check if the &lt;code&gt;LANDO&lt;/code&gt; environment varaible exists as a safeguard because we don’t this to run in production.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$phpmailer→Host&lt;/code&gt; should be the host you noted.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$phpmailer→Post&lt;/code&gt; should be the port you noted.&lt;/p&gt;
&lt;p&gt;Run &lt;code&gt;lando start&lt;/code&gt; and Lando should install and set up the new Mailhog service. Once that’s all done, you should get a new url you can go to and see MailHog running.&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;456&quot; height=&quot;209&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-6.Cqk_dmia_Z1puqqv.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;To test the service, create a new user in WordPress and you should see the confirmation email appear in MailHog.&lt;/p&gt;
&lt;p&gt;&lt;img =&quot;&quot; width=&quot;1024&quot; height=&quot;333&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.jamestsetsekas.com/assets/image-7-1024x333.CbzPzRvF_2bKsMK.webp&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;and-were-done&quot;&gt;And we’re done!&lt;/h2&gt;
&lt;p&gt;That’s it, you should now have a nice WordPress dev environment that’s quick to get running, is repeatable and easy to share. I highly recommend exploring the Lando documentation and customising this further to really make it work for you.&lt;/p&gt;
&lt;p&gt;The full code for this can also be found on &lt;a href=&quot;https://github.com/JamesTsetsekas/lando-wp-starter-example&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Migrate Umbrel os from raspberry pi to x86</title><link>https://blog.jamestsetsekas.com/posts/migrate-umbrelos-from-raspberry-pi-to-x86/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/migrate-umbrelos-from-raspberry-pi-to-x86/</guid><description>A step-by-step guide on migrating UmbrelOS from a Raspberry Pi to an x86 PC, ensuring data preservation and minimal downtime.</description><pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I was running UmbrelOS on Raspberry Pi, with an external 1TB SSD disk. The machine is obviously underpowered and started to show weakness. So I decided to migrate to a Dell mini-PC, Wyse 5070.&lt;/p&gt;
&lt;p&gt;I need to re-use the same SSD disk because the Wyse 5070 doesn’t have enough storage by itself (500GB). Ideally, I can keep all the blockchain data and setup, so that I don’t have to re-sync everything and re-setup everything.&lt;/p&gt;
&lt;p&gt;While this may sound like a common question, I did not find many answers on the internet. The closest one is &lt;a href=&quot;https://community.umbrel.com/t/transfer-node-from-pi-to-ubuntu-linux-desktop-re-using-the-external-ssd/15179/2&quot;&gt;this one&lt;/a&gt;. However, UmbrelOS is currently at v1.x. A lot of it doesn’t apply anymore.&lt;/p&gt;
&lt;p&gt;Below is how I did it.&lt;/p&gt;
&lt;h3 id=&quot;prepare-ssd-disk&quot;&gt;Prepare SSD disk&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Upgrade Raspberry Pi to the latest UmbrelOS v1.3.&lt;/li&gt;
&lt;li&gt;Shut it down via Umbrel Settings and unplug SSD disk.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;prepare-pc&quot;&gt;Prepare PC&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Follow the instruction to install UmbrelOS on PC. You can find the detailed steps &lt;a href=&quot;https://github.com/getumbrel/umbrel/wiki/Install-umbrelOS-on-x86-Systems&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Don’t install any apps.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;migrate-ssd-disk-over&quot;&gt;Migrate SSD disk over&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Plug SSD disk into PC. Permanently mount it at &lt;code&gt;/mnt/umbrel-ssd&lt;/code&gt;.
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; blkid&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#6A737D&quot;&gt;  # Find the UUID of the SSD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; nano&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /etc/fstab&lt;/span&gt;&lt;span style=&quot;color:#6A737D;--shiki-dark:#6A737D&quot;&gt;  # Edit fstab to add the mount entry&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
Add the following line to &lt;code&gt;/etc/fstab&lt;/code&gt; (replace &lt;code&gt;UUID=e9ae3217-6a06-4721-b725-78e6524b4272&lt;/code&gt; with the actual UUID of your SSD from blkid command):
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;UUID&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;e9ae3217-6a06-4721-b725-78e6524b4272&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; /mnt/umbrel-ssd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ext4&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; defaults&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
Then, mount the SSD:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; mount&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Run the following commands:
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /home/umbrel&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mv&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel.bak&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;ln&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; /mnt/umbrel-ssd/umbrel&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; start&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; umbrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It will take a long time to re-start Umbrel since it will fetch various containers, etc. But it will use the same blockchain and other app-specific settings you had before on the SSD disk. After a couple of coffee breaks, you will be all set!&lt;/p&gt;</content:encoded></item><item><title>About Me</title><link>https://blog.jamestsetsekas.com/posts/about-james-tsetsekas/</link><guid isPermaLink="true">https://blog.jamestsetsekas.com/posts/about-james-tsetsekas/</guid><description>James Tsetsekas, a Full Stack Web Developer specializing in building applications using Node.Js, PHP, and Python.</description><pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;👋 Hey,&lt;/p&gt;
&lt;p&gt;I’m James Tsetsekas&lt;/p&gt;
&lt;p&gt;I’m a Full Stack Web Developer specializing in building web applications using PHP, Node.Js. I have extensive experience with front-end development libraries like React, Vue, and Angular, as well as algorithms, data structures, back-end development, and APIs with Node.js. I am passionate about working with teams that value quality and clean code principles. In my free time, I teach and mentor hundreds of students through coding communities and meetups.&lt;/p&gt;
&lt;h2 id=&quot;about-me&quot;&gt;About Me&lt;/h2&gt;
&lt;p&gt;I’m a Full Stack Web Developer with a strong background in object-oriented programming, specializing in building applications using Node.Js, PHP, and Python. I have extensive experience with front-end development libraries like React, Vue, and Angular, as well as algorithms, data structures, back-end development, and APIs. I completed Scrimba’s Frontend Developer Bootcamp and Free Code Camp’s Front End Development Libraries, Back End Development, APIs, and JavaScript Algorithms and Data Structures courses. I am passionate about working with teams that value quality and clean code principles. In my free time, I teach and mentor hundreds of students through coding communities and meetups.&lt;/p&gt;
&lt;p&gt;I have experience in development, leadership, and management. I started my career at KPMG as an IT Engineer, then moved on to become a System Administrator at Novartis, the largest pharmaceutical company in the world. Following that, I worked as a Software Engineer at Realogy, the world’s largest franchisor of residential real estate brokerages, where I developed LeadRouter, a web-based real-estate listing sales lead tool. At Realogy, I provided leadership as a subject matter expert on best practices and developed an intranet for technical documentation of development tools and APIs. I was the Lead Developer at a large construction and real estate development company, where I developed highly dynamic websites and applications for residential and commercial properties using HTML, CSS, Bootstrap, JavaScript, PHP, WordPress, Angular, custom WordPress PHP plugins, and contact forms. I then worked for an IT Managed Service Provider as a Full Stack Web Developer, developing responsive single-page web applications and dashboards for mobile and desktop, APIs, system integrations, and browser extensions to optimize CRM workflows using JavaScript, Express.js, Node.js, Axios, React, CSS, Bootstrap, and Chakra.&lt;/p&gt;
&lt;p&gt;Currently, I am a Full Stack Web Developer at OLM Foods, where I work on RightBytes, an e-commerce online food ordering platform that includes functionality for consumers, store admin, kiosks, thermal printing, and digital signage solutions for web, iOS, and Android applications. Mobile apps leverage both PHP and Node backend APIs, with Stripe and PayPal integrations for payments, and DoorDash integration or self-managed solutions for deliveries. I also develop our WordPress WooCommerce B2B e-commerce portal, used by thousands of users to order and manage products to sell in their stores, generate sales and traffic reporting, and predictive analytics to maximize sales and minimize waste, with custom PHP, cron jobs, WordPress plugins, themes, SAP, and single sign-on integrations.&lt;/p&gt;
&lt;p&gt;When I’m not working, I focus on my hobbies, which include Bitcoin, the Lightning Network, attending and organizing coding and IT meetups, conferences and seminars, real estate, finance, travel, skiing, dogs, building computers and servers, self-hosting websites and media servers, and reading. One of my favorite books at the moment is ‘The Pragmatic Programmer’ by Andy Hunt and Dave Thomas.&lt;/p&gt;
&lt;h2 id=&quot;what-i-do&quot;&gt;What I Do&lt;/h2&gt;
&lt;h3 id=&quot;full-stack-web-developer&quot;&gt;Full Stack Web Developer&lt;/h3&gt;
&lt;p&gt;I create responsive websites using HTML5, CSS, JavaScript, and the MERN (MongoDB, Express.js, React, Node.js) and LAMP (Linux, Apache, MySQL, PHP) tech stacks. Additionally, I enjoy working with Sanity, WordPress, CakePHP, Laravel, Symfony, Angular, Vue.js, Bootstrap, Chakra UI, and Tailwind CSS.&lt;/p&gt;
&lt;h3 id=&quot;bitcoin-enthusiast&quot;&gt;Bitcoin Enthusiast&lt;/h3&gt;
&lt;p&gt;I am passionate about learning and teaching others about Bitcoin. I contribute to many open-source Bitcoin-related projects and organize and attend Bitcoin meetups and conferences. I am a Bitcoin ⚡Lightning Network⚡ Node Operator. Contact me to open a channel, get help with your node, or learn more about the Lightning Network.&lt;/p&gt;
&lt;h3 id=&quot;teacher--mentor&quot;&gt;Teacher &amp;#x26; Mentor&lt;/h3&gt;
&lt;p&gt;I teach, mentor, and provide code reviews for hundreds of students through coding course communities and meetups.&lt;/p&gt;
&lt;h2 id=&quot;skills--certifications&quot;&gt;Skills &amp;#x26; Certifications&lt;/h2&gt;
&lt;h3 id=&quot;networking-basics&quot;&gt;Networking Basics&lt;/h3&gt;
&lt;p&gt;This 22 Hour course covers the foundation of networking and network devices, media, and protocols. You will observe data flowing through a network and configure devices to connect to networks. Finally, you will learn how to use different network applications and protocols to accomplish networking tasks.&lt;/p&gt;
&lt;h3 id=&quot;introduction-to-cybersecurity&quot;&gt;Introduction to Cybersecurity&lt;/h3&gt;
&lt;p&gt;This 6 Hour introductory course takes you inside the world of cybersecurity. You will learn cybersecurity basics to protect your personal digital life and gain insights into the biggest security challenges companies, governments, and educational institutions face today.&lt;/p&gt;
&lt;h3 id=&quot;scrimba-frontend-developer-bootcamp&quot;&gt;Scrimba Frontend Developer Bootcamp&lt;/h3&gt;
&lt;p&gt;Approximately 80+ hours of teacher-led group sessions and solo projects covering HTML, CSS, JavaScript, React, responsive design, UI design, Git, peer code review, and mentoring.&lt;/p&gt;
&lt;h2 id=&quot;projects&quot;&gt;Projects&lt;/h2&gt;
&lt;h3 id=&quot;diceln---lightning-network-dice-game&quot;&gt;DiceLN - Lightning Network Dice Game&lt;/h3&gt;
&lt;p&gt;A full-stack web app dice game that uses the Bitcoin Lightning Network for instant deposits and withdrawals. The game is provably fair and can be played with any amount of satoshis. It includes a chat feature and is built with Node.js, Express, Socket.IO, Axios, and LND, LNBits API. Contact me for a demonstration, to play, or to learn more about the Lightning Network! Currently closed source.&lt;/p&gt;
&lt;h3 id=&quot;rightbytes--dishpatch&quot;&gt;RightBytes / DishPatch&lt;/h3&gt;
&lt;p&gt;Lead developer on RightBytes, an e-commerce online food ordering platform that includes functionality for consumers, store admin, kiosks, thermal printing, and digital signage solutions for web, iOS, and Android applications. Mobile apps leverage both PHP and Node backend APIs, with Stripe and PayPal integrations for payments, and DoorDash integration or self-managed solutions for deliveries.&lt;/p&gt;
&lt;h3 id=&quot;jersey-city-bitcoin&quot;&gt;Jersey City Bitcoin&lt;/h3&gt;
&lt;p&gt;Founder of the Jersey City Bitcoin Meetup, a decentralized community for those interested in discussing and learning more about Bitcoin in the Jersey City, New Jersey / New York area. All are welcome, whether well-versed or new. I created a blog for members to see upcoming events and contribute thoughtful discussions with the community.&lt;/p&gt;
&lt;h2 id=&quot;get-in-touch&quot;&gt;Get in touch&lt;/h2&gt;
&lt;p&gt;Let’s schedule a meeting. Feel free to reach out directly by email at &lt;a href=&quot;mailto:James@JamesTsetsekas.com&quot;&gt;James@JamesTsetsekas.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>