Skip to content
C# 11.0 new features: ref fields and the scoped keyword

C# 11.0 new features: ref fields and the scoped keyword

Ian Griffiths

C# 11.0 expanded high-performance, low-allocation functionality. This post describes the importance of the added support for ref fields, and how the scoped keyword relates.
adr - A .NET Tool for Creating & Managing Architecture Decision Records

adr - A .NET Tool for Creating & Managing Architecture Decision Records

Howard van Rooijen

Architectural Decision Records (ADRs) capture context, options, decisions, and consequences. dotnet-adr is a .NET tool for managing ADRs.
Data and AI Engineering Maturity - Fix our problems before we hit the buffers

Data and AI Engineering Maturity - Fix our problems before we hit the buffers

Matthew Adams

As data and AI become the engine of business change, we need to learn the lessons of the past to avoid expensive failures.
No-code/Low-code is software DIY - how do you avoid DIY disaster?

No-code/Low-code is software DIY - how do you avoid DIY disaster?

James Broome

No-code/Low-code democratizes software development with little to no coding skills needed. But how do you evaluate if software DIY is the right choice for you?
Architecture Decision Records

Architecture Decision Records

James Broome

Explore the benefits of Architecture Decision Records (ADRs) in technical design, with real-world examples applied to different scenarios.
Agile teams often get their planning and priorities wrong

Agile teams often get their planning and priorities wrong

Matthew Adams

Do you struggle to manage conflicting demands from multiple stakeholders, even when they have agreed about the relative priority of their requests? Apply a budgeting methodology to agile projects for better planning and communication with the team and wider stakeholders.
Rx.NET v6.0 Now Available

Rx.NET v6.0 Now Available

Ian Griffiths

For the first time since 2020, a new release of Rx.NET is available, supporting .NET 6 and .NET 7.
Version Control in Databricks

Version Control in Databricks

Elisenda Gascon

Explore how to implement source control in Databricks notebooks, promoting software engineering best practices.
Exploring OpenChain: From License Compliance to Security Assurance

Exploring OpenChain: From License Compliance to Security Assurance

Charlotte Gayton

Open-source software has become an essential part of many organisation's software supply chain, however, this poses challenges with license compliance and security assurance.
C# 11.0 new features: Span<char> pattern matching

C# 11.0 new features: Span<char> pattern matching

Ian Griffiths

C# 11.0 adds some new pattern matching features. In this post, Ian shows the new support for matching lists.
Ask the right questions to get your data insights projects back on track

Ask the right questions to get your data insights projects back on track

Matthew Adams

Learn about the thinking behind endjin's Power BI Maturity assessment by applying Wardley Doctrine, and asking more questions.
Using the Playwright C# SDK to automate 2FA authentication for AAD and MSA

Using the Playwright C# SDK to automate 2FA authentication for AAD and MSA

Howard van Rooijen

Learn to configure AAD or MSA 2FA profiles for UI automation testing with Time-based One-Time Passwords.
Creating Pester Unit Tests in PowerShell

Creating Pester Unit Tests in PowerShell

Charlotte Gayton

Why you should make writing unit tests a regular practice and how they will improve your code. This blog explains how to write unit tests in PowerShell using Pester.
C# 11.0 new features: list pattern matching

C# 11.0 new features: list pattern matching

Ian Griffiths

C# 11.0 adds some new pattern matching features. In this post, Ian shows the new support for matching lists.
Data validation in Python: a look into Pandera and Great Expectations

Data validation in Python: a look into Pandera and Great Expectations

Liam Mooney

Implement Python data validation with Pandera & Great Expectations in this comparison of their features and use cases.
How to setup Python, PyEnv & Poetry on Windows

How to setup Python, PyEnv & Poetry on Windows

James Dawson

Explore using Python virtual environments & Poetry on Windows for smoother workflows, with a script & guide to enhance your dependency management experience.
C# 11.0 new features: newlines in string interpolation expressions

C# 11.0 new features: newlines in string interpolation expressions

Ian Griffiths

C# 11.0 enhances string literals with new features. Discover how multiline interpolated strings boost readability in Ian's insightful post.
C# 11.0 new features: UTF-8 string literals

C# 11.0 new features: UTF-8 string literals

Ian Griffiths

C# 11.0 adds various improvements to string literals. In this post, Ian explains how we can now create UTF-8 string literals.
Adventures in GitHub Actions: Episode 1 - Goodbye Azure DevOps, Hello GitHub Actions

Adventures in GitHub Actions: Episode 1 - Goodbye Azure DevOps, Hello GitHub Actions

James Dawson

This series will follow our ongoing journey of migrating the CI/CD pipelines for our many Open Source repositories, from Azure DevOps to GitHub Actions.
How To Implement Continuous Deployment of Python Packages with GitHub Actions

How To Implement Continuous Deployment of Python Packages with GitHub Actions

Liam Mooney

