subscribe via RSS

  • Using Environment Variables in .NET xUnit Tests

    I want dotnet test to handle environment variables. On *nix systems I should be able to type MyEnvVar=Hello dotnet test and then be able to access that variable within my tests. More...
  • Writing code the easy way with TDD

    Often I need to write some complex code with multiple requirements that when stacked on top of each other require a larger cognitive load than I care for. Along with its other benefits, Test-driven Development makes it easier and quicker to write code of this nature. More...
  • Local .NET Development with Amazon S3

    When developing applications that integrate with cloud services, I find it to be a more pleasant experience if I can raise, debug and destroy instances of these services locally as I build my application. In the case of Amazon S3, I might have a number of files I need to be moving around during development, and I don’t want to wait while transferring these files between my local machine and the cloud. More...
  • Using Secret Manager in .NET Console Apps

    Having written or contributed to a number ASP.NET Web projects, Secret Manager is a familiar tool for storing sensitive information. Using Secret Manager with a Console Application however wasn’t as straight forward as I’ve come to expect with web projects. This post looks at what needed to occur for secrets to be accessible in a Console App, and how both the workaround and reasoning was discovered. More...
  • Azure Key Vault

    App Service deploy > JSON variable substitition

    • Works for APIAccessCode, doesn’t appear in App Service > Configuration, appears in appsettings.json
    • Doesn’t work for ConnectionStrings–DatabaseContext KeyVault (cx)

    App Service deploy > Application and Configuration Settings

    • Works for APIAccessCode, appears in App Service > Configuration
    • Doesn’t work for ConnectionStrings–DatabaseContext KeyVault (cx)
    cx - Remember to add new AKV secrets to the variable group libary. If not added to the library, deployment will still pass but logs will show $(Section–Secret) instead of *** More...
  • Browser Fingerprinting and Concealing Selenium

    I recently discovered a website that would respond to requests normally in Chrome, but failed to display anything when Chrome was being controlled by Selenium. Upon investigation, I discovered both Browser Fingerprinting and a way to have the site display correctly when accessed via Selenium WebDriver. More...
  • Static Code Analysis for .NET with SonarQube

    Whether it’s your codebase or someone else’s you’re going to build on, SonarQube can quickly and easily highlight quality and security issues without having to eyeball every line of code yourself. More...
  • Optimising for Cost in Azure Kubernetes Service

    I’ve been trying for some time to run the cheapest single-node Kubernetes cluster I could on Azure Kubernetes Service (AKS). My target is to run it for a month at $70 (AUD) or below, but it takes some investigation to determine how to do this. More...
  • PostgreSQL in Kubernetes

    I want to run PostgreSQL in my Kubernetes cluster with automated backups, a UI to query and manage the database, and a means to easily transfer databases between the cluster and my other environments. This post discovers that such goals are not very difficult to achieve. More...
  • Grumbling on TypeScript

    I’ve been writing TypeScript since just before v1.8, which brought the killer feature JavaScript in TypeScript Compilation. Right now the latest version is v3.8.3 and there’s been many great features added over the last few years. Staying on top of new features, how they work, and even changes to older ways of working can be time consuming and at times frustrating. More...
  • Gradually Refactoring Towards Utopia

    I can never write perfect code. Over time, an increasing knowledge of the domain, language syntax, design patterns, and even learning entirely outside and irrelevant to the project at hand contribute to an ongoing drift in how I solve problems with (or without) code. At any time, should I have reached a level of happiness with code I’ve just written, the window this level of happiness is sustained for caps out at about three months. At the three month mark I’ll look at code I wrote and see an ill-informed mess. More...
  • This Social Image was Generated

    When sharing links from a website to social networks, meta tags are checked for summary data and these are used to build the little preview we see. This includes the image that will be displayed, and I’d like to automatically generate that image using data I already have. More...
  • Service and Container Orchestration for .NET with Tye

    Tye helps .NET Core developers build applications that are a collection of services and containers. On your local machine Tye runs your .NET services, any containers you need, and a dashboard you can use to inspect this environment. Tye can then deploy your services and containers to your Kubernetes cluster. More...
  • A Salesforce pipeline in Azure DevOps

    Having used Gearset in the past, I was looking for an option that would give me more control over Salesforce deployment, not to mention a better price. More...
  • Building a React Native pipeline for Android and iOS

    I’m familiar with React and Azure Pipelines but not with React Native and, I haven’t touched mobile development since 2018. What better way to upskill on these items than by building a pipeline targeting both iOS and Android? More...
  • Fifty community events - The first ten

    This year one of my goals is to become more involved with the broader software community, and to achieve this I’ve set a target of attending 50 community events in 2020. Hanging around and meeting people at these events has the following benefits for me More...
  • Where to visit in New Zealand

    Working in software in Sydney I meet a lot of people from different parts of the planet who, upon learning I’m from New Zealand, ask me where in New Zealand they should visit while travelling. I’m no expert on the matter, however I’ll share what I do know (mostly North Island) and I’ll update this post whenever I can harass more information out of my compatriots. More...
  • A look back at NDC Sydney 2019

    Last month I had the opportunity to both attend and speak at NDC Sydney 2019. NDC is a conference for Software Developers that occurred this year on 14-18 October with 2 days of workshops followed by 3 days of speakers. This year was the first time I have attended an NDC conference and the first time I was a speaker at a conference. More...
  • An Azure Pipeline for Visual Studio Marketplace

    In a previous post I built a custom Azure Pipeline release task and manually uploaded it to the Visual Studio Marketplace. In this post I’ll add new features and have DEV and PROD versions of the extension automatically deploy to the Marketplace on commit. More...
  • Monitoring the Web with Azure for Free

    With the deprecation of Multi-step Web Testing in Visual Studio and Azure, what approach can we now use to monitoring web properties, especially if we don’t own them? In this post, I’ll propose and demonstrate the leveraging of Azure to provide us a solution to this problem at no-to-little cost. More...
  • Auto-scaling Azure SignalR Service with Logic Apps

    Azure SignalR Service does not have auto-scale functionality out of the box. In this post I’ll implement my own auto-scaling using Azure Logic Apps. More...
  • Load testing ASP.NET Core SignalR

    Last time around I messed with SignalR I touched briefly on load testing. This time around I’ll deep dive into SignalR load testing, specifically to test the tool supplied in source, Crankier, and build my own load testing tools to investigate the limits of SignalR applications. More...
  • Docker containers aren't just for long running tasks

    Docker makes it easy to run long-running services like sql server or nzbget, but did you know that docker is also an excellent option for executing shorter workloads? More...
  • Publishing a custom Azure Pipelines release task

    I wanted to clear my Cloudflare cache during an Azure Pipeline deployment. Cloudflare offers a REST API to do this, but rather than poke around with scripts I decided to see how I could instead write a custom task to do this and publish it on the Visual Studio market place. More...
  • Executing custom scripts during VM deployment

    The Azure custom script virtual machine extension (2.0) allows script execution on virtual machines (VMs) during Azure Resource Manager (ARM) template deployment. During script development however, using the extension is slightly annoying due to the way scripts are referenced. I needed a workaround that would let me change script content easily, especially during development. More...
  • An overview of Azure SignalR Service

    I spent some time investigating Azure SignalR Service. I have an existing ASP.NET Core MVC application that uses SignalR, hosted on an Azure App Service. I’m interested in seeing whether I can move the web client to Azure Storage and replace the App Service with a SignalR Service. More...
  • Noob tips for Traefik

    In the past I’ve used jwilder’s nginx-proxy for my reverse proxy needs but maintenance on that codebase seems to be struggling with several ideas hanging around as open PRs. One of these ideas that I’m interested is routing http requests to different docker containers based on path, something a more modern reverse proxy, Traefik, already does natively. For me however, ramping up on Traefik had some head-to-brick-wall moments that I’ll document here so you, or more likely future me, doesn’t have to make the same mistakes. More...
  • Github objects to my Chrome extension

    I got an email from Github today asking me to stop using their logo and the name GitHub in my Chrome extension. More...
  • Getting started with neo4j

    Getting started with neo4j is very pleasant indeed. More...
  • ZigZag released

    More...
  • Honeyshot strategy

    I wrote a game and released it last week. My two brothers live in different countries and immediately a competition was spawned on the iOS leaderboards between us. More...
  • Honeyshot released

    More...
  • Building an HTML5-based multi-platform game

    I’ve been pretty quiet on the blogging front this year, the reason being I have been spending the majority of my time developing an HTML5 game that I have released on web, iOS and Android. More...
  • banandoh released

    More...
  • Migrating from Wordpress to Jekyll

    A couple of weeks ago I got an email from Amazon Webservices informing me that one of my EC2 instances was operating on degraded hardware and was to be retired. Technically I’m prepared for such an eventuality thanks to docker, however it was still going to take a few hours More...
  • Deploying ASP.NET 5 projects to MyGet

    MyGet is a package repository and feed host that you can push nuget packages (amongst other things) at. Their free tier allows you to have public feeds at no cost, and I've been using it to distribute my ASP.NET 5 EntityFramework 6 packages. More...
  • ASP.NET 5 on the Amazon (Linux) Cloud

    Yesterday ASP.NET 5 RC1 was released. Yesterday was also a milestone for me as I switched over from my shared hosting provider for eggsbenedict.info to Amazon Web Services. This post details some of the obstacles I needed to traverse in porting eggsbenedict.info over from a full Windows-based ASP.NET 4.5 application to full Linux-based ASP.NET 5 application, and offers some open-source libraries that I have created to enable such a transition. More...
  • Optimising WordPress and MySQL docker images for Amazon EC2 micro instances

    After seeing that my Amazon t2.micro EC2 instance would happily crash itself by quickly using all available memory when a few requests were coming in, I realised I needed a solution that did not involve me having to reboot the instance and bring the containers back up with so little traffic. The following outlines what I did to reduce the memory footprint to 160MB. More...
  • I've finally confirmed that LaTeX is awesome.

    I finally got around to learning LaTeX this week, and after writing my first document in it, I hope I never write in Word again. All the technical documents I've written in the last ten years have been in Microsoft Word, but I've always felt that it wasn't the best tool for the job. It took a couple of hours to get started on a document, and the first day was a little slow, but after two or three days I felt not only that I was progressing faster than I would be with Word, but that the final output was of a much higher quality also. More...
  • Chrome Extension: Github Follow

    Github Folow When files are moved or renamed in git their history is abruptly cut short. You can include the history prior to rename by executing the following command: git log --follow path\to\my\file.md However, on github.com no such solution exists. More...
  • Gnashing of Teeth on the Bleeding Edge

    Well I got eggsbenedict.info running on my (linux) dev box as a docker image, but it took some effort. The current stack is AWS EC2 + S3, MVC 6 on Kestrel, Entity Framework 7 + Postgres, AngularJs but there's still some Knockout templates lying around. More...
  • Migrating to ASP.NET 5

    Note - The libraries I indicate as not supported are specific to projects targeting dnxcore50 and the coreclr runtime. Some of these items are still supported by dnx451 and the clr and mono runtimes. I've had a lot of success with porting eggsbenedict.info to ASP.NET 5, a few days ago I confirmed and tested a full port on Windows. More...
  • .NET Development on Linux

    Last week in a rage regarding how shit my host is, I signed up to Amazon Web Services (AWS), found out how awesome Docker and moved the blog over to AWS. The blog now consists of three Docker containers; one for wordpress, one for MySql, and the last one which performs a backup of the MySql data to an S3 bucket. More...
  • Country tracking for eggsbenedict.info

    To help motivate me add content to eggsbendict.info I've added this page to keep track of the number of countries the site indexes thus far. The aim is to get as many countries added as possible, and then change the page to some kind of world map thing I can use for marketing purposes. More...
  • TrendBet now does multiple regions

    TrendBet is a little more lively now with multiple regions, meaning a new round is triggered every one minute rather than every five. I'll let this run for a few days to collect some data and then I'll extend tweddit to index the regions also. More...
  • Regions taking longer than expected

    I wasn't expecting the addition of multiple-region functionality to TrendBet to take so long, but it seems I underestimated the required effort. I had written the application to auto-update the UI with the resolution of each round when the timer reached zero, at which point updates to the stash would also be displayed to the user. More...
  • New Project - Tweddit

    I was going to add badges to Trend Bet on Tuesday, which would put it in a good position for me to move on to something else. However, I had an idea and spent the day building it anyway. The name is stupid, but hints at the functionality - it's a way to view current and past twitter trends, ranked in a similar fashion to reddit. More...
  • Entity Framework Code First makes Views unpleasant

    Getting an SQL View into Entity Framework Code First is a real bastard. Especially if said view doesn't expose any non-nullable fields you can combine to create a primary key. Here's how I ended up achieving it. More...
  • Sunday, 30 August 2015

    I've started this blog so I can look back over a given week and feel relaxed that although I might not be able to see any progress in a project, that learning and/or invisible steps have been made in the direction of the finish line. Here goes... More...