The empty interface in the Go programming language

One of the most hotly debated topics in the world of the Go programming language, is the lack of generics. Generics are considered a key feature in other statically typed programming languages like Java or C#. However, the makers of Go resisted the demand to add it to the language so far. A key reason why Go’s makers and developers could utilize the language in complex production software without the presence of generics, is because of the “empty interface” feature, which helped fill some of the gaps left by the lack of generics in Go. 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. 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.   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. 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. 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 ( Communicating Sequential Processes) ,  which -in computer science- is basically a model that describes interactions between concurrent systems. But since this is not a scientific paper, I will skip the formalities and jump into the practical description of what it does. 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 in almost all SCADA related project. You can put both Process historians and SCADA systems under the umbrella of industrial software. read more

URL Shortener Golang Web Service tutorial with Mongodb

Web technologies are in the heart of the software industry in this day and age. And one of the most popular approaches for web services to communicate with the outside world is the HTTP RESTful API design, which is integral in making modern software scalable and open. At the same time,  NOSQL databases are gaining more and more market share as the new data storage engines of choice for a lot of software professionals. Since Go is a very modern language, it’s a very smooth experience to combine the two technologies via Go. This article serves as a practical tutorial into how to build a Golang web service combined with the popular Mongodb NOSQL document store database. The web service does URL shortening, meaning you could use it to beautify long ugly URL addresses, by providing a shorter URL that you would like to use instead (think read more

Same page navigation in MeteorJS

We currently live in a world dominated by JavaScript. While JS might not be my most favorite language, I am practical enough to realize that ignoring it isn’t a sound approach to being an efficient software professional. Having said that, I still get the freedom to pick the JS framework that strikes my fancy the most. In my case, I like Meteor. I have been experimenting with the framework for some time now, one of the challenges that I faced was same page navigation in MeteorJS.

This article assumes some basic knowledge of MeteorJS. If you need some head start, check this quick tutorial 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 world? or is it worth only sharing with someone who owns an iPhone (assuming you do swift/objective-c) or an Android phone (Assuming the you breath Java like most of the world) ? Do you write it for one platform first then rinse and repeat every single ounce of effort for the next platform? IMO, once you start pondering these questions, you are getting really serious. And once you start getting really serious, you will either wish you have an endless supply of time and developer friends or you start researching cross-platform mobile development. For me, obviously the solution was to take a stab at cross-platform mobile development. read more