When you create new project using dotnet new react template, you'll get ASP.NET Core application with ClientApp folder for SPA frontend. This may be convenient if you full-stack developer, you have exactly one SPA and you write frontend from ground-up yourself.

Using dotnet new react has many downsides and you'll tend to extract ClientApp to dedicated folder:

  • If team has dedicated frontend developers, they may find more convenient to develop SPA in dedicated folder or dedicated git repository.
  • dotnet new react template's dependencies are outdated, and frontend developers forced to execute yar create react-app manually then diff/copy output to ClientApp folder.
  • dotnet new react template is javascript template, there is no easy way to use typescript. You need to follow guide manually every time. This can be automated with yarn create react-app --template typescript, then diff/copy output to ClientApp folder.
  • dotnet new react - is not the tool for frontend developers after all :)
  • It's scales poorly. Imagine you have more than one SPA with common shared components. You'll end up with monorepo in dedicated folder using yarn workspaces and lerna.

In this post I'll show how to publish ASP.NET Core web application along with SPA from dedicated monorepo folder.


Some days ago I've decided to experiment with react-native on my Ubuntu notebook. I've got spare time and found this article with information how to install Android Studio. Unfortunately, some tips were outdated. In this post I'll tell my story to workaround some missing pieces. As a bonus, I'll create hello-world Expo application and run on the real iOS device.

Actually, Expo applications are react-native based, they can be written on JavaScript, TypeScript also supported. Expo is a framework and a toolset to start development faster.

Let's start!

Google Chrome Logo

What if you use chromedriver for Selenium Web testing of your application? When new version of Google Chrome is out, the developers gets frustrated why does their tests are made unstable again?

There was some level of compatibility between chrome and chromedriver versions: chromedrivers has support for three latest released. But I found this has changed recently. The chromedriver 2.46 release was the latest release with "last three releases" supports policy.

Now chromedriver and chrome versions are coincide in MAJOR.MINOR.PATCH triad. Fourth number may differ when patches for current version are become available.


Recently I've upgraded Ubuntu to latest 17.10 Artful Aardvark. One of the evenings I've blindly executed do-release-upgrade like I does year ago for v16.04. Surprisingly for me, the command was done successfully. It was late and after installation I've turned off power for notebook and go to sleep.

Next morning I turned on my notebook and trapped in a nightmare :). It seemed like Ubuntu hungs right before it is going to show GUI desktop. Last I've seen on the screen was mysterious boot log:

[  OK  ] Started CUPS Scheduler
[  OK  ] Started Trigger anacron every hour
[  OK  ] Listening on CUPS Scheduler
         Starting Console System Startup Logging...
[  OK  ] Started systemd-resolved-update-resolvconf.path
[  OK  ] Reached target Paths
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket
         Starting Socket activation for snappy daemon
[  OK  ] Listening on D-Bus System Message Bus Socket
         Starting systemd-resolved-update-resolvconf.service....r...server...p link was shut down....

This last line with many dots... There was thoughts in my mind that I'll need to reinstall the system from the scratch. And I'll need to save all my data before reinstall. Arggghh :)

Hopefully, I rescued my Ubuntu installation. In this blog post I'll list possible solutions that I've tried and one that really helped.


GitHub Octocat Logo

About half-year ago I read Don Williamson's blog post on how to replace Disqus comments engine with GitHub Comments (in russian). "Brilliant idea!", I thought, and I was inspired to implement same comments support for my blog some day. The day has come!

Yes, really, I've used Disqus for this blog from the start but never liked it much. Increased page load time, so many requests to unfamiliar and strange URLs - nothing good for me and the readers, I think.

Now I had a few spare time to implement comments with GitHub API. I had decided to touch with Vue.js for presentation and learn the way to implement reusable components with it.


What is actual state of .NET Core development for those who write NUnit tests?

Can we write cross-platform applications testing them with NUnit?

Is there are project templates like xUnit has?

Is there a tooling support for NUnit on par with xUnit and MSTest?

Couple days ago I asked myself these three questions. Here I'll show the results of exploration on the first day of summer 2017.

What if you have HTTP API based on protocol buffers and you want to add XML support to the API? You'd like to have one source of truth and you already have much of protocol buffer message definitions? You have unwanted option to write XSD Schema manually which is error-prone. Here I'll show how you can automate XSD schema generation from existing protocol buffers message definitions.


I have Google Analytics and Yandex Metrica counters embedded on this site and I have monitored site activity for a while. One metric I have worried about was site performance. Yes, this blog is jekyll-based static site. Can there be performance issues with static site content? I thought no, but Yandex Metrica shows me that performance issues are here. It may be slow 3G internet is in the game or I have Moscow's shared hosting issues, I can't be too sure. Here I'll show how to start using Content Delivery Network using Cloudflare as an example.