107 posts categoriesd under “software development”
Integrate GitHub and Discord with Webhooks
It's worked quite well and is completely free for our needs. You can easily add bots and notifications fromother system,including your own ASP.NET web applications, usingweb hooks. One of the easier ways to configure notifications from things you care about as a developer to your Discord server is with GitHub web hooks. There'sgreatwrite-up on how to do this here, which I'm basically enhancing…
Stored Procedures, ORMs, and GraphQL
GraphQL is the new ORM, and your API endpoint is the new stored procedure. About fifteen years ago, a debate raged in the still-young .NET development world over how best to access data. On the one side were the traditionalists, among them database administrators (DBAs) and many experienced software developers with experience building efficient, performant applications. On the other were (mostly…
Configuring Logging in Azure App Services
Azure App Services are a very easy and economical way to quickly deploy your ASP.NET/ASP.NET Core apps to the cloud. You can get started for free if you just want to try out something you're developing (without uptime considerations) and entry-level plans are pretty affordable: The docs for publishing to an Azure App Service are pretty good so I won't get into that here. I recommend configuring…
Are Boolean Flags on Methods a Code Smell?
Recently I had one of my newsletter subscribers ask me a question about whether it was a good practice to use a boolean parameter to alter the behavior of a method. Martin Fowler describes (many of*) these as Flag Arguments. The topic is also covered in this StackExchange question. Clean Code also discusses it. On a slightly related note, the Flags Over Objects antipattern describes this same…
Add Discord Notifications to ASP.NET Core Apps
I'm continuing to have fun building out features for the devBetter site, which provides resources for my group coaching members. We meet weekly to answer questions, work through exercises together, and share progress, but we also have a very active Discord server where we do a lot of the same thing throughout the week. As I was working on integrating GitHub actions with deployments to Azure, I…
Adapter Design Pattern
A couple of months ago I published a new, revised course called C# Design Patterns: Adapter on Pluralsight. It's one of my favorite patterns and its predecessor, the Design Patterns Library, remains one of the most popular courses of all time on Pluralsight. It's almost 16 hours long but I encourage you to get through it as an achievement if you can. Look for a revised learning path through the…
Streaming Checklist
I’m a fan of checklists – they’re an intermediate step before automating a process to ensure it’s done correctly and consistently. You’ll finda number of different checklists on this site. This one is about streaming, specifically formy twitch.tv/ardalis account. I’ve been meaning to blog about this forever, but it’s just been sitting in my OneNote for the longest time while other things have been…
GitHub Draft Pull Requests
A feature introduced last month by the GitHub team is called draft pull requests. When you create a Draft Pull Request, it cannot be merged until it is marked as ready for review. This is useful because often pull requests are used as conversations, often prior to the work being ready to merge. Common approaches to this in the past have included such classic approaches as: Adding “WIP” for “Work…
Getting Started with Architecture Decision Records
Have you ever been on a software team for a while, and then someone new joins the team and starts asking the usual questions about why this or that technology or pattern is being used on the project? And then a few months later, someone else joins and all the same questions come up again? Or maybe some team member, whether new or not, constantly wants to relitigate every choice, potentially to the…
Priorities of Work on a Board
This is obvious once you think about it but I’ve found many people haven’t thought about it so I’m going to lay it out here real quick. A lot of teams use some kind of task or kanban board today to track the status of work. This is typically part of some kind of agile or Scrum or kanban process. If you want to learn more about kanban, check out my short course on the fundamentals of kanban…
REST Commands and Queries in VS Code
Recently in one of our great devBetter discussions, Rick Hodder (go follow him now) shared a cool extension for VS Code. Basically, it lets you turn VS Code into a REST client. Think of it like a combination of Postman and Azure Data Studio (or LinqPad or SSMS if you prefer). Now, I like Postman. It's a great and powerful tool. But it's a lot more effort to issue a request than, say, running a SQL…
Git Autocorrect
I don’t know how I didn’t know about this before now, but apparently you can turn on autocorrect for your git command line, and it will accept (after a short delay in which you can cancel) commands that are close to but not exactly correct. Example: You probably meant: And it will go ahead and do that for you. Setting it up You can set this up in your git config, either globally or per repo. I don…
Encapsulation Boundaries Large and Small
Writing any significantly complex software application involves the use of encapsulation boundaries and abstractions. Think about the smallest bit of executable code in your program: an expression or perhaps a statement. This typically maps roughly to a line of code. You can build entire applications using only this structure. If you do, they look something like this: A program made up of a…
2019 Year in Review
Yes, it’s that time again. Time for another recap of what happened last year. If you’re reading this, and you’re not me, you probably are mostly interested in the most popular articles from last year, in case you missed something others found interesting. So, I’ll start with those. If you’re looking for other years in review, or want a checklist to help with writing your own year in review article…
Codemash 2020 Recap and Cloud Design Patterns Talk
I'm home after surviving another great Codemash! I'm not sure how many Codemash events I've attended but I think it's [ALL OF THEM] - 2 (looks like the first one was in 2007 so if my math is right (takes off socks) that would be 14 total minus 2 is 12). I had to miss one year when my twins (now 5) were born, and I missed last year due to a work conflict. Here's my quick recap of the event, which…
Using Grep to Find Strings in Markdown .md Files on Windows
I recently needed to find which of a bunch of markdown files had a particular string in them. My initial thought, since I'm on Windows, was to use Windows File Explorer's search dialog. No dice - it found no results when I knew there were some. I did a quick search for 'windows explorer search markdown files' which led me to a Super User thread that said I'd have to install a Markdown Preview to…
Domain-Driven Design with ASP.NET Core Workshop
I first learned about Domain-Driven Design, or DDD, over ten years ago. Since then, I've given more workshops on the topic, both public and private on sites, than I can remember. Julie Lerman and I also published a very popular course, DDD Fundamentals, on Pluralsight, which I expect we will refresh in the coming year. (By the way, there's a 40% off sale for Black Friday going on now (as I write…
Moving from Controllers and Actions to Endpoints with MediatR
(or Controllers are dinosaurs - it's time to embrace Endpoints) Update Feb 2020: I've started a GitHub repo and NuGet package to implement Endpoints in ASP.NET Core (without MediatR and with file linking in Visual Studio). Check it out after reading this and see what you think. Controllers are a key part of the MVC pattern. They're the entry point, responsible for interacting with one or more…
Sketch Themes for Prototypes
Last week during one of my devBetter coaching sessions, the conversation turned to spikes and Minimum Viable Products (and even not-so-viable products). Sometimes, in order to get rapid feedback, it's useful to throw together a prototype that has literally nothing going on in the backend, but lets the user get a sense of how the application would flow. The problem, of course, is that once users…
Be Humble and Kind
This originally went out just to my Weekly Dev Tips mailing list, but I got a lot of positive comments and requests to share it, so I’m publishing it here. Sign up for Weekly Dev Tipsto get a new tip in your inbox each Wednesday. I’m not a big fan of country music (my wife is, however) but Tim McGraw’s Humble and Kind has it right. Don’t let success get to your head. You don’t know everything – be…
Running Integration Tests in Build Pipelines with a Real Database
A pain point for some organizations is figuring out how to run tests that involve databases. These are not unit tests, by most folks' definition (including my own: unit test or integration test and why you should care). Nonetheless, they're important and ideally they should run as part of your build pipeline. Recently I've come up with a technique that works quite well for this scenario that I'd…
Configure Different Implementations for Different Controllers in ConfigureServices
You may find yourself in a position where you need to have two (or more) different implementations of the same interface within your ASP.NET Core application. This may be because your application is too big to allow you to fully replace one implementation with another all at once, so you're rolling out the updates one type at a time. Let's say the services in question relate to persistence, and…
dotnet-ef does not exist
If you're trying to run EF Core migrations using commands like dotnet ef migrations add NAME or dotnet ef database update and you're getting errors like the one shown in the screenshot above, here's the fix. You need to install the dotnet-ef tool, ideally globally so you can run it from anywhere. To do so, run this script from a command prompt/terminal window: dotnet tool install --global dotnet…
Attacking Technical Debt
Technical Debt is a metaphor for shortcuts and hacks in software that make it more difficult to change and maintain than it could be with an optimal design. Many applications have accumulated a large amount of technical debt, and figuring out how to deal with it is a fairly common challenge for many developers, especially senior developers starting new contracts or jobs at companies that need help…
Enforce Developer Workflow Policies with Branch Protection
A frequent question I hear from clients is some variant of "Ok, Continuous Integration is great, but how do we get everybody on the team to pay attention to it?" This is obviously a bigger problem if the question is coming from a lone junior developer, as opposed to a technical manager. In the case of the junior developer, they may need some help convincing the rest of the team that CI is…
Git Graph Visualizes Branches in VS Code for Free
I recently discovered a very nice VS Code extension to use with git. You can view my full list of tools and extensions I use here if you're interested. In this case, I was working from a locked down laptop for a financial services company that's a client of mine (talk to me if you'd like help building better software), and I wanted to see a good visualization of the my branch in relation to other…
Which is more important, line coverage or branch coverage?
I've been setting up code coverage for some of my clients' projects and some of my own open source projects, like Clean Architecture and Specification (100%!) and Guard Clauses (99%...). I wrote up how to configure Azure DevOps to generate code coverage reports that properly merge the results from multiple test projects using ReportGenerator. When you look at a code coverage report, whether its…
Configure Visual Studio to Name Private Fields with Underscore
Most C# coding standards recommend using camelCase for local variables and _camelCase for private or internal (and I also say for protected, but that's just me) fields. Unfortunately, out of the box Visual Studio just uses camelCase for these fields, which makes typical dependency injection scenarios annoying in constructors: I much prefer this version: Fortunately, you can modify Visual Studio to…
Using Multiple Solutions in Visual Studio
I've given this advice quite a number of times so I figured it was time to put it into an online article. If you're a .NET developer you probably use or have used Visual Studio. Visual Studio has two kinds of project organization file formats: projects and solutions. Solutions are essentially groups of projects. Most software applications involve more than one project, and so virtually every…
Minimize new in Automated Tests
Automated tests have gained a lot of acceptance in recent years. Not long ago, many organizations bristled at the notion of having their expensive developers spend time writing code that wasn't actually going to ship to production, but instead would just verify that the "real" code worked. Today, the idea that testing in many instances is something computers can do very effectively - and cost…
How to Grab a Pull Request Locally with Git Command Line
If you're working with git, especially with open source, sometimes you'll find that you want to work with a particular pull request, or PR, locally. Maybe you're reviewing the PR and instead of just eyeballing it in the browser you want to actually run the code and see what it does (novel idea, I know!). In any case, actually getting the code from a PR, especially one from a fork that isn't even…
Configuring Entities in EF Core
I've worked with many clients who are upgrading from EF 6 to EF Core. Many of them are coming from EDMX files, and are wondering what the best approach is in EF Core to configure entities based on the database (or vice versa). Regardless of whether your C# entities are written first or the database is, somewhere you need to have mapping information to let Entity Framework know how it should store…
Generate Code Coverage Reports with ReportGenerator in Azure DevOps
Recently I've been looking at different ways to generate code coverage reports during automated builds. I'm mostly working with Azure DevOps for builds these days, as they've come a long way since the early TFS days and the hosted version is now free for open source projects. This is really nice because I have a bunch of open source projects and I understand the value provided by a good build…
Testing Production API Endpoints with xUnit
I'm a big fan of unit tests and integration tests and have written about them frequently. I also authored the original docs on writing integration tests in ASP.NET Core using TestHost and related types. However, sometimes it's worthwhile to be able to test actual, live API endpoints. This article will lay out a relatively simple way to do this in a configurable manner using xUnit. In the past, I…
Syncing a Fork of a GitHub Repository with Upstream
I work on a few GitHub projects, like the Microsoft Docs, where I'm a relatively frequent contributor but I don't have commit rights. This means that I need to make a fork of their repository, do some work in my fork, and then send a pull request from my forked repository to the original one. This is actually a pretty common way of working in open source software, and doing it once is pretty…
Fixed Problem Connecting to Docker for Windows ASPNET App
Recently I was working on some WinForms and classic MVC (not Core) apps built with ASP.NET and migrating them to Azure using containers. There's a repo with samples and an ebook on modernizing your .NET apps so they can take advantage of containers and cloud architecture. Check it out if this sounds like something you think you'll be doing. Anyway, while running these apps locally using Docker for…
Create Alias to Set Window Title in PowerShell
I’ve written previously about how to set the window title in PowerShell. Unfortunately, it’s a little complicated. Recently on twitter, though, Greg MacLellan showed me how to create an alias so you can just type title something to set the window title. This involves editing your PowerShell profile, which you may not even have, so here are the steps to take to make this happen. First, determine if…
Speaking and Presenting Last Minutes Checklist
You have a presentation to give. You’ve been asked to speak to a group of your peers. You’re giving a conference session. The previous presenter just finished – you’re up as the next speaker. You have fifteen minutes. What do you need to do? This isn’t the checklist for what to do after you’ve just found out you have a presentation to give, or you were just accepted to speak at a conference. There…
Automatically Detect Expiring HTTPS SSL Certificates
All too often we hear about a site going down or suffering problems because they've let their public x509 certificate expire. SSL certificates, which are required for HTTPS to work for secure connections using TLS to domains, expire after a number of years. Often, the team or individual who purchased and installed the initial HTTPS certificate is no longer in that role by the time the expiration…
How to Add Files to a GitHub Repo You Don’t Own
There are a bunch of GitHub (and other git host) repositories that aren’t really for software projects, but rather are for documentation or other resources. For example, the ASP.NET Core docs, or various awesome lists, or the slides and materials from conferences like Stir Trek. Frequently, even as a non-developer, you may want to contribute to such repositories, maybe even just as simply as to…
Ultimate Developer Rig 2019
I recently upgraded my desktop developer machine. My goal was to support more docker-based application development including ones that run multiple microservices at the same time, like the eShopOnContainers sample that I assist with (see also my own eShopOnWeb sample and eBook). My friend Bill Henning (of Actipro Software fame) came up with the initial parts list for his machine back in November…
Set up Reverse DNS (PTR) Record for Windows Azure
Windows Azure offers support for RDNS (PTR) records, which are used to get a hostname from an IP address (the opposite of what DNS does, hence the name). Microsoft has an article that describes how to set RDNS up, but it assumes you've already installed the azure CLI tools. Since I'm going through the process from scratch, I thought I'd share the full process here. You'll need to have npm…
Add HTTPS To Any Site For Free
Back in the old days, adding HTTPS/SSL/TLS to secure a web site was a big deal. You had to spend hundreds of dollars for a certificate, then install it on the web server. It had to be specific to the subdomain you were using, or you had to shell out even more bucks for the wildcard cert. And they’d expire sometimes, and your site would go down, and that was never fun. Times have changed. Yes, you…
The More You Know The More You Realize You Don't Know
Aristotle famously wrote, "The more you know, the more you realize you don't know." In the image above, you can see the effect this has on confidence as one's experience grows. Initially, your confidence is low since you know you're inexperienced. However, after a short while, you start to "get it", and you get into a comfort zone. Depending on how demanding your environment is, you might stay…
How to Hide the Connection Bar in Remote Desktop Connection (RDP)
Sometimes, like when you're trying to record a full screen video from a (virtual) machine you've connected to using remote desktop, you'd like to hide the blue connection bar that display at the top of the screen. In my case, I was recording how something installs on a fresh Windows 10 virtual machine that I was connecting to over RDP since it was hosted in Azure. The blue bar at the top of the…
Nuget Publication Checklist
I have a few Nuget packages that I maintain, and when I get a new PR or add a new feature or bugfix, I like to try and get the change out quickly. Unfortunately, this is a somewhat manual process for me currently, and I don't do it all that often, so I screw it up a high percentage of the time. Or I end up putting it off because it's not something I can just click a button to perform. This post…
2018 Year in Review
Now that 2018's been over for a few weeks, I've had a chance to compile some data from a variety of sources that I thought some people might find interesting, including future me. This post will include details on the traffic for my blog as well as other properties, how things are going with my podcast, where things are headed with devBetter, and a few other random bits. This Blog In 2018, I…
Load Testing and the Requests per Second Curve
There are a few basic curves you look for when load testing. They're pretty much standard, but there's not a lot of information out there about them, specifically. In this post I'm going to just describe one such curve, and what it tells you. It's the Requests per Second (or RPS or R/S) curve. Some tools will show you Pages per Second (P/S) which generally has the same properties. This curve will…
Becoming a Developer Team Force Multiplier
I have clients who describe me and my team as a "force multiplier" for their development organization. What does this mean, and how can it apply to you? How can you become a force multiplier for your team or company? I talked about this topic briefly in a previous weekly dev tip email (subscribe): A force multiplier is anything that increases the capabilities of existing resources. The 'force…
Support for Value Objects in C#
As someone who uses many Domain-Driven Design patterns in my .NET code, I've long wanted to have built-in immutable value objects in C#. Value objects have a few characteristics: They're immutable. You can't change their state. Their state is fully set when they're created. Because, they're immutable once created. Two value objects are considered equal if all of their properties match; otherwise…
Analyzing 404s with Google Analytics
I've been wanting to analyze broken links coming into my site so that I could add 301 redirects if necessary. I figured I could probably use Google Analytics to analyze 404s and broken links on my site. With a bit of research I was able to get this working as a custom report. I initially tried importing a couple of custom reports I found in the gallery, but none of them worked so I created my own…
Double Dispatch in C# and DDD
Double dispatch is a pattern you can use in C# to control how communication flows between two objects. A frequent use of the pattern is to pass "this" to a function on another class, allowing that class to communicate back to or manipulate the calling object instance. It can also be used to achieve polymorphic behavior. I have a GitHub sample you can browse or download that demonstrates some of…
The JavaScript npm event-stream Vulnerability
A few months ago a clever attack was introduced in the event-stream npm package. It's been explained in detail here, but let me sum it up in TL;DR form here for anybody who hasn't been paying attention: 1. In September 2018 the attacker approached the maintainer of a fairly popular npm package and offered to take over maintenance duties - the maintainer agreed and gave the attacker rights to their…
Clean Architecture with ASPNET Core
I've been doing workshops showing teams how to properly architect ASP.NET Core applications using Clean Architecture for the last couple of years. The most recent one was a 4-day on site workshop I did a couple of weeks ago. This is just a quick recap of what we covered. Each team is different and has different needs, so the precise agenda varies to suit the needs of the team. Day One: Unit…
Fun Browser JavaScript Tricks and Hacks
I occasionally present to school-age kids on software development, and an easy way to get them engaged is to show them how something already familiar to them - web sites - can easily be manipulated using tools they already have available. None of these are my own personal creation, but I'm listing them here for others to benefit from and for me to easily locate in the future, as some of the…
Easily Add /img to GitHub
When working with GitHub on things like ReadMe.md files, it's often helpful to include pictures. Unfortunately, when editing markdown files online, there's no built-in capability to add /img: GitHub Markdown Editor Typically, this would mean you would need to create an image yourself and commit it into your repository somewhere so you could then reference it. It's much the same if you're working…
A Retrospective Retro
At a client today I facilitated a retrospective for the dev team. I've done a few of these in the past, both for agile software teams and also After Action Reviews (AARs) in the US Army. For AARs, the usual format is to discuss what was supposed to happen, what really happened, what went well, and what didn't go well. Then, identify any changes or controls that should be added to improve for next…
Configure Sounds for Builds in Visual Studio
Recently Jeff Fritz tweeted about setting up a sound for his twitch stream and Immo Landwerth suggested using it with Visual Studio. I thought this was a great idea and set it up myself in just a few minutes. Here's what you need to do in a few simple steps. Find Sounds There are plenty of sounds built into Windows that you can use, or you can search for free sounds online. I ended up using these…
Replace Logo with Icon on Smaller Screens
I'm not a responsive design expert. Or even close. But I did recently figure out how to replace a full logo with a smaller square icon on a web site so when it's viewed on a phone the header is more compact. Here's how I did it so I can find it again, and to help others, and so smarter people can come by and tell me better ways to do it. The HTML The CSS icon { } logo { } /* Hide/rearrange for…
dev up Conference 2018 (and a small speaking hitch)
This week I was in St. Louis presenting at dev up, a "new" conference that's actually no so new, as it was previously the St. Louis Day(s) of .NET, which has been a thing for over a decade, I think. This was my first time at any of the St. Louis events, in any case. I got in Sunday pretty early and spent some time working and meeting up with a few friends. I had an all day workshop the next day…
Speaking at nopCommerce Days 2018
Next month on 8-9 November I'll be joining many great speakers in Las Vegas for nopCommerce Days 2018. If you're unfamiliar with it, nopCommerce is an open source e-commerce solution with a large community of developers and store owners. This 2-day event will be the largest conference they've held, and will have over 700 attendees. I'll be speaking about architecting ASP.NET Core solutions using…
Building a CachedRepository in ASPNET Core
I'm a fan of proper use of design patterns, and you can get big gains from layering multiple patterns together. One prime example of this in web applications is the combination of the Strategy, Repository, and Proxy/Decorator patterns to create the CachedRepository pattern. This pattern separates caching responsibility from persistence responsibility and makes it simple to add caching to an…
What's New in ASP.NET Core 2.1
My latest MSDN Magazine feature article covering What's New in ASP.NET Core 2.1 was published a few days ago: Microsoft recently released ASP.NET Core 2.1 along with .NET Core 2.1 and Entity Framework (EF) Core 2.1. Combined, these releases offer some great improvements in performance, as well as additional features for .NET Core developers. Microsoft is also offering Long-Term Support (LTS) with…
Measuring Aggregate Complexity in Software Applications
A variety of tools will let you measure the complexity of a given method in your .NET applications. If you have a high-end SKU of Visual Studio, it will calculate code metrics for your application, one of which is Cyclomatic Complexity (CC). You can also use tools like NDepend, which I highly recommend if you want to quickly gain deep insight into large, complex codebases. Cyclomatic complexity…
Moving ApplicationUser with Identity UI Library
One of the new features in ASP.NET Core 2.1 is Razor Class Libraries, which let you compile razor files into NuGet packages. Another that builds on this is the ASP.NET Core Identity functionality as a Razor Class Library. Using this functionality, you can add Identity functionality to your application without having to add all the associated Razor views/pages. Having done that, if you then move…
Test Secure Web APIs with Visual Studio Web Tests
A common approach to securing APIs is through the use of bearer tokens, like JWT. If you’re using JWT, you may find this site useful to easily examine JWT token contents. A common scenario when working with APIs secured by bearer tokens is to have to do something like this: Send credentials to token server to get a token (with some limited lifetime)\ Use the token from step 1 in the header of…
Calculate Code Metrics in VS2017 for Core and Standard Projects
A feature I use quite a bit in Visual Studio is the Calculate Code Metrics tool, found under the Analyze menu. You can use it to get some nice information about your projects, including Cyclomatic Complexity, Depth of Inheritance, Class Coupling, and Lines of Code. Microsoft aggregates these into a Maintainability Index as well (which for some reason they color code Green even when it's abysmal…
Should I Add Caching to my Web Application?
I created a helpful flow chart to use when answering the question, Should I add caching to my web application (or, "Should I implement caching in my ASP.NET (Core) App")? Most web applications have at least some data that's used frequently by the site, but doesn't change frequently. There's no reason not to cache this data in most cases. If you use a pattern like the CachedRepository, it's…
Momentum Dev Conference and Design Patterns
Yesterday I presented Design Pattern Mastery at Momentum Dev Con, a first-year regional developer conference held in Cincinnati, Ohio. The event opened up with a Women In Technology panel that was very well-received, and used 50-minute sessions with 10-minute breaks to pack a lot of sessions into the one day event. I thought the organizers did a fantastic job and from what I could see, everything…
WeeklyDevTips Podcast Checklist
I've been doing a podcast for a little over six months now, called Weekly Dev Tips. The episodes are just 5-10 minutes long and don't have a lot of extra fluff - they're just straight and to the point, describing a particular tip that some developers will find helpful. The idea is that you can binge on back episodes (ideally start at the beginning) and get a ton of actionable tips in the time you…
Positive Reinforcement in Code Reviews
Many developers dread reviews of their code, and one reason for this is probably that most reviewers only offer criticism rather than encouragement. Remember as a code reviewer that you can reinforce the things you see that are done well, which can be every bit as important and effective as nitpicking every style guide violation or misplaced bracket. Here are some actual comments I've left…
Finding Things in Visual Studio 2017
I'm a proponent of small, single-purpose files for most things in software applications. This helps follow certain SOLID principles, like Single Responsibility and Interface Segregation. It also means my applications tend to have a large number of files. This isn't a problem unless you have a hard time working with lots of files. Fortunately, there are tools that make it easier to work with many…
How to Modify Visual Studio 2017 or Install Preview Versions
When Visual Studio has updates available, you'll see a notification flag change color at the top of the screen: vs-notifications When you run the update, the installer will also show you if there are other versions available, such as previews. vs-installer However, if you close the installer dialog it can be difficult to get back to it short of waiting for another update. The trick to finding it…
Improve Performance through Advance Preparation
When looking at tuning application performance, a common principle to follow is this one: Maximize the amount of work not done. It's hard to make doing something faster than doing nothing, so do nothing whenever you can. A common way to do very little is to queue up work (in the form of a Command, typically) so that some other process can actually perform the work later. However, you can also…
API Feature Folders
I've written about feature folders for ASP.NET Core before, and how Razor Pages does a great job of solving this problem for page/view-based endpoints. However, I wanted to take a moment to address APIs, which are an increasingly important part of modern web applications. In ASP.NET Core (and unlike ASP.NET 5 / Web API 2), Web API controllers are just controllers. You don't need to inherit from a…
GitHub Octotree Chrome Extension
If you use GitHub a lot, as I do, you may appreciate this great Chrome extension, Octotree. Octotree is a free extension that adds a treeview navigation control to GitHub (and GitLab Enterprise, according to their docs) repositories, making it much easier to navigate around larger projects. You can see it in action here: [caption id="attachment_1946" align="aligncenter" width="822"]github-octotree…
JavaScript let const and var
In the latest version of JavaScript, there are several ways to declare variables: let, const, and of course, var. If you've been using JavaScript for a while, you're familiar with var, which has been a part of the language from the start. The two new keywords added with EcmaScript 6 (ES6) are let and const, and they offer different scoping than var. I'll start with my recommendation on when to use…
Improve Tests with the Builder Pattern for Test Data
I recently wrote about an example where I was able to apply the Builder Design Pattern to an Angular/TypeScript service. Another area where I've been finding the pattern helpful is in unit tests. Last year, I learned about this technique from Kenneth Truyers' blog post, and I've been using it to good effect for several months now on a few different projects. Check out his article for a good…
JavaScript ES6 LINQ Equivalents
As I'm working with JavaScript and TypeScript more and more these days, I often find myself wishing for LINQ statements to use to easily work with collection data. Fortunately, there are equivalents for all of the most common LINQ statements, and with ES6 arrow functions the syntax is also very concise and familiar. You can see them in action in this fiddle, or just check out the code here…
How to Get Involved with the Microsoft Developer Community
The other day, someone wrote me to ask: To cut to the chase, I was wondering if, given your experience, you had any recommendations or advice for landing an internship with Microsoft. I work a lot with .NET and Azure through my web development business and I am extremely interested in all things Microsoft. This particular question related to an internship, but I've often seen similar questions…
Weekly Dev Tips Podcast
I started a weekly newsletter last year that's been going for over 70 weeks now sending a short, practical developer tip each week. You can subscribe to it here if you haven't already. Tips go out every Wednesday at 10am Eastern Time. In August 2017, I launched a podcast with a similar structure. Weekly Dev Tips just published its 5th episode, and each episode so far is under 10 minutes long. They…
Working Through Roadblocks - A Guide for New Programmers
This is advice that I have given to many novice developers, and that I would like to have been able to give to myself when I just getting started (though some of the advice refers to resources that didn't exist then - alas). If you find it useful, please consider sharing it with someone you know who might also benefit from it. Roadblocks As a programmer or software developer, from time to time it…
Set cmd or PowerShell Window Title
As CLI tools become more and more popular, it's not unusual that I find I have more than one command, bash, or PowerShell window open. Often, each window is serving a specific purpose. While I really like that I can integrate a command shell right into Visual Studio Code, when I'm not doing that it's nice to be able to give each one's window a name that makes sense. Setting Window Title of Windows…
Are You a Profit Center or a Cost Center?
I recently was on a panel at the Hudson Ohio coworking space Tech Hub Hudson organized by the Akron Women in Technology group. There were four other panelists (I was a last minute addition) and the topic of the evening centered around advice for junior developers. There was a lot of great experience shared both by the panel and by audience members, and I'll probably draw on some of it again in…
Share What You Learn (even if you're not an expert)
A lot of people, myself included, suffer from imposter syndrome. That feeling that you're really not good enough to be doing whatever it is you're doing. Maybe it's writing a blog. Maybe it's public speaking. Maybe it's just answering a question in front of a group, team, or class. Imposter syndrome is a real thing, and it's incredibly common, so first off, realize that most people feel that way…
Open Command or Powershell Window From Explorer
Command line tools are becoming increasingly popular, so this tip may save you some time. On Windows, there are several ways to open up a command window. My typical method is to just hit the Start key and type 'cmd' and then enter. This will open a window in my user folder, which is exactly where I want to be precisely 0% of the time. From there, it's usually just a few dozen command to change…
Be a Thankful Developer
It doesn’t cost much to acknowledge those who have helped you, and it can be very rewarding. Regardless of where you are in your career as a software developer (or most other careers, but this is mainly directed at developers), show appreciation for those who make your job easier or who help you improve. This might be a peer or mentor who takes the time to guide you, it could be your boss or your…
4 Tips to Integrate TeamCity and GitHub
TeamCity Logo I've been a fan of JetBrains TeamCity for many years now. It's a great continuous integration / build server product, with an extremely responsive web-based user interface that's great to work with. What's more, the basic version supports up to 20 projects for FREE, which is tough to beat. However, like peanut butter and chocolate, TeamCity gets even better when combined with GitHub…
Avoid Storing Database Credentials in Source Control
Your application probably needs to communicate with a database of some kind. Naturally, that database isn’t open to the world – it needs to be protected and secured. The typical solution to this is to create a username and password combination (ideally, specific to each application or user that requires access) and configure the application with these credentials. In many cases, they’re simply…
ASP.NET Shared Authentication Problem Solved
Last week I worked with a client to solve an issue they were having with a new ASP.NET 4.x application they had created using Visual Studio 2015. Their site is set up so that all of the authentication occurs through a shared, single-sign on, web site. Individual web projects are then hosted as subdomains which share the authentication cookie. It looks something like this: admin.foo.com (root…
Developer User Group Tips
I've been a participant in a number of software developer user groups for many years, and an organizer of the Hudson Software Craftsmanship group since 2009. A few years ago, I was a member of the INETA Speaker Bureau, and would travel to a number of user groups around the country (and occasionally, the world - including Moscow in 2006). Recently I participated in a discussion about things to…
Final Verdict on Haswell Ultrabook
I’ve had a pre-release Intel Ultrabook with the new Haswell processor in it for about two months now, so it’s time for one last review of the device. You can read my previous reviews: First Impressions of the Intel Haswell Ultrabook Intel Haswell Ultrabook Preview Unit Experience Overview This device has met or exceeded my expectations for performance, power use, and overall fit and finish. The…
When Should You Arrive for an Interview
We’ve been doing a lot of interviewing as we grow our team in Hudson, Ohio for Telerik Services. We have a fairly small office in a suburban environment, where you can basically park right outside the building and walk right in – no elevators, reception area, parking decks, or other hassles you might find in a more urban location. As a result, we’ve learned that if we schedule an interview, we…
Limit SQL Server Memory Use on Dev Machine
If you’re a developer running SQL Server locally, you may sometimes need to limit how much memory the database is consuming. Under normal conditions, SQL Server likes to use as much memory as it can get, since keeping results in memory improves the database’s performance. In typical production scenarios, this is the ideal behavior, but on a dev machine you probably want your RAM for other things…
Unboxing and First Impressions of New Intel Ultrabook
I recently received a preview-hardware next generation Ivy Bridge Ultrabook from Intel, optimized for and pre-installed with Windows 8. I suspect we’ll be seeing these available in stores and via online outlets soon. I’m a fan of the Ultrabook brand and concept – thin, sleek, and light, with powerful hardware capable of running developer tools. I’ve already happily switched away from much heavier…
How To Disable ReSharper in Visual Studio
Something I’ve had to do from time to time is disable a plug-in in Visual Studio, either permanently or temporarily, such as ReSharper. Just now was one of those times, and as in the past I had to hunt through a variety of Visual Studio menus in order to find it. Personally, I think Visual Studio has some work to do on how many kinds of plug-ins, add-ons, and extensions it supports, which I hope I…
Joining Telerik
Earlier this year, I wrapped up my work with The Code Project and Lake Quincy Media and returned to NimblePros, the consulting company Michelle and I started a few years ago and which she’s run quite successfully the last few years. NimblePros has been doing some great things the last couple of years, with revenues in 2011 doubling those of 2010. At the same time, we’ve been watching Telerik…
Asus Zen Ultrabook Revisited
A couple of months ago I got an Asus Zen ultrabook, which I posted about when I first got it, and a month or so later. Now that I’ve had it a while, I thought I’d post one more time with how it’s continued to work for me. I’m still very happy with its look, feel, and speed. It’s very responsive both while up and running and when waking up or shutting down. One thing I wish it came with is an HDMI…
Kanban Book Review
While researching material for my Kanban Fundamentals video training course on Pluralsight, I read Kanban: Successful Evolutionary Change for Your Technology Business, by David J. Anderson. I’ve previously reviewed a couple of other related books, including Personal Kanban and Scrumban, if you’re interested in learning more about this topic. I would recommend Personal Kanban as the most…
Reviewing Scrumban the Book
imageI’ve been reading a bunch of kanban and lean books recently as I work on my Pluralsight course on Introducing Kanban. The most recent one I’ve finished is Scrumban, Essays on Kanban Systems for Lean Software Development, by Corey Ladas (I’m doing the reviews in LIFO order). I made a bunch of notes while reading this book, and it has a great deal of useful information. I read David Anderson’s…
Excel Cumulative Flow Diagram
imageI’m working on a Kanban Fundamentals course that should go live soon on Pluralsight. One of the topics I’m touching on is Cumulative Flow Diagrams, and how these can be used to analyze flow of a process. Some electronic kanban tools like AgileZen have some built-in support for CFD-style reports, but for instructional purposes it’s nice to be able to create one on-the-fly with whatever data…
Team Workspace Reflections
imageWe’ve been fans of team rooms and collaborative work environments at NimblePros for some time. In building out our new building, we took care to create several large open spaces to be used as team rooms, with plenty of room in the middle for workstations (configured for pair programming) and lots of open wall space around the outside for whiteboards and information radiators. You can see one…
Laptop Rebuild - Essential Apps
When we last saw our hero, he had fallen victim to an evil plot to disable his computer’s ability to boot up. After great efforts at recovery, eventually he was forced to concede defeat to Vista and reinstall everything from scratch. Let’s return now to see what’s in store in the next chapter of our story, already in progress… So, day 2 after my issue with Vista and I’m now at least able to use my…
How to Find Conference and User Group Presenters
5451873949_d43dbb8c2dIf you’re a user group leader or event organizer and are looking for quality presenters for your event, here are some resources that should help get you started. This is not meant to be an all-inclusive or exhaustive list, of course, and to that end I fully expect that there will be great resources left as an exercise for you, the reader, to add via the comments. Thanks for…
Introducing Pair Programming at Cinci Day Of Agile
Last weekend I presented at the Cincinnati Day of Agile event on Introducing Pair Programming (see on slideshare). The event was nearly sold out with about 240 people in attendance, a mix of devs and PMs. The content and (other) speakers I thought were great – Phil and his team did a great job. I took a few pictures during the event, which you can see below: Phil and Joel Semeniuk DSC_001…
Get the Batch Files Path in a Batch File
I’m a huge fan of build automation, and all of my dev projects include scripts to build, test, deploy, run etc. Sometimes these use PowerShell and quite often they use MSBuild (or occasionally NAnt) but batch files remain a very simple and powerful way to take care of automation business. Today I’m trying to wrap up my use of NServiceBus on a project that’s going live with some CQRS goodness…
ASP.NET Custom Errors Security Flaw
Updated 5 October 2010: There is now a patch available via Windows Update. Read more about it here, and ensure all ASP.NET web servers have been patched ASAP. Microsoft just released some details on a security flaw that was publicized a few hours ago. On this post, you can learn more about the ASP.NET vulnerability and how to detect whether your web sites might be affected by them. This is a…