Posts

Showing posts from 2018

Fundamentals of Testing for Programmers

Image
Testing is an important part of a software development. Testing is tightly coupled with development and many teams include not only developers but also testers (or even whole testing department). Because of this tight coupling, it is nice when testers and developers can share a common dictionary. With this goal, I'm posting here my notes on this topic.

In this post, I will try to highlight what is testing, how it's connected with quality assurance and quality management. And also will describe seven testing principles and will path you through a fundamental test process.

20k Page Views! Thank you!

Image
This blog has been started 4 months ago on the 27th of May, 2018. My first post was post about new machine learning framework from Microsoft called ML.NET (this). It was my first time ever starting any blog! And yesterday this blog has reached a mark of 20,000 page views. It took a 4 months and 7 posts :)
If you are reading this, I want to say you: "Thank you for your visit!".
I hope you have found some of my posts interesting and will get back in the future :)

How to Build TypeScript App and Deploy it on GitHub Pages

Image
Quick Summary In this post, I will show you how to easily build and deploy a simple TicksToDate time web app like this: https://zubialevich.github.io/ticks-to-datetime.

How to mantain Rest API backward compatibility?

Image
All minor changes in Rest API should be backward compatible. A service that is exposing its interface to internal or/and external clients should always be backward compatible between major releases. A release of a new API version is a very rare thing. Usually, a release of a new API version means some global breaking changes with a solid refactoring or change of business logic, models, classes and requests. In most of the cases, changes are not so drastic and should still work for existing clients that haven't yet implemented a new contract.
So how to ensure that a Rest API doesn't break backward compatibility?

Caching strategies

Image
One of the easiest and most popular ways to increase system performance is to use caching. When we introduce caching, we automatically duplicate our data. It's very important to keep your cache and data source in sync (more or less, depends on the requirements of your system) whenever changes occur in the system.
In this article, we will go through the most common cache synchronization strategies, their advantages, and disadvantages, and also popular use cases.

Why does "don't touch if it works" feel broken

Image
The first not serious rule of programming says: "don't touch if it works". It means that you should not spend much time checking things that proved to be reliable in a working system. But sometimes things can go wrong.

Just another way of fixing bugs

Image
Every developer has to manage with bugs. We have to deal with this because no one is able to write code without errors. Requirements are always changing, systems becoming more complex with time and in such situations, it's hard to not make mistakes.
But how to avoid repetition of the same bugs when you edit a code? There's a good solution that will also save you some time while debugging the reasons of bugs.

Abstract Class vs Interface in C#

Image
Alot of junior (maybe not only junior) developers has been asked in an interview "what is abstract class and how why do we need it if we have interfaces?". Let's try understand what is the abstract class, when it can be helpful and how it differs from an interface.
(Important note: in this article we will talk about classical abstract classes and interfaces. In some languages (like D or new java) some things can be different, so in the post I reference a C# language for examples.)


Differences The main differences between abstract classes and interfaces are:
Abstract class can specify some implementation, which is common for all inherited classesInterface provides no implementation, only the contract. So you can see that abstract class defines a type hierarchy, and interface defines a contract. You can also see the difference as "A is B" vs "A implements B".
When would you use abstract class. Let's imagine that we are writing a program that deal…

Classify BBC news headlines with Microsoft ML.NET

Image
This sample tutorial illustrates using ML.NET to create a multiclass classifier via a .NET Core console application using C# in Visual Studio 2017.