programming

Code From Your Phone

How I achieved mobile development nirvana.

I've long been a fan of mobile development workflows. I've also been interested in the convergence of .NET Core on Linux and containers as a way to enable rapid, self-contained .NET development environments. It turns out that updates to mobile tools, improved container hosting, and a little elbow grease can create a very nice mobile development setup that includes the ability to easily work with GitHub and git, edit files, and run builds and unit tests all from your phone or tablet (assuming your phone or tablet is running iOS - someone else will have to figure out how to do this on Android).

Read more...

Development On The Go

The iOS tools I use to make the most of every minute of downtime.

Fitting your open source side hustle into a busy schedule can be really hard. It seems like every time you get started on a new feature, doing issue triage, writing documentation, or any of the other multitude of activities that keep an OSS project healthy you're pulled away by family, work, or other personal obligations. I've always had a family-first mentality, so for me creating a healthy balance means making the most of every minute. More often than not, that means doing whatever work I can wherever I happen to get a free moment to do it. Not everything requires Visual Studio and a compiler. Creating documentation, responding to issues, reviewing pull requests, and writing blog posts can all be performed from your phone. In fact, I'm writing this blog post from my phone right now. Here's the tools I use to enable this kind of mobile open source workflow. Before I begin though, it's worth noting that both my phone and tablet are iOS so that's what I'm going to be writing about. There are probably very good counterparts on Android and Windows Phone, I'm just not aware of them.

Read more...

A Tale of Two APIs

A strategy for dealing with multiple public interfaces for libraries.

When developing libraries it occasionally becomes necessary to expose a different public interface to different groups of users. The most common scenario is one in which your library needs to be accessed in one way by applications that use it, but another way by other libraries that extend it. You want extension developers to have access to all the behind-the-scenes details, but exposing those properties and methods to applications would be confusing or even damaging by promoting improper use. In other words, you want the internal properties and methods to be exposed to one set of developers but not another. In this post I'll examine a strategy for exposing different public APIs to different sets of users.

Read more...

Eliminating Magic Strings in ASP.NET MVC

One man's quest to get rid of quotes.

Except for direct screen output, I really dislike coded string literals. Using strings to refer to properties, methods, classes, etc. makes it much easier to introduce code quality problems. This includes things like mistyped identifiers, missed refactoring renames, and poor code analysis capabilities. I am constantly on the hunt for ways to remove these "magic strings" and replace them with strongly-typed counterparts. This post describes several of the tools and techniques I've found that work well. While this post addresses the elimination of magic strings from ASP.NET MVC web applications, many of the strategies are applicable to other code as well.

Read more...

Open Source Obligations

What is required from creators, contributors, consumers, and coders?

With the Thanksgiving holiday just around the corner here in the US, we traditionally consider everything that we're thankful for. I have the typical list that includes my family, friends, health, etc. but I've also been thinking about how thankful I am from a professional perspective this year. From the very top on down, there has never been a better time to be a developer. With abundant conferences, meet-ups, online social networks, resources, and open code, we developers are in the midst of a global community that is larger, more active, and more heterogeneous than ever before. This is certainly true for developers on any technology stack, but recent events have made it particularly apparent to those working on the .NET platform. I am specifically thankful for the abundance of open source code and other resources made possible by the many selfless contributions of others. However, there are many different opinions with respect to the way in which we should be participating in the open source processes. These convictions are only strengthened by the fact that there are very real financial, time, and personal implications for those involved. I've seen a number of recent discussions on Twitter and elsewhere regarding the obligations of the various participants and I'd like to examine this issue in a little more detail. This post is going to be very opinionated and I invite you to disagree with me. With open source software becoming increasingly vital to commercial enterprise, it's important to have an open and civilized discussion about these topics.

Read more...

A Survey of .NET Static Site Generators

There is a lot of demand and a lot of active development around static site generators. If you're not familiar with them, these tools take markup or other simplified content and turn those resources into a full static website (HTML, CSS, etc.). There are a number of great static site generators out there, and it seems like a new one is released nearly every week. However, for this survey I am going to focus on the state of static site generation in the .NET ecosystem.

Read more...

Fun With Fizz Buzz

On Twitter last night I noticed someone mention that they were "having fun with #FizzBuzz". I had never heard of Fizz Buzz before, so I decided to look it up. In short, Fizz Buzz is a simple programming task that any competent programmer should be able to accomplish. The task is to print numbers from 1 to 100, delimited by a comma and space. For each number divisible by 3 you print "Fizz" instead of the number, for each number divisible by 5 you print out "Buzz", and for each number divisible by both 3 and 5 you print out "FizzBuzz". The apparent simplicity and hidden complexity of this problem also makes it popular in programming interviews. I like a good brain teaser, so down the rabbit hole I went. My only ground rule was no help from the Internet.

Read more...

Brace Style Convention

Or Why I Prefer My Braces On Their Own Line

Most C language descendants and variants use braces to indicate scope, and where there is a possibility for variation there will be as many opinions as programmers as to the “correct” way to do things. There has certainly been more than enough written about where to put an opening brace, but I was having a discussion on this topic recently and just couldn’t resist adding my opinion to the noise.

Read more...

open source (18) ASP.NET (15) ASP.NET MVC (14) static site generator (9) programming (8) Azure (7) Wyam (7) Roslyn (7) NuGet (6) devops (5) .NET Compiler Platform (5) Razor (4) personal (4) Vue.js (4) Entity Framework (4) LINQ (4) database (4) KendoUI (4) KendoUI MVC (4) grid (4) csharp (3) scripting (3) meta (3) T4 (3) XML (3) Mono (3) GtkSharp (3) tools (2) Cake (2) msbuild (2) magic strings (2) Azure Cosmos DB (2) Azure Functions (2) LINQ to Entities (2) strings (2) algorithms (2) LINQPad (2) blog (2) CSS (2) export (2) CSV (2) HtmlHelper (2) Entity Framework Code First (2) Nxdb (2) XQuery (2) Blazor (1) WebAssembly (1) Netlify (1) FTP (1) documentation (1) configuration (1) DSL (1) enum (1) stdin (1) stream (1) console (1) cli (1) npm (1) node (1) microdependencies (1) collections (1) concurrent (1) HashSet (1) Twitter (1) Serilog (1) MiniProfiler (1) logging (1) OWIN (1) templating (1) design (1) web (1) JavaScript (1) API (1) IIS (1) debugging (1) LINQ to SQL (1) FluentBootstrap (1) Bootstrap (1) RazorDatabase (1) GitHub (1) AppVeyor (1) fluent interfaces (1) method chaining (1) style (1) conventions (1) PDF (1) Acrobat (1) Excel (1) checkbox (1) postback (1) icon fonts (1) icons (1) SQL (1) SQL Server (1) round robin (1) DotNet (1) Dictionary (1) MultiDictionary (1) data annotations (1) persistence (1) object persistence (1) NiceThreads (1) Threading (1) Monitor (1) ReaderWriterLockSlim (1) locking (1) ILocker (1) networkdays (1) weekdays (1) ButtonPressEvent (1) Context Menu (1) ContextMenuHelper (1) Menu (1) Popup (1) Popup Menu (1) CellRenderer (1) TreeModel (1) TreeView (1) TreeViewColumn (1)