<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.troysk.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.troysk.com/" rel="alternate" type="text/html" /><updated>2026-01-11T10:34:36+00:00</updated><id>https://blog.troysk.com/feed.xml</id><title type="html">troysk’s thoughts</title><subtitle>Experiments and thoughts of the monkey mind.</subtitle><entry><title type="html">The Deflation of Intelligence’s Bubble</title><link href="https://blog.troysk.com/2026/01/11/the-deflation-of-Intelligences-bubble.html" rel="alternate" type="text/html" title="The Deflation of Intelligence’s Bubble" /><published>2026-01-11T00:00:00+00:00</published><updated>2026-01-11T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/11/the-deflation-of-Intelligences-bubble</id><content type="html" xml:base="https://blog.troysk.com/2026/01/11/the-deflation-of-Intelligences-bubble.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/wTP2RUD_cL0?si=iSv18JsoUNT2fMWc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Something strange is happening in Silicon Valley. The most valuable companies in history are built on a technology that’s becoming free.</p>

<p>The big AI companies - OpenAI, Anthropic, Google - are valued at hundreds of billions because they have something nobody else has: massive language models that can write, think, and create. But here’s what’s keeping their investors awake at night: these models are becoming commodities at lightning speed.</p>

<p><strong>The Pattern That Changes Everything</strong></p>

<p>Just 12 months ago, OpenAI’s GPT-4 was miles ahead of anything else. Today? Free, open-source models are catching up. Not in years. In months. At a fraction of the cost.</p>

<p>This isn’t just another tech cycle. It’s a fundamental shift that’s played out before - with devastating consequences for the incumbents.</p>

<p><strong>The Steam Engine Lesson</strong></p>

<p>In 1769, James Watt patented his improved steam engine design. For the next 31 years, he and his partner Matthew Boulton had a monopoly. They charged enormous fees - equivalent to millions today - for anyone who wanted to use their superior technology.</p>

<p>Business boomed. They were the OpenAI of their era. Everyone needed their engines. They controlled the future.</p>

<p>Then 1800 arrived. The patents expired.</p>

<p>What happened next should terrify every AI investor.</p>

<p>Within months, competitors flooded the market. Richard Trevithick built high-pressure engines that were ten times more powerful than Watt’s designs. They were smaller, lighter, cheaper. The technology that Watt had kept locked away for decades suddenly became something anyone could build and improve.</p>

<p>The result? Steam engine adoption exploded. But Watt’s company? They had to pivot from being a technology company to just another manufacturer competing on price and service.</p>

<p><strong>The Infrastructure Play</strong></p>

<p>Here’s the part that should really worry proprietary AI companies: the winners weren’t other technology firms. They were infrastructure companies.</p>

<p>When steam engines became commoditized, the real money shifted to the companies that could build them cheaply and integrate them into existing systems. Railroad companies. Factory owners. Ship builders. They didn’t need to invest billions in R&amp;D. They just downloaded the technology - literally took the blueprints - and built businesses around it.</p>

<p>We’re seeing the same pattern with AI. When Meta released LLaMA as open source, they weren’t being generous. They were executing the most brilliant business strategy of the decade: make the technology free, then sell the infrastructure to run it.</p>

<p><strong>The Valuation Reality Check</strong></p>

<p>Proprietary AI companies are valued as if they’ll maintain their technological moat forever. But history shows us what happens when technology becomes commoditized:</p>

<p>The valuation doesn’t just drop. It crashes.</p>

<p>Watt’s company went from having a monopoly on the most important technology of the Industrial Revolution to being just another steam engine maker. Their premium disappeared. Their moat evaporated.</p>

<p>Today’s AI leaders face the same fate, but faster. Technology moves at light speed compared to the 1800s. What took decades then happens in months now.</p>

<p><strong>The New Winners</strong></p>

<p>While investors pour money into proprietary AI companies, the real winners are emerging elsewhere:</p>

<ul>
  <li>Cloud providers who’ll run these models at scale</li>
  <li>Companies that integrate AI into existing workflows</li>
  <li>Businesses that use AI to cut costs rather than sell AI as a product</li>
  <li>Infrastructure plays that benefit from AI becoming a utility</li>
</ul>

<p>The pattern is clear: when revolutionary technology becomes free, value shifts to those who can deploy it efficiently, not those who invented it.</p>

<p><strong>The Inevitable Math</strong></p>

<p>Every month, open-source models get closer to proprietary ones. Every month, the cost to train and run them drops. Every month, more companies realize they can download powerful AI for free instead of paying premium prices.</p>

<p>This isn’t a speculation. It’s simple arithmetic.</p>

<p>The companies valued at hundreds of billions today are building their castles on sand that’s rapidly turning into water. The question isn’t whether the valuation crash will happen. It’s how fast.</p>

<p>The steam engine transformed the world. But it didn’t transform Watt’s bank account the way he expected. The same fate awaits today’s AI giants.</p>

<p>The future belongs to those who understand that the real value isn’t in owning the technology. It’s in knowing what to do with it when everyone has it.</p>

<p>History doesn’t repeat itself, but it rhymes. And right now, the AI industry is singing the exact same tune that played out two centuries ago - just at 1000x speed.</p>

<p>The great AI valuation crash is coming. The only question is: will you be surprised when it arrives?</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Where have all the images gone?</title><link href="https://blog.troysk.com/2026/01/11/where-have-all-the-images-gone.html" rel="alternate" type="text/html" title="Where have all the images gone?" /><published>2026-01-11T00:00:00+00:00</published><updated>2026-01-11T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/11/where-have-all-the-images-gone</id><content type="html" xml:base="https://blog.troysk.com/2026/01/11/where-have-all-the-images-gone.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/bI3QVsW30j0?si=0SmsRtRMvS7L6Fib" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>I just noticed something weird! My last many posts have zero images. Not a screenshot, not a meme, not even a random cute image. The culprit isn’t a new minimalist aesthetic or a sudden allergy to color; it has to be the swap I made last year, from the visual, button-happy WYSIWYG editor to a blank Markdown file.
In the old tool, adding an image was a two-click party; tap the landscape icon, drag anything from the desktop, watch it bloom in the draft. The interface begged me to illustrate every thought. Markdown, meanwhile, greets me with a blinking cursor and a moral dilemma; do I break my writing flow, type <img src="URL" alt="alt" />, hunt for a royalty-free file 😬, resize it, upload it, paste the link or just keep typing?</p>

<p><strong>Guess which one wins every time?</strong></p>

<p>I used to believe that behavior was 100% internal; my habit, my discipline. Turns out it’s 50% me and 50% the shape of the doorway I walk through 🤪. Give me a wide, well-lit entrance and I’ll cart in flowers, rugs, and wall art. Hand me a narrow service hatch and I’ll squeeze through with nothing but the manuscript clenched in my teeth. So this isn’t a post about “images bad, words good.” We blame our tools for misuse but maybe they are often designed to elicit one behavior or another. Switch the tool, switch the habit, sometimes before you even notice. I miss the WYIWYG canvas. Until I find a Markdown workflow that feels as friction-free as drag-and-drop, my posts will probably stay plain. And that’s okay; the words are still here. The environment is quietly coaching me every keystroke of the way.</p>

