Open Source There are a few third-party components I used to construct this site: Hugo Bulma Highlight.js Yarn Gulp SCCS TypeScript Webpack Other Credits Specific credit is required for some vectors I am using which were created by Craftsmanspace. There were found here: http://www.craftsmanspace.com/free-patterns/collection-of-decorative-flourishes.html, and are licensed by CC-SA 3.0| Hello, I'm Ben on Ben Collins
My name is Ben Collins. I’m a software engineer, father, husband, and| benjamincollins.com
Constrained Types I’m a permanent learner. I’m always tinkering, reading, trying things, and building projects I know I’ll never finish. I first started programming with F♯ back in 2009, but I’m still learning that, too. Over the years, most anyone who spends any real effort trying to learn F♯ will encounter domain-driven design (DDD) principles. Scott Wlashcin has written pretty extensively about this, both on his website and in his book, Domain Modeling Made Functional.| Blogs on Ben Collins
Introduction One of the impressive things about ASP.NET Core is how much functionality comes out of the box. There are a number of authentication mechanisms that you can use that are part of ASP.NET Core and supported by Microsoft. However, the bulk of what’s implemented there is oriented around OAuth and specifically IdentityServer4. IdentityServer is also impressive. It supports deep customization - but again, mostly oriented around OAuth. It’s also very complicated and difficult to con...| Blogs on Ben Collins
unsplash-logoQuinten de Graaf Introduction One thing that I found to be a point of confusion when learning F♯ is when one should use the foward pipe (|>) operator and the function composition (>>) operator. Conceptually they seem almost identical: they allow you to build an expression in which one function is called on an input, and the result is the input to the next function, and the result of the expression is the result of the second function.| Blogs on Ben Collins
Introduction I’m working on a Bitcoin library on my own time, and as I work through it I want its performance characteristics to be good, so I’m going to do some profiling along the way and look for low-hanging fruits. I thought I’d share my first stab at this. For context, what I’m working on today is a Base58-encoding module in F♯. I wrote it while learning how Base58 works and how it’s used in Bitcoin, and performance wasn’t at the forefront of my mind.| Blogs on Ben Collins
My Advice to New Developers I recently read another post like this, and out of the 7 points in it, I only thought 2 of them were really sensible, so I thought being an experienced engineer, I might drop a little bit of my own advice. #1: Learn the tools native to your primary production and development environments, in that order If you’re in Windows, then learn PowerShell and the most common commandlets and aliases.| Blogs on Ben Collins
Overview I’ve been saying since it came out that I wanted to read Them by Nebraska Senator Dr. Ben Sasse. Well…I finally did, and I wasn’t disappointed (not much, anyway, but more on that). I found myself nodding throughout most of the book, and compelled to highlight several passages. It was a refreshing read. I’m not a professional book reviewer. It seems challenging to me to recap the argument of the book without doing it some pretty gnarly disservice, so instead of that, let me tr...| Blogs on Ben Collins
Day of Action This week — on the 12th of July, 2017, a number of tech companies and other organizations are going to “slow down” their services to protest a proposed rule change by the FCC regarding Net Neutrality1. Battle for the Net is a representation of this collective position against the proposed rule change. It’s one in which I will be participating as an opponent. I’ve written about this before (at StackExchange) and have been quoted by the BBC in a position against Net Neut...| Blogs on Ben Collins
Hello there, developer. Come, sit down with me. We need to have a talk. A famous saying in our industry goes something like this: There are two hard problems in computer science: cache invalidation, naming things, and off-by-one errors (rimshot) There are a few guidelines we should be keeping in mind as we name things: Grammatical correctness. The humor is in the off-by-one irony of course, and we accept uncritically that naming things is hard.| Blogs on Ben Collins
Motivation In my previous post, Practical Permission-based Authorization in ASP.NET Core, I tried to demonstrate how to implement a regime of permissions-based authorization without having to stuff it all into an ever-exploding list of roles, without abusing claims, and without having to roll your own framework-fighting implementation. Resource filters allow you to do this elegantly and still remain in harmony with the framework. However, I may have been too terse.| Blogs on Ben Collins
ASP.NET Core applications are configured using the Configure and optionally, the ConfigureServices methods of the startup class (typically Startup). ConfigureServices is used to set up the dependency injection container that ships with ASP.NET Core. The method signature looks like this: public void ConfigureServices(IServiceCollection services); That IServiceCollection instance is the developer’s surface area for configuring dependencies. Mvc can be configured like this: public class Startu...| Blogs on Ben Collins
The New Identity framework As anyone following ASP.NET’s development in the last two years knows, ASP.NET Core has been released and there are a lot of changes. Gone are the days of IIS modules and handlers and the traditional ASP.NET pipeline. Instead, now we have a composable pipeline of delegates. Gone also are System.Web and much of the monolithic frameworks that often were used in web applications. The Identity framework is one that has also changed.| Blogs on Ben Collins
Motivation Testing is a goal of many software teams. It’s widely considered “virtuous” in software engineering to build tests along with an application or library that effectively describes the desired behavior, and then quantitatively scores whether or not the software achieves its stated goals (the tests are the stated goals). This is commonly referred to test-driven development, or TDD. There are a couple of ways to go about writing tests, and one of the most widely discussed ways of...| Blogs on Ben Collins
I’d like to call some attention to another blogging project I am trying to take on. I call it Salty Politics. I’ve pushed the publish button on the first post there, called Salty Politics: An Introcution. Writing about politics is tricky enough on its own - but writing about them and trying to do it from a Christian perspective is doubly hard. The older generations used to have sayings along the lines of “never discuss politics or religion in polite company”, and there is wisdom in that.| Blogs on Ben Collins
Why? I recently came across Hugo, a static website generator. It’s based on Go, and uses the Go templating engine. It sounded interesting, and I had been looking for something to re-build my personal website, so I decided to give it a try. The only thing one needs in order to host a Hugo-based website is hosting of some kind. I have Azure credits, so that seemed easy. I also wanted to push the sources for my website to a private repository, and I don’t have a paid GitHub account, so I nee...| Blogs on Ben Collins
I have an idea about who Rey is, and I think it’s somewhat original. I thought of it on my own, anyway. Warning: there are definitely spoilers all over this post. If you haven’t seen the film and you still want he suspense of not knowing, then DO NOT READ THIS. I went to go see The Force Awakens three times. First, I went with my wife to the opening show.| Blogs on Ben Collins
YARWPPT So, working remotely can be a desirable state of affairs for a lot of people. But there are some things that one has to give particular attention to in order to succeed. Communication & Presence In part one, I called out feelings of isolation and difficulties in communication as challenges to be overcome. The basic problem in both areas is that there isn’t a direct replacement for being co-located with your teammates.| Blogs on Ben Collins
Improving your personal process is a lifelong journey. Here's the latest evolution of mine.| benjamincollins.com