<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Piers Roberts</title>
    <description>The latest articles on Forem by Piers Roberts (@piersroberts).</description>
    <link>https://forem.com/piersroberts</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F659103%2F9f94ef90-c4dc-4e84-8899-cecc56813815.jpeg</url>
      <title>Forem: Piers Roberts</title>
      <link>https://forem.com/piersroberts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/piersroberts"/>
    <language>en</language>
    <item>
      <title>asdf ➡ mise</title>
      <dc:creator>Piers Roberts</dc:creator>
      <pubDate>Wed, 24 Sep 2025 09:23:37 +0000</pubDate>
      <link>https://forem.com/piersroberts/asdf-mise-1nf0</link>
      <guid>https://forem.com/piersroberts/asdf-mise-1nf0</guid>
      <description>&lt;p&gt;Switching from asdf to &lt;code&gt;mise&lt;/code&gt; wasn’t just a fleeting developer whim - it’s the result of years of wrangling with version managers, misplaced shims, and dubious bash scripts. Mise, written in Rust, simply runs faster, feels smoother, and doesn’t make my shell configuration look like a post-apocalyptic cargo cult.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Change at All?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;asdf&lt;/code&gt; had been the trusty sidekick for managing tool versions: &lt;code&gt;Node&lt;/code&gt;, &lt;code&gt;Python&lt;/code&gt;, &lt;code&gt;Terraform&lt;/code&gt;, even that one &lt;code&gt;VHDL&lt;/code&gt; project that only seemed to make sense very late at night years ago. It's polyglot, versatile, and compatible with nearly everything... except, apparently, my desire to not wait several seconds for basic operations. But as projects grew more sprawling, asdf’s reliance on shims and a sprawling ecosystem of shell-script plugins (some better maintained than others) started to wear thin. Mise sidesteps shims and instead hooks directly into the shell, updating the PATH with ruthless efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Big Upsides
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Mise eels punchy and modern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Instead of running unloved bash scripts from parts unknown, mise uses signed releases and curated registries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibility&lt;/strong&gt;: Still supports the familiar &lt;code&gt;.tool-versions&lt;/code&gt; file, so migration is painless. And if required, asdf plugins are a fallback, but only as a last resort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DX (Developer Experience)&lt;/strong&gt;: Commands are simpler, and feel more natural and memorable. The UX feels like modern software, and less like an IRC bot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Setups&lt;/strong&gt;: Injects environment variables with ease - it will set up env vars magically for you, I'm still on the fence with this, but I can see it's appeal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Trade-Offs
&lt;/h3&gt;

&lt;p&gt;Mise won’t magically reuse your old asdf install directory, expect to reinstall some tool versions when switching. And while compatibility is high, the stated goal isn’t “100% asdf clone”, the focus is speed and security, not maintaining the entire asdf legacy ecosystem in amber.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;The moment mise shaved a few precious seconds off my shell startup, I knew the time had come. It’s a classic story: Old friend asdf retires to a beach somewhere; mise takes over the shop, runs a tighter ship, and politely asks bash scripts not to track sand into the workspace. For polyglot projects and developers who value velocity and an ecosystem that’s alive and kicking, it’s a switch worth making.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Configure VSCode to preview Markdown files automatically</title>
      <dc:creator>Piers Roberts</dc:creator>
      <pubDate>Mon, 22 Sep 2025 14:13:21 +0000</pubDate>
      <link>https://forem.com/piersroberts/configure-vscode-to-preview-markdown-files-automatically-2blm</link>
      <guid>https://forem.com/piersroberts/configure-vscode-to-preview-markdown-files-automatically-2blm</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"workbench.editorAssociations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;   
        &lt;/span&gt;&lt;span class="nl"&gt;"*.md"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vscode.markdown.preview.editor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>vscode</category>
      <category>markdown</category>
      <category>config</category>
    </item>
    <item>
      <title>hurl</title>
      <dc:creator>Piers Roberts</dc:creator>
      <pubDate>Mon, 22 Sep 2025 14:11:57 +0000</pubDate>
      <link>https://forem.com/piersroberts/hurl-3bj3</link>
      <guid>https://forem.com/piersroberts/hurl-3bj3</guid>
      <description>&lt;h2&gt;
  
  
  Why I Use Hurl for HTTP API Testing
&lt;/h2&gt;

&lt;p&gt;As a developer who often tests and experiments with APIs, I’m always on the lookout for simple yet powerful tools. Recently, I started using &lt;strong&gt;Hurl&lt;/strong&gt;, and it’s quickly become one of my favorites for running and testing HTTP requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Like About Hurl
&lt;/h3&gt;

&lt;p&gt;Hurl lets me write HTTP requests in plain text files, exactly how I would type them in a terminal or Postman, but with the added ability to automate sequences and handle variables. This means I can chain requests, grab OAuth tokens from one response, and use them in the next request — all without writing complicated scripts in another language.&lt;/p&gt;

&lt;p&gt;It’s a command-line tool, which fits perfectly into my workflow and CI/CD pipelines. I appreciate that it’s lightweight, fast, and supports modern features like HTTP/2 and retries. The syntax is straightforward, so there’s almost no learning curve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Quick Examples
&lt;/h3&gt;

&lt;p&gt;Here’s a simple GET request I’ve used to fetch user data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://api.example.com/users
Accept: application/json

HTTP/1.1 200
[Asserts]
jsonpath "$.length()" &amp;gt; 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here’s how I retrieve an OAuth token and use it in another request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://auth.example.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&amp;amp;client_id=YOUR_ID&amp;amp;client_secret=YOUR_SECRET

HTTP/1.1 200
jsonpath "$.access_token" != null
[Capture]
token = jsonpath("$.access_token")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET https://api.example.com/data
Authorization: Bearer {{token}}

HTTP/1.1 200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to Get Started
&lt;/h3&gt;

&lt;p&gt;If you want to try it out, installing Hurl is easy with Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install hurl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more details and documentation, check out the official site: &lt;a href="https://hurl.dev/" rel="noopener noreferrer"&gt;https://hurl.dev/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Hurl has simplified my API testing and automation work dramatically. If you want a no-fuss, scriptable way to run HTTP requests and manage OAuth tokens, give it a try — it might just save you a lot of time.&lt;/p&gt;

</description>
      <category>api</category>
      <category>testing</category>
      <category>tooling</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
