2020

A Practical Approach to Temporal Architecture

What it takes to get Temporal workflows up and running

Read more...

Temporal: Open Source Workflows as Code

Temporal reimagines state-dependent service-orchestrated application development

Read more...

Announcing Next Generation Pulumi Azure Provider

Next Generation Pulumi Azure Provider with 100% API Coverage and Same-Day Feature Support is now available in beta

Read more...

How to Drain a List of .NET Tasks to Completion

Custom await logic for a dynamic list of .NET tasks, fast and on-time

Read more...

The Emerging Landscape of Edge-Computing

What is edge computing, and what are the primary use cases in the world today? (a paper review)

Read more...

The Best Interview is No Interview: How I Get Jobs Without Applying

My humble story of getting (or not) a job at Amazon, Qualcomm, Jet.com, Pulumi, and more

Read more...

Eliminate Cold Starts by Predicting Invocations of Serverless Functions

Azure Functions introduce a data-driven strategy to pre-warm serverless applications right before the next request comes in

Read more...

Unit Testing Cloud Deployments with Pulumi in F#

Developing infrastructure programs in F# with unit tests, TDD, and mocks

Read more...

Unit Testing Cloud Deployments with Pulumi in C#

Developing infrastructure programs in C# with unit tests, TDD, and mocks

Read more...

Serverless in the Wild: Azure Functions Production Usage Statistics

Insightful statistics about the actual production usage of Azure Functions, based on the data from Microsoft's paper

Read more...

Comparison of Cold Starts in Serverless Functions across AWS, Azure, and GCP

AWS Lambda, Azure Functions, and Google Cloud Functions compared in terms of cold starts across all supported languages

Read more...

InfiniCache: Distributed Cache on Top of AWS Lambda (paper review)

My review of the paper "InfiniCache: Exploiting Ephemeral Serverless Functions to Build a Cost-Effective Memory Cache"

Read more...

Hosting Azure Functions in Google Cloud Run

Running Azure Functions Docker container inside Google Cloud Run managed service

Read more...

Serverless Containers with Google Cloud Run

Google Cloud Run is the latest addition to the serverless compute family. While it may look similar to existing services of public cloud, the feature set makes Cloud Run unique.

Read more...

2019

Provisioned Concurrency: Avoiding Cold Starts in AWS Lambda

AWS recently announced the launch of Provisioned Concurrency, a new feature of AWS Lambda that intends to solve the problem of cold starts.

Read more...

Santa Brings Cloud to Every Developer

How Santa Cloud uses F# and Pulumi to bring cloud resources to the homes of software engineers.

Read more...

Choosing the Best Deployment Tool for Your Serverless Applications

Factors to consider while deploying cloud infrastructure for serverless apps.

Read more...

AWS Lambda vs. Azure Functions: 10 Major Differences

A comparison AWS Lambda with Azure Functions, focusing on their unique features and limitations.

Read more...

How To Deploy a Function App with KEDA (Kubernetes-based Event-Driven Autoscaling)

Hosting Azure Functions in Kubernetes: how it works and the simplest way to get started.

Read more...

How To Build Globally Distributed Applications with Azure Cosmos DB and Pulumi

A reusable component to build highly-available, low-latency applications on Azure

Read more...

How to Avoid Cost Pitfalls by Monitoring APIs in AWS Lambda

How to monitor your APIs using serverless technologies and an Epsagon dashboard.

Read more...

Ten Pearls With Azure Functions in Pulumi

Ten bite-sized code snippets that use Pulumi to build serverless applications with Azure Functions and infrastructure as code.

Read more...

AWS Lambda Cold Starts After 10 Minutes

How AWS Lambda changed the policy of recycling idle instances

Read more...

How to Measure the Cost of Azure Functions

Azure pricing can be complicated—to get the most value out of your cloud platform, you need to know how to track spend and measure the costs incurred by Azure Functions.

Read more...

7 Ways to Deal with Application Secrets in Azure

From config files to Key Vault and role-based access, learn how infrastructure as code helps manage application secrets in Azure.

Read more...

Load-Testing Azure Functions with Loader.io

Verifying your Function App as a valid target for the cloud load testing.

Read more...