<p><strong>UX isn’t just what we see; it’s what we end up doing without ever deciding to.</strong></p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">The Chinese people have already won</title><link href="https://blog.troysk.com/2026/01/08/the-chinese-people-have-already-won.html" rel="alternate" type="text/html" title="The Chinese people have already won" /><published>2026-01-08T00:00:00+00:00</published><updated>2026-01-08T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/08/the-chinese-people-have-already-won</id><content type="html" xml:base="https://blog.troysk.com/2026/01/08/the-chinese-people-have-already-won.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/Qv_CLGAcaPw?si=e2lITBOD45LKqZeN" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Before the traffic hit, a gunshot rang out. It didn’t just kill; it told everyone exactly where they didn’t belong.</p>

<p>The crack of an ICE agent’s pistol is not an interruption of the American story. It is its final punctuation mark. The period that turns a sentence begun in 1776 into a death certificate. A woman, unarmed, in her car, trying to turn around in what used to be a neighborhood and now functions as a domestic war zone. Fear and loathing has replaced the Daily Show.</p>

<p>When the state shoots a citizen on civilian asphalt, time collapses and the past returns. The tools change names, but the violence stays the same, and the promises of freedom fall apart where she died.</p>

<p>At that moment, the social contract is not just violated but actually executed.</p>

<p><strong>A state that fears its people will always call the bullet protection.</strong></p>

<p>We keep chanting “freedom” like an incantation against the dark, but the word has been reverse engineered into a branding asset for the cartel that sells both the rifle and the fear. Liberty now means the right to be sorted by algorithm, to be strip searched by drones, to bleed out on camera while the feed refreshes.</p>

<p><strong>When belonging is conditional, citizenship becomes probation.</strong></p>

<p>The republic was franchised away while we argued over pronouns and pronouns for arguments. The deed transferred quietly in footnotes of omnibus bills nobody read. Today, the Constitution functions like a EULA. You accept it by staying alive. It updates nightly while you sleep.</p>

<p>Freedom dies quietly, not with chains, but with checkboxes you agree to just to keep breathing.</p>

<p><strong>This is no longer a society. It is a containment zone.</strong></p>

<p>Across the ocean, the world’s loudest democracy holds up a mirror smeared with saffron and stock option ink. India is being bundled and sold. The Ganges is mortgaged. The Western Ghats are leveraged. Every last mineral beneath the red earth is pre sold in futures markets that close before a local child learns to spell the word “future.”</p>

<p>Ports, mines, power grids, even the green promise itself are handed over for peanuts to a handful of surnames. <a href="https://www.youtube.com/watch?v=XM5OQ47cXMU" target="_blank">Atapi and Watapi</a> are no longer merely businessmen. They are curators of national destiny.</p>

<p>The courthouse still stands, but the scales have been melted into bullet casings. Justice is now an IPO. You can buy early access if your surname already appears on the original prospectus.</p>

<p><strong>When justice becomes a luxury, democracy turns into a showroom where most people can only look.</strong></p>

<p>The poor sign away their hills with thumbprints still wet from the indelible ink of election day. An irony too large for satire.</p>

<p>Markets do not replace morality; they merely price its absence.</p>

<p>While we scrolled, China chose the oldest and most radical idea of all. Society as a deliberate design problem.</p>

<p>They did not ask whether markets should rule. They asked what kind of lungs a child should have at six. What color the sky should be when she turns sixteen. How many minutes a farmer should wait for a train carrying his vegetables. Then they encoded the answers into concrete, code, and law.</p>

<p>They did not just bail out banks after COVID. They rebuilt the machine. They did not cautiously adapt to electric vehicles. They erased the old guard. They turned the automobile into a high skill ecosystem. As the robotics era dawns, they are deploying humanoid labor at scale while we debate whether reality itself is real.</p>

<p>The nation state became a life support system rather than a gladiator arena.</p>

<p>We mistook their silence for submission. It was concentration.</p>

<p>Progress is not measured by what a country builds, but by what its people no longer fear.</p>

<p>The victory is not in circuitry. It is in breath. In skies that clear. In trains that arrive. In streets where safety is produced by dignity rather than terror.</p>

<p><strong>A livable country is one where safety feels boring and air is taken for granted.</strong></p>

<p>The deepest victory, however, is social.</p>

<p>In the Chinese countryside, tables are dragged into the street. Hundreds gather. Sometimes thousands. They eat together. Laugh together. Argue over whose child grew tallest. The village feast is not nostalgia. It is infrastructure.</p>

<p>The most radical technology is still the table long enough for everyone, and the patience to wait until all are seated.</p>

<p>A technology more advanced than any quantum computer. It runs on a simple protocol. No one eats until everyone sits. Laughter is open source. The stranger is fed first and questioned later.</p>

<p>For rest of us, our feast arrives via an app that knows our allergies better than our siblings. We eat alone. Earbuds seal us into private soundtracks while algorithms decide which grief is trending.</p>

<p>Loneliness is the most efficient form of social control ever invented.</p>

<p><strong>We have built high fences and low trust. A civilization of lonely islands, trained to see neighbors as infiltrators.</strong></p>

<p>The gunshot in Minneapolis echoes backward through centuries. Charleston. Wounded Knee. Selma. It becomes the metronome of a society that never learned the difference between property and person.</p>

<p>Empires do not fall when they are defeated; they fall when they forget how to live together.</p>

<p>Each report reminds us that we chose enclosure over commons, passwords over embraces, walls over tables long enough for everyone.</p>

<p>China did not conquer us.</p>

<p>It simply walked away from a gameboard where pieces are sacrificed for spectacle and began assembling a puzzle whose final image is breathable air, shared rice, and sidewalks that do not end in checkpoints.</p>

<p>The future is decided by who builds tables and who builds walls.</p>

<p>They are not our future overlords. They are our alternate timeline. The road not taken by societies that mistook loneliness for freedom and called the auction block an open market.</p>

<p>A nation is not betrayed when it is criticized, but when it stops recognizing its own people.</p>

<p>What is a nation that kills its own in the name of safety, and how much longer can it pretend to be surprised when the rest of the world chooses supper over supremacy.</p>

<p>So we must choose to build tables, not walls. To sit together, not apart. To remember that our greatest strength is not in our borders, but in our ability to live together.</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Engineering Your Own Agency</title><link href="https://blog.troysk.com/2026/01/05/engineering-your-own-agency.html" rel="alternate" type="text/html" title="Engineering Your Own Agency" /><published>2026-01-05T00:00:00+00:00</published><updated>2026-01-05T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/05/engineering-your-own-agency</id><content type="html" xml:base="https://blog.troysk.com/2026/01/05/engineering-your-own-agency.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/btPJPFnesV4?si=q3SVoAzxKn0MCjJm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Lately, the industry cannot stop talking about <strong>Agency</strong>.</p>

<p>In today’s world, being a “good dev” isn’t just about how many languages you know; it’s about your ability to navigate a world where the map hasn’t been drawn yet. Agency is the refusal to be a spectator and being a driven towards progress.</p>

<p>Here is how I build that agency. Whether you’re at a scrappy startup or a tech giant like Google, the lessons that actually move the needle are about mindset and high-agency. And as AI integrates more into our lifes and work, agency will be more valued than any other trait.</p>

<p>I cannot believe I am using the word <strong>Agency</strong> rather than <strong>Hunger</strong> as that is what I used to define this behaviour. The meme’s have got me too. Sorry, I digress.</p>

<p>Here are some paths to stop being spectators of our own lives.</p>

<ol>
  <li>
    <p>Bias Towards Action
In a life and in code, there are no rules and no time for theoretical debates unless you are breaking the law. The gift of adulthood! Shipping defeats debates and meetings. You can edit a bad piece of code, but you can’t edit a blank one. Don’t wait for the perfect architecture. Momentum creates clarity; analysis paralysis creates nothing.</p>
  </li>
  <li>Solve Problems, Not Tech
