Announcing my new Q# and quantum computing book

I am extremely happy to announce that on 7 May 2022, my new book, "Introduction to Quantum Computing with Q# and QDK" has been published by Springer, as part of the excellent Quantum Science and Technology series. From now on, you can also see the book in the sidebar of this website.

I am extremely proud of this moment – it is the result of almost 2 years of hard work and countless long nights.

The major goal behind writing this book was to deliver a book that balances academic rigour and its typical mathematical consistency with the pragmatism and hands-on approach that is so prevalent in the software development world. Because of that, all of the discussed theoretical aspects of quantum computing are accompanied by both algebraic explanation and the runnable Q# code. This way, the reader is equipped with two different angles — mathematical and programmatic — of looking at the same problem space.

It is my great hope that the book will be equally relevant to students of physics, as well as to technically versed enthusiasts, such as software developers or self-learners, with background in other STEM areas.

You can get the book at all major booksellers, though I would recommend to get it directly from the publisher, Springer. I hope you like it!

Running .NET 7 apps on WASI on arm64 Mac

WASI stands for WebAssembly System Interface, and allows to run WebAssembly code independently of the browsers, as it provides access to operating system features such as file system access or networking. It is highly experimental, but at the same time a tremendously interesting project, and one that has the potential of contributing to a massive paradigm-shift in the industry, making WebAssembly truly ubiquitous.

The great mad scientist of web things at Microsoft, Steve Sanderson, recently published the first version of an experiemental WASI SDK for .NET, which allows building .NET 7 and ASP.NET Core applications into standalone WASI compliant apps, and running them from WASI hosts. Steve's repo provides the easy to follow steps to get going on Windows and Linux, in this post I will walk through some additional hoops that one may need to jump on arm64 Macs.

Continue Reading

Using an existing Startup class with ASP.NET 6 minimal hosting model

With the .NET Core 2.1 having reached end of life, and the looming end of life dates for .NET 5 (this spring) and .NET Core 3.1 (this fall), a lot of developers are facing migrating their services to .NET 6.0. Depending on the customization level and the sheer scale of your service ecosystem this may be an easy or relatively complicated task – especially if you would like to additionally tap into the new lightweight hosting model around WebApplication type.

A very low-cost, easy approach to this is to take advantage of the fact that one can easily reuse an existing Startup class with the new hosting model too. This allows leaving most of the code intact, and performing only tiny refactorings around the host bootstrapping.

Continue Reading

Hello OmniSharp on .NET 6.0!

On December 15, 2021 we released version 1.38.0 of OmniSharp which, for the first time, included .NET 6.0 builds of the OmniSharp server. The related feature branch was maintained for over a year, and previously contained a .NET 5-based variant of OmniSharp, though that one was never released.

This is a big milestone in the OmniSharp project as the .NET 6.0 build is much faster and a lot more stable, and is the first step towards retiring the .NET Framework/Mono builds of OmniSharp.

Continue Reading

dotnet-script 1.3 is out with .NET 6.0 support

Last week we released version 1.3 of dotnet-script. The latest release introduces support for .NET 6.0 and C# 10 and is available, as usually, through Github releases and on Nuget. You will need to have at least the .NET SDK 6.0.100 installed.

The related language services in OmniSharp (e.g. C# extension for VS Code) have already been updated accordingly a while ago.

Continue Reading

dotnet-script 1.2 is out with assembly isolation feature

Last month we released version 1.2 of dotnet-script. This was already 36th release of the tool and I am proud to say all the dotnet-script releated packages on Nuget have passed 1 million downloads – thanks a lot!

The latest release (which already has a 1.2.1 patch too), contains several useful bug fixes, including a memory leak and one excellent new feature – assembly isolation.

Continue Reading

Beautiful and compact Web APIs revisited – with C# 10 and .NET 6 Preview 7

Back in 2012, when the Roslyn compiler was still closes source and its early CTP stages, I blogged about using its C# scripting capabilities to wire up an ASP.NET Web API server in just a few lines of code, with minimal ceremony. In 2014 I built an OWIN-based host, on top of the, then already well-stablished, scriptcs C# scripting project, that utilized the experimental IIS “Helios” server to provide a framework for building tiny C# web applications.

In 2017 I blogged about about building lightweight, minimal microservices with the early versions of ASP.NET Core. Last year, as ASP.NET Core and the “mainstream” C# (despite the initial resistance) started adopting some of these C# scripting concepts, I wrote how they have been incorporated into ASP.NET Core in .NET 5.0, along with diving into some further improvements for building these lightweight Web APIs.

It is now time to have a look at the latest set of changes in this space – as .NET 6 Preview 7, the latest one at the time of writing, and, in particular, C# 10, bring a lot of extra exciting things to the table.

Continue Reading

Eager refresh of values for AsyncExpiringLazy

Some time ago I blogged about introducing a new library, called AsyncExpiringLazy, which can be used for managing lazy-resolved values that expire and must be refreshed – such as for example access tokens to web APIs.

Yesterday I pushed out a release 2.1.0 of the library, which features a unique new feature – built thanks to the great work of Lukasz – some new additional semantics for the way how the captured value gets refreshed.

Continue Reading