214 Articles


2 years Ago

Compiler Pessimism

Published by marco on

“In practice, nearly everything you write is potentially dependent upon the order of evaluation, but in practice it isn’t because you are not a nincompoop.”

He completes the thought with “[b]ut the compiler doesn’t know that. The compiler must adhere to the letter of the language standard, because it has to compile insane code as well as sane code.”

Inventing languages for the sake of it

Published by marco on

The article Fear, trust and JavaScript: When types and functional programming fail presents issues in JavaScript and a solution: use another language. The list several newer ones that are completely untested.

But the main problem that the article mentions can’t be solved 100% by any language. The main problem is at the boundaries of your application: inputs.

When you get data from an external source, you have to validate it somehow before passing it along to the rest of the application.

No... [More]

Anyone Can Be a Programmer, Right?

Published by marco on

The post on Reddit called Someone asked me to make a site for them and I don’t know how the fuck I’m supposed to go about it. is about exactly what it sounds like it’s about. Amid the flurry of comments with recommendations on how to pretend he (or she) knows how to build a web site by using tools he’s (or she’s) never heard of, I chimed in with,

What is it about software that makes people who have never done it think that they can do it professionally?

What if your neighbor had heard you... [More]

Ray-tracing on postcards

Published by marco on

The article Deciphering The Postcard Sized Raytracer by Fabien Sanglard is a wonderfully presented breakdown of how the path tracer found on a postcard does its magic. It’s not super-fast (it takes 3 minutes to produce a much rougher version on the author’s machine). He includes his final cleaned-up source code.

It comes from the same person who made the business card ray-tracer discussed in the article Decyphering The Business Card Raytracer by Fabien Sanglard.

The problem with slow development tools

Published by marco on

The article ”Modern” C++ Lamentations by Aras Pranckeviciusis a wide-ranging rant about the inefficiency of C++ template programming and the degree to which it’s inappropriate for many of the areas where C++ is used. Aras is one of the developers for the Unity game engine

In particular, he highlights the disastrous compilation and execution speeds when using a lot of the STL. Not only that, but the debugging time is extremely slow, due to the inordinate amount of extra symbol information associated with hundreds of... [More]

.NET Tips and Resources

Published by marco on

If you’re a .NET developer, this is video you’ve been looking for:

S107 − Build great libraries using .NET Standard by Immo Landwerth (YouTube)

Immo tells you everything you need to know about Nuget, using Package References, switching to .NET Core, and using Assembly-Binding Redirects in .NET Framework (they’re not necessary in .NET Core). He also includes an effusive apology for the nightmare of compatibility issues that accompanied the purported interoperability between .NET 4.6.1 and .NET Core.

If you want to be compatible with .NET Core 1.5 or lower, then you... [More]

Which type should you register in an IOC container?

Published by marco on

Use Case

I just ran into an issue recently where a concrete implementation registered as a singleton was suddenly not registered as a singleton because of architectural changes.

The changes involved creating mini-applications within a main application, each of which has its own IOC. Instead of creating controllers using the main application, I was now creating controllers with the mini-application instead (to support multi-tenancy, of which more in an upcoming post).

Silent Replacement of... [More]

Tools for maintaining Quino

Published by marco on

The Quino roadmap shows you where we’re headed. How do we plan to get there?

A few years back, we made a big leap in Quino 2.0 to split up dependencies in anticipation of the initial release of .NET Core. Three tools were indispensable: ReSharper, NDepend and, of course, Visual Studio. Almost all .NET developers use Visual Studio, many use ReSharper and most should have at least heard of NDepend.