I used to think being an engineer was about the “stack.” It is NOT. It’s about the user. The best engineers are obsessed with understanding user struggles deeply.
If you start with a solution, you build complexity. If you start with a human problem, you find the elegant, simple “least-worst” tool that actually works.
In the words of Tim Ferriss;
    <blockquote>
      <p>The person who can simplify things is the one who wins.</p>
    </blockquote>
  </li>
  <li>
    <p>Your Ego is the Overhead
I once wrote that startups are run by high-performance individuals with zero ego. Being right is cheap. Getting to “right” together is the work. Clever code is just operational risk; clarity is seniority. If you want to be right, be a philosopher. If you want to make an impact, be a leader.</p>
  </li>
  <li>
    <p>Manage Your Energy, Not Your Clock
Working at a startup feels like a family because everyone is all-in. But you have to protect that fire. I have been burnt out few times in my career but it wasn’t just about overwork; it was about a lack of impact I was making! If you can’t articulate your impact when you’re not in the room, your impact is effectively optional. Your code doesn’t advocate for you; people do.</p>
  </li>
  <li>High Agency is the Only Currency
The “magic” I felt at companies came from realizing I had no limitations. It’s the ability to find a way through when the path isn’t clear and having the trust of the team which let’s you explore those paths. Don’t wait for a promotion or a “design doc” to tell you what to do. Take the “innovation tokens” you have and spend them where they matter. Everything else should be “boring” so you can focus on the breakthrough. Again in the words of Tim Ferriss;
    <blockquote>
      <p>What we fear doing most is usually what we most need to do.</p>
    </blockquote>
  </li>
  <li>The 2am Strategy
Your code is a strategy memo to a stranger who will have to fix it at 2am. If you’re being “clever,” you’re being selfish. Optimize for comprehension.
    <blockquote>
      <p>Simplicity is the ultimate sophistication.
These words by Leonardo da Vinci are to live by.</p>
    </blockquote>
  </li>
</ol>

<p>Final Thoughts
Most people go to a job. When you join the right team and have the right mindset; you have a life. You discover yourself, your limits, and your passions.</p>

<p>Whether you’re at Google or starting your own thing, don’t be a spectator. Create fast, fail fast, and keep your focus on the people at the other end of the screen.</p>

<p>I think Picasso said it best;
<img src="/assets/picasso.jpg" alt="Picasso" /></p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Exposing Docker Compose to the world</title><link href="https://blog.troysk.com/2026/01/05/exposing-docker-compose-to-the-world.html" rel="alternate" type="text/html" title="Exposing Docker Compose to the world" /><published>2026-01-05T00:00:00+00:00</published><updated>2026-01-05T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/05/exposing-docker-compose-to-the-world</id><content type="html" xml:base="https://blog.troysk.com/2026/01/05/exposing-docker-compose-to-the-world.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/HgzGwKwLmgM?si=657XYS7JV8gXEqbu" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>There comes a point where you want to show something you built.</p>

<p>A side project.</p>

<p>A demo.</p>

<p>A staging environment that only exists on your machine.</p>

<p>And immediately you are dragged into the usual nonsense. Port forwarding. Router UIs that look like they were built in 2004. Firewall rules you half understand and fully distrust. 😭</p>

<p>This is exactly the kind of problem Cloudflare Tunnels solve quietly and elegantly.</p>

<p>Even better, you do not need to install anything on your host. No brew. No apt-get. No binaries littering your system. Everything runs inside Docker, including authentication.</p>

<p>If you already live in Docker, this fits right in.</p>

<h3 id="why-cloudflare-tunnels-work-so-well">Why Cloudflare Tunnels Work So Well</h3>

<p>Cloudflare Tunnels flip the usual networking model on its head.</p>

<p>Instead of opening ports and letting the internet knock on your door, your machine initiates an outbound connection to Cloudflare. From that point on, Cloudflare handles the ugly parts.</p>

<p>A few reasons this matters:</p>

<ul>
  <li>
    <p><strong>No open ports</strong>
Nothing exposed on your router. Nothing to forget later.</p>
  </li>
  <li>
    <p><strong>HTTPS by default</strong>
Certificates just work. No certbot rituals.</p>
  </li>
  <li>
    <p><strong>Optional access control</strong>
If you want auth, Cloudflare Access is already there.</p>
  </li>
  <li>
    <p><strong>Boring reliability</strong>
Which is the best kind.</p>
  </li>
</ul>

<p>This is infrastructure that stays out of your way while you murmur; “This is the way”.</p>

<h3 id="what-you-need-before-you-start">What You Need Before You Start</h3>

<p>Nothing exotic.</p>

<ul>
  <li>A Cloudflare account with a domain already added</li>
  <li>Docker and Docker Compose</li>
  <li>A directory on your host to persist Cloudflare credentials</li>
</ul>

<p>For example:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/home/troysk/.cloudflared
</code></pre></div></div>

<p>This directory matters. Without it, you will keep re-authenticating and wondering why life is so hard.</p>

<h3 id="step-1-authenticate-with-cloudflare-using-docker">Step 1: Authenticate with Cloudflare Using Docker</h3>

<p>You are not installing cloudflared. You are running it.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--rm</span> <span class="nt">-it</span> <span class="se">\</span>
  <span class="nt">-v</span> /home/troysk/.cloudflared:/home/nonroot/.cloudflared <span class="se">\</span>
  cloudflare/cloudflared:latest tunnel login
</code></pre></div></div>

<p>What this does:</p>

<ul>
  <li>Runs cloudflared in a temporary container</li>
  <li>Mounts a host directory so credentials survive container death</li>
  <li>Starts the Cloudflare login flow</li>
</ul>

<p>You will get a URL. Open it in your browser. Log in. Pick the domain.</p>

<p>When this finishes, you should see a <code class="language-plaintext highlighter-rouge">cert.pem</code> file appear on your host inside <code class="language-plaintext highlighter-rouge">.cloudflared</code>.</p>

<p>That file is your passport.</p>

<h3 id="step-2-create-the-tunnel">Step 2: Create the Tunnel</h3>

<p>Now that Cloudflare trusts you, you can create a tunnel identity.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--rm</span> <span class="nt">-it</span> <span class="se">\</span>
  <span class="nt">-v</span> /home/troysk/.cloudflared:/home/nonroot/.cloudflared <span class="se">\</span>
  cloudflare/cloudflared:latest tunnel create yourapp
</code></pre></div></div>

<p>Replace <code class="language-plaintext highlighter-rouge">yourapp</code> with something meaningful.</p>

<p>This does two important things:</p>

<ul>
  <li>Registers a tunnel with Cloudflare</li>
  <li>Creates a credentials JSON file locally</li>
</ul>

<p>That JSON file is what the running tunnel will later use to authenticate itself.</p>

<p>Do not delete it. Do not rename it randomly.</p>

<h3 id="step-3-route-dns-to-the-tunnel">Step 3: Route DNS to the Tunnel</h3>

<p>A tunnel without DNS is just a philosophical exercise.</p>

<p>You now tell Cloudflare which hostname should point to this tunnel.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--rm</span> <span class="nt">-it</span> <span class="se">\</span>
  <span class="nt">-v</span> /home/troysk/.cloudflared:/home/nonroot/.cloudflared <span class="se">\</span>
  cloudflare/cloudflared:latest tunnel route dns yourapp yoursubdomain.yourdomain.com
