Java

Trainings

Advanced Java

Advanced Java is for the programmer that needs to know all the latest and greatest advancements in Java. This training includes difficult topics like generics, I/O, Networking, and Security.

Maven

Maven is the de-facto build-tool in Java and Spring. Gradle comes in at a close second. It was one of the first, if not the first to make use of downloaded dependencies and calculating hashes for verification. It manages an entire development lifecycle, and enjoys a wide array of plugins from the community.

Design Patterns in Java

Design Patterns: Elements of Reusable Object-Oriented Software was and still is a seminal book. It defined many of the patterns that we see over and over again in our development. Design Patterns give us a vocabulary to communicate design; Adapter, Bridge, Flyweight, Factory, and more. Most of these patterns are still used today, although some have taken on a slightly different form due to the advent of lambdas and functional programming

Ports and Adapters in Java

Build clarity and confidence in your architecture with “Ports and Adapters with Java” coaching. Each coaching session starts with a presentation on what Ports and Adapters are and how it is constructed. Then, we will build an application from scratch to solidify the fundamentals and demonstrate where everything fits.

Intermediate Java

Intermediate Java assumes knowledge of some of the basics and continues with an understanding of harder concepts including Collection performance, DateTimeAPI, Database Programming, and the Java Module System.

Beginning Java

Beginning Java introduces the student to the fundamentals of Java. We discuss the tools. How to install. What is a jar file, and what is a classpath. We then go through not only the standards but modern conventions. We discuss Object-Oriented Programming, Methods, Classes.

Talks

Introduction to Vavr.io

Java 8 is pretty great, but mix in JavaSlang (now called Vavr) and get ready for some functional programming excitement.

The Java Sessions: Virtual Threads, Structured Concurrency, and Scoped Values

There is a new way of Threading, which means it is time to prepare. Project Loom has introduced Java Virtual Threads, which is now available in Java 21. Virtual Threads are small Threads meant to perform quick operations with the need to procure long-running OS threads, which can prove expensive. In this presentation, we will learn how to use these threads, what does it mean in relationship with the rest of the Java API, and what does it mean for third-party libraries.

Property Based Testing on the JVM

Property Based testing is letting the computer determine aggressive inputs for your subjects. When the computer provides edge cases, it highlights some of the typical problems that may still show up, so that you, the programmer, may have not thought about.

JDK 22 Preview Features To Get Excited About

Java advances quickly. It is incredible how much incremental change accumulates over time. JDK 17 is now three years old, and we are at JDK 22 as of 2024. In this session, I will take some select JEPs (Java Enhancement Process) and demonstrate what they are and their use case. Then you can be ahead of the curve, and give you all the information you need to sell and demand the next generation Java for your work or opensource initiative.

Next Gen Testing Tools for Java

We have been using JUnit and doing TDD for years, but you can take testing further. In this session, we will discuss some tools you absolutely need for testing your code outside of the regular stack you currently use.

Kafka and Streaming

Kafka has captured mindshare in the data records streaming market, and in this presentation, we knock on its door and see what lies behind it. What is the draw? What makes it an attractive addition? How does it compare to Message Queues and other message streaming services?

HTTP Client Deep Dive

JDK 11 saw the advent of a new HTTP Client and important new API for calling content on remote RESTful endpoints. This presentation will just focus on the HTTP Client are how to maximize its use.

The Interpreter Pattern in Light of Modern Java

A redux of the classic Gang of Four pattern, "The Interpreter Pattern." This pattern, once relegated as the useless one, has proven more than useless. With the advent of Java 21, it is now a pattern that demands focus in light of sealed classes and pattern matching.

The Java Sessions: Monitoring the JVM

One of the other essential tasks regarding the JVM is monitoring. How much stack and heap is your JVM using? What CPU saturation are you using? How many threads are being used, and what kind of threads are being used? What is your garbage collector looking like? How can I tap into the JVM and monitor other aspects of the JVM? All these questions are essential to ask since often administrators of your Java application will need to know these values to deploy and monitor your application.

Grokking Generics

For those still grappling with Generics? This will be an attempt to clear the air about generics. What are wildcards? What is extends? What is super? What is covariance? What is contravariance? What is invariance? What is erasure? Why and when do I need this?

Graal The Magnificent

Graal is a VM and an awesome VM at that. Able to run a variety of languages and fast. The execution times can be impressive too. This VM can run anything, JavaScript, Python 3, Ruby, R, JVM-based languages like Java, Scala, Kotlin, and LLVM-based languages such as C and C++.

JDK 22 Features To Get Excited About

Java advances quickly. It is incredible how much incremental change accumulates over time. JDK 17 is now three years old, and we are at JDK 22 as of 2024. In this session, I will take some select JEPs (Java Enhancement Process) and demonstrate what they are and their use case. Then you can be ahead of the curve, and give you all the information you need to sell and demand the next generation Java for your work or opensource initiative.

The Java Sessions: Module System

Hopefully, we started moving on from Java 8. One of the great benefits of doing so, and there are many, is a module system. It is a controversial topic indeed, but I am hoping in this presentation to make some solid arguments that it is an essential part of our development.

The Java Sessions: Reactive API

Many have already seen what Reactive Streaming can do: RXJava, Akka Streams, Project Reactor. Now reactive streaming is a part of the canonical package for Java and now we can handle asynchronous pipelines with boundaries and make better well thought out applications

Understanding JVM Futures

Starting with JDK 5, we have had Futures, and they mostly went ignored. Now with concurrency and reactive technology in demand, it is essential that we understand what futures are, and how to handle them and make use of their power in asynchronous systems.

In Depth Kafka Streams and KSQLDB

Kafka is more than just a messaging pub/sub with storage. It goes beyond that and with technology from Confluent open source it has become a full-fledged data ETL and data streaming ecosystem.

Articles

Virtual Threads and Structured Concurrency

Virtual Threads and Structured Concurrency are complementary features from Project Loom that simplify concurrency in Java. Virtual Threads** make concurrency cheap and scalable. They allow a “thread-per-task” style without exhausting OS resources. Structured Concurrency makes concurrency safe and predictable. It groups concurrent tasks into a scope so their lifetimes, errors, and cancellations are managed together.