Availability in Distributed Systems

In a typical distributed software environment, besides latency, a key metric that correlates well with the health of the business is what is known as “availability”. 

Availability is usually measured by the percentage of time the software is not down (i.e.: available). Availability is vital to modern software organizations. ‘High availability’, or HA for short, is a term commonly used by software professionals. It refers to a software system that enjoys a very low down time.

black and silver round analog clock
Photo by cottonbro studio on Pexels.com

Let’s go back to our hypothetical social network from the previous article, in which you are a senior … Read more

Distributed Software Systems at scale

One of the most potent skills a senior engineer can possess in modern software engineering orgs is the ability to navigate distributed software systems at a global scale. Designing, constructing, and maintaining such systems can be an immensely challenging yet profoundly satisfying intellectual exercise. For some of the top players in the industry, like Google or Meta/Facebook, the responsibilities of lead engineers are akin to the responsibilities of commanders overseeing a global battle field. The business relies on you and your peers to operate massive global systems with a myriad of wild variables. 

Distributed software systems is a well documented … Read more

My first book journey

Coding is a passion for many software developers. A lot of us do it because we simply like it, not because it pays for fancy steak dinners, or make our loved ones proud. But why do we like it? From my own experience, the reason for that passion is different from one developer to another. It’s about what makes you ‘tick’. For some developers, they enjoy the logical constructs that work together to build a piece of software. For others, they are obsessed with the mental challenges that come with programming.

For me, I simply enjoy building things from scratch. … Read more

Practical thoughts on HMIs and industrial software environments

Welcome again to the world of industrial software. This article is a collection of thoughts to provide practical exposure into the concept of HMIs, and why they are important. We will also cover important concepts that apply to the data performance of industrial software in general. The article will first go through the basic concepts around HMIs, their use cases, and how they work. From there, we’ll dive deeper into real world design and implementation considerations, that come along with embedding HMIs in industrial environments.

The basics

HMIs or Human Machine Interfaces are popular pieces of software, utilized by all … Read more

Introducing Mastering Golang Programming

For the past year, I had worked really hard with Packt publishing on building an advanced video course about the Go language called “Mastering Go Programming“. Mastering Golang Programming is an extensive video course on the world of the Go language. The Go programming language is considered by many as a phenomenal disruptive technology despite it’s young age. A game changer when it comes to building powerful software products. Since it’s inception, Go had grown in popularity dramatically, becoming the TIOBE programming index 2016 language of the year winner.  

The course provides a unique combination of covering deep … Read more

Practical thoughts on industrial OPC

Industrial OPC is a vital, yet relatively small component in a SCADA system. This is because OPC is typically responsible for the software communication aspect between a piece of industrial software, and a monitoring or control device (sensors, PLCs..etc). It may not be as complex as analysis algorithms embedded in data historians , or as fancy as visuals reflected on HMI screens. However, Inspite of this, industrial OPC can never be ignored. OPC is the equivalent of those resilient nails that make a fancy piece of furniture come together.

What is OPC ?

OPC is popular because it is … Read more

Implementing UDP vs TCP in Golang

Go is known to be a very capable systems programming language. Programmers enjoy it’s simplicity, ease of deployment, and performance when writing backend services. A key feature in any backend software service is networking communications. There are numerous application level protocols by which software can communicate over a network. Underneath the great majority of these protocols lie either TCP or UDP. In this article, we’ll talk about the code involved in implementing UDP vs TCP in Golang. Let’s get started.

TCP in go

TCP’s support in Go is covered quite well in numerous articles and resources. Obviously, TCP is … Read more

Concurrency in Golang

Yesterday, I answered a question in Quora about the concurrency model in Go. Now, I feel like I want to say more!! Concurrency in Golang is one of the most powerful features in the language. Numerous folks covered the topic, ranging in their takes from very simple to overly complicated. Today, it’s my turn to give my two cents.

Concurrency in Golang is a way of thinking more than just syntax. In order to harness the power of Go , you need to first understand how Go approaches concurrent execution of code. Go relies on a concurrency model called CSP … Read more

Thoughts on Process historians

Today, I found myself wanting to talk about a SCADA related topic a little bit. What is SCADA you say? Well, you can either check this article, or just read on. SCADA is a world that I live in, where software meets temperature sensors and pressure gauges. SCADA is the software layer that sits between a human being and a bunch of devices that control and monitor operations in a factory, oil pipelines in the desert , or power generation substations… you get the idea!! Process historians are not considered SCADA systems by themselves, however they are vital companions … Read more

Cross-platform mobile development

This post is about my thoughts on C#, Xamarin and cross-platform mobile programming in general. Originally, I wanted to talk exclusively about C# and it’s significance in modern mobile programming however I couldn’t resist covering the topic from the beginning. If you are only interested in C# and Xamarin , click here.

Cross-platform mobile development

So you love technology, you enjoy your iPhone/Android/Windows device, you know how to program and you have a ground-breaking-kick-ass-never-seen-before-will-turn-the-world-upside-down idea for a mobile app, what next? Answer is simple: go make it!! But make it how? Isn’t your idea worth sharing with the whole … Read more