</code></pre></div></div>

<p>Cloudflare creates the DNS record for you.</p>

<p>No dashboards. No manual CNAMEs. Just done.</p>

<h3 id="step-4-write-the-tunnel-configuration">Step 4: Write the Tunnel Configuration</h3>

<p>Now we tell cloudflared what to do with incoming traffic.</p>

<p>Create this file on your host:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/home/troysk/.cloudflared/yourapp.yml
</code></pre></div></div>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">tunnel</span><span class="pi">:</span> <span class="s">yourapp</span>
<span class="na">credentials-file</span><span class="pi">:</span> <span class="s">/etc/cloudflared/YOUR_TUNNEL_UUID.json</span>

<span class="na">ingress</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">hostname</span><span class="pi">:</span> <span class="s">yoursubdomain.yourdomain.com</span>
    <span class="na">service</span><span class="pi">:</span> <span class="s">http://app:80</span>
  <span class="pi">-</span> <span class="na">service</span><span class="pi">:</span> <span class="s">http_status:404</span>
</code></pre></div></div>

<p>A few things worth slowing down for:</p>

<ul>
  <li>The credentials file path is <strong>inside the container</strong></li>
  <li><code class="language-plaintext highlighter-rouge">app</code> is the Docker service name, not localhost</li>
  <li>The last rule is mandatory unless you enjoy undefined behavior</li>
  <li>The port on which your app serves, port 80 in this example</li>
</ul>

<p>This file is where most mistakes happen. Read it twice.</p>

<h3 id="step-5-add-cloudflared-to-docker-compose">Step 5: Add Cloudflared to Docker Compose</h3>

<p>This is where everything comes together.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">services</span><span class="pi">:</span>
  <span class="na">app</span><span class="pi">:</span>
    <span class="na">image</span><span class="pi">:</span> <span class="s">your-app-image:latest</span>
    <span class="na">container_name</span><span class="pi">:</span> <span class="s">your-application</span>
    <span class="c1"># No ports exposed</span>

  <span class="na">cloudflared</span><span class="pi">:</span>
    <span class="na">image</span><span class="pi">:</span> <span class="s">cloudflare/cloudflared:latest</span>
    <span class="na">container_name</span><span class="pi">:</span> <span class="s">yourapp-cloudflared</span>
    <span class="na">restart</span><span class="pi">:</span> <span class="s">unless-stopped</span>
    <span class="na">command</span><span class="pi">:</span> <span class="s">tunnel --config /etc/cloudflared/yourapp.yml run yourapp</span>
    <span class="na">volumes</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">/home/troysk/.cloudflared:/etc/cloudflared</span>
    <span class="na">depends_on</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="s">app</span>
</code></pre></div></div>

<p>Notice what is missing.</p>

<p>No <code class="language-plaintext highlighter-rouge">ports:</code> section.</p>

<p>Your app is not exposed to the host.
Cloudflared talks to it over Docker’s internal network.</p>

<p>This is the whole point.</p>

<h3 id="step-6-start-everything">Step 6: Start Everything</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker-compose up <span class="nt">-d</span>
</code></pre></div></div>

<p>Within seconds, Cloudflare will report the tunnel as connected.</p>

<p>Open your browser.
Visit <code class="language-plaintext highlighter-rouge">yoursubdomain.yourdomain.com</code>.</p>

<p>It should just work.</p>

<h3 id="closing-thoughts">Closing Thoughts</h3>

<p>This is one of those setups that feels obvious once you see it.</p>

<p>No host pollution.
No open ports.
No security theatre.</p>

<p>Just containers talking to containers, with Cloudflare acting as the boring adult in the room.</p>

<p>If you are already Docker-first, this is the cleanest way I know to expose something to the internet without regretting it later.</p>

<p>Build things. Share them. Keep your machine boring.</p>

<p>This is the way!</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Reverse Engineering BLE Devices for Home Assistant (and Godrej Aer!)</title><link href="https://blog.troysk.com/2026/01/05/reverse-engineering-ble-devices.html" rel="alternate" type="text/html" title="Reverse Engineering BLE Devices for Home Assistant (and Godrej Aer!)" /><published>2026-01-05T00:00:00+00:00</published><updated>2026-01-05T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/05/reverse-engineering-ble-devices</id><content type="html" xml:base="https://blog.troysk.com/2026/01/05/reverse-engineering-ble-devices.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/TvBZQkXDLz4?si=1V0UCYiGLSApdqIm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Over the years, I have liberated many devices from their proprietary protocols. The most popular devices I have done this for is for Bluetooth devices. Bluetooth devices are cheap but are limited by range compared to WiFi devices. ESPHome allows making Bluetooth repeaters but to allow the Bluetooth repeaters to repeat signals it needs to know what signal to send. This is why we need to reverse engineer the BLE commands being sent when you press a button on its app.</p>

<h3 id="why-bother-the-joy-of-true-control">Why Bother? The Joy of True Control</h3>
<p>We’ve all been there. You buy a “smart” device, only to find it locked into its own ecosystem, beholden to a cloud service that might disappear tomorrow. Or worse, it simply doesn’t play nice with your existing Home Assistant setup. That’s where reverse engineering comes in. It’s about breaking free, understanding how these devices truly communicate, and then bending them to your will.</p>

<p>Imagine turning on your Godrej Aer diffuser with a single voice command, or having it automatically activate when you arrive home. This more than convenience, it is true control. It’s about turning passive consumers into active creators of their smart homes.</p>

<h3 id="the-tools-of-the-trade">The Tools of the Trade</h3>
<p>Before we start poking and prodding, let’s gather our arsenal. You won’t need anything too fancy, but a few key pieces of software will make your life a whole lot easier:</p>

<p><strong>nRF Connect (Mobile App)</strong>: This is your primary window into the BLE world. Available for both Android and iOS, it allows you to scan for BLE devices, connect to them, and inspect their services and characteristics. It’s like a digital magnifying glass for Bluetooth signals.</p>

<p><strong>Home Assistant</strong>: Your central hub for all things smart home. We’ll be adding our custom BLE controls here.</p>

<p><strong>ESPHome/ESP32</strong>: For creating custom firmware for ESP32 boards, allowing them to act as BLE gateways or controllers. This is where the real magic happens for robust, local control.</p>

<h2 id="the-reverse-engineering-process">The Reverse Engineering Process</h2>

<p>Our goal is to figure out what specific Bluetooth command - a “characteristic write” in BLE lingo; our device expects to perform an action (like turning on or off). We’ll achieve this by observing the communication when we use the device’s official app.</p>

<h4 id="step-1-identify-your-device-with-nrf-connect">Step 1: Identify Your Device with nRF Connect</h4>
<p>First, power on your Godrej Aer (or whatever BLE device you’re targeting) and open nRF Connect.</p>

<p><strong>Scan for Devices</strong>: Tap the “Scan” button. You’ll see a list of nearby BLE devices.</p>

<p><strong>Locate Your Device</strong>: Look for your Godrej Aer in the list. It will usually have a recognizable name. Note down its MAC address (e.g., <code class="language-plaintext highlighter-rouge">A4:C1:38:DE:D0:BF</code>). This is its unique identifier.</p>

<h4 id="step-2-connect-and-explore-servicescharacteristics">Step 2: Connect and Explore Services/Characteristics</h4>
<p>Once you’ve found your device, tap on it to connect. nRF Connect will then display a tree view of its “services” and “characteristics.” Think of services as categories of functionality, and characteristics as specific data points or control points within those categories.</p>

