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 http://tinyurl.com).

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

Never underestimate the power of art

According to wikipedia, art is an outlet for human expression, a vessel for our creativity. A very attractive definition indeed. But what value does art provide? Why do we care about outlets for human expression? How does it apply to our day to day lives?

Way back when, in my college days, I was deeply puzzled about the usefulness of any study that doesn’t yield immediate measurable value. Let’s say you studied medicine, shortly after you graduate you are treating patients, helping people get better, making families happier while making money in the process. How about engineering? You finish school today, tomorrow you are designing cities , building robots , crafting useful software , taking over the world one achievement at a time while yet again making money in the process.

read more

How to build a Modbus driver in Go?

This article serves as a practical guide into how to build a Modbus driver. I use the Go (Golang) programming language because I like it . However, the principles outlined should apply to any stack.

I happen to be a software engineer who works in SCADA. What does that mean?  it means that a lot of my days involve making various pieces of complex software work in harmony with industrial devices like one big happy family. In order to make software talk to industrial devices, we use protocols that both the devices and the software can understand. Some protocols are fairly complex and some are fairly easy, some are frustrating and some are fun. Amongst them Modbus is the most popular.

read more

A Class Factory in Golang (Google Go)

Do you know what a class factory is and why is it useful?  Ever considered implementing a class factory in Golang (Google Go) even though Go is not considered fully object oriented in nature? Are you curious about some awesome features in Go other than it’s impressive concurrency capabilities? If any of the these questions interests you, then reading on may be worth your while. This article covers implementing the factory design pattern in Go.

If that’s not your first time visiting my site, then you probably know by now that the Go programming language is a personal favorite of mine and here’s why. I love software design and I love Go. Because I love software design, I had to learn about design patterns. And one of the most popular design patterns is the concept of factory design patterns. In the OOP world, that translates to class factories. To make diving through the tutorial easier, here are the links to the main sections:

read more

A dive into the industrial software industry

This article serves to provide a decent overview of the industrial software industry. This industry is the gate to the intelligent solutions that drive the success of industrial operations. Let’s start the journey by covering SCADA which is the main component of any industrial software.

What is scada?

A SCADA (Supervisory Control And Data Acquisition) system simply refers to the layers of software and infrastructure that sit between a digital screen, and any control or measuring device. SCADA is used to issue control commands to remote devices like valves or pumps, read values from those devices, and analyze device data when needed. SCADA systems can be small in order to manage field devices that are in close proximity inside a single facility , or expand to handle devices that are spread across vast geographical areas (like sensors on oil pipes). SCADA exists almost everywhere in this day and age.

read more