K8s Ingress Controllers - A Quick Guide

K8s Ingress Controllers: A Quick Guide

You’ve created your application in Kubernetes. You’ve got the pods up and running. And you’re ready to unveil your brilliant application. But how do your end users connect? 

The simplest way would be to create a LoadBalancer service and attach it to the service that needs to be exposed externally.

Another option would be to set up a  NodePort service and then set up a LoadBalancer in front of it. In the LoadBalancer, you would manually create a routing rule to forward all your traffic to the NodePort.

But what if you have more than one endpoint to expose? If you went the first route, you would end up having to pay for all the new LoadBalancers. If you took the second option, you need to start maintaining all the new routing rules manually.

Or, you could create an ingress controller. 

(more…)
Native or Cross-Platform Development? Which Is Best When?

Native or Cross-Platform: What’s Best for Your Next App?

Whether to opt for native development or cross-platform is a question as old as the major mobile platforms themselves. Yet it continues to vex clients on the verge of their next app project even in 2023.

Native app development leverages development tools provided by the platform vendors themselves (Objective C and Swift for iOS, Java and Kotlin for Android) and requires creating and maintaining separate code bases for both platforms. From the quest for a single code base emerged hybrid app development (web apps with native elements) and cross-platform development (apps with with shareable and reusable code).

With tools like Flutter, React Native, and Xamarin catapulting cross-platform development to new heights (read: shorter learning cycle, significant cost savings, wide community support), product owners are genuinely puzzled. Should they go cross-platform or native?

Let’s find out the answers today.

(more…)
BigQuery: Strategies for Cost Optimization

BigQuery: Strategies for Cost Optimization

BigQuery is a serverless, highly scalable storage and processing solution fully managed by Google. It offers a lot of flexibility in computation and a variety of technology and pricing models. However, to leverage this platform and effectively utilize the infrastructure, adequate planning, monitoring, and optimization are required.

(more…)
Intelligent Invoice Processing Explained in Two Parts

Building an Intelligent Invoice Processing Solution: Part 1

Manual data entry presents a serious bottleneck for organizations that have a vast number of documents to process. With the coming of age of intelligent data extraction and document processing technologies (computer vision, natural language processing, machine learning, robotic process automation, etc.), they can now avail solutions that halve the labor and double the speed.

There are two major steps involved in intelligent invoice processing: text extraction from invoices and information extraction from the extracted text. We will cover these steps in a two-part series based on the intelligent invoice processing solution we built for a client.

(more…)
Node Classification Using GNN: A Case Study

Node Classification Using GNN: A Case Study

Graph Neural Networks (GNN) have proven their capability in traffic forecasting, recommendation systems, drug discovery, etc., with their ability to learn from graph representations. What I’m going to do here is take you through the working of a simple Graph Neural Network and show you how we can build a GNN in PyTorch to solve the famous Zachary Karate Club node classification problem.

(more…)
Best Practices for Building Docker Images

Best Practices for Building Docker Images

Well-made Docker images are the foundation for deploying secure and scalable Docker-based applications. Building quality images also improves image re-usability, readability, and maintainability. Here are some best practices you should follow while building Docker images.

(more…)
Device Authentication and Identity of Things

Device Authentication and Identity of Things

An ecosystem of Internet-tethered devices underpins many of the services the world relies on today. But this connectivity comes with a major caveat in that services can be brought to naught with a simple security breach. The largest ransomware attack on a major U.S. pipeline last year involved a single password leak. The breach was grave enough to force the pipeline company to temporarily halt its operations, sending fuel prices soaring for weeks.

Statista projects the total installed base of IoT-connected devices to reach 30.9 billion by 2025. Depending on the use case, a security breach can cause major disruptions or even disasters. So in the Internet of Things era, it is crucial to ensure that only trustworthy devices are connected to the Internet. This is where device authentication comes into the picture.

(more…)
Exploring the New Architecture for Android Apps

Exploring the New Architecture for Android Apps

The new architecture recommendation from Google is changing how we build Android apps. The architecture separates UI and data into distinct layers, with an optional “domain” layer in between. It doesn’t have a specific name like MVVM and is instead referred to as the “new architecture” or “layered architecture.” 

(more…)
Creating a High-Performance Image Resizer Proxy as a Dockerized Go Microservice

Creating a High-Performance Image Resizer Proxy as a Dockerized Go Microservice

While working on applications that process a large number of images, we often come across the requirement to resize images for different resolutions. An image generated by a typical 12MP mobile phone camera can be 5MB-12MB depending on the quality of the image. Once uploaded, the image must be optimized for different devices. As you know, image resizing is a complex mathematical process. The performance and quality of the optimized image really depend on the efficiency of the algorithms used. 

Let me walk you through a high-performance solution for image resizing. We will implement the solution using libvips, a fast open-source image processing library, along with Golang and expose the resize functionality via a proxy server. With even 20% resource usage improvement per image, it can make a world of difference when scaling up to millions.

(more…)