<p><strong>Services</strong>: These are usually identified by a UUID (Universally Unique Identifier). Some are standard (like “Device Information”), while others are custom to the manufacturer.</p>

<p><strong>Characteristics</strong>: These also have UUIDs and can be read, written to, or subscribed to for notifications. This is where the action happens.</p>

<h4 id="step-3-sniffing-out-the-command-the-trial-and-error-part">Step 3: Sniffing Out the Command (The Trial and Error Part)</h4>
<p>This is often the trickiest part, but also the most rewarding. Your goal is to identify which characteristic, when written to with a specific value, triggers the desired action (e.g., turning on the Godrej Aer).</p>

<p><strong>Look for Writeable Characteristics</strong>: In nRF Connect, browse through the services. For each service, expand its characteristics. Look for characteristics that have a “Write” property. These are your prime suspects.</p>

<p><strong>Use the Official App and Observe</strong>: This is the most effective method.</p>

<p>Disconnect nRF Connect from the device.</p>

<p>Open the official Godrej Aer app.</p>

<p>In the nRF Connect app, keep an eye on the “Logger” tab (or similar logging feature if available).</p>

<p>Perform the action you want to reverse engineer (e.g., turn on the Godrej Aer) using the official app.</p>

<p>Immediately switch back to nRF Connect and reconnect if it automatically disconnected. In the logger, you might see outgoing write commands.</p>

<p>For the Godrej Aer, after some experimentation and observing the traffic when the official app sends commands, we identify the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Service UUID: 6e400000-b5a3-f393-e0a9-e50e24dcca9e

Characteristic UUID (for writing commands): 6e400004-b5a3-f393-e0a9-e50e24dcca9e

Value for "Turn On": [0xBF, 0x62, 0x6D, 0x54, 0x18, 0x68, 0x62, 0x6D, 0x4E, 0x18, 0x9A, 0x62, 0x72, 0x49, 0x00, 0xFF]
</code></pre></div></div>

<p>This value is a hexadecimal array, which is common for BLE commands. It might look like gibberish, but it’s the specific instruction the device understands.</p>

<h4 id="step-4-integrating-with-home-assistant-using-esphomeesp32">Step 4: Integrating with Home Assistant (using ESPHome/ESP32)</h4>
<p>Now that we have our secret command, let’s put it to good use in Home Assistant. We’ll use an ESP32 board running ESPHome to act as our BLE gateway. This is far more reliable than relying on Home Assistant’s built-in Bluetooth, especially for devices that require active connections.</p>

<p><strong>Prepare your ESP32 with ESPHome:</strong></p>

<p>If you haven’t already, install ESPHome on your ESP32 board. You can find detailed instructions on the ESPHome website.</p>

<p>In your ESPHome configuration file (e.g., esp32_ble_gateway.yaml), add the ble_client component. This allows your ESP32 to connect to other BLE devices.</p>

<pre><code class="language-YAML">ble_client:
  - mac_address: A4:C1:38:DE:D0:BF # Replace with your Godrej Aer's MAC address
    id: aer_troys_bedroom # A unique ID for your device

# Add a Template Switch to Control the Device: Next, we'll create a switch in ESPHome that, when toggled, sends our reverse-engineered BLE command.

switch:
  - platform: template
    name: "Aer Button" # This is the friendly name that will appear in Home Assistant
    turn_on_action:
      - ble_client.ble_write:
          id: aer_troys_bedroom # Reference the ID of your BLE client
          service_uuid: 6e400000-b5a3-f393-e0a9-e50e24dcca9e
          characteristic_uuid: 6e400004-b5a3-f393-e0a9-e50e24dcca9e
          value: [0xBF, 0x62, 0x6D, 0x54, 0x18, 0x68, 0x62, 0x6D, 0x4E, 0x18, 0x9A, 0x62, 0x72, 0x49, 0x00, 0xFF]
    # You'll need a turn_off_action if you found a separate command for turning off.
    # If it's a toggle, the turn_on_action might be sufficient for both.
    # For a simple button, you might only need turn_on_action and let the device manage its state.
    # For Godrej Aer, you might need to find the "turn off" command in the same way.
</code></pre>

<p><strong>Important Note on turn_off_action</strong>: For devices like the Godrej Aer, which might cycle through modes or have a single button press for “on/off,” you’ll need to reverse engineer the “turn off” command in the same way you found the “turn on” command, or understand if the turn_on_action effectively toggles it. For many devices, sending the same command again might simply toggle the state.</p>

<p><strong>Upload to ESP32</strong>: Compile and upload this configuration to your ESP32 board using ESPHome.</p>

<p><strong>Integrate with Home Assistant</strong>: Once your ESP32 is running the ESPHome firmware, it should automatically appear in Home Assistant under the ESPHome integration. If not, ensure you have the ESPHome integration set up and your ESP32 is on the same network. Your “Aer Button” switch will now be available in Home Assistant!</p>

<h2 id="beyond-the-aer-tips-for-other-devices">Beyond the Aer: Tips for Other Devices</h2>
<p>The principles we’ve applied to the Godrej Aer are universal for most BLE devices. Here are some extra tips:</p>

<p><strong>Patience is Key</strong>: Reverse engineering can be a puzzle. Don’t get discouraged if you don’t find the command immediately.</p>

<p><strong>Manufacturer Apps are Your Friends</strong>: Always start by observing the device’s official app. It’s the “ground truth” for how the device expects to be controlled.</p>

<p><strong>Search Online</strong>: Before you start from scratch, do a quick search! Someone else might have already reverse-engineered your device and shared their findings. Communities like the Home Assistant forums and GitHub are treasure troves of information.</p>

<p><strong>Notification Characteristics</strong>: Some devices send status updates (e.g., battery level, current state) via “notification” characteristics. You can subscribe to these in ESPHome to get feedback from your device.</p>

<p><strong>Bonding</strong>: Some BLE devices require “bonding” (a secure pairing process). If you’re having trouble connecting or writing, check if bonding is a requirement. nRF Connect can sometimes initiate bonding.</p>

<h2 id="the-future-of-your-smart-home-is-open-source">The Future of Your Smart Home is Open Source</h2>
<p>By reverse engineering these devices, you’re not just gaining control over your gadgets; you’re contributing to a larger movement of open-source home automation. You’re turning proprietary black boxes into transparent, controllable components of your home.</p>

<p>So, go forth, connect, observe, and conquer! Your smart home, truly smart, awaits.</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Nothing compares to you</title><link href="https://blog.troysk.com/2026/01/04/nothing-compares-to-you.html" rel="alternate" type="text/html" title="Nothing compares to you" /><published>2026-01-04T00:00:00+00:00</published><updated>2026-01-04T00:00:00+00:00</updated><id>https://blog.troysk.com/2026/01/04/nothing-compares-to-you</id><content type="html" xml:base="https://blog.troysk.com/2026/01/04/nothing-compares-to-you.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/NAOKzvL8dgk?si=M5lN9OJgRznKpFQ2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Today marks 10 years since I lost my father.</p>

<p>Still haven’t gotten over it.</p>

<p>Still miss him everyday.</p>

<p>No one made me feel special as much as him. The first person to tell me that I could do anything I put my mind to it. I felt I knew what I was doing with my life while he was around. The last 10 years have been hard, so hard and so lost. I don’t know if I will ever get back the confidence that I had while he was around.</p>

