Browse our archives by topic…
Rx.NET v6.0 Now Available
For the first time since 2020, a new release of Rx.NET is available, supporting .NET 6 and .NET 7.
C# 11.0 new features: Span<char> pattern matching
C# 11.0 adds some new pattern matching features. In this post, Ian shows the new support for matching lists.
Using the Playwright C# SDK to automate 2FA authentication for AAD and MSA
Enabling 2FA is a must, but can often be perceived as a blocker for UI automation testing. Here's how to configure your AAD or MSA 2FA profile so that you can automate auth with a Time-based One-Time Password
C# 11.0 new features: list pattern matching
C# 11.0 adds some new pattern matching features. In this post, Ian shows the new support for matching lists.
C# 11.0 new features: newlines in string interpolation expressions
C# 11.0 adds various improvements to string literals. In this post, Ian explains how support for new lines in interpolated string expressions can improve readability.
C# 11.0 new features: UTF-8 string literals
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
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.
Adventures in Dapr: Episode 5 - Debugging Containers with Visual Studio
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. In this post, we use the container tools in Visual Studio to debug why a newly-containerised service is not working.
C# 11.0 new features: raw string literals
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
Learn how accessibility-aware API design creates a great experience for all developers, not just those with accessibility needs.
Correctly configuring ASP.NET Core MVC authentication when hosting in Azure Container Apps
A short rundown of why you need the ForwardedHeadersMiddleware when using Azure Container Apps to host an ASP.NET Core MVC app requiring authentication
Lazy and once-only C# async initialization
Performing lazy and/or just-once initialization is a simple optimization. But what if the initialization is async?
Bye bye Azure Functions, Hello Azure Container Apps: Conclusions
In the sixth and final post we draw our conclusions about migrating an application from Azure Functions to Azure Container Apps.
An Overview of the Corvus.Retry Library
Corvus.Retry is an open source repository that provides functionality for building policies and strategies for handling transient faults. This post provides a spotlight on the repository.
How to sign your git commits
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.
An Overview of the Corvus.Globbing Library
Corvus.Globbing is an .NET open source library that provides high performance, zero allocation functionality for working with globs.
In Defence of Squash Commits
Encapsulation is a powerful tool. Squash commits provide a way to encapsulate Git commit history.
An Overview of the Corvus.Extensions Library
Corvus.Extensions is an open source repository that provides a collection of useful helper extension methods to .NET types. This post provides a spotlight on the repository.
Adventures in Dapr: Episode 4 - Containerising with Visual Studio
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. In this post, we continue working with the excellent Dapr Traffic Control sample application to adopt a containerised dev inner-loop using Visual Studio.
Bye bye Azure Functions, Hello Azure Container Apps: Migration of the existing test environment
The fifth in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
High Performance UriTemplate resolution with low-allocation C#
Learn how to use high-performance code constructs like ReadOnlySpan<T> to parse and create UriTemplates for C# developers.
Bye bye Azure Functions, Hello Azure Container Apps: Authentication and CORS issues
The fourth post migrating an app from Azure Functions to Azure Container Apps we examine the challenges around authentication and CORS
Bye bye Azure Functions, Hello Azure Container Apps: Build and deployment pipelines, and our first big problem
The third in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Bye bye Azure Functions, Hello Azure Container Apps: Migrating from Azure Functions to ASP.NET Core
The second in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
C# Lambda Discards
C# has gradually been adding support for discards. This article explores how this evolution has led to some surprises.
Bye bye Azure Functions, Hello Azure Container Apps: Introduction
The first in a series of posts talking about how and why we migrated an application from Azure Functions to Azure Container Apps
Service Lifetimes in ASP.NET Core
There are three lifetimes available with the Microsoft Dependency Injection container: transient, singleton, and scoped. In this post, we explain their different behaviours and the importance of being aware of the lifetimes of the dependencies in our applications.
Using Azure CLI Authentication within Local Containers
Have the recent changes to Azure CLI on Windows broken your dev inner loop when working with containerised applications that need access to Azure resources? If so, this post provides a workaround that will unblock you without having to be stuck on an old version of the Azure CLI.
Adventures in Dapr: Episode 3 - Azure Storage Queues
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. In this post, we continue modifying the excellent Dapr Traffic Control sample application by swapping the MQTT-based messaging with Azure Storage Queues. We will also look at how you can use the Dapr programming model as an alternative to cloud-provider SDKs.
Understanding the Stack and Heap in C#
The stack and heap are central components of memory management in C# programs. This post aims to introduce the topic, with a number of worked examples.
Implementing dependency injection in ASP.NET Core
In this post, we will be showing how to implement dependency injection in an ASP.NET Core application.
The Perils of Combining Multicast Delegates with Tasks in C#
It's possible to get into a tricky situation when combining asynchronous methods that return Task objects with multicast delegates in C#. In this post Liam explains how that situation arises.
Debugging NuGet Packages: Understanding Debugging Symbols and Using Source Link
Debugging allows us to troubleshoot problems in our applications by stepping through our code line by line, and stepping into methods when necessary. But there might be instances where the process is not so straightforward. Debugging NuGet packages is one of them.
Adventures in Dapr: Episode 2 - Azure Key Vault
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. In this post, we continue modifying the excellent Dapr Traffic Control sample application by adding Azure Key Vault integration for its secrets management.
Understanding Lambda Expressions in C#
Lambda expressions are a syntactically light way of defining functions, but they can seem cryptic when first coming across them. In this post, we look at their syntax in C# and some examples.
Adding Authentication and Authorisation to ASP.NET Core Web Applications
In this blog post, we explain how to implement authentication and authorisation capabilities to an ASP.NET Core web application by exploring different concepts, such as Identity, Razor class libraries, scaffolding, and partial views.
Tag Helpers in ASP.NET Core
In this post, we explore tag helpers, used in web applications using ASP.NET Core. We look at some examples of tag helpers and their uses, and learn how to create custom tag helpers.
Pattern Matching in C#
This blog post explores how pattern matching has evolved over each version of the C# language and how to use pattern matching with is expressions, switch statements and switch expressions
C# 11.0 preview: parameter null checking
C# 11.0 has a new syntax, !!, which makes it easier to detect and reject null arguments. It is simple, but misunderstood. This post explains what it really does, and how it has been misinterpreted.
C# 10.0 improves handling of nullable references in generic types - no more AllowNull
C# 10.0 lets us annotate the nullability aspects of generic code more naturally than older versions. Some places where the AllowNull attribute was once required can now just use the obvious nullability syntax.
Understanding Middleware in ASP.NET Core
In this post, we explore the Configure method in the Startup class in a ASP.NET Core web application. Inside of the configure method we find the middleware pipeline, responsible for processing HTTP messages.
Raising Coding Standards with .NET 6.0 Code Analyzers
.NET 6.0 makes it easier to take full advantage of code analyzers that can help you improve the quality of your code.
Model Binding in ASP.NET Core using Razor Pages
Model Binding automates the process by which web applications extract data from HTTP requests and converts it to .NET types, making it easier to pass information into an input model. In this post, we will see how and why model binding is used.
Flow control in C#
This post explains how to control the flow of execution in C# by using if and switch statements and looping with for, foreach, while and do.
Introduction to Containers and Docker
Containers and Docker offer a different approach to development and deployment of applications. This post provides an introduction to containerisation and Docker, and provides examples of creating containerised applications with Docker.
How .NET 6.0 boosted Ais.Net performance by 20%
When we tested endjin's AIS.NET library on .NET 6.0, we were delighted to see substantial performance gains, with no extra work required.
Adventures in Dapr: Episode 1 - Azure Service Bus
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. In this post, taking the excellent Dapr Traffic Control sample application as our starting point, we look at enabling PaaS Pub-Sub using Azure Service Bus.
Adventures in Dapr: Episode 0 - Introduction
If you're interested in the Distributed Application Runtime (Dapr) and how it can simplify migrating existing workloads to use cloud platform services, then this series might be for you. Taking the excellent Dapr Traffic Control sample application as our starting point, we will iteratively migrate components to use Azure cloud platform services.
How C# 10.0 and .NET 6.0 improve ArgumentExceptions
C# 10.0's support for CallerArgumentExpression and some new helpers in .NET 6.0 make throwing argument exceptions more succinct and less error prone.
Month one at endjin
In this post, Nehemiah reflects on his first month at endjin as an apprentice engineer.
C# 10.0 implicit global using directives
C# 10's new implicit global imports can make your code more communicative. This article shows how the magic works, and how you can control the feature.
C# serialization with JsonSchema and System.Text.Json
Learn how code generation can build on System.Text.Json and JSON Schema to create a great experience for C# developers.
Configuration in Azure Functions - What's in the box?
The first in a series of posts talking about how to best work with configuration in Azure Functions
How to trigger an Azure Synapse pipeline run from C#
A rundown of how to trigger an Azure Synapse pipeline run from C# code.
Installing Mattermost using the Azure CNAB Quickstart Library
Get started with Mattermost on Azure using the Mattermost on AKS quickstart from the Azure CNAB Quickstart Library.
Design patterns in C# - The Proxy Pattern
This blog is part of a series around design patterns. This post focuses on the proxy pattern. The proxy pattern is used to restrict and control access to underlying objects. It is useful in communicating with remote servers, or in adding extra functionality on object access.
How to consume a NuGet package in PowerShell
Sometimes the logic for the bit of work you're doing in PowerShell won't be packaged into a handy PowerShell module with cmdlets to perform the operations you need to perform. But what if there is a .NET package listed on NuGet that does contain the assemblies you need for your work? How can we import that into PowerShell and make use of its classes and methods? This blog explains how to do just that, avoiding current pitfalls in PowerShell's implementation of the NuGet package provider.
How to update credentials for an on-prem Power BI data source using PowerShell
Automating the updating of Power BI data source credentials is a common requirement in the application lifecycle management of a Power BI solution. However, on-premises data sources throw an extra spanner in the works: you must encrypt your credentials using the RSA-OAEP encryption algorithm before sending off the request to update the data source. There is currently no PowerShell module that encapsulates this logic into a set of handy cmdlets, so you must either implement the algorithm's logic yourself, or you can use the helper classes in the existing .NET SDK to do all the heavy lifting for you. This blog shows how to do the latter.
When C# 9.0 patterns go wrong: mechanism over intent
C# 9 makes welcome additions to the language's increasingly powerful pattern matching capabilities. However, with great power comes a temptation to make a great big mess. In this post, Ian Griffiths urges us not to get carried away.
Does your GitHub Repo need 'Code Operations'?
CodeOps enables you to layer standards, automation, and governance to your source control repositories, decreasing manual effort and increasing productivity.
Design patterns in C# - The Facade Pattern
This blog is part of a series around design patterns. This post focuses on the facade pattern. The facade pattern provides an interface into a complex system, in order to simplify access to the functionality.
C# 8.0 nullable references: defeating the point with empty strings
Enabling C# 8's nullable references feature often produces a lot of warnings. Avoid the temptation to make some go away by initializing properties to empty strings.
Design patterns in C# - The Decorator Pattern
This blog is part of a series around design patterns. This post focuses on the decorator pattern. The decorator pattern is used to dynamically add additional properties to objects in order to extend functionality.
GitOps: Not Just For Kubernetes!
GitOps (sometimes known as 'operations by pull request') is most often discussed as being an approach for managing your Kubernetes platform, but in this post I will make the case for how it can benefit a much wider audience.
C# 8.0 nullable references: prepare today by not misusing 'as'
Prepare for using C# 8.0 nullable references by not misusing the 'as' operator.
Design patterns in C# - The Adapter Pattern
This blog is part of a series around design patterns. This post focuses on the adapter pattern. The adapter pattern is used to enable you to use the functionality defined by a class which is not compatible with the interfaces/architecture of your solution.
Where are you going wrong when choosing to buy, not build?
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?".
Streamline .NET Dependency Management with NuGet Meta Packages
Creating meta/virtual NuGet packages to encapsulate frequently used collections of dependencies can be an effective way to both simplify their consumption as well as streamline the process of integrating and testing new versions using tools like Dependabot.
ArrayPool vs MemoryPool—minimizing allocations in AIS.NET
Tracking down unexpected allocations in a high-performance .NET parsing library.
A simple pattern for using System.CommandLine with dependency injection
Have you tried using the new System.CommandLine packages? This blog shows you how to build up a command line tool quickly and easily, using dependency injection for the initialisation.
C# 8.0 nullable references and serialization
C# 8's nullable references feature can clash with common serialization techniques. This article shows how to deal with that.
A simple invite user flow for AAD B2C (without custom policies)
Azure AD B2C is easy to integrate and configure for simple sign-in / sign-up authentication. But there's a step change in complexity as soon as you want to do something outside of the built-in user flows. An "invite user" flow is one such example, but it's also a fairly common requirement in any business or team orientated SaaS application, which makes AAD B2C as less attractive choice. This post describes an alternative approach for this authentication feature that avoids the need for AAD B2C custom policies, allowing you to keep authentication as simple as possible.
C# 8.0 nullable references: when methods don't return
The DoesNotReturn and DoesNotReturnIf attributes have been around for a long time in C#, but they take on additional significance when using C# 8 nullable references.
How to fully initialize types in their constructor with C# nullable using the async factory pattern
This blog gives an example of a pattern used for asynchronous initialisation. This pattern allows you to construct readonly objects. It also allows you to use the new nullable references features to ensure your classes are always fully instantiated.
Reactive Extensions for .NET at dotnetsheff
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.
C# 8.0 nullable references: supporting older runtimes
See how to use C# 8.0 nullable references even when targetting older versions of .NET that don't officially support it.
Using Azure Key Vault for Encryption in C# - A Simple Tutorial
Do you need to encrypt a piece of data in your application? Do you want Azure Key Vault to secure the key? Well, using C# along with a couple of libraries from the Azure SDK, it couldn't be easier to get up and running. This blog explains how to do just that.
C# 8.0 nullable references: more type system transcendence with DisallowNull
C# 8.0 nullable references enable us to annotate our code with information that lets the compiler discover possible null-related bugs. The DisallowNull attribute lets us get more expressive with properties and generics.
C# 8.0 nullable references: conditional post-conditions
The NotNullWhen MaybeNullWhen, and NotNullIfNotNull attributes enable C#8 provide better nullability warnings, by helping it infer information about a method output based on other inputs.
Debugging web apps in Visual Studio with custom browser configurations
This blog post explains how you can automatically open a web browser in either private browsing mode or with a custom user profile when debugging web applications from Visual Studio.
C# 8.0 nullable references: MaybeNull
The MaybeNull attribute enables C#8's nullable references feature to provide more useful warnings, by helping it infer information about a method output.
C# 8.0 nullable references: NotNull
The NotNull attribute enables C#8's nullable references feature to provide more useful warnings, by helping it infer information about a method argument.
Using multiple azure-cli credentials within automation
Have you ever needed an automated process to use alternative credentials for a subset of tasks? This post will demonstrate a technique that allows you setup multiple, concurrent authenticated sessions when using the azure-cli and switch freely between them.
Does Azure Synapse Analytics spell the end for Azure Databricks?
Have you or are you about to invest in Azure Databricks? If so, the new Spark offering in Azure Synapse Analytics is likely to have grabbed your attention and rightly so. Why is Microsoft putting yet another Spark offering on the table and what does it mean for you?
C# 8.0 nullable references: transcending the type system with AllowNull
C# 8.0 nullable references enable us to annotate our code with information that lets the compiler discover possible null-related bugs. The AllowNull attribute lets us get more expressive with properties and generics.
C# 8.0 nullable references: get better results with nullability attributes
C# 8.0 nullable references enable us to annotate our code with information that lets the compiler discover possible null-related bugs.
Why Power BI developers should care about the new read/write XMLA endpoint
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.
5 tips for an awesome Windows Terminal experience
Improve the already-great Windows Terminal experience by following these tips for customizing the application to work best for you.
C# 8.0 nullable references: getting started in an existing codebase
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
Despite being inherently difficult to test, the need to validate data modelling, business rules and security boundaries in Power BI reports is important, as well as the need for ensuring that quality doesn't regress over time as the insights evolve. This post explains that, by connecting to the underlying tabular model, it is possible to execute scenario-based specifications to add quality gates and build confidence in Power BI reports, just as any other software project.
C# 8.0 nullable references: inferred (non-)nullness
C# 8.0 has two related but distinct notions of nullability. In this article, Ian explains why inferred nullness is a vitally important part of the language's new Nullable References feature.
Testing Power BI Dataflows using SpecFlow and the Common Data Model
Whilst testing Power BI Dataflows isn't something that many people think about, it's critical that business rules and associated data preparation steps are validated to ensure the right insights are available to the right people across the organisation. Data insights are useless, even dangerous, if they can't be trusted, so despite the lack of "official support" or recommended approaches from Microsoft, endjin treat Power BI solutions just as any other software project with respect to testing - building automated quality gates into the end to end development process. This post outlines an approach that endjin has used to test Power BI Dataflows to add quality gates and build confidence in large and complex Power BI solutions.
C# 8.0 nullable references: embrace the expressiveness
C# 8.0 nullable references offer benefits besides the obvious win of detecting null-related coding errors. This new language feature can also improve the expressiveness of your code.
Azure Analysis Services - how to save money with automatic shutdown
Azure Analysis Services provides an enterprise-grade analytical platform with massive scale and flexibility. But, as one of the more expensive services in the Azure platform, consideration should be given to cost management, especially in multi-environment ALM scenarios. This post explains how to massively reduce running costs through automation using Powershell and orchestration tools like Azure DevOps.
Building a proximity detection pipeline
At endjin, our approach focuses on using scientific experimental method to support the creation of fully proved and tested decision making, and the use of scientific research to support our work. This post runs through how we applied that process to creation a pipeline to detect vessel proximity.This is an example which is based around the project we recently worked on with OceanMind. In this project we helped them to build a serverless architecture which could detect vessel proximity in close to real time. The vessel proximity events we detected were then fed into machine learning algorithms in order to detect illegal fishing! Carmel also runs through some of the actual calculations we used to detect proximity, how we used data projections to efficiently process large quantities of incoming data, and the use of Durable Functions to orchestrate the processing.
Using complex objects in BDD Scenarios with SpecFlow
During our projects at endjin, we often find ourselves evangelising Behaviour Driven Development, and specifically SpecFlow. In this post we look at a technique for defining complex test data objects in your Gherkin feature files, which we've also made available via the endjin-sponsored Corvus.NET project.
C# 8.0 nullable references: non-nullable is the new default
C# 8.0 has an ambitious new feature, called nullable references. In this post, Ian explains why this makes a fundamental change to the default assumptions about nullability.
C# teamwork: share project config with common Nuget Build Asset Packages
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
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
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
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
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
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.
High-performance C#: a test pattern for ref structs
C# 7.2 introduce ref structs, a new kind of type (Span<T> is a ref struct) designed to support certain high performance scenarios. There are constraints around their use, and when writing unit tests for our Ais.Net parser, this caused some challenges. This blog describes the technique we used to work around the constraints.
An experimental approach to software development
The application of scientific experimental process to software development leads to the development of fully-validated solutions. This approach provides you with confidence in designs and means that you can quickly identify ideas which are not worth pursuing. At endjin we use the ideas of hypotheses and experimentation when designing any solution and this gives us full confidence in the designs we produce. In this post we outline the steps and advantages of using this approach.
Help for the new CTO: Getting to know your team
As part of my series on guidance for CTOs, I discuss using the Office of the CTO (OCTO) approach to management, its strengths and limitations.
Azure Analysis Services - How to process an asynchronous model refresh from .NET
Integrating Azure Analysis Services into custom applications doesn't just mean read-only data querying. But if your application changes the underlying model, it will need to be re-processed before the changes take effect. This post describes how to use the REST API for Azure Analysis Services inside a custom .NET application to perform asynchronous model refreshes, meaning your applications can reliably and efficiently deal with model updates.
Introducing Ais.Net - High-Performance Parsing in C#
As part of our work with OceanMind, endjin wrote a high performance .NET AIS parser. AIS (Automatic Identification System) is how commercial ships report location information. This blog describes the parser, and the performance techniques it uses.
C# developers! Your scoped components are more dangerous than you think.
There are hidden pitfalls with dependency injection, particularly when managing the lifetime of scoped components. What is safe? And are there other approaches we can take to managing scoped object lifetimes?
Azure Analysis Services: How to execute a DAX query from .NET
Being able to construct DAX queries dynamically in C# means the possibilities are endless in terms of integrating Azure Analysis Services queries into your custom applications, and with the code samples in this post, you have everything you need to get started.
Why You Should Buy My Book: Programming C# 8.0
Ian spent a big chunk of last year writing an update to his book, Programming C# 8.0. Books continue to be Ian's preferred source of learning because nothing else offers the combination of depth, breadth, and coherence. His goal with Programming C# 8.0 (and its predecessors) was very clear: to write the book that he would want to read if he were learning C# today. It is Ian's attempt to distil around 18 years of experience with C# (part of almost 30 years of work as a programmer) into a coherent, complete description of what you'll need to know to be productive today in C#.
Setting up Porter on Windows
Porter is a tool based on the CNAB (Cloud Native Application Bundle) spec. It can be used for building, managing, and installing application bundles. This guide will walk you through how to get set up with Porter on Windows.
Setting up Windows Subsystem for Linux (WSL) 2 for Windows 10 & Docker
In this post, we describe the steps needed to enable Windows Subsystem for Linux (WSL) 2 on Windows 10, and how you can use the WSL 2 features with Docker for Windows.
An Overview of the Azure CNAB Quickstarts Library
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
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
Integrating Azure Analysis Services into custom applications means more than just querying the data. By surfacing the metadata in your models, you can build dynamic and customisable UIs and APIs, tailored to the needs of the client application. This post explains how easy it is to query model metadata from .NET, so you can create deeper integrations between your data insights and your custom applications.
Azure Analysis Services: How to open a connection from .NET
One of the first steps in integrating Azure Analysis Services into your applications is creating and opening a connection to the server - just like any other database technology. This post explains the ins and outs of creating Azure Analysis Services connections, including code samples for each of the key scenarios.
NDC London 2020 - My highlights
Ed attended NDC London 2020, along with many of his endjin colleagues. In this post he summarises and reflects upon his favourite sessions of the conference including; "OWASP Top Ten proactive controls" by Jim Manico, "There's an Impostor in this room!" by Angharad Edwards, "How to code music?" by Laura Silvanavičiūtė, "ML and the IoT: Living on the Edge" by Brandon Satrom, "Common API Security Pitfalls" by Philippe De Ryck, and "Combatting illegal fishing with Machine Learning and Azure - for less than £10 / month" by Jess Panni & Carmel Eve.
NDC London Day 1
In this post, Ian describes some of the highlights from the NDC London conference
NDC London Day 3 Retrospective - from personal projects to developer comedy
Along with several of my endjin colleagues, I attended NDC London in January this year - here's a run through of the sessions I attended on Day 3 and my thoughts. This final day was a mixed bag, taking in talks on drumming and AKKA.net, as well as something a bit more close to home - a session from endjin's own Jess Panni and Carmel Eve on our recent project for OceanMind.
NDC London Day 2 Retrospective - Full Stack, from SPAs to high performance .NET Core via Websockets
Along with several of my endjin colleagues, I attended NDC London in January this year - here's a run through of the sessions I attended on Day 2 and my thoughts. This day was UI heavy, with sessions on Vuejs and UI testing, but I also learned more about GraphQL and writing high performance C# code.
NDC London Day 1 Retrospective - dangerous AI, microservices, diagnostics and Blazor
A retrospective of my first day at NDC London 2020, taking in sessions on AI and Machine Learning, Capability Mapping, Micro Frontends, Diagnostics and Blazor.
Azure Analysis Services - integration options using .NET, REST APIs and PowerShell
With a variety of integration support through client SDKs, PowerShell cmdlets and REST APIs, it can be hard to know where to start with integrating Azure Analysis Services into your custom applications. This posts walks through the options, and lays out a simple guide to choosing the right framework.
C# 8 Positional Patterns Custom Deconstructor Pitfall
The 'positional patterns' added in C# 8 support types with custom desconstructors. However, the way this works might always be quite what you would expect. This article shows a surprising behaviour, and explains how it arises.
C#, Span and async
The addition of ref struct types, most notably Span<T>, opened C# to a range of high performance scenarios that were impractical to tackle with earlier versions of the language. However, they introduce some challenges. For example, they do not mix very well with async methods. This article shows some techniques for mitigating this.
Comparing GitHub Actions and Azure Pipelines: High-level concepts
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.
Long Running Functions in Azure Data Factory
While on first inspection Azure Function look like a good candidate for long running operations as they can run for 10 minutes on a Consumption plan, HTTP Triggers only run for 230 seconds because of a limitation with the Azure Load Balancer. In this blog post Jess Panni demonstrates how Durable Functions can be used instead.
How Azure DevTestLabs is helping me climb Everest
Remote working allows us to work from anywhere we want. This brings a huge amount of flexibility in freedom, however we do need the help of a working laptop! When Carmel's laptop gave in just before a trip, she used Azure DevTestLabs to allow her to continue to work using a 10 year old Mac that probably couldn't wouldn't have been up to the task alone...
Passwordless SSH from Windows 10 to Raspberry Pi
In this post, Mike Larah explains how to enable SSH on the Pi, how to access the Pi via SSH using a Windows 10 development machine, and how to enable passwordless SSH access to the Pi.
Increasing performance via low memory allocation in C#
We worked on a project recently which required us to build a highly performant system for processing vast quantities of messages in real time. We had made the decision to run this processing using Azure Functions with C#. This post runs through some of the techniques we used for writing highly performant, low allocation code, including data streaming, list preallocation and the relatively new C# feature: Span<T>.
Running Azure Functions in Docker on a Raspberry Pi 4
For one of my first experiments with the Raspberry Pi 4, I decided to get an Azure Function running in a Docker container. This post gives a step-by-step guide on how to do it, as well as providing code you can use a starting point for your own experiments.
Donut chart corkscrew entry animation with d3.js
In this post we show a smooth entry animation for D3.js donut (or pie) charts, using a combination of a sweep and a zoom to give a corkscrew-like effect.
Design patterns in C# - The Composite Pattern
This blog is part of a series around design patterns. This post focuses on the composite pattern. The composite pattern is often used in situations where you want to me able to treat groups and individuals in the same way during processing.
Design patterns in C# - The Builder Pattern
This is the second blog in a series around design patterns. This post focuses on the builder pattern. The builder pattern is used when there is complex set up involved in creating an object. Like the other creational patterns, it also separates out the construction of an object from the object's use.
How to use the AzureAD module in PowerShell Core
Whilst some of the Azure Active Directory PowerShell for Graph module (AzureAD) functionality has been rolled into the new Azure PowerShell Az module, it's not currently (and might never be) a replacement for the full power of what you can achieve with AzureAD. So, there's every chance you'll find yourself needing to use both side-by-side. This post explains how to do that using the new cross-platform PowerShell Core.
Design Patterns in C# - Factory Method and Abstract Factory
This is the first blog in a series about design patterns. This blog focuses on the differences between the factory method and abstract factory patterns. The factory method is a method which takes the creation of objects and moves it out of the main body of the code. An abstract factory is similar to the factory method, but instead of a method it is an object in its own right.
How to create a Power BI workspace in an Azure DevOps Pipeline using Powershell
A Power BI based solution typically consists of a variety of technologies - for example Azure data platform services containing source data. As such, automation of Power BI resources needs to be considered as part of a wider DevOps strategy. This post describes the specific steps needed in order to fully automate the creation and security of Power BI workspaces using Powershell and Azure DevOps pipelines.
Incorporating software architecture into agile projects
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.
Snowflake Connector for Azure Data Factory - Part 2
A code review with NDepend Part 2: The initial review
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
This blog post details how we used Azure Policy to enforce Azure resources were tagged with appropiate tags and ensured tags were inherited from parent resource groups where possible.
A code review with NDepend Part 1: Quality metrics
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.
C# faux amis 3: variable declarations and type patterns
In this, the final article in a series on the potentially deceptive nature of some new features in C# 8, Ian Griffiths shows how using var can sometimes result in better compile-time type checking than using an explicit type. He reflects on the evolution of C#, and what we can learn from this.
C# faux amis 2: tuple deconstruction and positional patterns
C# v8.0 introduces various new patterns. In this article, part of a series on how the evolution of the language has added complexity, Ian Griffiths shows how the strong resemblance between the new Positional Patterns and Deconstruction can be misleading.
A beginner's guide to agile estimation and planning
In this post Carmel runs through some of the main principles behind agile estimation and planning. At endjin we use a lot of these techniques in our projects and this is a great post which highlights the reasons behind some of what we do. The key motivation behind good estimation is to be useful for project planning. There is a huge amount of inherent uncertainty surrounding estimates, especially early in the project. So, we shift our aim from 100% precise, or "true", estimates, and towards providing estimates which are useful and accurate. Carmel also runs through the steps in an agile delivery and release process. Definitely worth the read if you have an interest in agile and/or project management!
C# faux amis 1: discards and underscores
Visual Studio 2019 saw the arrival of C# v8.0. This article shows the first of a series of examples of how friction can arise when integrating new features into a mature language: the relatively late addition of 'discards' causes some surprises.
C# 8 surprising patterns
Visual Studio 2019 saw the arrival of C# v8.0. A programming language cannot evolve for 20 years without developing a few quirks. Ian Griffiths writes about a surprising aspect of the new pattern matching features, and what this reveals about how the language has changed.
11 cheers for binary (And 3 for hexadecimal)!
Sometimes it's good to go back to the basics... This is a quick post that runs through binary and hexadecimal numbers, and how those relate to our every day computing!
Rx operators deep dive Part 5 – Thank you for joining me on this journey
This is the final 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 JOIN operator.
Rx operators deep dive Part 4: A window into scheduling in Rx
This is the fourth 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 WINDOW operator.
How to run a script on an existing Azure Virtual Machine
Using PowerShell and the VM Custom Script Extension to download and execute scripts on existing Azure VMs
Rx operators deep dive Part 3: Re-grouping our thoughts
This is the third 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 GROUP operator.
Rx operators deep dive part 2: Slowly aggregating knowledge
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
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.
Rx operators deep dive part 1: Where observables meet LINQ
This is the first 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 WHERE operator.
Using Step Argument Tranformations in SpecFlow to pass null values into scenarios
A good test suite should validate behaviour across your code base, testing as many edge cases as reasonably possible. A common "edge case", is passing a null value when a value isn't expected to be null. In Specflow, all values used in scenario examples are treated as strings, so it isn't possible (by default) to pass in a null value. However, using "Step Argument Transformations", we can achieve the desired behaviour. Read this blog to learn how this can be implemented.
Understanding Rx: Making the interfaces, subscribing and other Subject<T>s finally click
At endjin we've done quite a lot of work around reactive data processing. This post is a great introduction to the main concepts in reactive programming. It runs through the main classes in Rx.NET and provides an easy-to-follow explanation of this powerful (and somewhat complex) area of .NET.
Async pitfalls: deferred work and resource ownership
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...
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.
Garbage collection, a memorandum on memory in C#
Garbage collection is the process in .NET of cleaning up unused memory. Here is a great post which explains how it works under the covers. If you have ever wanted to get an understanding of exactly what is going on behind the scenes when you write C# code, then this is the post for you!
Configuring SpecFlow for XUnit using new-style csproj
We're talking about Cosmos DB at Future Decoded 2017!
We have lots of experience working with Azure Cosmos DB, and we're sharing some of our knowledge at Microsoft's Future Decoded event.
My first month as an apprentice at endjin
Structured apprenticeships provide a great way to build skills whilst getting real-life experience. Endjin's apprenticeship scheme has been refined over years, with an optimal mixture of training, project work, and exposure to commercial processes - a scheme which is designed to build strong foundations for a well-rounded Software Engineering consultant. This post explains the transition from university to an apprenticeship at endjin, including the types of work an apprentice could end up doing, and some examples of real-life learnings from a real-life apprentice.
How to choose the right .NET technology or "learn to stop worrying and love NetStandard2.0"
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.
Azure Tech Selector - 2017 Edition
We've just released an updated version of our Azure Technology Selector poster - helping you to choose the right Azure service, based on your use-case.
2 Day Microsoft Bot Framework Hackathon with Watchfinder
We ran a two day hackathon with Watchfinder and Microsoft to build a conversational experience to automate the 'sell your watch experience'.
My final year as a software engineering apprentice at endjin
Alice reflects on her final year and an apprentice, what she's learned over the past three years, and the new skills and capabilities she's developed.
Advanced Azure Resource Manager template patterns – t-shirt sizing and optional resources
One very useful but little used pattern when working with Resource Manager templates, is the ability to use parameters to optionally deploy resources, constrain certain resource configurations based on other user defined parameters, or to toggle parameters based on other values. This blog post explores some of these options.
Automating office security with Synology, Surveillance Station, OneDrive and Power Automate
Read about how we set up automated backups of our office security camera footage and used Power Automate to alert us if anything went wrong
Welcome to an internship at endjin!
A career in software engineering doesn't need to start with a Computer Science degree. The underlying traits of problem solving, a willingness to learn and the ability to collaborate well can be built in any field. Internships provide a great way to get your foot-in-the-door in the professional world, and arm you with some real-life experience for future endeavours. This post describes an internship at endjin, including the type of work you could be asked to do and what you could learn.
How to package a web project for deployment from the command line
Creating a package to deploy a web project from the command line (for deployment into Azure) is not as easy as it should be. In this post we cover the whole process.
How to use Power BI Embedded with AspNetCore
This post shows how to add a Power BI Embedded report to an ASP.NET Core application.
AWS vs Azure vs Google Cloud Platform - Mobile Services
My internship at endjin – New Proposition Development, Programming, and a very long list of acronyms
During her two month internship we tried to expose her to as many different aspects of endjin as possible; from New Proposition Development, marketing, partner & business development activities, as well as our software engineering processes and the Microsoft Azure ecosystem.
Automating creation of new ALM environments using PowerShell and Azure DevOps
Did you know that you can fully automate the bootstrapping process of setting up an Azure DevOps enviornment? This post shows you how.
Deploying to Azure using Azure Resource Manager templates and Octopus Deploy
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
Azure Machine Learning Studio is a fantastic service for experimentation, but you can also easily productionize your machine learning models. In this post we show how to create an Azure ML Studio web service and test it using Postman.
My Apprenticeship Retrospective
In this post, Mike Larah reflects on his experiences going through the endjin three-year apprenticeship scheme
Using Azure Automation to run VMs during office hours only – using graphical runbooks
We've improved our approach for saving money by turning off our virtual machines outside of office hours. This post explored how to do it using graphical runbooks.
Improve your Windows Command Prompt and PowerShell experience with ConEmu
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
We recently upgraded our TeamCity based CI/CD environment, but we had to make some adjustments to fix failing tests.
Azure Resource Manager authentication from a PowerShell script
Learn how to authenticate against Azure Resource Manager using PowerShell, for fully automated deployments.
Endjin.Licensing now supports SHA256
Microsoft have added SHA256 support to Signed XML, and Endjin.Licensing has been updating to take advantage of this breaking change.
CucumberJS Visual Studio Test Runner
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.
Using Lazy and ConcurrentDictionary to ensure a thread-safe, run-once, lazy-loaded collection
In this post, Mike Larah discusses how to ensure your C# collections are thread-safe, only run-once, and are lazy-loaded.
Azure Batch - Time is Money in Big Compute
Consumption based pricing is a one of the USPs of Cloud PaaS services, but the default settings aren't necessarily optimised for cost. Significant savings can be made from understanding your workload.
A Step-by-step guide to setting up CucumberJS in Visual Studio 2015
This is a quick guide to setting up cucumber JS in Visual Studio with grunt.
Using Azure Resource Manager and PowerShell DSC to create and provision a VM
Azure Resource Manager and PowerShell Desired State Configuration are powerful tools for provisioning and then configuring your virutal machines in Azure. This post delves into the details.
Reduce Merge Conflicts in .NET Solutions with PowerShell based Git Hooks
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
We use SpecFlow to write integration tests against Azure. In this post we share an Open Source SpecFlow extension for the Azure Storage Emulator.
Speed kills: decrease page load time and increase conversions with Azure CDN
A CDN, short for Content Delivery Network, is essentially a network of servers set-up, in various geographic locations, with the aim of speeding up the delivery of content to end-users across the Internet.
Azure Automation scheduler and daylight saving time
Everything in Azure runs in Coordinated Universal Time; learn how to deal with Daylight saving time in Azure Automation, so your jobs still run on time.
Visualise your Azure Table Storage data with Power BI
You can easily visualise data stored in Azure Table Storage in Power BI. This guide shows you how.
Azure Web Apps: Package Restore against a private NuGet Feed
If you have private NuGet feeds, restoring packages during a CI/CD process can be a challenge. This post provides a solution when working with Azure App Service.
Using Git for .NET Development: Part 5 – Staging Some Changes In A File But Not Others
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
One of the great benefits of using SpecFlow is that it allows you to write your specifications in a human readable format. Learn how you can create reusable step argument transformations to apply custom transformations to your parameters, so that you can keep your specifications easy to read.
25 useful steps missing from SpecFlow
We're huge fans of SpecFlow. We harvested 25 reusable steps from our various open source projects into a new extension that you can use to reduce your own boilerplate.
Amazingly Useful Chrome Developer Tips: #1 Inspecting dynamically created DOM elements
Using a different New Relic application name per environment with Azure Cloud Services
Just because you're using the cloud, doesn't mean you don't use traditional DTAP environments. But you do need to configure your cloud services to understand them.
You're hiring the wrong people: 10 tips to find great developers
Hiring developers is hard. Really hard. Here are some tips on how to make it easier on yourself.
Which programming language should I learn in 2015?
If you were learning to programme today, which language should you choose, and why?
Reporting errors to New Relic from an Azure Worker Role
In this post we demonstrate how to use New Relic to monitor an Azure Cloud Service Worker Role, step by step.
Extending Endjin.Retry with custom Retry Policies
Endjin.Retry is our simple .NET library for handling transient errors, to make your Cloud applications more resilient and reliable.
Endjin.Licensing - Part 5: Real world usage patterns
We've open sourced a lightweight .NET based licensing framework we've been using internally over the last couple of years; in this post I'm going to highlight some real world usage scenarios.
Endjin.Licensing - Part 4: How to implement custom validation logic
Endjin.Licensing is our .NET based licensing framework; in this post we highlight its extensibility features, demonstrating how to add custom license validation logic.
Endjin.Licensing - Part 3: How to create and validate a license
Endjin.Licensing is our .NET based licensing framework; in this post we show how to create and validate a license using C#
Endjin.Licensing - Part 2: Defining the desired behaviour
We've open sourced a lightweight .NET based licensing framework; in this post we flesh out the behaviours we want the framework to support using Gherkin flavoured BDD specifications.
Endjin.Licensing - Part 1: Why build another licensing system?
We've open sourced a lightweight .NET based licensing framework we've been using internally over the last couple of years. In this post I explain why we created it in the first place, rather than using existing offerings.
Generating and using a certificate to authorise Azure Automation
Diagnostic logging with Azure SDK 2.5
Learn how to use diagnostics in Azure Virtual Machines and Cloud Service Web or Worker Roles using the Azure SDK.
Refactoring by pattern using Regular Expressions and ReSharper search by pattern
Using SmartGit to follow the GitFlow branching and workflow model
How do you use SmartGit to simplify your development workflow by using GitFlow?
TPL Dataflow by Example code samples for LINQPad
TPL Dataflow is one of the most powerful, yet unknown framworks contained within .NET. If you need to do high performance data processing TPL Dataflow should be your first port of call.
Using Azure Automation to run VMs during office hours only
One of the strongest selling points of cloud computing is that you only pay for what you use. Running virtual machines can become expensive, but you can save significant money if you turn those VMs off outside of office hours.
Elasticsearch gotchas and tips - part 2
We've delivered a number of Elasticsearch solutions on Azure. In this second post in the series, we share some useful tips.
Avoid circular dependencies with AngularJS Directives
How to use an $injector service to avoid a circular dependency error dynamically resolving templates in a templateRepository.
Using AngularJS decorators to resolve view templates by resource content type
In this post we show how you can render a container based on content-type
Jasmine MetaRunner for TeamCity
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 Jasmine BDD Framework test runner.
Unit testing AngularJS with Visual Studio, ReSharper and TeamCity
In this post, Mike demonstrates how you can test AngularJS with Visual Studio, ReSharper and TeamCity for the full local and CI/CD DevOps experience.
Using SemanticMerge to fix Git merge conflicts
How can you use the SemanticMerge tool to help you deal with GIT merge conflicts? Here's an overview of the process.
Gotchas when installing an Elasticsearch cluster on Microsoft Azure
We've built a number of Elasticsearch clusters on Microsoft Azure. This blog post contains some of our top tips and gotchas.
A Step by Step Guide to Testing NuGet Packages Locally
There's a lot of documentation available around NuGet and how to create/publish packages, etc. But when I looked for a simple step-by-step guide on how to test a package locally, I couldn't find any.
How to retry commands in PowerShell
Transient failures can happen at any time. There are many useful frameworks for .NET, but what about PowerShell?
Create a custom TeamCity PowerShell MetaRunner to Notify NewRelic that new deployment has occurred
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
How do you resolve GIT merge conflicts? Can Visual Studio help you at all? What are the best tactics?
Button Visual States in Xamarin.iOS
One way to manage a button visual state in iOS is by setting a different background image for each one of the UIControlState values available...
Event stream manipulation using Rx – Part 2
Having described the problem space using Marble Diagrams, it's now time to create a real solution using Rx and the Observer pattern to process data from Windows Event Log.
Event stream manipulation using Rx – Part 1
This blog post delves into using Rx to process the messages received from Windows Event Logs, so that they can be shaped in a way that is useful to us to consume.
Understanding dependency injection
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
Semantic logging enables much richer diagnostics and analysis. It is supported in Windows and in .NET. This post explores the problem space. Others in the series explore how we can use Reactive Extensions to enable some powerful scenarios.
A Step by Step Guide to Connecting to an Azure Virtual Machine with PowerShell Remoting
Learn how to use PowerShell Remoting to connect to an Azure Virtual Machine; a useful technique for managing servers like cattle, not pets.
Using Git for .NET Development: Part 3 – branching and pushing your changes
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
How do you get started with GIT? How do you install it? What are the basic commands? How does Visual Studio help you?
Configuring TeamCity and YouTrack to use Office 365 for Email Notifications
This post shows how to use your Office 365 SMTP relay to enable email notification from TeamCity and YouTrack hosted in Azure.
Using Git for .NET Development: Part 1 – What is Git?
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?
Downloading Windows Azure Subscription Files
If you use Azure Management Studio, you can quickly setup your connections by importing your publish settings...
Reclaiming Space after updating to Windows 8.1
A quick tip of how to reclaim up to 10GB of space after updating to Windows 8.1
Azure From The Trenches: Updating Service Configuration Whilst Running In The Emulator
A quick tip for updating your Azure cloud service configuration while running in the emulator
Azure Table Storage throws a StorageException when using DateTime.Min
1601 was the year that Pierre de Fermat and King Louis XIII of France were born, Robert Devereux was beheaded in the Tower of London, the Dutch defeated the Portuguese navy in the battle of Bantam Bay and the year Shakespeare's Hamlet is thought to have been performed for the first time. Monday January, 1st 1601 (in the Gregorian calendar) was a pretty uneventful day yet the first day of the 17th century is affecting millions today.
Bootstrap 3 At A Glance - Part One - Motivations
In this post we look at the history and motivations behind the Bootstrap CSS library, and the goals of the project.
Learning to Program – A Beginners Guide – Part Twelve – Dealing with Repetitive Tasks - Recursion in F#
In this post we'll look at recursion in F#...In this post we'll look at recursion in F#...
A Step by Step Guide to Automating TeamCity Backups
In this blog post, I provide a how-to guide for automating your TeamCity backups using a PowerShell script.
Learning to Program – A Beginners Guide – Part Eleven – More With Functions and Logic in F#: Minimizing Boolean Expressions
In this post we delve deeper into Function and Logic and look at minimizing Boolean Expressions with F#
A Step by Step Guide to Migrating a TeamCity Instance from One Server to Another
Sometime upgrading in-place is no longer an option and you need to migrate to a new server. This step-by-step guide takes you through the process of migrating a TeamCity instance.
Learning to Program – A Beginners Guide – Part Ten – Getting Started With Operators in F#
In this post, we'll look at how our function can work more like the other logical F# operators we've already used.
Assign a keyboard shortcut to collapse all projects in Solution Explorer
Just so that I never ever forget this again. Here's how to assign a keyboard shortcut to collapse all projects in Visual Studio Solution Explorer.
Learning to Program – A Beginners Guide – Part Nine – Introducing Functions in F#
In this post, we'll learn how to use F# to ease the pain for us.
What does sudo mean?
I've always wondered what sudo means when I use it to run a command in a terminal.
Example of a full-width bleed using Bootstrap 3
See how to use Bootstrap 3 to create a full-page bleed.
Learning to Program - A Beginners Guide - Part Eight - Working With Logic
In this post, we'll look at how we can bring logic to bear on our problems.
Xamarin platform setup gotchas: Final Edition!
Last post on the topic and links to all the other entries centred around troubleshooting/setting up your Xamarin mobile dev environment.
Visual Studio, Xcode and VMware Fusion Shared Folders
Xamarin lets you develop iOS applications using Visual Studio. This is obviously great for .NET Developers except that you currently have to go to Xcode (Apple's Developer tool) if you want to create the UI using a designer tool.
Learning to Program - A Beginners Guide - Part Seven - Representing Numbers
In post, we're going to look at the data memory in more detail, and learn how we can represent numbers in a computer.
Running the Windows Phone Emulator in VMware Fusion
If you run Windows 8 on your Mac with VMware Fusion 5.0 , you might get the following error message when starting the Windows Phone emulator for the first time: The Windows Phone Emulator wasn't able to create the virtual machine.
More Xamarin platform setup gotchas
Today my Xamarin trial expired - Sadface. But endjin generously supplied me with a new Xamarin.Android and Xamarin.iOS Business edition license, things were looking up - Happyface! However after activating the new license and upgrading to a newer version of Xamarin Studio on both my Mac and the guest Windows 8 OS, my master solution containing all the projects for the different platforms (Android, iOS and Windows Phone) was no longer building.
Angular.JS ngRepeat and Bootstrap layout bug on IE7
In this post we delve into a bug we discovered with Angular.JS and Bootstrap that appears in IE 7.
Learning to Program - A Beginners Guide - Part Six - A First Look at Algorithms
In this post we're going to take a look at algorithms.
Android Device Manager and SDK Location
After going through the Xamarin installation instructions for Mac and Windows , I ended up in a situation where the AVD Manager ( Android Virtual Device Manager ) on my Windows VM would not let me create a new AVD...
Learning to Program – A Beginners Guide – Part Five – Running a program
Let's start our exploration of this architecture by looking at the Program Instructions memory.
Windows Phone Capabilities and enabling the camera in the emulator
A short explanation of Windows Phone capabilities and how to enable the camera.
Introducing endjin composition framework 2.0 : Part 5 - Debugging
Learn how to debug the endjin composition framework.
Learning to Program - A Beginners Guide - Part Four - A Simple Model of a Computer
In this post, we're going to be taking a look at one representation of the hardware box - from a programmer's perspective.
Windows Phone Registration Failure: Error 0x64
A quick fix to error 0x64 when registering a new Windows Phone device.
Introducing endjin composition framework 2.0 : Part 4 - ASP.NET MVC/WebAPI
Learn how to use the endjin composition framework inside ASP.NET MVC or Web API
Learning To Program - A Beginners Guide - Part Three - How Does a Computer Work?
Windows Run Commands for Developers
The other day I wanted to bring up the Windows "Program and Features" panel using the run command (Win+R or just start typing in the Start screen in Win 8). Something I've done countless number of times in the past. For some reason, I had a complete blank and couldn't recall what that particular command was. So I thought it would be good to have a couple of tips and some of the most useful run commands for Developers (and everybody else) in one place.
Introducing endjin composition framework 2.0 : Part 3 - Using the content factory
Learn how to use the endjin composition framework content factory
Retrying tasks with TPL, async and synchronous code
Dealing with Transient Faults is absolutely essential when working in The Cloud. We delve into the library we've created for dealing with this situation.
Learning To Program - A Beginners Guide - Part Two
In this post, we're going to set up the tools that we're going to use in the rest of this course on Windows or Linux.
A step by step guide to installing an F# REPL environment on Linux
In this step-by-step guide, we'll take you through the process of setting up an F# REPL environment on Linux.
A step by step guide to installing an F# REPL environment on Windows
In this step-by-step guide, we'll take you through the process of setting up an F# REPL environment on Windows.
Xamarin platform setup gotchas
Yesterday I attended the "C# and Mvvm - Developing apps for all of Android, iPhone and Windows" event hosted by Stuart Lodge at Modern Jago. In preparation for the day I had the daunting task of setting up my Mac for cross platform development with Xamarin. While most of it was fairly straight forward and well documented, I came across a few gotchas worth blogging about.
Introducing endjin composition framework 2.0 : Part 2 - Getting Started
Learn how to use the endjin composition framework for dependency injection.
Learning To Program - A Beginners Guide - Part One
Introducing endjin composition framework 2.0 : Part 1
Learn why we created the endjin composition framework for dependency injection.
High-Res Prototyping Tips: How we eliminated waste and enabled collaboration
At endjin we believe in collaboration and the ability to pull together expertise and ideas. In this post we talk about the collaborative efforts between designers and developers the importance of communication, a step by step guide followed by some handy tips.
PowerShell Best Kept Secrets: Splatting
Splatting is one of the most powerful, yet underused features of PowerShell. In this post we cover a walk-through of how to use this feature.
Prototyping and Proof of Concept: Charting and Data Visualization on the Microsoft Platforms
A proof of concept is not a quick and dirty hack, it's not a demo, or a technical spike.
A Step by Step Guide to using GitFlow with TeamCity – Part 4 – Feature Branches in TeamCity
In the final part of this series, we cover how to use TeamCity's feature branch abilities to support the GitFlow process.
Example Responsive Layout Using Bootstrap
See how to create a responsive website layout using Bootstrap.
Tips for implementing responsive designs using Bootstrap 3
Which programming languages should I learn: Beginners Edition
If you were learning to programme today, which language should you choose, and why?
Which programming languages should I learn?
If you were learning to programme today, which language should you choose, and why?
A Step by Step Guide to using GitFlow with TeamCity – Part 3 – GitFlow Commands
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
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
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.
RavenDB in the Cloud
Some thoughts on RavenDB after using it to build a content-managed website.
A step by step guide to building a Twilio voice app with Web API
Discover how to build Twilio voice apps using asp.net MVC and debug it using port forwarding tools.
Integration testing with Web API
A quick example of how to set up integration testing for HttpClient and HttpServer
Agile:MK January 2013 Meeting
Endjin are proudly sponsoring the Agile Milton Keynes user group.
Calculating Distance using SQL Server Spatial CLR Types
Sql Server Spatial Types Assembly is a hidden gem. In this post we show how to use SqlGeography.STGeomFromText and STDistance distance (in meters) between the two points.
Using the endjin composition framework in an MVC application
A quick guide to using the endjin composition framework with ASP.NET MVC Applications.
Windows 8 Development Camp
A review of the Windows 8 App bootcamp help at Microsoft.
Day 1: PowerShell, BDD and Git
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.
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
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.
Where do my Visual States come from in Blend?
How does Expression Blend managed to find the Visual States exposed by the standard controls? How could you do the same with your own code?
Work Smarter with Convention Over Configuration and the Endjin Composition Framework
We've added convention over configuration features to our Dependency Injection library - the endjin composition framework, to help improve your productivity.
Component Discovery and Composition II - Abstracting the container implementation
A Step by Step Guide to MongoDB for .NET Developers
MongoDB has been taken a large amount of mindshare in the NoSQL space. In this blog post we share a simple step-by-step guide on how to get started as a .NET developer.
Component discovery and composition Part 1f: Fundamentals – Generalizing Registration
A follow up to "A Short Tale of a Deceptively Slow LINQ Expression"
My last post caused a number of responses from the community. I discuss them here and provide a little bit more context.
A Short Tale of a Deceptively Slow LINQ Expression
In this post I delve into some performance analysis of an expensive loop that was taking over 200 seconds to run.