Understanding Kubernetes Interfaces: CRI, CNI, and CSI

Kubernetes is designed to support modular cloud-native applications from the ground up, so it is not surprising to find the platform to be equally modular and flexible. Kubernetes incorporates plugins, add-ons, services, and interfaces to extend the core functionalities of the platform. Kube’s integral configuration is how you can make changes and customize your environment, but customization goes beyond changing flags and local configuration files.

Extensions are defined as components that integrate seamlessly with the rest of the environment, offering native-like features and extending the commands available to cluster administrators. Extensions can also be used to add support for custom (and new) hardware.

All Things Java 8 [Tutorials]

Java 8
No matter what version of the JDK we are on, Java 8 is not going anywhere.

Java 8 introduced a new era of Java. Everything from lambda expressions and functional programming to Streams and collections — DZone was there to document it all.

So whether you're migrating over to Java 9 or Java 11, or maybe even Java 13, Java 8 concepts and features are still very much alive in the JDK. And understanding these core concepts can help tremendously when it's time to move beyond Java 8.

Introduction to the Hexagonal Architecture in Java

To start with, the hexagonal architecture is nothing but a design pattern. Every design pattern solves some problem, right? That is why it originally came into existence. So, what more does hexagonal architecture bring to the table?

Well, a very common problem is encountered whenever an application tries to interact due to huge dependencies over factors such as UI, the testing environment, DBs, external APIs, and so on.

When to Use Java 8 Default Methods in Interfaces

One of the Oracle’s articles describes in great detail when Default methods should be used:

The section Interfaces describes an example that involves manufacturers of computer-controlled cars who publish industry-standard interfaces that describe which methods can be invoked to operate their cars. What if those computer-controlled car manufacturers add new functionality, such as flight, to their cars? These manufacturers would need to specify new methods to enable other companies (such as electronic guidance instrument manufacturers) to adapt their software to flying cars. Where would these car manufacturers declare these new flight-related methods? If they add them to their original interfaces, then programmers who have implemented those interfaces would have to rewrite their implementations. If they add them as static methods, then programmers would regard them as utility methods, not as essential, core methods.