<p>Even though I moved back home and got to spend 6 months with him, all I have is regrets. Regret of not spending enough time with him. Regret not sharing enough smiles with him in the end. Regret of not doing enough.</p>

<p>I still love you, Baba.</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Bitcoin Is for Adults</title><link href="https://blog.troysk.com/2025/12/31/bitcoin-is-for-adults.html" rel="alternate" type="text/html" title="Bitcoin Is for Adults" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://blog.troysk.com/2025/12/31/bitcoin-is-for-adults</id><content type="html" xml:base="https://blog.troysk.com/2025/12/31/bitcoin-is-for-adults.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/TjrfuDAEl10?si=LrYcPtrWgzCzyN3b" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>I don’t usually write about politics. Not because I don’t have opinions, but because most politics today feels like theatre. Noise pretending to be substance. Flags pretending to be values. Participation reduced to choosing which stranger gets to decide on your behalf.</p>

<p>Bitcoin is the closest thing I have to a political belief.</p>

<p>Not because it promises riches. Not because it is edgy or rebellious. But because it quietly answers a question I have been circling for years.</p>

<p>Who gets permission?</p>

<p>Most of modern life runs on permissions we barely notice. You earn money, but you don’t really own the rails it moves on. You transact, but only after multiple unseen entities nod in approval. Banks, regulators, governments, compliance departments. Strangers. Invisible committees.</p>

<p>As long as you behave, the permission flows. Swipe works. Transfer clears. Life continues.</p>

<p>Until it doesn’t.</p>

<p><strong>Permission is invisible until it is revoked. Bitcoin makes it optional.</strong></p>

<p>The uncomfortable truth is this. If you need permission to transact, you need permission to exist economically. And in a world where economics decides who eats, who travels, who builds, and who survives, that is not a small dependency.</p>

<p><strong>If your money needs approval, your existence already has conditions.</strong></p>

<p>We call this system normal because it has always been there.</p>

<p>Bitcoin is interesting not because it fixes everything, but because it removes something fundamental.</p>

<p>Permission.</p>

<p>Bitcoin does not ask who you are. It does not care where you are from. It does not check your paperwork, politics, religion, or social score. It does not freeze because someone somewhere changed their mind.</p>

<p>You either follow the rules or you don’t. And the rules are not written by people. They are written in math.</p>

<p>That distinction matters more than we admit.</p>

<p>Traditional finance runs on rules of men. Vague, interpretable, selectively enforced. The same action can be legal today, illegal tomorrow, and “under investigation” forever. Enforcement depends not on truth, but on attention, incentives, and power.</p>

<p><strong>Power prefers ambiguity. Math does not.</strong></p>

<p>Bitcoin runs on rules of code. Objective. Transparent. Predictable. Every participant can verify them. Every violation is rejected automatically. No moods. No exceptions. No favours.</p>

<p><strong>Rules written by people decay. Rules written in code either work or fail honestly.</strong></p>

<p>This is not chaos. This is order of a higher resolution.</p>

<p>People often confuse permissionless systems with lawlessness. That is lazy thinking. What Bitcoin rejects is not rules. It rejects arbitrary rules enforced by authority instead of logic.</p>

<p><strong>Freedom is not the absence of rules. It is the absence of discretionary rulers.</strong></p>

<p>A smart contract does not care who you are. It only cares whether conditions are met. It enforces perfectly, every time. No under-resourced department. No selective blindness. No moral posturing.</p>

<p><strong>When enforcement depends on power, justice becomes probabilistic.</strong></p>

<p>If we actually cared about orderly markets, we would celebrate that.</p>

<p>Instead, we attack it.</p>

<p>Because permission is power. And power does not like being automated away.</p>

<p><strong>Bitcoin is not anti-government. It is anti-arbitrariness.</strong></p>

<p>For centuries, we accepted that someone must sit at the center. Someone must watch, approve, deny, tax, freeze, print, and decide. We told ourselves this was necessary for society. That without it, things would fall apart.</p>

<p>But look around.</p>

<p>Money gets printed, then inflation is treated like a mystery. Rules multiply, but fairness does not. Complexity grows, accountability shrinks. We argue endlessly about right verus left and red versus blue while the permission structure itself remains unquestioned.</p>

<p><strong>Authority demands belief. Bitcoin only demands compliance with reality.</strong></p>

<p>There is something deeply infantilizing about the world we have normalized.</p>

<p>Permission is how we train children. You ask to leave the room. You ask to use the restroom. You ask before you touch something that is not yours. That makes sense. A child does not yet understand consequence. Permission is scaffolding.</p>

<p>But somewhere along the way, we forgot to take the scaffolding down.</p>

<p>As adults, we are told that responsibility comes with freedom. That maturity means accountability. That if you work, build, trade, and contribute, you earn agency. Yet the systems we operate in treat grown men and women like permanent wards.</p>

<p>You may earn.
You may save.
You may transact.</p>

<p>But only after asking nicely.</p>

<p>Only if the right forms are filled.
Only if the thresholds are respected.
Only if the watchers are satisfied.</p>

<p><strong>Permission is appropriate for kindergarten. It is degrading when applied to capable adults.</strong></p>

<p>When a man wants to do business, he should not have to justify his existence. When two adults agree to trade, no third party should be required to bless the interaction simply because they have appointed themselves as guardians of order.</p>

<p>Adults understand risk.
Adults understand failure.
Adults understand consequence.</p>

<p>Treating them as if they do not is not protection. It is control disguised as care.</p>

<p>The most dangerous idea we have accepted is that permission equals safety. That without constant oversight, adults will collapse into chaos. That freedom must be rationed like a controlled substance.</p>

<p>History does not support this fear.</p>

<p>Most progress has come from people who did not wait. Who did not ask. Who simply built and dealt with consequences openly. Commerce, art, science, technology. None of it moved forward because a committee felt comfortable.</p>

<p><strong>Civilization advances when adults are trusted with responsibility, not supervised into obedience.</strong></p>

<p>Bitcoin resonates here because it assumes adulthood by default.</p>

<p>It does not ask whether you are ready. It assumes you are.
It does not protect you from mistakes. It lets you make them.
It does not reverse your actions. It expects you to live with them.</p>

<p>This is not cruelty. This is respect.</p>

<p>Permissionless systems are not reckless. They are honest. They say, you are responsible for what you do here. There is no manager to appeal to. No parent to complain to. No authority to hide behind.</p>

<p>That is how adults operate.</p>

<p>Men who want to build do not want permission. They want clarity.
Women who want to trade do not want approval. They want reliability.</p>

<p><strong>Maturity is not asking for fewer rules. It is asking for rules that do not require supervision.</strong></p>

<p>Changing the world has never come from those waiting patiently in line. It comes from those who step outside the line and accept responsibility for the outcome.</p>

<p>Permissionless systems do not remove consequences. They remove excuses.</p>

<p>And this is the part that is often misunderstood.</p>

<p>Permissionless does not mean lawless. It never did.</p>

<p>It does not mean a world without rules. It means a world with rules that are worth following. Rules that are clear, objective, and enforced consistently for real reasons, not because someone has the authority to reinterpret them.</p>

<p><strong>The problem is not rules. The problem is rules that depend on who you are and who is watching.</strong></p>

<p>Adults do not reject structure. They reject arbitrariness.</p>

<p>What people want is not freedom from constraint, but freedom from confusion. Not the absence of limits, but limits that make sense. Limits that can be known in advance. Limits that do not shift based on mood, power, or politics.</p>