How Azure CLI Manages Your Access Tokens

Azure CLI is a powerful tool to manage your cloud resources. Where does it store the sensitive information and why might you want to care?

Read more...

Globally-distributed Serverless Application in 100 Lines of Code. Infrastructure Included!

Building a serverless application on Azure with both the data store and the HTTP endpoint located close to end users for fast response time.

Read more...

Hosting a Static Website on Azure with Pulumi

Static websites are back in the mainstream these days. Setting up the infrastructure to serve a static website in Azure is a task where Pulumi shines.

Read more...

Serverless as Simple Callbacks with Pulumi and Azure Functions

The simplest way to take a Node.js function and deploy it to Azure cloud as an HTTP endpoint using Pulumi.

Read more...

Level up your Azure Platform as a Service applications with Pulumi

Leverage Pulumi for continuous delivery of code and infrastructure to Azure PaaS. An ASP.NET Core application running on App Service and DevOps pipelines.

Read more...

Less Frequent Cold Starts in Google Cloud Functions

Google keeps idle instances of Cloud Functions alive for many hours.

Read more...

Visualizing (Absence Of) Cold Starts in Binaris

Running visual map experiment on Binaris cloud functions.

Read more...

Reducing Cold Start Duration in Azure Functions

The influence of the deployment method, application insights, and more on Azure Functions cold starts.

Read more...

Concurrency and Isolation in Serverless Functions

Exploring approaches to sharing or isolating resources between multiple executions of the same cloud function and the associated trade-offs.

Read more...

Visualizing Cold Starts

Serverless cold starts illustrated with animated GIFs.

Read more...

Evergreen Serverless Performance Reviews

Automating cloud infrastructure to delivery always-up-to-date performance metrics.

Read more...

From YAML to TypeScript: Developer's View on Cloud Automation

An expressive and powerful way to design cloud-native and serverless infrastructure

Read more...

Serverless at Scale: Serving StackOverflow-like Traffic

Scalability test for HTTP-triggered serverless functions across AWS, Azure and GCP

Read more...

2018

A Fairy Tale of F# and Durable Functions

How F# and Azure Durable Functions make children happy (most developers are still kids at heart)

Read more...

Making Sense of Azure Durable Functions

Why and How of Stateful Workflows on top of serverless functions

Read more...

From 0 to 1000 Instances: How Serverless Providers Scale Queue Processing

Comparison of queue processing scalability for FaaS across AWS, Azure and GCP

Read more...

Azure Functions V2 Is Released, How Performant Is It?

Comparison of performance benchmarks for Azure Functions V1 and V2

Read more...

Serverless: Cold Start War

Comparison of cold start statistics for FaaS across AWS, Azure and GCP

Read more...

AWS Lambda Warmer as Pulumi Component

Preventing cold stats of AWS Lambda during longer periods of inactivity, implemented as a reusable Pulumo component

Read more...

Getting Started with AWS Lambda in Pulumi

Provisioning AWS Lambda and API Gateway with Pulumi, examples in 5 programming languages

Read more...

Monads explained in C# (again)

Yet another Monad tutorial, this time for C# OOP developers

Read more...

Programmable Cloud: Provisioning Azure App Service with Pulumi

Exploring Infrastructure-as-Code approach suggested by Pulumi with examples around provisioning Azure App Service

Read more...

Cold Starts Beyond First Request in Azure Functions

Can we avoid cold starts by keeping Functions warm, and will cold starts occur on scale out? Let's try!

Read more...

Azure Functions: Cold Starts in Numbers

Auto-provisioning and auto-scalability are the killer features of Function-as-a-Service cloud offerings, and Azure Functions in particular. One drawback of such dynamic provisioning is a phenomenon called “Cold Start”.

Read more...

Awesome F# Exchange 2018

I’m writing this post in the train to London Stensted, on my way back from F# Exchange 2018 conference. F# Exchange is a yearly conference taking place in London, and 2018 edition was the first one for me personally.

Read more...

Azure Durable Functions in F#

Azure Functions are designed for stateless, fast-to-execute, simple actions. Typically, they are triggered by an HTTP call or a queue message, then they read something from the storage or database and return the result to the caller or send it to another queue.

Read more...

