<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Welcome to the paradise. Making the chicken dance one line of code at a time.</title><link>https://www.rubberchickenparadise.com/</link><description>Recent content on Welcome to the paradise. Making the chicken dance one line of code at a time.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 27 Nov 2022 18:25:54 +0000</lastBuildDate><atom:link href="https://www.rubberchickenparadise.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Using AWS S3 with Cloudformation to securely backup SQL Server Backups to the cloud</title><link>https://www.rubberchickenparadise.com/blog/2022-11-27-using-aws-s3-with-cloudformation-to-securely-backup-sql-server-backups-to-the-cloud/</link><pubDate>Sun, 27 Nov 2022 18:25:54 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2022-11-27-using-aws-s3-with-cloudformation-to-securely-backup-sql-server-backups-to-the-cloud/</guid><description>Disaster recovery is something every company needs to plan for. With the cloud and Infrastructure As Code (IAC) we can set up a robust cloud backup solution that requires minimal configuration to add additional servers.
Our company recently got hit with a one in a million RAID array failure that caused the loss of our primary database server. Thankfully we were able to recover the backup files since they were stored on a different RAID array but with out that insane amount of luck, we were looking at 24 hours of data loss.</description></item><item><title>Automating Clickonce deployment for .net 6.0 Winforms</title><link>https://www.rubberchickenparadise.com/blog/2021-11-18-automating-clickonce-deployment-for-net-5-0-winforms/</link><pubDate>Thu, 18 Nov 2021 19:05:27 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2021-11-18-automating-clickonce-deployment-for-net-5-0-winforms/</guid><description>Update Jan 26, 2023 T﻿he instructions below work the same for .net 6 and mage version 6. The specific version numbers below are left as is but the specific versions are not required.
Where we started With .NET Framework on the way out and .NET 5 being released, my company decided to go through and update some of our applications to use .NET 5.
The application was on .NET Framework 4.</description></item><item><title>AWS Cognito with Winforms</title><link>https://www.rubberchickenparadise.com/blog/2020-10-19-aws-cognito-with-winforms/</link><pubDate>Mon, 19 Oct 2020 22:51:38 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-10-19-aws-cognito-with-winforms/</guid><description>Legacy software is fun. Sometimes we need to update code to enable new authentictaion methods. In todays adventure our intrepid developer heads off on the quest to get the legacy .net framework 4.6.1 WinForms app working with the new user store, AWS Cognito.
AWS Cognito Setup So after we get our user pool set up we can create an app client for our application. This is the config that I am working with for this post.</description></item><item><title>Deciding on an identity provider for a greenfield application stack</title><link>https://www.rubberchickenparadise.com/blog/2020-10-13-deciding-on-an-idp/</link><pubDate>Tue, 13 Oct 2020 22:00:45 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-10-13-deciding-on-an-idp/</guid><description>Once again we enter the scene with the developer manager trying to figure out what the best way to secure the applications are. This one is different from the API gateway since it is meant for users and not just automated access. The additional wrinkle is that as part of this project we wanted to add SSO to our reporting portal, a soon to be built order entry portal, and a client invoicing portal.</description></item><item><title>Dynamic factories for Multi-Tenant systems in .net core - Hacking in Named Registrations and using configuration to get them</title><link>https://www.rubberchickenparadise.com/blog/2020-04-07-dynamic-factories-for-multi-tenant-systems-in-net-core-hacking-in-named-registrations-and-using-configuration-to-get-them/</link><pubDate>Tue, 07 Apr 2020 22:04:41 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-04-07-dynamic-factories-for-multi-tenant-systems-in-net-core-hacking-in-named-registrations-and-using-configuration-to-get-them/</guid><description>When working in multi-tenant systems being able to swap implementations based on which client is logged in can be very helpful.
There may be custom work to a module for a specific client, or different implementations for different back-end services, or one of a thousand reasons you can probably think of where having a named instance would be useful.
Unfortunately Microsoft.Extensions.DependencyInjection does not have this out of the box.
There are several different ways I have seen this handled, relied on configuration but was a trivial use case here.</description></item><item><title>Handling row level security with Entity Framework Core</title><link>https://www.rubberchickenparadise.com/blog/2020-04-01-handling-row-level-security-with-entity-framework/</link><pubDate>Wed, 01 Apr 2020 21:53:45 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-04-01-handling-row-level-security-with-entity-framework/</guid><description>At work we are currently going through a migration to modernize from a .net 4 winforms app to a modern web app with HTML, CSS, Javascript, and .net core on the backend. Part of this is also making our permissions more manageable and centrally applied so the same logic is not in 6 different places.
For the .net core web api we decided to go with JWT and Api Key authentication depending on the various ways users and applications will interact with the backend (Api Key for automated processes, JWT for users using the web app or winforms app during the soft migration).</description></item><item><title>Setting up a static site on an iPad</title><link>https://www.rubberchickenparadise.com/blog/2020-03-12-setting-up-a-static-site-on-an-ipad/</link><pubDate>Wed, 11 Mar 2020 23:59:27 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-03-12-setting-up-a-static-site-on-an-ipad/</guid><description>When setting up this blog I wanted to try something. Could I set up a static site using just an iPad instead of my desktop. This wasn’t an experiment to see if I could replace my desktop, this was because my kids didn’t want to stop playing their computer games long enough for me to get this up and running. I had an iPad laying around and a Bluetooth keyboard and time.</description></item><item><title>Disaster Recovery</title><link>https://www.rubberchickenparadise.com/blog/2020-03-07-disaster-recovery/</link><pubDate>Sat, 07 Mar 2020 20:06:19 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2020-03-07-disaster-recovery/</guid><description>A couple weeks ago my hosting provider ghosted me. Site gone, support gone, prepaid hosting refunded, just gone. Guess that $4 VPS for 3 years was too good to be true.
Thankfully I had a somewhat recent backup of my ghost install so not much was lost (only a couple posts, why is a story for a different time. Thanks ADHD.). When trying to figure out what to do I decided to look into simpler alternatives than Ghost.</description></item><item><title>ASP.NET Core Web API and Non Standard XML</title><link>https://www.rubberchickenparadise.com/blog/2019-04-04-web-api-and-non-standard-xml/</link><pubDate>Thu, 04 Apr 2019 00:00:00 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2019-04-04-web-api-and-non-standard-xml/</guid><description>Recently I have been working on an API and wound up running into an issue where a third party application would happily take &amp;ldquo;Invalid&amp;rdquo; XML and continue on the way. The main culprits were out of spec acceptance of boolean and date fields.
The reason this came up is we are wrapping a third party api and want to be able to point users to our new api through a DNS resolution change so the url points at our new server and client applications do not notice any changes.</description></item><item><title>When AutoMapper isn't Auto</title><link>https://www.rubberchickenparadise.com/blog/2019-02-03-when-automapper-isnt-auto/</link><pubDate>Sun, 03 Feb 2019 00:00:00 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2019-02-03-when-automapper-isnt-auto/</guid><description>Recently I was working on the API gateway and ran into an issue while trying to use Auto Mapper. It was working well until I was trying to map some XML from one name space to another.
The basics was that I had created a copy of the interface so we could change the server listening to our external endpoint from a third party app to one we controlled and could insulate our customers from any api changes in the future.</description></item><item><title>ASP.NET Core Identity and Claims</title><link>https://www.rubberchickenparadise.com/blog/2019-01-24-asp-net-core-identity-claims-and-a-journey-into-slight-madness/</link><pubDate>Thu, 24 Jan 2019 16:00:00 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2019-01-24-asp-net-core-identity-claims-and-a-journey-into-slight-madness/</guid><description>Recently at work I was tasked to build an API gateway. Now an API gateway is a rather simple thing, create a copy of the interface objects, move them to a new name space, grab automapper so you don&amp;rsquo;t have to write tedious manual mapping code then throw it out on a server.
Overall it wasn&amp;rsquo;t too bad until I started thinking about security. When looking at all the various schemes and thinking about what was going to be behind this gateway I came up with the thought that an old school API key would be the best way to authenticate users.</description></item><item><title>Hello World</title><link>https://www.rubberchickenparadise.com/blog/2019-01-24-hello-world/</link><pubDate>Thu, 24 Jan 2019 08:00:00 +0000</pubDate><guid>https://www.rubberchickenparadise.com/blog/2019-01-24-hello-world/</guid><description>So the first program many programmers write in a language is a simple program that says &amp;ldquo;Hello World&amp;rdquo;. The reasons are many but the main one is that if you can get &amp;ldquo;Hello World&amp;rdquo; to come up on the screen or in the browser (or even in a log file) then every thing in the environment is working. So this is the Hello World post. If you can see this then my blog is up and running.</description></item></channel></rss>