5 years Ago
Advanced CSS (blend modes and subgrids)
Published by marco on
The article Z’s Still Not Dead Baby, Z’s Still Not Dead by Andy Clarke (24 Ways) is well-written, very interesting and taught me a few new CSS tricks of which I was unaware.
Granted, my work usually doesn’t call for fancy effects like those you can achieve with something like background-blend-mode
, but it can happen. There’s not only background-blend-mode
, there’s also mix-blend-mode
and filter
, all of which apply high-quality effects dynamically.
In the late spring, I had a two-month project where I had to use a... [More]
Framework Design: Programming Paradigms and Idioms
Published by marco on
The discussion React in concurrent mode: 2000 state-connected comps re-rendered at 60FPS (YCombinator) is illuminating mostly in that it shows how ego can impede productivity.
Ego-driven design
Ego can also be that thing that drives a talented programmer to create something of use to the rest of us, but that’s honestly a very rare case. More often than not, the best case is that a developer improves their skills—and perhaps learns to be more humble instead of shooting of their mouth about how “easy” it... [More]
Thoughts on Atomic/Utility CSS
Published by root on
The article In Defense of Utility-First CSS by Sarah Dayan on January 15th, 2018 (Frontstuff) is very long[1], so I’ve summarized a bit with notes and thoughts.[2]
I don’t really care about being pedantic without first knowing some facts. What are the requirements?
Requirements
- Can I quickly make a precise change to a single component?
- Can I make a global, thematic change?
- How quickly can I make changes?
- How maintainable is the result?
If atomic/utility CSS can deliver these things, then it’s probably a fine tool. But—spoiler alert—it... [More]
Azure Linked Accounts and SSH Keys
Published by marco on
Azure DevOps allows you to link multiple accounts.
Our concrete use case was:
- User U1 was registered with an Azure DevOps organization O1
- Microsoft did some internal management and gave our partner account a new organization O2, complete with new accounts for all users. Now I have user U2 as well, registered with O2.
- U2 was unable to take tests to qualify for partner benefits, so I had to use U1 but link the accounts so that those test results accrued to O2 as well as O1.
- We want to start... [More]
Using Git efficiently: SmartGit + BeyondCompare
Published by marco on
I’ve written about using SmartGit (SG) before[1][2] and I still strongly recommend that developers who manage projects use a UI for Git.
If you’re just developing a single issue at a time and can branch, commit changes and make pull requests with your IDE tools, then more power to you. For this kind of limited workflow, you can get away with a limited tool-set without too big of a safety or efficiency penalty.
However, if you need an overview or need to more management, then you’re going to... [More]
Visual Studio 2019 Survey
Published by marco on
Visual Studio 2019 (VS) asked me this morning if I was interested in taking a survey to convey my level of satisfaction with the IDE.
VS displays the survey in an embedded window using IE11.[1] I captured the screen of the first thing I saw when I agreed to take the survey.
I know it’s the SurveyMonkey script that’s failing, but it’s still not an auspicious start.
6 years Ago
Svelte vs. React (overselling a framework as a revolution)
Published by marco on
I’ve just read about a web framework called Svelte in the post Virtual DOM is pure overhead. I think the product itself sounds interesting, but that the author uses unnecessarily misleading arguments.
From what I gather, Svelte is a compile-time reconciliation generator for JSX/TSX components. This pre-calculated generator applies changes to the DOM without needing a virtual DOM and without real-time diffing or reconciliation. That is, instead of having real-time calculation, with possible... [More]
Why use an IOC? (hint: testing)
Published by marco on
[[_TOC_]]
## Introduction
Testing is any form of validation that verifies code. That includes not only structured validation using checklists, test plans, etc. but also informal testing, as when developers click their way through a UI or emit values in debugging output to a console.
_Automated testing_ covers the topic of all regression-style tests that execute both locally and in CI. This includes unit, integration, and end-to-end tests.
Testing is primarily a mindset.
You should think... [More]
Using Unity, Collab and Git
Published by marco on
If you’re familiar with the topic, you might be recoiling in horror. It would be unclear, though, whether you’re recoiling from the “using Collab” part or the “using Collab with Git” part.
Neither is as straightforward as I’d hoped.
tl;dr: If you have to use Collab with Unity, but want to back it up with Git, disable
core.autocrlf
[1] and add* -text
to the.gitattributes
.
Collab’s Drawbacks
Collab is the source-control system integrated into the Unity IDE.
It was built for designers to be... [More]
Finding deep assembly dependencies
Published by marco on
Quino contains a Sandbox in the main solution that lets us test a lot of the Quino subsystems in real-world conditions. The Sandbox has several application targets:
- WPF
- Winform
- Remote Data Server
- WebAPI Server
- Console
The targets that connect directly to a database (e.g. WPF, Winform) were using the PostgreSql driver by default. I wanted to configure all Sandbox applications to be easily configurable to run with SqlServer.
Just add the driver, right?
This is pretty straightforward for a... [More]
QQL: A Query Language for Quino
Published by marco on
In late 2011 and early 2012, Encodo designed a querying language for Quino. Quino has an ORM that, combined with .NET Linq provides a powerful querying interface for developers. QQL is a DSL that brings this power to non-developers.
QQL never made it to implementation—only specification. In the meantime, the world moved on and we have common, generic querying APIs like OData. The time for QQL is past, but the specification is still an interesting artifact, in its own right.
Who knows? Maybe... [More]
Breaking Changes in C#
Published by marco on
Due to the nature of the language, there are some API changes that almost inevitably lead to breaking changes in C#.
Change constructor parameters
While you can easily make another constructor, marking the old one(s) as obsolete, if you use an IOC that allows only a single public constructor, you’re forced to either
- remove the obsolete constructor or
- mark the obsolete constructor as
protected
.
In either case, the user has a compile error.
Virtual methods/Interfaces
There are several... [More]
Version numbers in .NET Projects
Published by marco on
Any software product should have a version number. This article will answer the following questions about how Encodo works with them.
- How do we choose a version number?
- What parts does a version number have?
- What do these parts mean?
- How do different stakeholders interpret the number?
- What conventions exist for choosing numbers?
- Who chooses and sets these parts?
Stakeholders
In decreasing order of expected expertise,
- Developers: Writes the software; may *change* version numbers
- Testers:... [More]
v6.0: .NET Standard & Authentication
Published by marco on
Note: this article was originally published at Encodo.com at the end of October, 2018.
The summary below describes major new features, items of note and breaking changes.
- Download the artifacts
- See the full list of issues
The links above require a login.
Overview
At long last, Quino enters the world of .NET Standard and .NET Core. Libraries target .NET Standard 2.0, which means they can all be used with any .NET runtime... [More]
Learning Quino: a roadmap for documentation and tutorials
Published by marco on
Note: this article was originally published at Encodo.com in July, 2018.
In recent articles, we outlined a roadmap to .NET Standard and .NET Core and a roadmap for deployment and debugging. These two roadmaps taken together illustrate our plans to extend as much of Quino as possible to other platforms (.NET Standard/Core) and to make development with Quino as convenient as possible (getting/upgrading/debugging).
To round it off, we’ve made good progress on another vital piece of any... [More]
Delivering Quino: a roadmap for deployment
Published by marco on
Note: this article was originally published at Encodo.com in July, 2018.
In a recent article, we outlined a roadmap to .NET Standard and .NET Core. We’ve made really good progress on that front: we have a branch of Quino-Standard that targets .NET Standard for class libraries and .NET Core for utilities and tests. So far, we’ve smoke-tested these packages with Quino-WebApi. Our next steps there are to convert Quino-WebApi to .NET Standard and .NET Core as well. We’ll let you know when it’s... [More]
Removing unwanted references to .NET 4.6.1 from web applications
Published by marco on
Note: this article was originally published at Encodo.com in July, 2018.
The title is a bit specific for this blog post, but that’s the gist of it: we ended up with a bunch of references to an in-between version of .NET (4.6.1) that was falsely advertising itself as a more optimal candidate for satisfying 4.6.2 dependencies. This is a known issue; there are several links to MS GitHub issues below.
In this blog, I will discuss direct vs. transient dependencies as well as internal vs. runtime... [More]
Quino’s Roadmap to .NET Standard and .NET Core
Published by marco on
Note: this article was originally published at Encodo.com in May, 2018.
With Quino 5, we’ve gotten to a pretty good place organizationally. Dependencies are well-separated into projects—and there are almost 150 of them.
We can use code-coverage, solution-wide-analysis and so on without a problem. TeamCity runs the ~10,000 tests quickly enough to provide feedback in a reasonable time. The tests run even more quickly on our desktops. It’s a pretty comfortable and efficient experience,... [More]
Convert Markdown to earthli format
Published by marco on
The earthli blogging format uses HTML-like formatting, described in the lengthy manual (with examples). However, Encodo’s blogging back-end now uses Umbraco, with Markdown for content. I used to be able to cross-post with ease, by copy/pasting. Now, I need to convert the content from Markdown to earthli formatting.
The following steps suffice to convert any article:
- If there are attached media (e.g. graphics), save those locally
- Create a new earthli article with the same title as the source... [More]
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:
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]
7 years Ago
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]
8 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]