Load Testing Azure SQL Database by Copying Traffic from Production SQL Server

Azure SQL Database is a managed service that provides low-maintenance SQL Server instances in the cloud. You don’t have to run and update VMs, or even take backups and setup failover clusters.

Read more...

Tic-Tac-Toe with F#, Azure Functions, HATEOAS and Property-Based Testing

A toy application built with F# and Azure Functions: a simple end-to-end implementation from domain design to property-based tests.

Read more...

2017

Azure Functions Get More Scalable and Elastic

Back in August this year, I’ve posted Azure Functions: Are They Really Infinitely Scalable and Elastic? with two experiments about Azure Function App auto scaling.

Read more...

Precompiled Azure Functions in F#

This post is giving a start to F# Advent Calendar in English 2017. Please follow the calendar for all the great posts to come.

Read more...

Azure F#unctions Talk at FSharping Meetup in Prague

On November 8th 2017 I gave a talk about developing Azure Functions in F# at FSharping meetup in Prague. I really enjoyed giving this talk: the audience was great and asked awesome questions.

Read more...

Azure Function Triggered by Azure Event Grid

Update: I missed the elephant in the room. There actually exists a specialized trigger for Event Grid binding. In the portal, just select Experimental in Scenario drop down while creating the function.

Read more...

Wanted: Effectively-Once Processing in Azure

Are there any known patterns / tools / frameworks to provide scalable, stateful, effectively-once, end-to-end processing of messages, to be hosted in Azure?

Read more...

Azure Functions: Are They Really Infinitely Scalable and Elastic?

Updated results are available at Azure Functions Get More Scalable and Elastic. Automatic elastic scaling is a built-in feature of Serverless computing paradigm. One doesn’t have to provision servers anymore, they just need to write code that will be provisioned on as many servers as needed based on the actual load.

Read more...

Authoring a Custom Binding for Azure Functions

The process of creating a custom binding for Azure Functions.

Read more...

Custom Autoscaling with Durable Functions

Leverage Azure Durable Functions to scale-out and scale-in App Service based on a custom metric

Read more...

Custom Autoscaling of Azure App Service with a Function App

How to scale-out and scale-in App Service based on a custom metric

Read more...

Sending Large Batches to Azure Service Bus

Azure Service Bus client supports sending messages in batches. However, the size of a single batch must stay below 256k bytes, otherwise the whole batch will get rejected.

Read more...

Finding Lost Events in Azure Application Insights

One of the ways we use Azure Application Insights is tracking custom application-specific events. For instance, every time a data point from an IoT device comes in, we log an AppInsights event.

Read more...

Mikhail.io Upgraded to HTTPS and HTTP/2

Starting today, this blog has switched to HTTPS secure protocol: While there’s not that much to secure on my blog, HTTPS is still considered to be a good practice for any site in 2017.

Read more...

Reliable Consumer of Azure Event Hubs

Azure Event Hubs is a log-based messaging system-as-a-service in Azure cloud. It’s designed to be able to handle huge amount of data, and naturally supports multiple consumers.

Read more...

Why F# and Functional Programming Talk at .NET Development Nederland Meetup

On May 8th 2017 I gave a talk at the .NET Development Nederland group in Amsterdam. Here are the slides for the people who were there and want to revisit the covered topics.

Read more...

Visualizing Dependency Tree from DI Container

So you are a C# developer. And you need to read the code and understand its structure. Maybe you’ve just joined the project, or it’s your own code you wrote 1 year ago.

Read more...

Azure Functions as a Facade for Azure Monitoring

Azure Functions are the Function-as-a-Service offering from Microsoft Azure cloud. Basically, an Azure Function is a piece of code which gets executed by Azure every time an event of some kind happens.

Read more...

Azure Service Bus Entity Metrics .NET APIs

Getting advanced metrics out of Azure Service Bus in C# code

Read more...

Coding Puzzle in F#: Find the Number of Islands

Here’s a programming puzzle. Given 2D matrix of 0’s and 1’s, find the number of islands. A group of connected 1’s forms an island. For example, the below matrix contains 5 islands

Read more...

Event Sourcing: Optimizing NEventStore SQL read performance