At the time, I wrote a series of articles on the migration from two monolithic assemblies (Encodo... [More]

File-system consistency

Published by marco on

The long and technical article Files are hard by Dan Luu discusses several low-level and scholarly analyses of how common file-systems and user-space applications deal with read/write errors.

  • How theoretically consistent is the file system?
  • How well-documented are patterns that guarantee consistency?
  • How well-understand are these patterns in the communities using them?
  • How do common applications (e.g. source control, databases, etc.) use these patterns?
  • Are these applications guaranteeing consistency?... [More]

3 years Ago

Adventures in .NET Standard 2.0-preview1

Published by marco on

.NET Standard 2.0 is finally publicly available as a preview release. I couldn’t help myself and took a crack at converting parts of Quino to .NET Standard just to see where we stand. To keep me honest, I did all of my investigations on my MacBook Pro in MacOS.

IDEs and Tools

I installed Visual Studio for Mac, the latest JetBrains Rider EAP and .NET Standard 2.0-preview1. I already had Visual Studio Code with the C#/OmniSharp extensions installed. Everything installed easily and quickly and I... [More]

C# Handbook 7.0

Published by marco on

 I announced almost exactly one year ago that I was rewriting the Encodo C# Handbook. The original was published almost exactly nine years ago. There were a few more releases as well as a few unpublished chapters.

I finally finished a version that I think I can once again recommend to my employees at Encodo. The major changes are:

  • The entire book is now a Git Repository (GitHub). All content is now in Markdown. Pull requests are welcome.
  • I’ve rewritten pretty much everything. I removed a lot of... [More]

4 years Ago

The weird world of type-compatibility in TypeScript

Published by marco on

I recently fixed a bug in some TypeScript code that compiled just fine—but it looked for all the world like it shouldn’t have.

tl;dr: there is no TypeScript compiler bug, but my faith in the TypeScript language’s type model is badly shaken.

A simple example

The following code compiles—and well it should.

interface IB {
  name: string;

interface IA {
  f(action: (p: IB) => void): IA;

class A implements IA {
  f = (action: (p: IB) => void): IA => {
    return this;

Some... [More]

My Impressions and Notes from VoxxedDays 2017

Published by marco on

Encodo presented a short talk at Voxxed Days 2017 this year, called The truth about code reviews. Sebastian and I also attended the rest of the conference. The following is a list of notes and reactions to the talks.

Engineering You

Martin ThompsonVideo

The keynote was about our place in the history of software engineering. Martin described us more as alchemists than engineers right now, a sentiment with which I can only agree. There is too little precision, too little... [More]

The evolving Swift string API and implementation

Published by marco on

As Microsoft did a couple of years ago, Apple’s language designers are also designing the next version of Swift in public.[1] One example of the new design is the discussion of String Processing For Swift 4 (GitHub). If you read through the relatively long document, you can at least see that they’re giving the API design a tremendous amount of thought.

API Considerations for Strings

There are so many factors to weigh when building the API, especially for a low-level construct like String.

  • As they state... [More]

A tuple-inference bug in the Swift 3.0.1 compiler

Published by marco on

I encountered some curious behavior while writing a service-locator interface (_protocol_) in Swift. I’ve reproduced the issue in a stripped-down playground[1] and am almost certain I’ve found a bug in the Swift 3.0.1 compiler included in XCode 8.2.1.

Update: At the suggestion of a reader, I searched and found Apple’s Jira for Swift[2] and reported this issue as A possible tuple-inference/parameter-resolution bug in Swift 3.0.1

A Simple, Generic Function

We’ll start off with a very basic example,... [More]

Programming-language Features: How much is too much?

Published by marco on

The article Dark Path by Robert C. Martin was an interesting analysis of a recent “stricter” trend in programming languages, as evidenced by Swift and Kotlin. I think TypeScript is also taking some steps along this path, as well as Rust, which I have a read a lot about, but haven’t had much occasion to use.

Correct vs. Expressive

The point Martin makes is that all of these languages seem to be heedlessly improving correctness at the possible cost of expressiveness and maintainability. That is, as types are... [More]

Set up JetBrains DataGrip with local SQL Server Express

Published by marco on

The article Connecting DataGrip to MS SQL Server by Maksim Sobolevskiy on June 21, 2016 (JetBrains Blog) covers all of the points well, with screen shots but I just wanted to record my steps, collected into a tight list. Screenshots for most of these steps are available in the blog linked above.

If you don’t have a license for DataGrip, you can download a 30-day trial or you can download the JetBrains Rider EAP, which bundles it. Once Rider is released, you’ll have to have a license for it, but—for now—you can use it for free.

  • Open SQL Server... [More]

A Surfeit of C#/.NET IDEs

Published by marco on

For many years, the C#/.NET world has been dominated by a single main IDE: Visual Studio. MonoDevelop has also been available for a while, as an alternative for users on other platforms. Lately, though, there have been a few new contenders in the .NET IDE arena.

Visual Studio for Mac

We’ll get this one out of the way first: this is basically Xamarin Studio for Mac, rebranded as Visual Studio for Mac. This IDE is pretty and extremely well-integrated into MacOS, with a lot of animated editor... [More]

ABD: Improving the Aspect-modeling API for Quino

Published by marco on


We discussed ABD in a recent article ABD: Refactoring and refining an API. To cite from that article,

“[…] the most important part of code is to think about how you’re writing it and what you’re building. You shouldn’t write a single line without thinking of the myriad ways in which it must fit into existing code and the established patterns and practices.”

With that in mind, I saw another teaching opportunity this week and wrote up my experience designing an improvement to an... [More]

ABD: Refactoring and refining an API

Published by marco on

We’ve been doing more internal training at Encodo lately and one topic that we’ve started to tackle is design for architecture/APIs. Even if you’re not officially a software architect—designing and building entire systems from scratch—every developer designs code, on some level.


There are broad guidelines about how to format and style code, about how many lines to put in a method, about how many parameters to use, and so on. We strive for Clean Code™.

But the... [More]

v2.2: Winform fixes and Query Improvements

Published by marco on

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.


Quino Retrospective and Roadmap

Published by marco on


Before taking a look at the roadmap, let’s quickly recap how far we’ve come. An overview of the release schedule shows a steady accretion of features over the years, as driven by customer or project needs.


The list below includes more detail on the releases highlighted in the graphic.[1]

  • 0.1: Proof of concept with metadata, PostgreSql (data and schema-migration) and Winforms UI
  • 1.0: First customer product with PostgreSql, DevExpress Winforms UI and Reporting
  • 1.0.5: MS-SQL driver... [More]

Quino v3.0: Metadata builders and code-generation improvements

Published by marco on

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.


C# Handbook Rewrite

Published by marco on

Encodo published its first C# Handbook and published it to its web site in 2008. At the time, we also published to several other standard places and got some good, positive feedback. Over the next year, I made some more changes and published new versions. The latest version is 1.5.2 and is available from Encodo’s web site. Since then, though I’ve made a few extra notes and corrected a few errors, but never published an official version again.

This is not because Encodo hasn’t improved or... [More]

API Design: The Road Not Taken

Published by marco on

“Unwritten code requires no maintenance and introduces no cognitive load.”

As I was working on another part of Quino the other day, I noticed that the oft-discussed registration and configuration methods[1] were a bit clunkier than I’d have liked. To whit, the methods that I tended to use together for configuration had different return types and didn’t allow me to freely mix calls fluently.

The difference between Register and Use

The return type for Register methods is IServiceRegistrationHandler... [More]

v2.2: Winform fixes and Query Improvements

Published by marco on

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.


Voxxed Zürich 2016: Notes

Published by marco on

This article was originally published on the Encodo Blogs.

This first-ever Voxxed Zürich was hosted at the cinema in the SihlCity shopping center in Zürich on March 3rd. All presentations were in English. The conference was relatively small—333 participants—and largely vendor-free. The overal technical level of the presentations and participants was quite high. I had a really nice time and enjoyed a lot of the presentations.

There was a nice common thread running through all of the... [More]

Finovate 2016: Bank2Things

Published by marco on

At the beginning of the year, we worked on an interesting project that dipped into IOT (Internet of Things). The project was to create use cases for Crealogix’s banking APIs in the real world. Concretely, we wanted to show how a customer could use these APIs in their own workflows. The use cases were to provide proof of the promise of flexibility and integrability offered by well-designed APIs.

Watch 7–minute video of the presentation

The Use Cases

Football Club Treasurer

 Activity Stream in the AppThe first use... [More]

5 years Ago

Mini-applications and utilities with Quino

Published by marco on

In several articles last year[1], I went into a lot of detail about the configuration and startup for Quino applications. Those posts discuss a lot about what led to the architecture Quino has for loading up an application.

 Some of you might be wondering: what if I want to start up and run an application that doesn’t use Quino? Can I build applications that don’t use any fancy metadata because they’re super-simple and don’t even need to store any data? Those are the kind of utility applications... [More]

Verity Stob Teaches Functional Programming

Published by marco on

The article Learn you Func Prog on five minute quick! by Verity Stob (The Register) provides a typically twisted and unhelpful overview of the state of functional programming in this 21st-century renaissance—heralded decades ago by Lisp programmers. It includes an honest overview of the major players, including Scala, for which the “pro” and “con” are the same (a “[c]lose relationship with Java […]”) and ending with JavaScript, for which the “pro” is “It’s what you’ll end up using.”

The discussion continues with rules:... [More]