Discover using GitHub Actions for auto-updates to Python packages on PyPI, assessing its role in Continuous Deployment.
C# 11.0 new features: raw string literals

C# 11.0 new features: raw string literals

Ian Griffiths

C# 11.0 adds various improvements to string literals. In this post, Ian explains how raw string literals can make your code more readable.
How to design APIs for Accessibility

How to design APIs for Accessibility

Matthew Adams

Learn how accessibility-aware API design creates a great experience for all developers, not just those with accessibility needs.
Lazy and once-only C# async initialization

Lazy and once-only C# async initialization

Ian Griffiths

Performing lazy and/or just-once initialization is a simple optimization. But what if the initialization is async?
How to sign your git commits

How to sign your git commits

Charlotte Gayton

Signing git commits proves that you are the author of the code you are pushing up to GitHub, and helps protect the integrity of your software supply chain.
In Defence of Squash Commits

In Defence of Squash Commits

Ian Griffiths

Encapsulation is a powerful tool. Squash commits provide a way to encapsulate Git commit history.
Continuous Integration with GitHub Actions

Continuous Integration with GitHub Actions

Liam Mooney

This post gives an overview of Continuous Integrations and shows how you can implement it with GitHub Actions, with an accompanying example Python project
Publishing Scripts to the PowerShell Gallery

Publishing Scripts to the PowerShell Gallery

James Dawson

Explore how to share a function from a PowerShell module as a standalone script, without maintaining two code versions.
Using Azure CLI Authentication within Local Containers

Using Azure CLI Authentication within Local Containers

James Dawson

Fix broken dev loop with containerized apps on Azure CLI for Windows. Learn a workaround to avoid using outdated Azure CLI versions.
How to apply behaviour driven development to data and analytics projects

How to apply behaviour driven development to data and analytics projects

Barry Smart

In this blog we demonstrate how the Gherkin specification can be adapted to enable BDD to be applied to data engineering use cases.
Extract insights from tag lists using Python Pandas and Power BI

Extract insights from tag lists using Python Pandas and Power BI

Barry Smart

Discover how to extract insights from spreadsheets and CSV files using Pandas and Power BI in this blog post.
Testing Power BI Reports with the ExecuteQueries REST API

Testing Power BI Reports with the ExecuteQueries REST API

James Broome

Explore DAX queries for scenario-based testing in Power BI reports to ensure data model validity, rule adherence, and security maintenance.
Introduction to Containers and Docker

Introduction to Containers and Docker

Liam Mooney

Explore containerisation & Docker for app development & deployment. Learn to create containerised applications with examples in this intro guide.
Why you should care about the Power BI ExecuteQueries API

Why you should care about the Power BI ExecuteQueries API

James Broome

Explore the benefits of Power BI's new ExecuteQueries REST API for developers in tooling, process, and integrations.
Setting up multiple WSL distribution instances

Setting up multiple WSL distribution instances

Mike Evans-Larah

This blog post explains how to set up multiple instances of a Linux distribution in the Windows Subsystem for Linux.
Flex Your DevSecOps Muscles With Bicep (and get started with our cheat sheet)

Flex Your DevSecOps Muscles With Bicep (and get started with our cheat sheet)

Barry Smart

Bicep provides a significant improvement in tooling for organisations seeking to deploy infrastructure as code on Microsoft Azure.
How to enable intra-business communication using user stories, BDD specs and a ubiquitous language

How to enable intra-business communication using user stories, BDD specs and a ubiquitous language

Carmel Eve

Endjin uses user stories, BDD specs, and a ubiquitous language to bridge the communication gap between stakeholders and tech teams.
How to test Azure Synapse notebooks

How to test Azure Synapse notebooks

James Broome

Explore data with Azure Synapse's interactive Spark notebooks, integrated with Pipelines & monitoring tools. Learn how to add tests for business rule validation.
How do I know if my data solutions are accurate?

How do I know if my data solutions are accurate?

James Broome

