Prettifying Long Commit Histories with Git
We often use GitHub to create a compare view, and list pull requests (PRs) for releases. However, GitHub limits the number of commits you...
Documentation GitHub GitWe often use GitHub to create a compare view, and list pull requests (PRs) for releases. However, GitHub limits the number of commits you...
Documentation GitHub GitUsing our Hugo-based documentation site, we typically publish release notes once per week. My usual process includes the following: M...
Documentation Hugo ArchetypesAs someone who basically gets by when it comes to writing Javascript, I tend to look at things from a “I bet I could do this with CSS” st...
CSS SCSS Mobile UX UI/UX frontendThis is an updated post of the original here. Whether you’re new to the frontend at RIMdev or looking for more about our Frontend team...
Team RIMdev FrontendIf you’ve ever worked in Azure Data Studio, you may find tab colors very useful. They allow you to visually separate different connectio...
Documentation Azure Data StudioIf you’re not familiar with Platform UI, it’s a utility rich CSS framework we created. As we look to migrate all of our apps and static ...
UI UX CSS SassGet ready to celebrate because, as of Friday, September 18, 2020, Evan You, creator of Vue.js, announced Vue 3 is officially released. He...
vue3 frontend developmentTypically with ASP.NET Core 3.1 when no specific authorization requirements are set all endpoints are publicly accessible. When you’re wo...
asp.net coreIf you have used slots in Vue, you know that it provides a clean way to vary content that is displayed in child components. For example, ...
VueJS Slots Scoped Slots JavaScriptWe’ve been using Swagger via Swashbuckle for some time with our ASP.NET Full Framework applications. As we’re moving toward ASP.NET Core ...
asp.net coreWe’ve spotted some strange behavior before with ASP.NET Core and JSON serialization/deserialization, and I eventually made it back to try...
asp.net coreWe’ve spotted some strange behavior before with ASP.NET Core and JSON serialization/deserialization, and I eventually made it back to try...
asp.net coreAs we create CSS components in our internal framework, we typically try to use little if no JS. Our tooltips should be no different. We...
UI/UX frontend CSS Responsive DesignImagine you’re using Elasticsearch with your strongly typed C# models and nameof(MyProperty) and wondering why it doesn’t work. Turns out...
.NETI have been working as a software developer for almost three years, the most common exception or bug I made is NullReferenceException -Sy...
.NET C#Testing is an important step we can take as developers to reduce bugs in our code, but testing seems to be one of the best practices that...
Vue.js Jest TestingLast week I attended the annual user experience conference Convey UX in Seattle, where 50 UX leaders from all over the world shared their...
UI/UX frontend conference conveyux2020 conveyuxWe run a number of web applications at Ritter Insurance Marketing. Our primary datastore for these applications is MSSQL / SQL Azure. Our...
SQLWe’ve been working through upgrading our core applications from ASP.NET full framework to ASP.NET Core. Over the years we’ve assembled an...
.NETConfigurationManager has long been used by .NET Framework developers prior to .NET Core to access things like app settings and connection...
.NETTypically with ASP.NET Core 3.1 when no specific authorization requirements are set all endpoints are publicly accessible. When you’re working with an authenticated required system the burden is on...
asp.net coreWe’ve been using Swagger via Swashbuckle for some time with our ASP.NET Full Framework applications. As we’re moving toward ASP.NET Core we encountered some difficulty in achieving the same groupin...
asp.net coreWe’ve spotted some strange behavior before with ASP.NET Core and JSON serialization/deserialization, and I eventually made it back to trying out some scenarios. One thing we’ve noticed is Newtonso...
asp.net coreWe’ve spotted some strange behavior before with ASP.NET Core and JSON serialization/deserialization, and I eventually made it back to trying out some scenarios. One thing I’ve noticed is the defau...
asp.net coreImagine you’re using Elasticsearch with your strongly typed C# models and nameof(MyProperty) and wondering why it doesn’t work. Turns out, Elasticsearch with NEST by default translates MyProperty t...
.NETWe run a number of web applications at Ritter Insurance Marketing. Our primary datastore for these applications is MSSQL / SQL Azure. Our deployments are brought online by swapping code from stagin...
SQLWe’ve been working through upgrading our core applications from ASP.NET full framework to ASP.NET Core. Over the years we’ve assembled an opinionated library for assembling full framework APIs name...
.NETConfigurationManager has long been used by .NET Framework developers prior to .NET Core to access things like app settings and connection strings. By including the System.Configuration.Configuratio...
.NETWe’ve had some internal discussion around the usage of RegexOptions.Compiled in .NET – how it works and when it’s appropriate to use it. Despite being named Compiled is isn’t compiled at build time...
.NETDebugging web applications can be difficult sometimes. When debugging a failed HTTP GET request in Application Insights you have all of the information. But, when looking at failed HTTP POST/PUT/PA...
.NETAutofac is an inversion of control container for .NET. It allows developers to register items and then later use those registrations to inject items into their classes as needed. Not all of the met...
.NETWe recently started using SendGrid to send emails in production. As part of that, we noticed that emails to outlook.com, hotmail.com, msn.com, live.com were met with responses that looked like this...
SendGridAccording to https://www.chromestatus.com/feature/5088147346030592 at the time of this blog post Chrome 80 is targeted to default cookies to SameSite=Lax when SameSite is not specified. This change...
.NETOur RimDev.FeatureFlags library uses Newtonsoft.Json as part of roundtripping the on/off state in SQL. With that we use TypeNameHandling.All to serialize the type information as well. Putting aside...
.NETIn order to avoid having large files in our Git history we’ve been using Git Large File Storage (LFS). It commits a marker in the Git repository and uploads files to a separate place. On GitHub th...
GitAbout a year ago, RIMDev started a DevOps transformation. As part of that transformation, we started to use slots in Azure app services, deployed to multiple regions for resilience, and a whole lot...
devops rimbot chatopsOver the previous year we’ve been working to improve our overall uptime. While we aren’t prepared to offer 99.999% availability in the way a cloud provider may, we’re better prepared to meet unplan...
Azure DevOpsOur starting point This past year we’ve been on a DevOps journey. While we haven’t been in a state of stagnation or chaos as a team, we’ve identified areas where we could improve. We wanted to imp...
Azure DevOps TerraformOur team maintains a private package that contains our strategy for database migrations. It runs migrations using FluentMigrator as well as other scripts. Running SQL statements inside SQL Azure c...
.NETWe use Microsoft Azure Application Insights in our web applications. It logs tons of useful data about our applications, including web requests and requests to dependencies like databases. We also ...
.NETWe use Microsoft Azure Application Insights in our web applications. It logs tons of useful data about our applications, including web requests and requests to dependencies like databases. We also ...
.NETFeature flags can be useful for changing the runtime behavior of an application with minimal impact. Having a UI to toggle the feature flags on and off is extra helpful, too! That said, we built a...
.NET asp.net coreWhat is a machine key? According to https://docs.microsoft.com/en-us/dotnet/api/system.web.security.machinekey?view=netframework-4.7.2 a machine key “Provides a way to encrypt or hash data (or bot...
.NET asp.netWe’re in the process of upgrading our infrastructure to run our Azure Web Apps in multiple datacenter locations behind Azure Traffic Manager instances to achieve high availability. Running multiple...
.NET asp.net asp.net coreIt can be tricky to run integration tests targeting a web server using the command line. Essentially, we need to: Start the application Wait for the application to be ready (begin responding ...
JavaScript npmWe’re in the process of scaffolding out our Microsoft Azure environments using Terraform. We’re looking at deploying consistently from master going forward, but our new infrastructure design requir...
Azure TerraformHealth checks in ASP.NET Core are useful for reporting the health of your ASP.NET Core web application. But, this functionality can’t directly be used with ASP.NET Full Framework applications. Tha...
.NETAs I’ve walked through upgrading a number of solutions to target a new version of the .NET Framework, I’ve compiled a list of helpful steps: Run git clean -xdf to remove files not in the reposi...
.NETWe’re in the process of scaffolding out our Microsoft Azure environments using Terraform. While Terraform does an excellent job creating Azure Web Apps, it still needs code to be deployed before th...
Terraform OSSAs you’re building out an API it’s important to keep response times in check. In many cases slowness is due to database calls, web requests, and other network operations. But, elevated response tim...
Benchmarking OSSAt Ritter Insurance Marketing we utilize Azure Web Apps for hosting many of our web applications. Azure Web Apps is a platform as a service (PaaS) offering from Microsoft, enabling their customers ...
Azure Configuration OSSThe RimDev.Stuntman NuGet package has reached version 2.0! Unified package with ASP.NET Core 2.0 Support Both ASP.NET full framework and ASP.NET Core 2.0 supported by the RimDev.Stuntman package....
OSSAt Ritter Insurance Marketing we value our peers and other organizations in the overall software community. We believe in the power of community and open source. Why spend effort on a problem that...
OSSAt Ritter Insurance Marketing we have a number of repositories, each with separate continuous integration builds. This is a base setup for building and publishing .NET full framework applications ...
.NET Cake AppVeyorWe ran across an issue where window.exports was being unexpectedly set. The cause <div id="exports"> ... </div> Why? In some browsers, DOM elements with ids are available as vari...
JavaScriptSometimes it’s useful to ensure a project works with multiple versions of runtimes. In the following example, multiple versions of Node.js will be used to ensure a project builds successfully with ...
AppVeyorUpdate October 17, 2017 This doesn’t work with environment deployments, as this needs to run after the deployment has completed. See http://help.appveyor.com/discussions/questions/8741-more-info-o...
AppVeyorhttps://xkcd.com/1597/ While I generally don’t do that, here’s what I currently do: Setting up a repository locally Using Stuntman as an example: > git clone [email protected]:kendaleiv/stuntm...
GitHubPreviously, I wrote about Publishing to npm Using AppVeyor. This is a similar post, but specifically geared toward publishing an npm package to MyGet. Setup environment variable In the AppVeyor w...
AppVeyor npm MyGetTypically, running a Jekyll site locally for the first time requires a basic knowledge of using the command line. It usually involves a few commands: bundle exec jekyll serve (with the optional --i...
jekyllAppVeyor does not currently provide built-in support for publishing to npm (at least, currently). Instead, we can provide the npm token as an AppVeyor UI configured environment variable and run npm...
AppVeyor npmHere’s some copy-pastable commands for creating SQL Server Express LocalDb instances: "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SqlLocalDB.exe" create "v11.0" 11.0 -s "C:\Program ...
LocalDbWe’ve made some good contributions to the world of open source this year. Our major projects are listed at our open source page. Stuntman Stuntman is a development time user switcher, helping you...
OSS .NET npmImagine for a moment you’re an insurance agent selling a product to a client. You’re working with an web application that requires the client’s age. You ask the client. They reply with their date o...
DevelopmentReleasing new versions from continuous integration, rather than someone’s machine in a team environment is a great way to release new versions of npm packages in a predicable and controlled manner....
npm TeamCity ciLast year we embarked on a mission to update the overall authentication and authorization strategy for Ritter Insurance Marketing. After evaluating the different options, we replaced our existing h...
Authentication OpenID Connect StuntmanPostman is a great tool for testing HTTP/HTTPS endpoints. It’s useful for quick tests, as well as authoring detailed test suites. Even tests that rely on the output of other tests can be assembled!...
PostmanStuntman enables our team to work locally with multi-role ASP.NET applications quickly and easily. Stuntman enables developers to switch users at runtime in their ASP.NET web applications, without ...
ASP.NET StuntmanOn our team TeamCity server we build repositories by default using build.cmd in the repository root. This has a few advantages. One advantage is being able to run what TeamCity runs locally. It is...
Build TeamCity WindowsWe use Jekyll for this blog. If you’re running Windows, this post can help you get it working quickly. Here we go Use Chocolatey to install Ruby v2 and the associated Ruby Development Kit version...
Jekyll WindowsChoosy devs choose Slack. It’s dev tested, mother approved. Slack has become the main source of our team collaboration. One of the benefits of Slack is the sheer number of pre-built integrations. ...
Hubot Slack WebhooksAt Ritter Insurance Marketing, we utilize IdentityServer3 for our authentication mechanism. It has been almost a year of hosting in Windows Azure with great success. While it has been a positive ex...
Security Windows AzureAt Ritter Insurance Marketing we utilize Azure Web Apps for hosting many of our web applications. Azure Web Apps is a platform as a service (PaaS) offering from Microsoft, enabling their customers ...
Azure Web Configuration