Articles
Over the past 11 years, I’ve written 183 articles. Here’s the complete list.
2022
2021
2020
- How to Squash the First Two Commits in a Git Repository —
- Nullish Coalescing: The ?? Operator in TypeScript —
- Declaring Global Variables in TypeScript —
- Concatenating Arrays in JavaScript —
- The Omit Helper Type in TypeScript —
- Fast Searching with ripgrep —
2019
- Const Assertions in Literal Expressions in TypeScript —
- Read-Only Array and Tuple Types in TypeScript —
- The --showConfig Compiler Option in TypeScript —
- Setting the Node.js Version for an Azure DevOps Build —
- The unknown Type in TypeScript —
- Importing JSON Modules in TypeScript —
- Passing Generics to JSX Elements in TypeScript —
- Mapped Type Modifiers in TypeScript —
- Conditional Types in TypeScript —
2018
- JavaScript Promises in Depth —
- Using Promise.prototype.finally() in TypeScript —
- Syntax Highlighting for yarn.lock Files in Visual Studio Code —
- Per-File JSX Factories in TypeScript —
- Strict Property Initialization in TypeScript —
- Numeric Separators in TypeScript —
- JSX Fragment Syntax in TypeScript —
- Optional catch Binding in TypeScript —
- Code-Splitting a TypeScript Application with import() and webpack —
- Dynamic import() Expressions in TypeScript —
2017
- Spelling Correction in TypeScript —
- Weak Type Detection in TypeScript —
- Advanced Static Types in TypeScript —
- String Enums in TypeScript —
- Downlevel Iteration for ES3/ES5 in TypeScript —
- Type-Checking JavaScript Files with --checkJs in TypeScript —
- Global Antiforgery Token Validation in ASP.NET Core —
- The --strict Compiler Option in TypeScript —
- Generic Parameter Defaults in TypeScript —
- Mixin Classes in TypeScript —
- Asynchronous JavaScript with async/await —
- Null-Checking for Expression Operands in TypeScript —
- Dotted Properties and String Index Signatures in TypeScript —
- Detecting the Operating System in .NET Core —
- The object Type in TypeScript —
- Untyped Imports in TypeScript —
- Literal Type Widening in TypeScript —
- Improved Inference for Literal Types in TypeScript —
- Mapped Types in TypeScript —
- TypeScript vs. Flow —
- keyof and Lookup Types in TypeScript —
2016
- Object Rest and Spread in TypeScript —
- External Helpers Library in TypeScript —
- Compiling async/await to ES3/ES5 in TypeScript —
- Typing Functions in TypeScript —
- Built-In Type Declarations in TypeScript —
- The never Type in TypeScript —
- More Literal Types in TypeScript —
- Tagged Union Types in TypeScript —
- Read-Only Properties in TypeScript —
- Acquiring Type Declaration Files in TypeScript —
- Announcing TypeScript Weekly —
- Control Flow Based Type Analysis in TypeScript —
- Non-Nullable Types in TypeScript —
- Death to Confusing ECMAScript Version Names —
- Function Overloads in TypeScript —
- Simulating Latency in ASP.NET Core —
- Generating Route URLs in ASP.NET Core MVC —
- Securing Authentication Cookies in ASP.NET Core —
- Removing Elements from JavaScript Arrays —
- Speeding Up Babel Transpilation with Compact Mode —
- Bundling ES2015 Modules with TypeScript and Rollup —
- ES2015 Destructuring for Assignments —
- Using a TypeScript Nightly Build Within Visual Studio Code —
- Bundling and Tree-Shaking with Rollup and ES2015 Modules —
- Programmatically Opening a File Dialog with JavaScript —
- Type Queries and typeof in TypeScript —
- The && and || Operators in JavaScript —
- Getting the Web Root Path and the Content Root Path in ASP.NET Core —
- Deserializing JSON Strings as JavaScript Date Objects —
- Analyzing the JavaScript Examples in Gary Bernhardt's "Wat" Talk —
- Variables and Types in JavaScript —
- Inline Route Constraints in ASP.NET Core MVC —
- String Literal Types in TypeScript —
- Chrome Developer Tools: "Store as Global Variable" —
- How to Remove WebKit's Banana-Yellow Autofill Background —
- Dracula, a Bloody Good Dark Theme —
- Getting Started with ECMAScript 2015 —
- The some() and every() Array Methods in JavaScript —
- ECMAScript 2016: Array.prototype.includes() —
- Semicolons after Function Declarations in JavaScript —
- Use Cases for JavaScript's IIFEs —
- Disassembling JavaScript's IIFE Syntax —
- Function Definitions in JavaScript —
2015
- Constant Variables in JavaScript, or: When "const" Isn't Constant —
- Top 5 Blog Posts in 2015 —
- Tag Helpers in ASP.NET Core MVC —
- Generating Default TypeScript Configuration Files with tsc --init —
- View Components in ASP.NET Core MVC —
- The Exponentiation Operator in JavaScript —
- The Comma Operator in JavaScript —
- Typing Destructured Object Parameters in TypeScript —
- Inlining CSS and JavaScript Bundles with ASP.NET MVC —
- Matching Digits in .NET Regex —
- Inlining Angular View Templates with ASP.NET MVC and Razor —
- Parsing Markdown in .NET —
- Better tabindex Handling with Razor —
- Taming Whitespace with Editorconfig —
- npm, ECMAScript 2015, and Babel —
- Sharing Line Highlights in GitHub Files —
- TypeScript 1.5 Is Released —
- Tasty Links #5 —
- The Curious Case of Switch Statements in JavaScript —
- Destructuring Regular Expression Matches in ECMAScript 2015 —
- Returning Object Literals from Arrow Functions in JavaScript —
- Detecting Unminifiable Angular Code —
- Build 2015: My Favorite Sessions —
- Tasty Links #4 —
- Implicit Function Chaining in Lodash —
- Lodash and ECMAScript 2015 —
- The Era of Transpilers —
- Merging Two Gulp Streams —
- Introducing the gulp-iife Plugin —
- Tasty Links #3 —
- Detecting Minified JavaScript Code —
- Combining Settings Objects with Lodash: _.assign or _.merge? —
- Adding a Fixed Header to a UIScrollView —
- Angular 2 and TypeScript —
- Tasty Links #2 —
- 5 macOS Shortcuts You Need to Know —
- Bundling and Minifying an AngularJS Application with ASP.NET MVC —
- Open Loops Cause You to Be a Worse Programmer —
- Tasty Links #1 —
- My Favorite Tech-Related Books —
- Bundling and Minification: an Introduction —
- Top 5 Blog Posts in 2014 —
2014
- How to Set Up Sublime Text for a Vastly Better Markdown Writing Experience —
- Tame Your Wild CSS with CSScomb —
- Advanced JavaScript Logging Using console.group() —
- Working with Sass Stylesheets in ASP.NET MVC Applications and Visual Studio —
- Welcome .NET to the Open Source Space! —
- Working with Favicons in ASP.NET MVC Applications and Visual Studio —
- Using the IndentedTextWriter Class to Output Hierarchically Structured Data —
- Asynchronously Bootstrapping AngularJS Applications with Server-Side Data —
- Designing Extension Methods in .NET for Composition —
- The State of Modern Web Development —
- Switching To the en-US Keyboard Layout —
- Passing Swift's Operator Functions to Higher-Order Functions —
- Playing with Closure Expressions and Operator Functions in Swift —
- Implementing a Custom Forward Pipe Operator for Function Chains in Swift —
- Parametrized Localization in ASP.NET —
- Learn the Basics of F# with Project Euler —
- My 8 Favorite ReSharper Shortcuts —
- Numbers and Numeric Types in Swift —
- Combining Modifiers in C#: "protected internal" and "override sealed" —
- Stop Cheating the Type System —
- Fun with Custom C# Collection Initializers —
- A Little HtmlHelper for Implementing Adaptive HTML Images in ASP.NET MVC —
- Why Using the Greedy .* in Regular Expressions Is Almost Never What You Actually Want —
- Preventing Ghost Borders When Resizing Images with System.Drawing —
- Using TypeScript's Type Definition Files to Get Tooling Support for Plain JavaScript —
- Implementing an Exception Helper Class for Parameter Null Checking —
- Using QueueBackgroundWorkItem to Schedule Background Jobs from an ASP.NET Application in .NET 4.5.2 —
- Partially Applying Functions in JavaScript Using Underscore.js —
- Practical Use Cases for the RegexOptions Flags —
- Bootstrapping AngularJS Applications with Server-Side Data from ASP.NET MVC & Razor —
- Little Gems of the Enumerable Class: Empty, Range, and Repeat —
- How to Configure a SQL Server Alias for a Named Instance on a Development Machine —
- Passing .NET Server-Side Data to JavaScript —
- Managing My Reading List with Feedly & Pocket —
2013
- Measuring Execution Times in JavaScript with console.time() —
- Advanced JavaScript Debugging with console.table() —
- Generating External JavaScript Files Using Partial Razor Views —
- Using Integer Document IDs in RavenDB Indexes —
- Conditionally Serializing Fields and Properties with Json.NET —
- Keep Your Visual Studio and ReSharper Settings In Sync Between Multiple Development PCs —
2012
- Step Up Your Game with Weekly Regular Expression Challenges —
- Setting Up FluentSecurity to Use Ninject for Dependency Resolution —
- A Review of Douglas Crockford's "JavaScript: The Good Parts" —
2011
- Securing an ASP.NET MVC Application Using FluentSecurity —
- Introducing the ExtraLINQ NuGet Package —
- Why Enumerable.Except() Might Not Work the Way You Might Expect —
- ExtraLINQ: Additional Extension Methods for LINQ to Objects —
- How to Build Absolute Action URLs Using the UrlHelper Class —
- Running Multiple ASP.NET Applications Using Forms Authentication on the Same Server —