In my previous post about Event Store read complexity I described how the growth of reads from the event database might be quadratic in respect to amount of events per aggregate.

Read more...

My Praise of Advent of Code 2016

During the last days of December I was pleasing my internal need for solving puzzles and tricky tasks by going through Advent of Code 2016 challenge.

Read more...

My Functional Programming & F# Talks at Webscale Architecture Meetup

On January 10th of 2017 I gave two talks at the Webscale Architecture NL meetup group in Utrecht. Here are the slides for the people who were there and want to revisit the covered topics.

Read more...

2016

Introducing Stream Processing in F#

The post was published for F# Advent Calendar 2016, thus the examples are themed around the Christmas gifts. This article is my naive introduction to the data processing discipline called Stream Processing.

Read more...

Event Sourcing and IO Complexity

Event Sourcing is an approach, when an append-only store is used to record the full series of events that describe actions taken on a particular domain entity.

Read more...

Leaflet plugin to render geographic corridors

Yesterday I’ve published a simple Leaflet plugin called leaflet-corridor. The plugin defines a new Leaflet primitive L.Corridor. When initialized with an array of geo points and width, it renders a polyline with width fixed in meters, not in pixels.

Read more...

Azure SQL Databases: Backups, Disaster Recovery, Import and Export

Azure SQL Database is a managed cloud database-as-a-service. It provides application developers with SQL Server databases which are hosted in the cloud and fully managed by Microsoft.

Read more...

Getting started with Azure Application Insights in Aurelia

Azure Application Insights is an analytics service to monitor live web applications, diagnose performance issues, and understand what users actually do with the app. Aurelia is a modern and slick single-page application framework.

Read more...

Comparing Scala to F#

F# and Scala are quite similar languages from 10.000 feet view. Both are functional-first languages developed for the virtual machines where imperative languages dominate. C# for .NET and Java for JVM are still lingua franca, but alternatives are getting stronger.

Read more...

Mocking API calls in Aurelia

Aurelia is a modern and slick single-page application framework. “Single-page application” aspect means that it’s loaded into the browser once, and then the navigation happens on the client side and all the data are loaded from a REST API endpoint.

Read more...

Building a Poker Bot: Functional Fold as Decision Tree Pattern

*This is the fifth part of Building a Poker Bot series where I describe my experience developing bot software to play in online poker rooms.

Read more...

Dependency Inversion Implies Interfaces Are Owned by High-level Modules

Dependency Inversion is one of the five principles of widely known and acknowledged S.O.L.I.D. design guidelines. This principle is very powerful and useful when applied consistently.

Read more...

Tweaking immutable objects with C# and Fody

Immutable data structures provide a lot of benefits to programmers, especially when representing domain value objects. Immutability is an essential part of functional programming paradigm.

Read more...

T-SQL MERGE statement is underrated

How many times did you write a SQL to save a row without knowing whether the same primary key already exists or not? You just get an object in your data access layer and you want to save all fields into the database.

Read more...

Building a Poker Bot with Akka.NET Actors

This post lays out the most exciting part of the bot. I'll compose the recognition, flow, decision and mouse clicking parts together into the bot application. The application is a console executable interacting with multiple windows of poker room software.

Read more...

Functional Actor Patterns with Akka.NET and F#

My exploration of Actor model started with Akka.NET framework - a .NET port of JVM-based Akka. Actor programming model made a lot of sense to me, but once I started playing with it, some questions arose.

Read more...

Aurelia Map Component with Leaflet

This is a short tutorial on how to create a map control in an Aurelia.js application. I am using the Leaflet library with custom tile source and I also show the way to implement your own overlay layer.

Read more...

Building a Poker Bot: Mouse Movements

The last step of the poker bot flow: clicking the buttons. The screen is already recognized, the hand is understood, the decisions are made and now the bot needs to execute the actions. This means clicking the right button at the poker table.

Read more...

Unit testing Dapper repositories

Dapper is a micro-ORM library which is very simple and super fast. Quite often the data access code is difficult to be unit tested. In this post, I present some ideas of testing Dapper-based database access.

Read more...

Building a Poker Bot: String and Number Recognition