<p>Rules written in code are not perfect, but they are honest. They do not pretend to be moral while acting selectively. They do not promise fairness and deliver discretion. They do not ask you to trust intent. They show you execution.</p>

<p>Math does not care if you are important.
Math does not care if you are compliant.
Math does not care if you are inconvenient.</p>

<p><strong>A rule that cannot be enforced equally is not a rule. It is leverage.</strong></p>

<p>When rules are objective, following them becomes easier. Not because they are trivial, but because they are legible. You know where the edges are. You know the cost of crossing them. You know that the outcome will be the same for you as for anyone else.</p>

<p>That is not anarchy. That is adulthood.</p>

<p>Real order is not maintained by supervision. It is maintained by alignment. By systems where doing the right thing is simpler than doing the wrong one. Where breaking the rules is expensive, not politically, but mechanically.</p>

<p>Bitcoin does not replace law with chaos. It replaces negotiation with certainty.</p>

<p><strong>Good rules do not need enforcement campaigns. They enforce themselves.</strong></p>

<p>There is also something unfashionable to admit.</p>

<p>Bitcoin is romantic.</p>

<p>Not in the soft, sentimental sense. But in the older sense of the word. Wild. Idealistic. Slightly unreasonable. Willing to attempt things that polite society says cannot work.</p>

<p>Every system that matters begins this way.</p>

<p>The internet was once romantic. Open protocols. Strange usernames. People building things at night with no permission and no business model. It was inefficient, fragile, and often absurd. It was also alive.</p>

<p>Bitcoin carries that same energy.</p>

<p>A belief that strangers can coordinate without masters.
That rules can exist without rulers.
That order can emerge without supervision.</p>

<p><strong>The most important systems are built by people who care more than is rational.</strong></p>

<p>Romantic systems do not ask whether they will be allowed. They ask whether they are true. They do not optimize for acceptance. They optimize for coherence.</p>

<p>That looks reckless from the outside. It always does.</p>

<p>Wild ideas are not born in committees. They come from people willing to be misunderstood. From builders who accept ridicule, inefficiency, and long odds because the alternative feels dishonest.</p>

<p>Bitcoin is not tidy. It does not explain itself well. It does not reassure. It does not compromise to appear reasonable.</p>

<p>That is not a bug. That is a signal.</p>

<p><strong>Civilization does not advance through permission. It advances through conviction.</strong></p>

<p>There is something deeply human about building systems that outgrow their creators. About releasing something into the world that cannot be recalled, censored, or domesticated once it is alive.</p>

<p>It is the opposite of control culture.</p>

<p>It is trust in emergence.</p>

<p>Wildness here does not mean chaos. It means refusing to overcorrect. Refusing to sand down every edge until nothing sharp remains. Refusing to trade long-term integrity for short-term comfort.</p>

<p>Romantic systems accept scars.</p>

<p>Bitcoin accepts that it will be attacked, misunderstood, exploited, and blamed. It survives not by persuasion, but by persistence.</p>

<p><strong>Romantic systems do not win debates. They outlast them.</strong></p>

<p>This is why it attracts builders more than advocates. Engineers more than politicians. People who would rather ship something imperfect than argue endlessly about ideals.</p>

<p>Wild does not mean careless.
Romantic does not mean naive.</p>

<p>It means believing that adults can handle responsibility. That people, given clear rules and real consequences, can coordinate without being parented.</p>

<p>That belief alone already places Bitcoin outside the polite world.</p>

<p>And that is why, despite all its flaws, it still feels alive.</p>

<p>Bitcoin does not ask to rule anyone. It does not impose itself. It does not mandate adoption. It simply exists. Open. Voluntary. Unforgiving in its honesty.</p>

<p>You can ignore it. Many do.</p>

<p>But you cannot corrupt it quietly.</p>

<p><strong>Trust is expensive. Verification scales.</strong></p>

<p>That alone makes it political.</p>

<p>Not left. Not right. Something orthogonal.</p>

<p>A declaration that coordination without coercion is possible. That rules without rulers can exist. That trust can be replaced with verification. That dignity does not need approval.</p>

<p><strong>The most political systems are the ones that refuse to participate in politics.</strong></p>

<p>This does not mean Bitcoin is perfect. It isn’t. It is slow. Inefficient. Messy. Sometimes absurd. Innovation always is.</p>

<p>But every meaningful shift starts that way.</p>

<p>The internet did not ask permission from newspapers. Email did not wait for postal unions. Open source did not consult software monopolies.</p>

<p>Bitcoin belongs to that lineage.</p>

<p><strong>Systems that survive scrutiny do not ask for legitimacy. They earn usage.</strong></p>

<p>A tool that does not beg for legitimacy. A system that does not care if you clap. A protocol that works even if you hate it.</p>

<p>That is why it matters.</p>

<p>My politics are simple.</p>

<p>I trust systems that do not need me to trust people.
I prefer rules I can inspect.
I respect order that enforces itself.
I am suspicious of power that demands obedience “for my own good”.</p>

<p><strong>Bitcoin does not promise fairness. It guarantees predictability. That alone is revolutionary.</strong></p>

<p>Bitcoin is not my identity.
It is my signal.</p>

<p>A quiet refusal to confuse authority with legitimacy.
A reminder that freedom does not arrive through permission.
It arrives through design.</p>

<p><strong>Opting out is quieter than protesting, and often more effective.</strong></p>

<p>And sometimes, the most political act is simply opting out.</p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Data is the new Oil</title><link href="https://blog.troysk.com/2025/12/31/data-is-the-new-oil.html" rel="alternate" type="text/html" title="Data is the new Oil" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://blog.troysk.com/2025/12/31/data-is-the-new-oil</id><content type="html" xml:base="https://blog.troysk.com/2025/12/31/data-is-the-new-oil.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/OMOGaugKpzs?si=Ww7zxY1gz4Ku6RZw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>There was a time when oil felt like a miracle. I should know as my family runs a petrol pump/gas station. We used to get multiple books from the oil giants highlighting the many wonders that oil was bringing.</p>

<p>A thick, dark liquid pulled out of the ground that could move ships, light cities, heat homes, and compress distance. Oil gave us speed. Oil gave us scale. Oil gave us the modern world.</p>

<p><strong>Oil made the world faster. Data made it louder. Neither made it wiser.</strong></p>

<p>At first, it was all upside. Jobs. Growth. Convenience. Prosperity. A future that felt inevitable.</p>

<p>Only later did we notice the cough.
The smog.
The poisoned rivers.</p>

<p>By the time the illnesses appeared, oil was no longer a choice. It had become infrastructure.</p>

<p><strong>Extraction always begins with permission and ends with dependence.</strong></p>

<p>You could not opt out without opting out of society itself.</p>

<p>Data followed the same arc.</p>

<p>At first, data felt clean. Abstract. Harmless. Ones and zeros floating somewhere in the cloud. We were told it would help us connect, understand, personalize, optimize. Data would make products better. Cities smarter. Lives easier.</p>

<p>And for a while, it did.</p>

<p>Then quietly, without ceremony, data stopped being a tool and became the raw material of power.</p>

<p>Oil polluted the air.
Data pollutes the mind.</p>

<p><strong>What oil did to the earth, data is doing to the human inner climate.</strong></p>

<p>Oil made us sick in visible ways.
Data makes us sick invisibly.</p>

<p>Every click. Every pause. Every scroll. Every moment of hesitation is extracted, refined, and fed into algorithms that do not care about truth, well-being, or long-term consequences. They care about engagement. Retention. Growth curves.</p>

