<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Software Development on Software Craftsperson</title>
    <link>https://www.softwarecraftsperson.com/categories/software-development/</link>
    <description>Recent content in Software Development on Software Craftsperson</description>
    <image>
      <title>Software Craftsperson</title>
      <url>https://www.softwarecraftsperson.com/logos/web/png/Color%20logo%20-%20no%20background.png</url>
      <link>https://www.softwarecraftsperson.com/logos/web/png/Color%20logo%20-%20no%20background.png</link>
    </image>
    <generator>Hugo -- 0.147.1</generator>
    <language>en</language>
    <lastBuildDate>Thu, 08 Oct 2026 00:19:06 +0100</lastBuildDate>
    <atom:link href="https://www.softwarecraftsperson.com/categories/software-development/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Is an AI Agent? The Loop Behind the Hype</title>
      <link>https://www.softwarecraftsperson.com/posts/what-is-an-ai-agent/</link>
      <pubDate>Thu, 08 Oct 2026 00:19:06 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/what-is-an-ai-agent/</guid>
      <description>An AI agent is a loop: the model proposes, the harness runs tools and feeds results back. How the loop works, how it ends, and why it has no &amp;#39;impossible&amp;#39; exit.</description>
    </item>
    <item>
      <title>Prompting Essentials for Software Engineers: 4 Practical Strategies for Better AI Output</title>
      <link>https://www.softwarecraftsperson.com/posts/prompting-essentials-for-software-engineers/</link>
      <pubDate>Sun, 29 Mar 2026 21:43:23 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/prompting-essentials-for-software-engineers/</guid>
      <description>Four practical prompting strategies software engineers can use with LLMs to gather better requirements, weigh trade-offs and ship higher-quality code.</description>
    </item>
    <item>
      <title>Start Here to Learn Large Language Models: Best Andrej Karpathy Resources</title>
      <link>https://www.softwarecraftsperson.com/posts/learn-large-language-models-karpathy-resources/</link>
      <pubDate>Sat, 07 Mar 2026 21:38:10 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/learn-large-language-models-karpathy-resources/</guid>
      <description>Start your LLM learning journey with Andrej Karpathy&amp;#39;s best talks on pretraining, finetuning, scaling laws, and practical model-building resources.</description>
    </item>
    <item>
      <title>From Concept to Production: Building CalOohPay with AI-Assisted Development</title>
      <link>https://www.softwarecraftsperson.com/posts/2026-01-31-ai-assisted-development-caloohpay-journey/</link>
      <pubDate>Sat, 31 Jan 2026 10:00:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2026-01-31-ai-assisted-development-caloohpay-journey/</guid>
      <description>How I built CalOohPay, from a CLI tool to a web app, with GitHub Copilot and Claude Sonnet: what AI-assisted coding sped up and why clear constraints mattered.</description>
    </item>
    <item>
      <title>What did I learn from The Unicorn Project?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-12-24-unicorn-project-summary/</link>
      <pubDate>Sat, 24 Dec 2022 00:16:02 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-12-24-unicorn-project-summary/</guid>
      <description>What I learnt from The Unicorn Project, Gene Kim&amp;#39;s follow-up to The Phoenix Project: a summary of the book and its five ideals, from locality to customer focus.</description>
    </item>
    <item>
      <title>Invisible Work and how you can tame it in your organisation</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-08-07-invisible-work/</link>
      <pubDate>Sun, 07 Aug 2022 16:25:57 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-08-07-invisible-work/</guid>
      <description>What invisible work is, why it hurts leaders and team members alike, and the true story of how one team made its hidden work visible and got it under control.</description>
    </item>
    <item>
      <title>Azure Service Principal Credential Reset</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-04-23-az-sp-credential-reset/</link>
      <pubDate>Sat, 23 Apr 2022 17:21:09 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-04-23-az-sp-credential-reset/</guid>
      <description>My GitHub Actions deploy failed because an Azure service principal&amp;#39;s client secret had expired. How to reset the credential in the Azure portal or with the CLI.</description>
    </item>
    <item>
      <title>What are Git submodules?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-02-19-git-sub-modules/</link>
      <pubDate>Sat, 19 Feb 2022 20:39:46 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-02-19-git-sub-modules/</guid>
      <description>What Git submodules are and how to use them: adding a repository as a submodule, cloning a repo that has submodules, and pulling the submodule&amp;#39;s latest version.</description>
    </item>
    <item>
      <title>What is Agile Scrum?</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-02-14-agile-scrum-series/</link>
      <pubDate>Mon, 14 Feb 2022 02:13:20 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-02-14-agile-scrum-series/</guid>
      <description>What is Agile, what is Scrum, and are they the same thing? The Agile values, Scrum&amp;#39;s three pillars of empiricism, its values and its three accountabilities.</description>
    </item>
    <item>
      <title>Building software quality from Day 1 using Lean Quality Assurance</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-01-30-good-quality-assurance/</link>
      <pubDate>Sun, 30 Jan 2022 16:24:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-01-30-good-quality-assurance/</guid>
      <description>How to build quality in from day one with lean QA: teams owning quality, cutting waste in testing, finding bugs sooner and getting everyone doing agile testing.</description>
    </item>
    <item>
      <title>Customize your Mac or Linux prompt or terminal</title>
      <link>https://www.softwarecraftsperson.com/posts/2022-01-23-shell-customize-mac-linux/</link>
      <pubDate>Sun, 23 Jan 2022 10:10:13 -0800</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2022-01-23-shell-customize-mac-linux/</guid>
      <description>How I customised my terminal prompt on macOS and Linux to show the current git branch and more, coming back to the command line as an engineering manager.</description>
    </item>
    <item>
      <title>How to use complex settings in Azure Functions using Options pattern and Dependency injection</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-di-opts/</link>
      <pubDate>Fri, 22 Oct 2021 22:25:15 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-09-19-az-fn-di-opts/</guid>
      <description>Using the options pattern and dependency injection for settings in Azure Functions, and the local.settings.json naming rules I had been ignoring.</description>
    </item>
    <item>
      <title>DevOps, Continuous Integration, Delivery and Deployment</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-08-09-ci-cd-deploy-strategies/</link>
      <pubDate>Sun, 29 Aug 2021 16:36:18 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-08-09-ci-cd-deploy-strategies/</guid>
      <description>What DevOps, continuous integration, continuous delivery and continuous deployment mean, why they matter and why many companies still don&amp;#39;t practise them.</description>
    </item>
    <item>
      <title>What is Software Architecture and what does a software architect do?</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-07-24-software-architecture/</link>
      <pubDate>Sat, 24 Jul 2021 15:37:38 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-07-24-software-architecture/</guid>
      <description>What software architecture is, what a software architect does and how architecture differs from design, with an example of improving a system&amp;#39;s design.</description>
    </item>
    <item>
      <title>Azure Pipelines and test code coverage for Dotnet core projects</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-29-az-pipeline-test-coverage/</link>
      <pubDate>Tue, 29 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-29-az-pipeline-test-coverage/</guid>
      <description>Azure Pipelines and dotnet core test coverage: How to configure your pipeline to generate test code coverage for continuous integration quality checks.</description>
    </item>
    <item>
      <title>Entity Framework Core: Configure Database Connection using Azure Service Token Provider</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-22-az-ad-sql-conn/</link>
      <pubDate>Sat, 26 Jun 2021 11:44:22 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-22-az-ad-sql-conn/</guid>
      <description>Connecting EF Core to Azure SQL with Azure AD access tokens, the right way, using a DbConnectionInterceptor, plus the newer connection-string-only option.</description>
    </item>
    <item>
      <title>Proxy vs Reverse Proxy - What are they?</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-06-06-proxy-reverse/</link>
      <pubDate>Sun, 06 Jun 2021 15:25:41 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-06-06-proxy-reverse/</guid>
      <description>What a proxy server and a reverse proxy are, what each one is useful for and how they differ, explained simply for developers new to networking.</description>
    </item>
    <item>
      <title>Git, Case Sensitivity and Github actions</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-15-git-case-sensitivity/</link>
      <pubDate>Sat, 15 May 2021 22:50:18 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-15-git-case-sensitivity/</guid>
      <description>How a mixed-case project name on Windows broke my GitHub Actions build on Linux: Git&amp;#39;s case sensitivity, why it bit me and how to fix and avoid the problem.</description>
    </item>
    <item>
      <title>Cohesion and Coupling - two important concepts to understand when building good software</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-09-cohesion-coupling/</link>
      <pubDate>Sun, 09 May 2021 22:55:34 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-09-cohesion-coupling/</guid>
      <description>What cohesion and coupling mean in software design, where the ideas came from in structured design, and how they differ, with references for further reading.</description>
    </item>
    <item>
      <title>Using ProblemDetails in .NET Core 3.1 with C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-04-problem-details/</link>
      <pubDate>Sat, 08 May 2021 15:30:08 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-04-problem-details/</guid>
      <description>How to return consistent API errors with ProblemDetails in ASP.NET Core: what RFC 7807 problem details are, handling exceptions and customising responses.</description>
    </item>
    <item>
      <title>.NET (dotnet) Framework and Core and things</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-05-07-dotnet/</link>
      <pubDate>Fri, 07 May 2021 21:48:44 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-05-07-dotnet/</guid>
      <description>ASP.NET, .NET Framework, .NET Core: what each one is, how they differ, what the ASP part means and how server-side web apps work, explained in plain terms.</description>
    </item>
    <item>
      <title>Event Storming</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-04-25-event-storming/</link>
      <pubDate>Sun, 25 Apr 2021 18:41:27 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-04-25-event-storming/</guid>
      <description>What Event Storming is and how it uncovers hidden domain complexity: domain events, hotspots, external systems and running Big Picture Event Storming workshops.</description>
    </item>
    <item>
      <title>Why Domain Driven Design</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-04-08-why-domain-driven-design/</link>
      <pubDate>Thu, 08 Apr 2021 22:38:30 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-04-08-why-domain-driven-design/</guid>
      <description>Why Domain-Driven Design helps tame complex software: how complexity creeps in, how misunderstood problems derail projects, and why talking to users matters.</description>
    </item>
    <item>
      <title>Web API Versioning</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-03-12-web-api-versioning/</link>
      <pubDate>Fri, 12 Mar 2021 22:35:38 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-03-12-web-api-versioning/</guid>
      <description>How to version an ASP.NET Core Web API without breaking the clients that consume it, illustrated with a sample weather forecast API on GitHub.</description>
    </item>
    <item>
      <title>Azure Functions - Overview and tutorial</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-24-azure-functions-overview-and-tutorial/</link>
      <pubDate>Sun, 24 Jan 2021 22:44:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-24-azure-functions-overview-and-tutorial/</guid>
      <description>An introduction to Azure Functions, with a hands-on GitHub tutorial that builds an HTTP-triggered function and sends its output to an Azure Storage queue.</description>
    </item>
    <item>
      <title>Quirky Arrays in C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-14-quirky-arrays-in-c/</link>
      <pubDate>Thu, 14 Jan 2021 21:30:16 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-14-quirky-arrays-in-c/</guid>
      <description>Why C# arrays caught me out on a matrix transpose problem: single-dimensional, multidimensional (rectangular) and jagged arrays explained in plain words.</description>
    </item>
    <item>
      <title>HashSet in C#</title>
      <link>https://www.softwarecraftsperson.com/posts/2021-01-10-hashset-in-csharp/</link>
      <pubDate>Sun, 10 Jan 2021 13:08:58 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2021-01-10-hashset-in-csharp/</guid>
      <description>How HashSet&amp;lt;T&amp;gt; stores unique elements in C#, with console examples of UnionWith, ExceptWith and SymmetricExceptWith, and a look at its performance.</description>
    </item>
    <item>
      <title>Application Insights in .Net Core App</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-20-application-insights-in-net-core-app/</link>
      <pubDate>Sun, 20 Dec 2020 12:15:55 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-20-application-insights-in-net-core-app/</guid>
      <description>What Application Insights is and how it works in a .NET Core app: adding the NuGet package and instrumentation key, and the telemetry it collects for you.</description>
    </item>
    <item>
      <title>Semantic versioning - Semver - An introduction - node package manager syntax and quirks</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-semantic-versioning-semver-introduction/</link>
      <pubDate>Sun, 06 Dec 2020 18:33:07 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-semantic-versioning-semver-introduction/</guid>
      <description>What semantic versioning is and why it matters: major, minor and patch versions explained with examples, and how npm uses caret and tilde in package.json.</description>
    </item>
    <item>
      <title>Node - Get started</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-node-get-started/</link>
      <pubDate>Sun, 06 Dec 2020 17:37:59 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-node-get-started/</guid>
      <description>Getting started with Node: what the runtime is, how npm fits in, and the different ways to run JavaScript with it, starting with the REPL mode.</description>
    </item>
    <item>
      <title>Node and npm: The intro I wish, I got when I began web development</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-12-06-node-and-npm-the-intro-i-wish-i-got-when-i-began-web-development/</link>
      <pubDate>Sun, 06 Dec 2020 14:30:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-12-06-node-and-npm-the-intro-i-wish-i-got-when-i-began-web-development/</guid>
      <description>The introduction to Node and npm I wish I&amp;#39;d had: what a JavaScript runtime is, why Node took off, and what npm, its package manager, does for you.</description>
    </item>
    <item>
      <title>Application Insights, SeriLog and .NET Core</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-28-application-insights-serilog-and-net-core/</link>
      <pubDate>Sat, 28 Nov 2020 07:27:55 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-28-application-insights-serilog-and-net-core/</guid>
      <description>Setting up Application Insights with Serilog in a .NET Core app: what Application Insights does, why logging deserves attention, and how to wire it up.</description>
    </item>
    <item>
      <title>Feature Toggles</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-08-feature-toggles/</link>
      <pubDate>Sun, 08 Nov 2020 16:07:49 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-08-feature-toggles/</guid>
      <description>What feature toggles are, the two broad types, and how pairing them with trunk-based development makes continuous integration far less painful.</description>
    </item>
    <item>
      <title>A static responsive website as an Azure AppService</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-31-static-website-as-an-azure-appservice/</link>
      <pubDate>Sat, 31 Oct 2020 21:06:06 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-31-static-website-as-an-azure-appservice/</guid>
      <description>Building a static responsive website with the viewport meta tag and CSS Flexbox, then hosting it on Azure App Service with a custom domain and an SSL binding.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 4</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-11-12-ef-core-3-1-part-4/</link>
      <pubDate>Sun, 25 Oct 2020 17:53:59 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-11-12-ef-core-3-1-part-4/</guid>
      <description>Entity Framework Core 3.1, part 4: when to use database views, stored procedures and raw SQL with EF Core, and how to keep them in your migrations.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 3</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-3/</link>
      <pubDate>Sun, 25 Oct 2020 17:22:33 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-3/</guid>
      <description>Entity Framework Core 3.1, part 3: updating related data when the context isn&amp;#39;t tracking it, and working with many-to-many relationships and join tables.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 2</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-2/</link>
      <pubDate>Sun, 25 Oct 2020 17:16:49 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-25-ef-core-3-1-part-2/</guid>
      <description>Entity Framework Core 3.1, part 2: reading and writing data, how change tracking works behind SaveChanges, and logging the SQL EF Core generates.</description>
    </item>
    <item>
      <title>Entity Framework Core 3.1 - Part 1</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-24-ef-core-3-1-part-1/</link>
      <pubDate>Sun, 25 Oct 2020 17:04:36 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-24-ef-core-3-1-part-1/</guid>
      <description>Entity Framework Core 3.1, part 1: what an ORM is, what EF Core brings to .NET, and the essentials of data models and migrations you must know.</description>
    </item>
    <item>
      <title>Containers! Docker! Virtual Machines! What exactly do they do?</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-04-docker/</link>
      <pubDate>Sun, 04 Oct 2020 11:58:01 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-04-docker/</guid>
      <description>When should you use a container? What containers, Docker, virtual machines and hypervisors are, how containers compare with VMs and why Docker took off.</description>
    </item>
    <item>
      <title>Git: Part 5 - Reset and further</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-5-reset-and-further/</link>
      <pubDate>Sat, 03 Oct 2020 13:30:31 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-5-reset-and-further/</guid>
      <description>A practical introduction to Git, part 5: undoing changes with git reset, and how git reflog helps you recover work you thought you had lost for good.</description>
    </item>
    <item>
      <title>Git: Part 4 - Branching and more</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-4-branching-and-more/</link>
      <pubDate>Sat, 03 Oct 2020 13:09:57 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-4-branching-and-more/</guid>
      <description>A practical introduction to Git, part 4: what branches and HEAD are, and the two ways to integrate changes between branches, merging and rebasing.</description>
    </item>
    <item>
      <title>Git: Part 3 - Hands on</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-3-hands-on/</link>
      <pubDate>Sat, 03 Oct 2020 12:39:45 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-3-hands-on/</guid>
      <description>A practical introduction to Git, part 3: hands-on commands to create a repository, configure Git, check status, make commits and browse the commit history.</description>
    </item>
    <item>
      <title>Git: Part 2 - Some essential concepts</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-2-some-essential-concepts/</link>
      <pubDate>Sat, 03 Oct 2020 12:36:03 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-2-some-essential-concepts/</guid>
      <description>A practical introduction to Git, part 2: remotes and hosting platforms, cloning and fetching, and how Git stores your work as trees, blobs and commits.</description>
    </item>
    <item>
      <title>Git: Part 1 - An introduction</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-1-an-introduction/</link>
      <pubDate>Sat, 03 Oct 2020 12:30:48 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-10-03-git-part-1-an-introduction/</guid>
      <description>A practical introduction to Git, part 1: what version control is and why you need it, how to install Git, and getting started with Git Bash on Windows.</description>
    </item>
    <item>
      <title>Software and invisibility</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-09-16-software-and-invisibility/</link>
      <pubDate>Wed, 16 Sep 2020 20:29:26 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-09-16-software-and-invisibility/</guid>
      <description>Software development is invisible to most stakeholders. Why &amp;#39;90% done&amp;#39; worries people, and practical ways engineers can make their progress visible.</description>
    </item>
    <item>
      <title>Software design - Why?</title>
      <link>https://www.softwarecraftsperson.com/posts/2020-06-27-software-design-why/</link>
      <pubDate>Sat, 27 Jun 2020 14:31:41 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2020-06-27-software-design-why/</guid>
      <description>Why jumping straight into code backfires: what software design is, why requirements are never a complete spec, and how a design blueprint helps.</description>
    </item>
    <item>
      <title>LINQ - watchout for slow queries</title>
      <link>https://www.softwarecraftsperson.com/posts/2016-02-14-linq-watchout-for-slow-queries/</link>
      <pubDate>Sun, 14 Feb 2016 19:19:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2016-02-14-linq-watchout-for-slow-queries/</guid>
      <description>Why LINQ queries can get slow: lessons from an inherited job scheduling app whose core table used a GUID primary key as a clustered index, and what to look for.</description>
    </item>
    <item>
      <title>Getting to know LINQ</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-07-27-getting-to-know-linq/</link>
      <pubDate>Sun, 27 Jul 2014 20:54:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-07-27-getting-to-know-linq/</guid>
      <description>An introduction to LINQ, Language Integrated Query in C#: what it is, the query and lambda syntaxes, and the basics of querying databases with it.</description>
    </item>
    <item>
      <title>Refactoring - Code written by others</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-04-21-refactoring-code-written-by-others/</link>
      <pubDate>Mon, 21 Apr 2014 01:26:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-04-21-refactoring-code-written-by-others/</guid>
      <description>Refactoring a legacy codebase written by others: why special-casing scenarios is the enemy of maintainability, and why I find refactoring rewarding.</description>
    </item>
    <item>
      <title>Perl Catalyst - VBox Network Configuration on Ubuntu</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-vbox-network/</link>
      <pubDate>Sun, 09 Feb 2014 22:35:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-vbox-network/</guid>
      <description>Running the Perl Catalyst tutorial&amp;#39;s virtual machine inside another VM on Ubuntu, and configuring the VirtualBox network adapter and NAT so the nested VM works.</description>
    </item>
    <item>
      <title>Perl Catalyst Tutorial needs us to download a virtual machine</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-tutorial-needs-us-to/</link>
      <pubDate>Sun, 09 Feb 2014 11:29:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-09-perl-catalyst-tutorial-needs-us-to/</guid>
      <description>Getting started with Catalyst, a popular Perl MVC web framework, and why its official tutorial asks you to download and run a ready-made virtual machine.</description>
    </item>
    <item>
      <title>Perl module installation - Ubuntu</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-05-perl-module-installation-ubuntu/</link>
      <pubDate>Wed, 05 Feb 2014 22:59:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-05-perl-module-installation-ubuntu/</guid>
      <description>A quick tip for Ubuntu: install a Perl module from CPAN in a single line with perl -MCPAN -e &amp;#39;install ModuleName&amp;#39;, run with sudo for a system-wide install.</description>
    </item>
    <item>
      <title>Perl - Modules and path on disk</title>
      <link>https://www.softwarecraftsperson.com/posts/2014-02-02-perl-modules-and-path-on-disk/</link>
      <pubDate>Sun, 02 Feb 2014 20:51:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2014-02-02-perl-modules-and-path-on-disk/</guid>
      <description>How to find where a Perl module is installed on disk, so the CPAN module versions behind your scripts stay consistent across different operating systems.</description>
    </item>
    <item>
      <title>Vertica and K-Safety</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-11-06-vertica-and-k-safety/</link>
      <pubDate>Wed, 06 Nov 2013 01:41:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-11-06-vertica-and-k-safety/</guid>
      <description>What K-safety means in Vertica: how duplicate copies of projections keep the cluster available when nodes fail, and why a table can&amp;#39;t go below the system&amp;#39;s K.</description>
    </item>
    <item>
      <title>Perl - Autovivification</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-11-04-perl-autovivification/</link>
      <pubDate>Mon, 04 Nov 2013 23:41:00 +0000</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-11-04-perl-autovivification/</guid>
      <description>What autovivification means in Perl: how assigning to a non-existent entry in a nested hash silently creates the missing levels, and when that can bite you.</description>
    </item>
    <item>
      <title>Software Engineers should read this</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-10-14-software-engineers-should-read-this/</link>
      <pubDate>Mon, 14 Oct 2013 10:21:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-10-14-software-engineers-should-read-this/</guid>
      <description>A short recommendation: every programmer should read and understand Martin Fowler&amp;#39;s IEEE Software column on making implicit design and behaviour explicit.</description>
    </item>
    <item>
      <title>SQuirreL graphical user interface for Vertica</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-09-24-squirrel-graphical-user-interface-for/</link>
      <pubDate>Tue, 24 Sep 2013 17:21:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-09-24-squirrel-graphical-user-interface-for/</guid>
      <description>Setting up SQuirreL SQL, a free, open-source Java database client, as a graphical interface for HP Vertica: adding the driver, an alias and the connection.</description>
    </item>
    <item>
      <title>Vertica Query Performance Tuning - An introduction</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-09-12-vertica-query-performance-tuning/</link>
      <pubDate>Thu, 12 Sep 2013 13:36:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-09-12-vertica-query-performance-tuning/</guid>
      <description>An introduction to Vertica query performance tuning: how tables map to projections across nodes, and the changes that sped up my own slow analytical queries.</description>
    </item>
    <item>
      <title>Vertica and its version - Find out using SQL</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-24-vertica-and-its-version-find-out-using/</link>
      <pubDate>Mon, 24 Jun 2013 22:09:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-24-vertica-and-its-version-find-out-using/</guid>
      <description>How to find out which version of Vertica you are running with a simple SQL query, even on a shared development cluster without database administrator access.</description>
    </item>
    <item>
      <title>Exploring Vertica&#39;s INTERPOLATE predicate </title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-18-exploring-verticas-interpolate-predicate/</link>
      <pubDate>Tue, 18 Jun 2013 00:55:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-18-exploring-verticas-interpolate-predicate/</guid>
      <description>Exploring Vertica&amp;#39;s INTERPOLATE predicate, which joins tables and fills gaps with the last known value, with simple examples and the case that stumped me.</description>
    </item>
    <item>
      <title>Vertica - Calendar table with dates from a start date to an end date using analytical SQL</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-18-vertica-calendar-table-with-dates-from/</link>
      <pubDate>Tue, 18 Jun 2013 00:50:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-18-vertica-calendar-table-with-dates-from/</guid>
      <description>How to build a calendar table of every date between a start and end date in Vertica using plain SQL rather than a stored procedure, with a Stack Overflow link.</description>
    </item>
    <item>
      <title>Viewing function definitions in Vertica</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-05-viewing-function-definitions-in-vertica/</link>
      <pubDate>Wed, 05 Jun 2013 09:28:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-05-viewing-function-definitions-in-vertica/</guid>
      <description>Why reading user-defined function definitions from Vertica&amp;#39;s USER_FUNCTIONS table truncates them, and how EXPORT_OBJECTS() shows the full source instead.</description>
    </item>
    <item>
      <title>Setup DBVisualizer with an HP Vertica DB connection</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-05-setup-dbvisualizer-with-hp-vertica-db/</link>
      <pubDate>Wed, 05 Jun 2013 00:03:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-05-setup-dbvisualizer-with-hp-vertica-db/</guid>
      <description>Step-by-step setup of DbVisualizer with an HP Vertica database connection on Windows: installing the JDBC driver, configuring it and connecting to the cluster.</description>
    </item>
    <item>
      <title>MySQL Partitioning Tutorial</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-06-03-mysql-partitioning-tutorial/</link>
      <pubDate>Mon, 03 Jun 2013 20:57:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-06-03-mysql-partitioning-tutorial/</guid>
      <description>A pointer to a clear MySQL partitioning tutorial that helped me partition data by how it is accessed, while mapping an object database into a relational one.</description>
    </item>
    <item>
      <title>VSQL extract data into file</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-05-30-vsql-extract-data-into-file/</link>
      <pubDate>Thu, 30 May 2013 17:34:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-05-30-vsql-extract-data-into-file/</guid>
      <description>How to extract query results from a vsql session straight into a file, ready to paste into Excel for someone less familiar with Vertica, without a script.</description>
    </item>
    <item>
      <title>Vertica DELETE columns from one table using data from another</title>
      <link>https://www.softwarecraftsperson.com/posts/2013-05-30-vertica-delete-columns-from-one-table/</link>
      <pubDate>Thu, 30 May 2013 16:34:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2013-05-30-vertica-delete-columns-from-one-table/</guid>
      <description>How to delete rows in one Vertica table based on matching records in another, when Vertica doesn&amp;#39;t support joins in DELETE statements the way MySQL does.</description>
    </item>
    <item>
      <title>Surrogate keys v/s natural keys</title>
      <link>https://www.softwarecraftsperson.com/posts/2012-07-18-surrogate-keys-vs-natural-keys/</link>
      <pubDate>Wed, 18 Jul 2012 13:37:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2012-07-18-surrogate-keys-vs-natural-keys/</guid>
      <description>Surrogate keys or natural keys? Designing tables for financial securities that carry many real-world identifiers, such as SEDOL, CUSIP and ISIN codes.</description>
    </item>
    <item>
      <title>Static in C&#43;&#43;</title>
      <link>https://www.softwarecraftsperson.com/posts/2012-07-18-static-in-c/</link>
      <pubDate>Wed, 18 Jul 2012 11:02:00 +0100</pubDate>
      <guid>https://www.softwarecraftsperson.com/posts/2012-07-18-static-in-c/</guid>
      <description>The static keyword in C&#43;&#43; means different things in different contexts: variables that live for the whole program, and class members shared by every object.</description>
    </item>
  </channel>
</rss>