This is the second part of Building a Poker Bot series where I describe my experience developing bot software to play in online poker rooms. Reading cards and other fixed images was the first step. The bot should also be able to read different text-based information from the screen.

Read more...

Akka.NET-style actors in Service Fabric

Akka.NET and Service Fabric are the two actor frameworks that emerged in .NET world in the last year. The two implementations of actor models are quite different. These differences are multi-faceted but today I want to focus on API to define an actor and to communicate to it.

Read more...

Building a Poker Bot: Card Recognition

This is the first part of Building a Poker Bot series where I describe my experience developing bot software for online poker rooms. I'm building the bot with .NET framework and F# language which makes the task relatively easy and very enjoyable.

Read more...

Monads explained in C#

The newer and much longer version of this article is now available: Monads explained in C# (again) It looks like there is a mandatory post that every blogger who learns functional programming should write: what a Monad is.

Read more...

Fire-and-forget in Service Fabric actors

At the recent Webscale Architecture meetup we discussed two implementations of the Actor model in the .NET ecosystem: Akka.NET and Azure Service Fabric Actors. One important discussion was around Ask vs Tell call model.

Read more...

Validation with Either data type in C#

In this article we will employ a functional monadic concept Either to make validation code more expressive and easier to maintain.

Read more...

2015

Weaving your domain classes with Fody

When I model the business domain with C#, the resulting data structures tend to contain a lot of boilerplate code. It's repeated from class to class and it gets more difficult to see the essence of the model behind the repetitive cruft. In this article I show off one trick to reduce this boilerplate code with Fody library.

Read more...

Deploy your SPA to Azure

In this post I want to share a simple tutorial on how to deploy your single page application into the Azure cloud. I have a Single Page Application (SPA) done with HTML/JavaScript in a separate local Git repository. I alsp have a ASP.NET 4.6 Web API service which serves the data for SPA in another local Git repository. Now I want to deploy both to the Azure cloud, and make it easy to deploy changes in the future.

Read more...

Review of the course "Modern, Modular JavaScript with SystemJS and jspm"

Recently I was playing with Aurelia SPA framework, which makes heavy use of jspm and SystemJS for modules/packaging. This package manager is new to me, and it looked a bit like magic sometimes. So when I saw a jspm course on Pluralsight, I decided to give it a try. And I did not regret: the course is great.

Read more...

Units of measurement in domain design

If you have business application of any decent size, your most important code probably resides in domain logic. Try to make it as simple and readable as possible, and it will always pay you back. Today I want to discuss one aspect of writing clean domain code: units of measurement.

Read more...

Aurelia element animation with custom attribute

I've been exploring Aurelia javascript UI framework recently to get some experience needed for our next big project. One thing that I couldn't implement out of the box was a kind of animation.

Read more...

Peer code review Why's, How's and What's

This post is a short summary on why do code reviews, what the steps are and what should actually be reviewed. The text was created to set some common ground for my team, which was just starting to conduct code reviews in a consistent way.

Read more...

Unit testing null parameter checks

We use constructor dependency injection throughout our application. Most service classes have constructors, which accept all dependencies in form of interfaces. We also use TDD, which means we must write unit tests for every aspect of our code. So I want to discuss one specific aspect: guarding the constructor parameters from null values and testing this guard.

Read more...

The Green Hackfest - my first hackathon

In this post I'd like to share my experience about the first hackathon that I took part in. It was called The Green Hackfest and took place in Utrecht, the Netherlands on 10-12 October 2014. My team won a price of 1000 EURO, so read on to know what hackathon is, why you should go there, and how to score the price. And of course, pictures, pictures, pictures.

Read more...

How I fixed a bug in SQL Server

Our production databases were migrated from SQL Server 2012 to SQL Server 2014. Among other improvements in the latter, the new cardinality estimator was introduced. The new estimator is supposed to be smarter than the old one, of course. It takes more factors into account, and thus should give better results with some query plans. But "new" also means "less tested"...

Read more...

How we do message processing

Our team develops a back-end system that processes messages from mobile devices. The devices collect information from complex machines and send messages to our data center. In this article I want to share our approaches to building such processing software. The ideas are quite general and can be applied to any system of the following architecture...

Read more...

2014

Nice way to kill your SQL Server

