<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Tools on Mark Wolfe's Blog</title><link>https://www.wolfe.id.au/tags/developer-tools/</link><description>Recent content in Developer Tools on Mark Wolfe's Blog</description><generator>Hugo</generator><language>en-AU</language><lastBuildDate>Fri, 12 Jun 2026 08:55:22 +1000</lastBuildDate><atom:link href="https://www.wolfe.id.au/tags/developer-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>AI Is Bringing Mashups Back</title><link>https://www.wolfe.id.au/2026/06/12/ai-is-bringing-mashups-back/</link><pubDate>Fri, 12 Jun 2026 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2026/06/12/ai-is-bringing-mashups-back/</guid><description>&lt;p&gt;A &lt;a class="blog-link" href="https://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29" rel="noopener noreferrer"&gt;mashup&lt;/a&gt;
 is a term that became popular in the 2010s for applications that combined two or more data sources into a single user interface. Recently, I have seen a steady stream of AI-generated side projects, small apps, slide decks, and useful tools showing up on social media, often built by people who have never tried this before. With the advent of &lt;a class="blog-link" href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;
 and &lt;a class="blog-link" href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;
, it has never been easier to integrate disparate data and build something useful.&lt;/p&gt;</description></item><item><title>How I Work with AI Coding Agents</title><link>https://www.wolfe.id.au/2025/12/07/how-i-work-with-ai-coding-agents/</link><pubDate>Sun, 07 Dec 2025 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2025/12/07/how-i-work-with-ai-coding-agents/</guid><description>&lt;p&gt;For anyone who has been following AI and software development, things are changing rapidly, this includes how we build software.&lt;/p&gt;
&lt;p&gt;Over the last few months, I have found myself going from working alone to working with an AI agent, such as &lt;a class="blog-link" href="https://claude.ai/" rel="noopener noreferrer"&gt;Anthropic&amp;rsquo;s Claude&lt;/a&gt;
, &lt;a class="blog-link" href="https://openai.com/codex/" rel="noopener noreferrer"&gt;OpenAI&amp;rsquo;s Codex&lt;/a&gt;
, &lt;a class="blog-link" href="https://ampcode.com/" rel="noopener noreferrer"&gt;amp&lt;/a&gt;
 or &lt;a class="blog-link" href="https://geminicli.com/" rel="noopener noreferrer"&gt;Google&amp;rsquo;s Gemini CLI&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;This change has been both exciting and challenging. With the help of this AI agent, I have been able to delegate tasks and focus on the most important things.&lt;/p&gt;</description></item><item><title>Why Connect RPC is a great choice for building APIs</title><link>https://www.wolfe.id.au/2025/12/02/why-connect-rpc-is-a-great-choice-for-building-apis/</link><pubDate>Tue, 02 Dec 2025 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2025/12/02/why-connect-rpc-is-a-great-choice-for-building-apis/</guid><description>&lt;p&gt;&lt;a class="blog-link" href="https://connectrpc.com/" rel="noopener noreferrer"&gt;Connect RPC&lt;/a&gt;
 is a suite of libraries which enable you to build HTTP based APIs which are gRPC compatible. It provides a bridge between &lt;a class="blog-link" href="https://grpc.io/" rel="noopener noreferrer"&gt;gRPC&lt;/a&gt;
 and HTTP/1.1, letting you leverage HTTP/2&amp;rsquo;s multiplexing and performance benefits while still supporting HTTP/1.1 clients. This makes it a great solution for teams looking to get the performance benefits of gRPC, while maintaining broad client compatibility.&lt;/p&gt;
&lt;p&gt;HTTP/2&amp;rsquo;s multiplexing and binary framing make it significantly more efficient than HTTP/1.1, reducing latency and improving throughput. Connect RPC lets you harness these benefits while maintaining broad client compatibility for services that can&amp;rsquo;t yet support HTTP/2.&lt;/p&gt;</description></item><item><title>Why OIDC?</title><link>https://www.wolfe.id.au/2025/11/16/why-oidc/</link><pubDate>Sun, 16 Nov 2025 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2025/11/16/why-oidc/</guid><description>&lt;p&gt;Over the last few years there has been a push away from using machine identity for continuous integration (CI) agents, or runners, and instead use a more targeted, least privileged approach to authentication and authorization. This is where &lt;a class="blog-link" href="https://openid.net/developers/how-connect-works/" rel="noopener noreferrer"&gt;OIDC (OpenID Connect)&lt;/a&gt;
 comes in, which is a method of authentication used to bridge between the CI provider and cloud services such as AWS, Azure, and Google Cloud.&lt;/p&gt;
&lt;p&gt;In this model the CI provider acts as an identity provider, issuing tokens to the CI runner/agent which include a set of claims identifying the owner, pipeline, workflow and job that is being executed. This is then used to authenticate with the cloud service, and access the resources that the pipeline, workflow and job require.&lt;/p&gt;</description></item><item><title>Using a Monorepo to publish Lean Go Packages with Workspaces</title><link>https://www.wolfe.id.au/2023/12/28/using-a-monorepo-to-publish-lean-go-packages-with-workspaces/</link><pubDate>Thu, 28 Dec 2023 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2023/12/28/using-a-monorepo-to-publish-lean-go-packages-with-workspaces/</guid><description>&lt;p&gt;As a developer who works with Go in my day-to-day development, I constantly struggle with third party packages or tools which bring in a lot of dependencies. This is especially true when you&amp;rsquo;re trying to keep your project dependencies up to date, while &lt;a class="blog-link" href="https://github.com/dependabot" rel="noopener noreferrer"&gt;dependabot&lt;/a&gt;
, and other security software, is screaming about vulnerabilities in dependencies of dependencies.&lt;/p&gt;
&lt;p&gt;This is especially a problem with two common packages I use:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Any HTTP adaptor package, which ships with integrations for multiple server packages, such as Gin, Echo, and others.&lt;/li&gt;
&lt;li&gt;Any package which uses docker to test with containers.&lt;/li&gt;
&lt;li&gt;Projects which include examples with their own dependencies.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To break this cycle in my own projects, and packages I publish privately in work projects, I have adopted the use of &lt;a class="blog-link" href="https://go.dev/ref/mod#workspaces" rel="noopener noreferrer"&gt;Go workspaces&lt;/a&gt;
, which allows me to create a monorepo broken up into multiple packages, and then publish one or more of these packages.&lt;/p&gt;</description></item><item><title>Getting started with AI for developers</title><link>https://www.wolfe.id.au/2023/12/16/getting-started-with-ai-for-developers/</link><pubDate>Sat, 16 Dec 2023 08:55:22 +1000</pubDate><guid>https://www.wolfe.id.au/2023/12/16/getting-started-with-ai-for-developers/</guid><description>&lt;p&gt;As a software developer, I have seen a lot of changes over the years, however few have been as drastic as the rise of artificial intelligence. There are a growing list of tools and services using this technology to help developers with day to day tasks, and speed up their work, however few of these tools help them understand how this technology works, and what it can do. So I wanted to share some of my own tips on how to get started with AI.&lt;/p&gt;</description></item></channel></rss>