<p><strong>When extraction becomes the business model, harm is never a bug. It is the cost we choose not to see.</strong></p>

<p>Big data companies speak in neutral language.
Signals.
Optimization.
Personalization.</p>

<p>But beneath that vocabulary sits something deeply human being exploited. Attention. Emotion. Fear. Desire.</p>

<p><strong>The most intimate theft is not of data, but of attention, choice, and silence.</strong></p>

<p>Surveillance is not just cameras on poles. It is prediction. It is nudging. It is shaping behavior at scale without consent that feels meaningful.</p>

<p><strong>Surveillance is not watching what you do. It is shaping what you become.</strong></p>

<p>When an algorithm learns what angers you faster than what calms you, outrage becomes the default product.</p>

<p>Just like oil companies once externalized pollution onto society, data companies externalize harm onto democracy, mental health, and culture.</p>

<p><strong>Pollution is easiest to ignore when it cannot be smelled.</strong></p>

<p>Anxiety becomes a side effect.
Polarization becomes a metric.
Loneliness becomes acceptable collateral damage.</p>

<p>And like oil, the damage is not evenly distributed.</p>

<p>Those with power can afford privacy, filters, distance.
Those without power live inside the exhaust.</p>

<p><strong>The real cost of surveillance is not being watched, but being predictable.</strong></p>

<p>Children grow up inside recommendation engines.
Politics is shaped by engagement loops.
Truth competes with virality and usually loses.</p>

<p><strong>A society shaped by algorithms slowly forgets how to choose without being nudged.</strong></p>

<p>This is not a rejection of technology.</p>

<p>Oil itself was never evil. Data is not evil. Both are powerful. Both are dangerous when extraction is unchecked and incentives are misaligned.</p>

<p><strong>Progress becomes dangerous when it no longer asks who it serves.</strong></p>

<p>The tragedy is not that we built these systems.
The tragedy is that we pretended they were neutral.</p>

<p>Oil taught us this lesson too late. We are still trying to clean the air while arguing about growth. With data, we still have a narrow window to choose differently.</p>

<p>To ask harder questions.
To demand limits.
To design for dignity instead of addiction.</p>

<p><strong>Convenience is the softest form of control.</strong></p>

<p>Progress without care is not progress. It is acceleration toward harm.</p>

<p>Data can still heal. It can still enlighten. But only if we stop treating humans as oil fields to be drilled endlessly and start treating them as lives that need protection.</p>

<p><strong>When everything is measured, what cannot be measured quietly stops mattering.</strong></p>

<p>The future does not need more extraction.
It needs restraint.
And courage.</p>

<p><strong>A future built on unlimited extraction always runs out of something. First resources. Then trust. Then people.</strong></p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">The broken promise of shared economy</title><link href="https://blog.troysk.com/2025/12/31/the-broken-promise-of-shared-economy.html" rel="alternate" type="text/html" title="The broken promise of shared economy" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://blog.troysk.com/2025/12/31/the-broken-promise-of-shared-economy</id><content type="html" xml:base="https://blog.troysk.com/2025/12/31/the-broken-promise-of-shared-economy.html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/AIOAlaACuv4?si=QnK1Loa-8Ud9n_L7" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>It’s been almost a decade since the world was introduced, or rather sold, the dream of the shared economy. The pitch was simple and beautiful. Technology would help us create new economic models. Models that were efficient, fair, and inclusive. A win-win revolution.</p>

<p>Prices would fall. Access would expand. Premium services that were once out of reach would suddenly become available to everyone. We were told ownership was outdated. Sharing was the future.</p>

<p><strong>We mistook access for fairness.</strong></p>

<p>A decade into this revolution, the promise feels hollow. And not just for buyers. It has failed the suppliers just as badly.</p>

<p>The popular definition of the shared economy was that people who had more than what they needed would rent out the excess. An empty room. An unused car. Idle time. This would lower the cost of ownership while creating new income streams. Technology would simply act as the invisible glue, coordinating trust, pricing, and logistics at near zero cost.</p>

<p><strong>Sharing excess is humane. Creating excess to survive is not.</strong></p>

<p>Uber became the poster child of this movement. People driving alone could now share their rides. Cars that were already on the road could be better utilized. It sounded efficient. It sounded almost ecological.</p>

<p>I started my first company during this wave, and my understanding of the shared economy was very different from the one being marketed. What I saw was not sharing. What I saw was economies of scale, subsidized heavily by venture capital, and distributed just enough to look decentralized.</p>

<p><strong>What looks decentralized in the interface is often centralized in power.</strong></p>

<p>I still remember an investor pushing back on this view. He insisted it was about people sharing their resources. I didn’t argue. But even then, the cracks were visible. People were not sharing spare cars. They were buying new ones to become Uber drivers. This was not excess capacity being unlocked. This was new capacity being created, often through debt.</p>

<p><strong>What we called sharing was often just debt with better UX.</strong></p>

<p>For a while, it worked. It worked because the unit economics didn’t matter. Venture capital was footing the bill. Consumers got cheap rides. Drivers got incentives. Platforms grew fast. Losses were reframed as growth. Everyone was happy, as long as the money kept flowing.</p>

<p><strong>When unit economics don’t matter, stories do.</strong></p>

<p>It was a great time to be a consumer. It was also, briefly, a great time to be a supplier.</p>

<p>But subsidies are not business models. They are postponements.</p>

<p><strong>Subsidies feel like innovation until the bill arrives.</strong></p>

<p>A decade later, the bill has arrived.</p>

<p>Once the venture capitalists started asking for their money back, the rules changed. Platforms could no longer burn cash indefinitely. And instead of charging a transparent fee for coordination, many companies chose a darker path. They started extracting value directly from the people doing the actual work.</p>

<p><strong>VC money didn’t fund efficiency. It funded denial.</strong></p>

<p>The technology companies didn’t become SaaS providers. They became toll booths.</p>

<p>Drivers now shoulder the costs. Fuel. Maintenance. Depreciation. Insurance. Time. Risk. The platform takes a cut, adjusts the algorithm, changes incentives, and bears almost none of the downside.</p>

<p><strong>A platform that owns nothing can still take everything.</strong></p>

<p>The irony is painful. The shared economy was supposed to reduce ownership. Instead, it pushed risk downward. From corporations to individuals. From balance sheets to households.</p>

<p><strong>The shared economy didn’t remove ownership. It redistributed risk.</strong></p>

<p>The model of SaaS was quietly reinvented. Not as software-as-a-service, but as software-as-a-loan-shark. Always present. Always watching. Always taking its share first.</p>

<p><strong>Software-as-a-service quietly became software-as-a-toll.</strong></p>

<p>And unlike a traditional employer, there is no accountability. No safety net. No conversation. Just an app update and a revised percentage.</p>

<p><strong>There is no “flexibility” when the algorithm owns your time.</strong></p>

<p>We didn’t end up with a shared economy. We ended up with a mediated economy. One where trust is centralized, power is asymmetrical, and the language of sharing is used to mask extraction.</p>

<p><strong>Technology didn’t eliminate middlemen. It perfected them.</strong></p>

<p>The dream wasn’t naive. But the incentives were always misaligned.</p>

<p><strong>Algorithms don’t exploit people. Incentives do.</strong></p>

<p>And that is the real broken promise.</p>

<p><strong>We didn’t build a shared economy. We built a better extraction engine.</strong></p>]]></content><author><name>troysk</name></author><summary type="html"><![CDATA[]]></summary></entry></feed>