The short story about how to crash your complete system by missing one line of code in SQL Server stored procedure.

Read more...

SQL: produce resultset with N rows

Sometimes you need to produce a result set, which would contain N rows with numbers 1...N in each row. For example, I needed to calculate some statistics per week for N weeks starting from today and going back to the past.

Read more...

Sgen to precompile classes for XmlSerializer

During my investigation of our ASP.NET application performance issue, I've found out that XmlSerializer may require a long warm-up. The first time, when it's used for a specific class (de-)serialization, can take up to 500 ms om my machine!

Read more...

2013

Poker Money application for Windows Store

Windows 8 / Windows RT / Windows Store all arrived in October 2012. I've decided to take a shot on writing a commercial application for this new platform. And that's how Poker Money app appeared.

Read more...

2012

One certificate missing, one received unexpectedly

Today I want to give a note about two more online courses that I completed. The last one (10 weeks in September-November) was called Introduction to Computational Finance and Financial Econometrics and was lead by Eric Zivot from University of Washington. First of all, it was the most intense course out of all that I took to date.

Read more...

Introduction to Finance class at Coursera

I've recently received a statement of accomplishment document for Coursera's online Introduction to Finance class that I took in July-September this year.

Read more...

Gamification class at Coursera

I've recently received a statement of accomplishment document for Coursera's online Gamification class that I took in August-October this year.

Read more...

Use Fiddler to debug urlfetch requests in Google AppEngine

We use a lot of web crawling to get data from third-party websites. Some crawling is not as easy as just a simple GET request, so we have to send specific POST data, cookies and HTTP headers. And all this needs to be debugged. Fiddler2 is the gold standard for web debugging tools, so I'd like to use it in this case too.

Read more...

Google adds Public Transit into API

Now, both Google Directions Web Services and Google Maps JavaScript API include building the routes with Public Transit.

Read more...

Enable jinja2 and i18n translations on Google AppEngine

My initial goal was to make our new application (based on python/AppEngine) translatable. All strings in the application must be translatable. Translations should preferably stored in separate files. It should be easy to use the translations both in .py files and html templates.

Read more...

Model Thinking class at Coursera

I've recently received a statement of accomplishment document for Coursera's online Model Thinking Class that I took in April-May this year.

Read more...

API to get the list of hotels

In our travelling application, we need to show the list of hotels in a city (St. Petersburg, Russia at the moment, but more will be needed in the future). The idea was to find a hotel information provider, and then upload the complete list into our own database.

Read more...

Books that I’ve recently read, part 2

Reviews of "Rework" by Jason Fried and David Heinemeier Hansson, "Don't Make Me Think" by Steve Krug, "The Non-Designer's Design Book" by Robin Williams and "The Toilet Paper Entrepreneur" by Mike Michaliwicz.

Read more...

Google Transit API research

Recently, Google has launch a Transit service for the biggest cities of Russia: a service to caculate routes with public transport options. As a part of RnD for upcoming project, I need to understand whether there's any feasible way to calculate public transport route programmatically. I.e. I need Google Transit API.

Read more...

Multi-level telerik's TileView

We were investigating the options for visual representation of hierarchical dashboard in our Silverlight application. This means, we want to display the number of gauges with tree-like structure. Here is a sample...

Read more...

Books that I've recently read

My reviews of "Steve Jobs" by Walter Isaacson, "The Art of the Start" by Guy Kawasaki, "How to Become a Businessman" and "I'm Just Like Anyone Else" by Oleg Tinkov.

Read more...

Gauge control with two values (Silverlight)

While developing the dashboard to display several performance indexes, I bumped into the task of visualizing the pair of numbers on a single gauge. One number would show a person's performance metric, while the other one would display the person group's performance indicator to compare with. I couldn't find a ready control to use, so I decided to design my own.

Read more...

Hunting memory leaks in Silverlight

Recently, I've spent a couple of days seeking and fixing memory leaks in our Silverlight application. It might be tough sometimes, but it's a good 'brain-teasing' practice and it's a good way to learn how inner things work.

Read more...

Machine Learning class at Stanford online

Several days ago, I've received a Statement of Accomplishment document from Andrew Ng and Machine Learning online class team.

Read more...