Data insights are useless, and even dangerous (as we've seen recently at Public Health England) if they can't be trusted. So, the need to validate business rules and security boundaries within a data solution is critical. This post argues that if you're doing anything serious with data, then you should be taking this seriously.
The importance of specific & immutable dependency versions

The importance of specific & immutable dependency versions

Mike Evans-Larah

This post describes the reasons for choosing specific & immutable dependency versions in your software.
GitOps: Not Just For Kubernetes!

GitOps: Not Just For Kubernetes!

James Dawson

Discover how GitOps, often used for Kubernetes management, can benefit a broader audience.
Where are you going wrong when choosing to buy, not build?

Where are you going wrong when choosing to buy, not build?

Carmel Eve

Often when building software we need to outsource part of the solution to a third party. Common examples include authentication, payment, and email, but there are many others. When first designing a solution the decision around which provider to use can be difficult to tackle. At endjin we have developed a system for answering the question "which provider should I use?".
How to use Axios interceptors to poll for long running API calls

How to use Axios interceptors to poll for long running API calls

James Broome

Explore using Axios interceptors to streamline UI logic for async HTTP APIs, addressing long-running operations and client coordination efficiently.
A simple invite user flow for AAD B2C (without custom policies)

A simple invite user flow for AAD B2C (without custom policies)

James Broome

Explore an alternative "invite user" flow for Azure AD B2C, simplifying authentication without custom policies in SaaS applications.

Reactive Extensions for .NET at dotnetsheff

Ian Griffiths

Ian Griffiths is talking about the Reactive Extensions for .NET at dotnetsheff. Learn the ideas behind Rx, and see it applied in an IoT applicable to upload clinical monitoring data to the cloud.
Debugging web apps in Visual Studio with custom browser configurations

Debugging web apps in Visual Studio with custom browser configurations

Mike Evans-Larah

Discover how to auto-open browsers in private mode or with custom profiles for web app debugging in Visual Studio.
Why Power BI developers should care about the read/write XMLA endpoint

Why Power BI developers should care about the read/write XMLA endpoint

James Broome

Whilst "read/write XMLA endpoint" might seem like a technical mouthful, its addition to Power BI is a significant milestone in the strategy of bringing Power BI and Analysis Services closer together. As well as closing the gap between IT-managed workloads and self-service BI, it presents a number of new opportunities for Power BI developers in terms of tooling, process and integrations. This post highlights some of the key advantages of this new capability and what they mean for the Power BI developer.
C# 8.0 nullable references: getting started in an existing codebase

C# 8.0 nullable references: getting started in an existing codebase

Ian Griffiths

C# 8.0's nullable references feature dramatically changes a fundamental aspect of the language. In this post, Ian explains how to you can soften the impact by enabling gradually across your projects.
Testing Power BI Reports using SpecFlow and .NET

Testing Power BI Reports using SpecFlow and .NET

James Broome

Ensure Power BI report quality by connecting to tabular models, executing scenario-based specs, and validating data, business rules, and security.
Testing Power BI Dataflows using SpecFlow and the Common Data Model

Testing Power BI Dataflows using SpecFlow and the Common Data Model

James Broome

Ensure reliable insights with endjin's automated quality gates for validating Power BI Dataflows in complex solutions.
Azure Analysis Services - how to save money with automatic shutdown

Azure Analysis Services - how to save money with automatic shutdown

James Broome

Explore Azure Analysis Services for scalable analytics. Control costs via automation with Powershell & Azure DevOps in multi-environment setups.
Building a proximity detection pipeline

Building a proximity detection pipeline

Carmel Eve

Endjin's blog post details their project with OceanMind, using a serverless architecture and machine learning to detect illegal fishing.
Using complex objects in BDD Scenarios with SpecFlow

Using complex objects in BDD Scenarios with SpecFlow

Jonathan George

Explore Behavior Driven Development using SpecFlow. Learn to create complex test data objects in Gherkin feature files with Corvus.NET project.
Azure Analysis Services: How to update the expression for a calculated column from .NET

Azure Analysis Services: How to update the expression for a calculated column from .NET

James Broome

Learn how to update Azure Analysis Services model schemas in .NET apps using AMO SDK for user-driven analysis.
C# teamwork: share project config with common Nuget Build Asset Packages

C# teamwork: share project config with common Nuget Build Asset Packages

Ian Griffiths

See how to manage consistent default configuration across all your .NET projects by using NuGet build assets.
Integration Testing Azure Functions with SpecFlow and C#, Part 5 - Using Corvus.SpecFlow.Extensions in a build pipeline

Integration Testing Azure Functions with SpecFlow and C#, Part 5 - Using Corvus.SpecFlow.Extensions in a build pipeline

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the final post in this series, we show how to ensure specs written using Corvus.Testing can run as part of your build pipeline.
Integration Testing Azure Functions with SpecFlow and C#, Part 4 - Controlling your functions with additional configuration

Integration Testing Azure Functions with SpecFlow and C#, Part 4 - Controlling your functions with additional configuration

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the fourth of this series of posts, we look at how configuration can be supplied from your tests to the functions apps being tested.
Integration Testing Azure Functions with SpecFlow and C#, Part 3 - Using hooks to start Functions

Integration Testing Azure Functions with SpecFlow and C#, Part 3 - Using hooks to start Functions

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the third of a series of posts, we look at using classes in the Corvus.Testing library to run functions apps via scenario and feature hooks.
Integration Testing Azure Functions with SpecFlow and C#, Part 2 - Using step bindings to start Functions

Integration Testing Azure Functions with SpecFlow and C#, Part 2 - Using step bindings to start Functions

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the second of a series of posts, we look at using step bindings provided by the Corvus.Testing library to run functions apps as part of your SpecFlow scenarios.
Integration Testing Azure Functions with SpecFlow and C#, Part 1 - Introduction

Integration Testing Azure Functions with SpecFlow and C#, Part 1 - Introduction

Jonathan George

If you use Azure Functions on a regular basis, you'll likely have grappled with the challenge of testing them. Even now, several years after their introduction, the testing story for Functions is not hugely well defined. In the first of a series of posts, we look at some different approaches to testing your functions apps, and introduce the Corvus.Testing library.
Optimising C# for a serverless environment

Optimising C# for a serverless environment

Carmel Eve

Tour our OceanMind project using Azure Functions for real-time marine telemetry processing. Learn optimization techniques for serverless environments.
High-performance C#: a test pattern for ref structs

High-performance C#: a test pattern for ref structs

Ian Griffiths

Explore C# 7.2's ref structs, use in high-performance scenarios, their constraints, and techniques for overcoming challenges in unit testing the Ais.Net parser.
An experimental approach to software development

An experimental approach to software development

Carmel Eve

Endjin applies scientific experimentation to software development for validated solutions, using hypotheses for confident designs.
Azure Analysis Services - How to process an asynchronous model refresh from .NET

Azure Analysis Services - How to process an asynchronous model refresh from .NET

James Broome

Learn to use Azure Analysis Services in custom apps via REST API in .NET for efficient async model refreshes.
Power BI Data Type Mappings

Power BI Data Type Mappings

Ed Freeman

Explore Power BI data types across mediums, learn their corresponding names, and simplify query conversions with this informative blog and report.
C# developers! Your scoped components are more dangerous than you think.

C# developers! Your scoped components are more dangerous than you think.

Jonathan George

Discover the challenges and alternatives of managing scoped component lifetimes with dependency injection.
Azure Analysis Services: How to execute a DAX query from .NET

Azure Analysis Services: How to execute a DAX query from .NET

James Broome

Explore endless possibilities with dynamic DAX queries in C# for Azure Analysis Services integration in custom apps using the provided code samples.
An Overview of the Azure CNAB Quickstarts Library

An Overview of the Azure CNAB Quickstarts Library

Howard van Rooijen

The Azure CNAB Quickstarts Library helps you get up and running with CNAB and Porter. We've built quickstarts covering solutions like WordPress, Ghost, Mattermost, and data platforms like Apache Airflow, SQL Server AlwaysOn clusters and Kubernetes features like an nginx ingress controller and an Azure AD enabled OAuth2 Proxy. We've condensed all our learnings from the past 9 months of working on the project and turned them into a 10 minute video which explains all the key concepts. We hope this video helps accelerate your own CNAB & Porter epiphanies!
Introducing the Azure CNAB Quickstarts Library

Introducing the Azure CNAB Quickstarts Library

Mike Evans-Larah

In partnership with Microsoft, we have released Azure CNAB Quickstarts Library on GitHub. CNAB (Cloud-Native Application Bundle) is a new specification designed for facilitating the packaging, installation, upgrading and uninstallation of cloud-native solutions in the cloud, on-premise or on the edge. We've created a number of quickstarts covering Apache Airflow, Azure Kubernetes Service, Ghost, Kubeflow, SQL Server Always On and Wordpress to help demonstrate the power of CNAB and Porter.
Azure Analysis Services - How to query all the measures in a model from .NET

Azure Analysis Services - How to query all the measures in a model from .NET

James Broome

Explore .NET querying methods for integrating Azure Analysis Services beyond data querying into dynamic UIs and APIs.
Azure Analysis Services: How to open a connection from .NET

Azure Analysis Services: How to open a connection from .NET

James Broome

Learn to integrate Azure Analysis Services in apps by establishing server connections. Follow this guide with code samples for essential scenarios.
NDC London Day 1

NDC London Day 1

Ian Griffiths

In this post, Ian describes some of the highlights from the NDC London conference
Comparing GitHub Actions and Azure Pipelines: High-level concepts

Comparing GitHub Actions and Azure Pipelines: High-level concepts

Mike Evans-Larah

GitHub Actions is GitHub's new CI/CD platform. It is comparable with Azure Pipelines, which forms part of the Azure DevOps suite. In this post, Mike Larah looks at the similarities and differences in the high-level concepts and terminology between the two platforms.
Design patterns in C# - The Builder Pattern

Design patterns in C# - The Builder Pattern

Carmel Eve

Traverse the builder pattern in this design patterns series, simplifying complex object creation and separating construction from usage.
How to use the AzureAD module in PowerShell Core

How to use the AzureAD module in PowerShell Core

James Broome

Explore using AzureAD with Az module in PowerShell Core, as Az may not fully replace AzureAD. Learn to utilize both for optimal functionality.
How to create a Power BI workspace in an Azure DevOps Pipeline using Powershell

How to create a Power BI workspace in an Azure DevOps Pipeline using Powershell

James Broome

Automate Power BI workspaces creation & security using PowerShell & Azure DevOps pipelines in a wider DevOps strategy with Azure data platform services.
Incorporating software architecture into agile projects

Incorporating software architecture into agile projects

Carmel Eve

Software architecture and Agile project planning are often seen to be at odds. However, here at endjin we think that the way in which they intersect solves a lot of the common issues surrounding architecture. The key to successful architecture is constantly keeping the drivers in mind and having a tight communication loop as the architecture is implemented. These concepts are ones which are key to agile project management, and the combination of these two disciplines can be extremely powerful and successful when applied correctly.
Agile Architecture: Painting by Numbers

Agile Architecture: Painting by Numbers

Howard van Rooijen

Creating a architecture in an iterative and incremental solution delivery is challenging. I've evolved an approach akin to Painting By Numbers, and am inspired by a quote from the artist and film maker Dave McKean.
A code review with NDepend Part 2: The initial review

A code review with NDepend Part 2: The initial review

Carmel Eve

At endjin we have a high quality bar when it comes to our code. As part of this we carry out regular code reviews. One of the tools we have used for these code reviews is NDepend. This is the second in a blog series written as we carried out that process. This post focuses on the insight you can quickly gain just by glancing at the NDepend UI.
Enforce resource tagging with Azure Policy

Enforce resource tagging with Azure Policy

Mike Evans-Larah

Explore Azure Policy for proper tagging on resources and enabling tag inheritance from parent resource groups.
A code review with NDepend Part 1: Quality metrics

A code review with NDepend Part 1: Quality metrics

Carmel Eve

At endjin we have a high quality bar when it comes to our code. As part of this we carry out regular code reviews. One of the tools we have used for these code reviews is NDepend. This is the first in a blog series written as we carried out that process. This post runs through the different metrics used by NDepend, and the reasons that each of these can be an indication of code quality.
ML.NET, Azure Functions and the 4th Industrial Revolution

ML.NET, Azure Functions and the 4th Industrial Revolution

Howard van Rooijen

There is a lot of hype around AI & ML. Here's an example of using ML.NET & Azure Functions to deliver a series of micro-optimisations, to automate a series of 1 second tasks. When applied to business processes, this is what the 4th Industrial Revolution could look like.
A conversation about .NET, The Cloud, Data & AI, teaching software engineers and joining endjin with Ian Griffiths

A conversation about .NET, The Cloud, Data & AI, teaching software engineers and joining endjin with Ian Griffiths

Ian Griffiths

When he joined endjin, Technical Fellow Ian sat down with founder Howard for a Q&A session. This was originally published on LinkedIn in 5 parts, but is republished here, in full. Ian talks about his path into computing, some highlights of his career, the evolution of the .NET ecosystem, AI, and the software engineering life.
Rx operators deep dive part 2: Slowly aggregating knowledge

Rx operators deep dive part 2: Slowly aggregating knowledge

Carmel Eve

This is the second blog in a series which delves into how the Rx operators work under the covers. This series aims to provide a greater understanding of Rx and its operators. This post focuses on the AGGREGATE operator.
Explicit interface implementation

Explicit interface implementation

Ed Freeman

Two of the main use-cases for explicit interface implementation are: 1. to hide members of the interface in a class which inherits from that interface, and 2. to work around the scenario when a class is inheriting from two interfaces which share a member of the same name. Take a look at this blog to go into more depth about each of those scenarios.
Using Step Argument Tranformations in SpecFlow to pass null values into scenarios

Using Step Argument Tranformations in SpecFlow to pass null values into scenarios

Ed Freeman

Learn to handle null values in Specflow using Step Argument Transformations for comprehensive test suites and edge case validation in this blog post.
Understanding Rx: Making the interfaces, subscribing and other Subject<T>s finally click

Understanding Rx: Making the interfaces, subscribing and other Subject<T>s finally click

Carmel Eve

Explore endjin's introduction to reactive data processing, covering Rx.NET's main classes and simplifying this complex .NET area for easy understanding.
Overflowing with dataflow part 2: TPL Dataflow

Overflowing with dataflow part 2: TPL Dataflow

Carmel Eve

Explore TPL dataflow in this second blog of our series. Learn how this .NET library simplifies parallel data processing with a pipeline model.
Async pitfalls: deferred work and resource ownership

Async pitfalls: deferred work and resource ownership

Ian Griffiths

Combining deferred execution with asynchronous operations can cause subtle problems. This post shows how to ensure correct operation when these idioms combine.
Whose package is it anyway? Why it's important to minimise dependencies in your solutions...

Whose package is it anyway? Why it's important to minimise dependencies in your solutions...

Carmel Eve

This is a post about the importance of reducing your dependencies as much as possible when designing solutions.If as much as possible is under your own control, there is far less room for synchronization errors and update conflicts.
Thoughts about .NET, The Cloud, AI, ML, and teaching software engineers

Thoughts about .NET, The Cloud, AI, ML, and teaching software engineers

Howard van Rooijen

Ian Griffiths recently joined endjin as a Technical Fellow. We had a long fireside chat, which has been broken down into a 5 part series covering .NET, the Cloud, AI, ML, teaching software engineering, and why he joined endjin.
OneNote - helping me to find my feet in research

OneNote - helping me to find my feet in research

Carmel Eve

Everyone learns differently. In this post Carmel describes how OneNote can be used to aid and enhance research. As an avid note taker and blogger, she highlights how the ability to Ctrl-F into written text in OneNote has greatly improved her productivity!
Garbage collection, a memorandum on memory in C#

Garbage collection, a memorandum on memory in C#

Carmel Eve

Explore the process of .NET garbage collection and understand the behind-the-scenes of writing C# code in this insightful post.
Branches, builds and modern data pipelines. Let's catch-up!

Branches, builds and modern data pipelines. Let's catch-up!

Ed Freeman

As an apprentice engineer at endjin, you cover a lot of ground, especially at a consultancy which works with the latest and greatest tools to solve its clients' problems. Learn about endjin's Modern Data Platform, which is a culmination of IP, processes and knowledge built from years of implementing high-performance data-driven solutions. Also learn about the types of tools an apprentice gets to use, and the types of things an apprentice learns along the way.
OpenAPI code generators for Visual Studio

OpenAPI code generators for Visual Studio

Howard van Rooijen

Using the recently Open Sourced OpenAPI SDK, we create a Visual Studio extension from converting OpenAPI specificaitons between YAML and JSON formats.
How to choose the right .NET technology or "learn to stop worrying and love NetStandard2.0"

How to choose the right .NET technology or "learn to stop worrying and love NetStandard2.0"

Matthew Adams

The evolution of .NET is a complex one. We've put together a deck to help you understand what you should choose to use when.
Advanced Azure Resource Manager template patterns – t-shirt sizing and optional resources

Advanced Azure Resource Manager template patterns – t-shirt sizing and optional resources

Richard Kerslake

Implement using parameters in Resource Manager templates for optional resource deployment and configuration.
Automating creation of new ALM environments using PowerShell and Azure DevOps

Automating creation of new ALM environments using PowerShell and Azure DevOps

Richard Kerslake

Did you know that you can fully automate the bootstrapping process of setting up an Azure DevOps enviornment? This post shows you how.
"But it works on my cloud!" - are your developers still making the same mistakes in a world of DevOps and PaaS services?

"But it works on my cloud!" - are your developers still making the same mistakes in a world of DevOps and PaaS services?

James Broome

In the world of DevOps, cloud and platform services, how does a developer's "definition of done" need to change? This post argues that as the silos of development and operations are broken down, the responsibility of understanding the whole solution increases meaning, to truly take advantage of the cloud, the need for quality and professionalism is critical for success.
Deploying to Azure using Azure Resource Manager templates and Octopus Deploy

Deploying to Azure using Azure Resource Manager templates and Octopus Deploy

Richard Kerslake

Learn how to combine the power of Azure Resource Manager and Octopus Deploy for a frictionless Azure DevOps experience.
Using Postman to load test an Azure Machine Learning web service

Using Postman to load test an Azure Machine Learning web service

Richard Kerslake

Explore creating and testing an Azure ML Studio web service using Postman for efficient machine learning model production.
TeamCity MetaRunner for creating Release Annotations in Azure Application Insights

TeamCity MetaRunner for creating Release Annotations in Azure Application Insights

Howard van Rooijen

Meta-Runners allow you to easily create reusable build components for TeamCity, in this post I demonstrate how to create a Meta-Runner to create Azure Application Insights Release Annotations.
Year 2 as a software engineering apprentice at endjin

Year 2 as a software engineering apprentice at endjin

Alice Waddicor

Alice reflects on year 2, being given more responsibility, diving deeper into all aspects of software delivery, and the good habits she's been building.
Machine Learning - the process is the science

Machine Learning - the process is the science

James Broome

What do machine learning and data science actually mean? This post digs into the detail behind the endjin approach to structured experimentation, arguing that the "science" is really all about following the process, allowing you to iterate to insights quickly when there are no guarantees of success.

Improve your Windows Command Prompt and PowerShell experience with ConEmu

Mike Evans-Larah

Mike Larah shares his tips for how to best customize ConEmu to improve your terminal experience for Windows Command Prompy and PowerShell
SpecFlow 2.0, NUnit3, Visual Studio and TeamCity

SpecFlow 2.0, NUnit3, Visual Studio and TeamCity

Matthew Adams

We recently upgraded our TeamCity based CI/CD environment, but we had to make some adjustments to fix failing tests.
ILMerge Meta-Runner for TeamCity

ILMerge Meta-Runner for TeamCity

Howard van Rooijen

Meta-Runners allow you to easily create reusable build components for TeamCity, in this post I demonstrate how to create a Meta-Runner to wrap ILMerge functionality.
Azure Resource Manager authentication from a PowerShell script

Azure Resource Manager authentication from a PowerShell script

Richard Kerslake

Learn how to authenticate against Azure Resource Manager using PowerShell, for fully automated deployments.

CucumberJS Visual Studio Test Runner

Matthew Adams

We've built and open-sourced a Visual Studio Extension that provides basic support for discovering and running CucumberJS tests with Node.JS, in the Visual Studio Test Environment.
Chaos with a rhythm - controlling innovation

Chaos with a rhythm - controlling innovation

Matthew Adams

Running a start-up or bootstrapping a new product within an established business can feel pretty chaotic. We talk about strategies for managing the time of a team, and ensuring that you become predictable.
A Step-by-step guide to setting up CucumberJS in Visual Studio 2015

A Step-by-step guide to setting up CucumberJS in Visual Studio 2015

Matthew Adams

This is a quick guide to setting up cucumber JS in Visual Studio with grunt.
Reduce Merge Conflicts in .NET Solutions with PowerShell based Git Hooks

Reduce Merge Conflicts in .NET Solutions with PowerShell based Git Hooks

Howard van Rooijen

Git has powerful extensibility points, which you can harness to automate your dev inner loop. In this post we examine how to use Git Hooks to reduce the occurrence of merge conflicts.
SpecFlow Extensions for Azure Storage Emulator

SpecFlow Extensions for Azure Storage Emulator

Howard van Rooijen

We use SpecFlow to write integration tests against Azure. In this post we share an Open Source SpecFlow extension for the Azure Storage Emulator.
Using Git for .NET Development: Part 5 – Staging Some Changes In A File But Not Others

Using Git for .NET Development: Part 5 – Staging Some Changes In A File But Not Others

Alice Waddicor

How do you selectively stage some of your changes in GIT? How does Visual Studio help? How can you do this on the command line?
Improve your SpecFlow scenarios with custom step argument transformations

Improve your SpecFlow scenarios with custom step argument transformations

Mike Evans-Larah

Explore how to use SpecFlow for human-readable specs and create reusable step argument transformations for easy readability.
You're hiring the wrong people: 10 tips to find great developers

You're hiring the wrong people: 10 tips to find great developers

Matthew Adams

Hiring developers is hard. Really hard. Here are some tips on how to make it easier on yourself.
A step by step guide to choosing the right Azure technology for your solution

A step by step guide to choosing the right Azure technology for your solution

Matthew Adams

To help guide the client through the selection process (and to act as an aide memoire when we come to try and remember why particular choices were made), we created a handy flow-chart to take you through the technology landscape, and suggest some recommended-practice solutions.
Generating and using a certificate to authorise Azure Automation

Generating and using a certificate to authorise Azure Automation

Alice Waddicor

Explore how to use Azure Automation for running VMs during office hours. Learn to create runbooks for automated tasks at pre-defined times.
Refactoring by pattern using Regular Expressions and ReSharper search by pattern

Refactoring by pattern using Regular Expressions and ReSharper search by pattern

Alice Waddicor

Using SmartGit to follow the GitFlow branching and workflow model

Using SmartGit to follow the GitFlow branching and workflow model

Alice Waddicor

How do you use SmartGit to simplify your development workflow by using GitFlow?
Elasticsearch gotchas and tips - part 2

Elasticsearch gotchas and tips - part 2

Richard Kerslake

We've delivered a number of Elasticsearch solutions on Azure. In this second post in the series, we share some useful tips.
Using SemanticMerge to fix Git merge conflicts

Using SemanticMerge to fix Git merge conflicts

Alice Waddicor

How can you use the SemanticMerge tool to help you deal with GIT merge conflicts? Here's an overview of the process.
A step by step guide to developing Visual Studio item templates using SideWaffle

A step by step guide to developing Visual Studio item templates using SideWaffle

Richard Kerslake

In this post, we explore the use of SideWaffle to create a frictionless experience for developers wanting to create repeatable plugins.
A Step by Step Guide to Testing NuGet Packages Locally

A Step by Step Guide to Testing NuGet Packages Locally

Pascal Arnould

Discover our tutorial on local NuGet package testing, filling documentation gaps with a concise, step-by-step guide.
Create a custom TeamCity PowerShell MetaRunner to Notify NewRelic that new deployment has occurred

Create a custom TeamCity PowerShell MetaRunner to Notify NewRelic that new deployment has occurred

Howard van Rooijen

You can easily notify NewRelic that a deployment has occured. In this post I demonstrate how to turn a script into a reusable TeamCity Metarunner.
Using Git for .NET Development: Part 4 - Resolving Merge Conflicts

Using Git for .NET Development: Part 4 - Resolving Merge Conflicts

Alice Waddicor

How do you resolve GIT merge conflicts? Can Visual Studio help you at all? What are the best tactics?
Understanding dependency injection

Understanding dependency injection

Alice Waddicor

What is Dependency Injection? How does it help you develop software? Why should you use it? Is it a silver bullet for creating loosely coupled components?
Getting started with semantic logging

Getting started with semantic logging

Richard Kerslake

Implement semantic logging on Windows & .NET for richer diagnostics & analysis. Learn how Reactive Extensions enable powerful scenarios in this series.
Using Git for .NET Development: Part 3 – branching and pushing your changes

Using Git for .NET Development: Part 3 – branching and pushing your changes

Alice Waddicor

How do you created branches in GIT? How do you push your changes to a remote server? How does Visual Studio help?
Using Git for .NET Development: Part 2 – basic operations and tools

Using Git for .NET Development: Part 2 – basic operations and tools

Alice Waddicor

How do you get started with GIT? How do you install it? What are the basic commands? How does Visual Studio help you?
Using Git for .NET Development: Part 1 – What is Git?

Using Git for .NET Development: Part 1 – What is Git?

Alice Waddicor

What is GIT? Why should you use it as a .NET Developer? How do you incorporate it into your workflow? How does Visual Studio help?
Apprenticeship Week 2 – Getting Started with Behaviour Driven Development

Apprenticeship Week 2 – Getting Started with Behaviour Driven Development

Alice Waddicor

Delving a little deeper into Behaviour Driven Development and Specification by Example.
A Step by Step Guide to Automating TeamCity Backups

A Step by Step Guide to Automating TeamCity Backups

Howard van Rooijen

In this blog post, I provide a how-to guide for automating your TeamCity backups using a PowerShell script.
A Step by Step Guide to Migrating a TeamCity Instance from One Server to Another

A Step by Step Guide to Migrating a TeamCity Instance from One Server to Another

Howard van Rooijen

Migrate your TeamCity instance with this guide, covering the step-by-step process when in-place upgrades aren't viable.
Introducing endjin composition framework 2.0 : Part 1

Introducing endjin composition framework 2.0 : Part 1

Mike Evans-Larah

Learn why we created the endjin composition framework for dependency injection.
A Step by Step Guide to using GitFlow with TeamCity – Part 4 – Feature Branches in TeamCity

A Step by Step Guide to using GitFlow with TeamCity – Part 4 – Feature Branches in TeamCity

Howard van Rooijen

In the final part of this series, we cover how to use TeamCity's feature branch abilities to support the GitFlow process.
A Step by Step Guide to using GitFlow with TeamCity – Part 3 – GitFlow Commands

A Step by Step Guide to using GitFlow with TeamCity – Part 3 – GitFlow Commands

Howard van Rooijen

This post finally covers the nitty-gritty of how you use the GitFlow extensions to drive the workflow.
A Step by Step Guide to using GitFlow with TeamCity – Part 2 – GitFlow - a Branching Model for a Release Cycle

A Step by Step Guide to using GitFlow with TeamCity – Part 2 – GitFlow - a Branching Model for a Release Cycle

Howard van Rooijen

In this post we show you how to get up and running with GitFlow.
A Step by Step Guide to using GitFlow with TeamCity - Part 1 - Different Branching Models

A Step by Step Guide to using GitFlow with TeamCity - Part 1 - Different Branching Models

Howard van Rooijen

Adopting Git means creating an entirely new mental model about how to version control your source code. Once you make the jump, there's no going back.
Integration testing with Web API

Integration testing with Web API

Mike Evans-Larah

A quick example of how to set up integration testing for HttpClient and HttpServer
Day 1: PowerShell, BDD and Git

Day 1: PowerShell, BDD and Git

Mike Evans-Larah

Mike starts his first day as an Apprentice with an introduction to PowerShell and being onboarded to endjin's various tools and platforms, while attempting to automate the entire process.
TeamCity PowerShell

TeamCity PowerShell

Howard van Rooijen

To celebrate joining JetBrains Development Academy Board, we release a PowerShell modules to make working with TeamCity easier.
An Omega Geek's Guide to Learning PowerShell

An Omega Geek's Guide to Learning PowerShell

Howard van Rooijen

PowerShell is fantastic language for DevOps, automation and general scripting. Every developer should be familiar with it; here's a guide to some useful resources to help you learn it.
On .NET Rocks! Talking about Sharp Architecture, Templify and StyleCop

On .NET Rocks! Talking about Sharp Architecture, Templify and StyleCop

Howard van Rooijen

Long time listener, first time guest. I was invited to speak on the .NET Rocks! Podcast, to talk about Sharp Architecture and various other Open Source projects I've been involved with.

StyleCop and StyleCop for ReSharper have merged

Howard van Rooijen

We've decided to combine the StyleCop and StyleCop for ReSharper code bases to make long term maintenance easier.
A Step by Step Guide to Hosting YouTrack in IIS 7

A Step by Step Guide to Hosting YouTrack in IIS 7

Howard van Rooijen

Step-by-step guide on setting up YouTrack and using IIS as a reverse proxy for custom domain access.
A Step by Step Guide to Hosting TeamCity in IIS 7

A Step by Step Guide to Hosting TeamCity in IIS 7

Howard van Rooijen

Step-by-step guide on setting up TeamCity and using IIS as a reverse proxy for custom domain access.