3 weeks Ago

Profiling: that critical 3% (Part II)

Published by Marco on in .NET/C#

 In part I of this series, we discussed some core concepts of profiling. In that article, we not only discussed the problem at hand, but also how to think about not only fixing performance problems, but reducing the likelihood that they get out of hand in the first place.

In this second part, we’ll go into detail and try to fix the problem.

Reëvaluating the Requirements

Since we have new requirements for an existing component, it’s time to reconsider the requirements for all stakeholders. In... [More]

1 month Ago

Profiling: that critical 3% (Part I)

Published by Marco on in .NET/C#

An oft-quoted bit of software-development sagacity is

“Premature optimization is the root of all evil.”
Donald Knuth

As is so often the case with quotes—especially those on the Internet[1]—this one has a slightly different meaning in context. The snippet above invites developers to overlook the word “premature” and interpret the received wisdom as “you don’t ever need to optimize.”

Instead, Knuth’s full quote actually tells you how much of your code is likely to be affected by performance issues that... [More]

v2.1: API-smoothing and performance

Published by Marco on in Quino

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.

Highlights

Quino 2 is finally ready and will go out the door with a 2.1 rather than a 2.0 version number. The reason being that we released 2.0 internally and tested the hell out of it. 2.1 is the result of that testing. It includes a lot of bug fixes as well as API tweaks to make things easier for developers.

2 months Ago

v2.0: Logging, Dependencies, New Assemblies & Nuget

Published by Marco on in Quino

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.

Highlights

In the beta1 and beta2 release notes, we read about changes to configuration, dependency reduction, the data driver architecture, DDL commands, security and access control in web applications and a new code-generation format.

In 2.0 final—which was actually released internally on November 13th, 2015 (a... [More]

Limited drive-space chronicles #2: Why...isual Studio installed on my machine?

Published by Marco on in Development

If you’re like us at Encodo, you moved to SSDs years ago…and never looked back. However, SSDs are generally smaller because the price (still) ramps up quickly as you increase size. We’ve almost standardized on 512GB, but some of us still have 256GB drives.

Unfortunately, knowing that we all have giant hard drives started a trend among manufacturers to just install everything, just in case you might need it. This practice didn’t really cause problems when we were still using by-then... [More]

New Year’s 2016: Cutting Boards, Sausages and a Puzzle!

Published by Pascal on in Encodo News (en)

Last year, we sent customers and friends something to drink. This year, we provided some food to go with it: hand-made sausages and an Encodo cutting board!

Not only that, but we also made a 2016 New Year’s Puzzle!

Click to Play!

As almost every year, we had to get organized early in order to accomplish everything by our projected ship-date. As last year, it was only thanks to the efforts of several people at Encodo that we got everything done well and on time.

Visit the whole photo album... [More]

Improving NUnit integration with testing harnesses

Published by Marco on in Development

 These days nobody who’s anybody in the software-development world is writing software without tests. Just writing them doesn’t help make the software better, though. You also need to be able to execute tests—reliably and quickly and repeatably.

That said, you’ll have to get yourself a test runner, which is a different tool from the compiler or the runtime. That is, just because your tests compile (satisfy all of the language rules) and could be executed doesn’t mean that you’re done writing... [More]

3 months Ago

Quino 2: Starting up an application, in detail

Published by Marco on in Quino

As part of the final release process for Quino 2, we’ve upgraded 5 solutions[1] from Quino 1.13 to the latest API in order to shake out any remaining API inconsistencies or even just inelegant or clumsy calls or constructs. A lot of questions came up during these conversions, so I wrote the following blog to provide detail on the exact workings and execution order of a Quino application.

I’ve discussed the design of Quino’s configuration before, most recently in API Design: Running an Application... [More]

IServer: converting hierarchy to composition

Published by Marco on in Quino

Quino has long included support for connecting to an application server instead of connecting directly to databases or other sources. The application server uses the same model as the client and provides modeled services (application-specific) as well as CRUD for non-modeled data interactions.

We wrote the first version of the server in 2008. Since then, it’s acquired better authentication and authorization capabilities as well as routing and state-handling. We’ve always based it on the .NET HttpListener... [More]

4 months Ago

Iterating with NDepend to remove cyclic dependencies (Part II)

Published by Marco on in Quino

In the previous article, we discussed the task of Splitting up assemblies in Quino using NDepend. In this article, I’ll discuss both the high-level and low-level workflows I used with NDepend to efficiently clear up these cycles.

Please note that what follows is a description of how I have used the tool—so far—to get my very specific tasks accomplished. If you’re looking to solve other problems or want to solve the same problems more efficiently, you should take a look at the official... [More]

Splitting up assemblies in Quino using NDepend (Part I)

Published by Marco on in Quino

 A lot of work has been put into Quino 2.0[1], with almost no stone left unturned. Almost every subsystem has been refactored and simplified, including but not limited to the data driver, the schema migration, generated code and metadata, model-building, security and authentication, service-application support and, of course, configuration and execution.

Two of the finishing touches before releasing 2.0 are to reorganize all of the code into a more coherent namespace structure and to reduce the... [More]

5 months Ago

API Design: To Generic or not Generic? (Part II)

Published by Marco on in Quino

 In this article, I’m going to continue the discussion started in Part I, where we laid some groundwork about the state machine that is the startup/execution/shutdown feature of Quino. As we discussed, this part of the API still suffers from “several places where generic TApplication parameters [are] cluttering the API”. In this article, we’ll take a closer look at different design approaches to this concrete example—and see how we decided whether to use generic type parameters.

Consistency... [More]

API Design: Running an Application (Part I)

Published by Marco on in Quino

In this article, we’re going to discuss a bit more about the configuration library in Quino 2.0.

Other entries on this topic have been the articles about Encodo’s configuration library for Quino: part I, part II and part III.

The goal of this article is to discuss a concrete example of how we decided whether to use generic type parameters throughout the configuration part of Quino. The meat of that discussion will be in a part 2 because we’re going to have to lay some groundwork about the... [More]

6 months Ago

Encodo 10th Anniversary Team Weekend

Published by Marco on in Encodo News (en)

Encodo celebrated its 10th anniversary as a company this summer in Bussang in the Lorraine region of France.

We’d originally voted on different ideas and a trip to Amsterdam had squeezed by camping by one vote. Planning our weekend in Amsterdam proved difficult. Something called SAIL Amersterdam—which takes place every five years—was on the same weekend we’d chosen and all the hotels were full.

So, we improvised and Karin found a lovely place in Bussang, just about an hour over the border... [More]

ReSharper Unit Test Runner 9.x update

Published by Marco on in .NET/C#

Way back in February, I wrote about my experiences with ReSharper 9 when it first came out. The following article provides an update, this time with version 9.2, released just last week.

tl;dr: I’m back to ReSharper 8.2.3 and am a bit worried about the state of the 9.x series of ReSharper. Ordinarily, JetBrains has eliminated performance, stability and functional issues by the first minor version-update (9.1), to say nothing of the second (9.2).

Test Runner

In the previous article, my main... [More]