Talks

Presentations offered by Daniel Hinojosa

Machine Learning Data Pipelines

Categories: Machine Learning ML Data Data Pipelines Data Engineering Kafka Kafka Streaming Deep Learning

How do we move information realtime and connect machine learning models to make decisions on our business data? This presentation goes through machine learning and Kafka tools that would help achieve that goal.

What's new in Scala 3 "Dotty"?

Categories: Scala Scala 3 Programming Functional Programming

In the alternative JVM Language arena, Scala has come out with a new feature set under the code name "Dotty", now called Scala 3. Let’s take a look at some of the cool new stuff that we can use. This presentation will assume basic Java knowledge and no Scala knowledge is required.

Helm: Package Manager for Kubernetes and More

Categories: Kubernetes Helm Package Manager

Helm is excellent stuff. It is the package manager for Kubernetes and a way that you can package your Kubernetes YAML files and templatize them for reuse for either people in your organization or the public at large. Helm makes it super simple to deploy any major system with relative ease: find a repository, add the repository, and install your product. All Helm charts have a set of default values for everyday use cases, and it would be up to you to override the values you desire for your custom installation.

Testing Legacy Code & Avoid Mocking

Categories: Testing Legacy Refactoring Mocking

In reality, our jobs aren’t dealing with new code, but old crufty and evil code. How do we test such code, how do we get through it? How can we surgically take some of this bad code apart and make it testable.

The Java Sessions: Monitoring the JVM

Categories: Java JVM Monitoring GC Garbage Collection Instrumentation

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.

Do More with JReleaser

Categories: JReleaser Software Release

Hey. Remember that time when we used to create jar or war files and we used to just ssh into a box and deploy on a single box? Well, it was simpler but also maybe that wasn’t that great of an idea. Time has certainly moved on, and our releases have become very advanced with very technical CI/CD pipelines, docker or debian packages, multi-purpose testing, producing signatures, perform security scans, perform releases, and then when you’re done tell the whole world about it. Whew! This presentation introduces JReleaser, a release platform for Java that does a multitude of chores for you.

Personal Agility with the Pomodoro Technique

Categories: Pomodoro Technique Productivity

Time is very precious and is often threatened by phone calls, emails, co-workers, bosses, and most of all, yourself. The Pomodoro Technique reigns in unfocused time and gives your work the urgency and the attention it needs, and it’s done with a kitchen timer.

HTTP Client Deep Dive

Categories: HTTP Client Java HTTP HTTP/2

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.

In-Depth Jupyter Lab

Categories: Jupyter Lab Jupyter Machine Learning ML Data

Jupyter Lab has been a platform for Data Analysts and Data Scientists for the last few years. Still, it may expand to a more general population, including students, financial analysts, and other Scientific rigors. Running a Jupyter Lab today is just as important as running a web browser. It is an essential platform for learning, conveying information, and telling a story.

Property Based Testing on the JVM

Categories: Property Testing Testing Java JQwik

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.

TypeLevel Cats

Categories: Functional Programming FP Typelevel Typelevel Cats Monad Monoid Functor

Imagine toString, equals, and hashCode in a single class. Can you change implementations on the spot? Probably not, there may be too many dependencies on your implementation. Time to break out an adapter pattern, a utility class, or better yet, a type class! A type class is a kind of template in very static functional programming languages. Imagine a template that can read, write information as a side effect as well? Type classes are powerful.

In-Depth Jupyter Notebooks

Categories: Machine Learning ML Data Notebooks

Jupyter Notebooks has been a platform for Data Analysts and Data Scientists for the last few years but it may be expanding to a more general population including students, financial analysts, and other Scientific rigors. Running a Jupyter Notebook today is just as important as running a web browser. It is an essential platform for learning, conveying information, and telling a story.

Grokking Generics

Categories: Java JDK SDK 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

Categories: Graal VM Graal Java JVM Oracle Native

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++.

Hashicorp Vault

Categories: Vault Security Hashicorp

Hashicorp Vault stores encrypted secrets securely. You can store anything that you want into Vault including API keys, passwords, and certificates. Vault can also store dynamic secrets where it can negotiate with a cloud service on your behalf without direct interaction with your API keys. Hashicorp Vault is well thought out "bank" of information that handles storage, encryption, leasing, sealing.

In Depth Kafka Streams and KSQLDB

Categories: Kafka Kafka Streaming Java 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.

Wanna see my Canary?

Categories: Canary Canary Deployments Deployment Blue-Green Deployment Kubernetes

Canary Deployments are the last ingredient of any Continuous Delivery or Continuous Deployment rollout. A canary deployment is a deployment strategy that releases an application or service incrementally to a subset of users. All infrastructure in a target environment is updated in small phases (e.g., 2%, 25%, 75%, 100%). This control makes a canary release the lowest risk-prone compared to all other deployment strategies, like the blue-green strategy. If you need to back out of a production deployment quickly without much disruption, then canary deployments may be an excellent practice to set up.

Testing Data Layers with TestContainers

Categories: Testing Integration Testing TestContainers

In the past, testing the data layer was hard, really hard. It would include a test database, as opposed to the production which of course we didn’t want to use for testing. Maintaining any sort of consistency was a pain to do, and perhaps fell by the wayside because it was too tedious and too fragile. Then we used in-memory databases, but the only viable ones were HSQLDB or H2. The problem there though is that the SQL for the in-memory databases didn’t quite match up. Today we have Test Containers which uses a Docker Client to download a specific version of whatever database or messaging system you wish to integrate. The best part, you can test against the same version of the database or messaging system so you have higher confidence that your tests work.

Understanding JVM Futures

Categories: Java JDK SDK Futures Functional Programming

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.

Foundations of Facial Recognition

Categories: Machine Learning ML Facial Recognition

Facial Recognition whether you agree with it or not it is here to stay. Understand what the algebra is behind facial recognition, what is involved, and what kind of software there is out there.

Spinnaker and Kubernetes

Categories: Kubernetes Spinnaker Netflix

Back in 2005, when an unknown program called Hudson came onto the scene, I was pretty excited. I had used CruiseControl up to that point and was getting pretty comfortable with the notion of Continuous Integration. Hudson had terrific graphics and an intuitive UI, unlike Cruise Control with XML laden directives. I thought the future was here. Then some cracks started showing, particularly in the delivery aspect of Hudson. I had used a Tomcat plugin, but trying to get a jar, use various environments, became a juggling act. Then came Docker, and I loved it because we get to deploy an image! No more SSHing into a box and messing things up. We had immutability. Now, we have Kubernetes, a system that takes these immutable containers and monitors them, among other great features. Jenkins still has its place but as CI, Continuous Integration. In this presentation, I will demonstrate Spinnaker, a system developed by Netflix for CD, Continuous Delivery. I will demonstrate how to set up, deploy, , monitor, rollback, and scale our pods with the ease of just selecting an item on a menu.

Kafka and Streaming

Categories: Kafka Kafka Streaming Java Data Engineering

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?

Introduction to Vavr.io

Categories: Functional Programming Java FP Vavr

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

Machine Learning with Spark MLLib

Categories: Machine Learning ML Data Data Engineering Data Science

Spark has a machine learning aspect to it and it’s called Spark MLLib. We discuss an intro into machine learning, some models, then apply some of those common machine learning models.

The Java Sessions: Module System

Categories: Java JVM Modules JPMS

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.

Introduction to Kafka Connect

Categories: Kafka Kafka Connect Database Databases

This presentation we will discuss Kafka Connect. Kafka Connect is an open source project from Confluent to either take information from a data store as a Source and possibly dump information into another datastore, a Sink.

Nix: Sandbox and Reproducible Builds

Categories: Nix DevOps NixOS Functional Programming

We have gone through a lot when configuring our computers with a language, with an editor, and maybe even setting up Git. For every project, though, we may need a different set of tools. In one, you may require Java 17 with a particular version of Kotlin. Another will require an npm of a specific version. You could use something like SDKMan for Java or a node version manager for Node. The problem is that you must install it and ensure you do it correctly for every project. The global installation won’t cut it; the more complex your project dependencies, the more tedious it will get. Nix provides consistent installation of tools so that it gets right every time and for every project. It manages all project dependencies so you can consistently build your project.

Reactive Streaming with RXJava

Categories: RXJava Reactive Reactive Programming Functional Programming

ReactiveX is a set of Reactive Extensions developed by Netflix, and is developed for various programming languages, like Java, Scala, and Clojure. ReactiveX overhauls the observable design pattern to achieve reactive goals. This presentation will solely focus on the Java version of ReactiveX, RXJava.

NixOS: Sandbox and Reproducible Builds

Categories: NixOS Nix Builds Containers

We have gone through a lot when configuring our computers with a language, with an editor, and maybe even setting up Git. For every project, though, we may need a different set of tools. In one, you may require Java 17 with a particular version of Kotlin. Another will require an npm of a specific version. You could use something like SDKMan for Java or a node version manager for Node. The problem is that you must install it and ensure you do it correctly for every project. The global installation won’t cut it; the more complex your project dependencies, the more tedious it will get. Nix provides consistent installation of tools so that it gets it right every time and for every project. It manages all project dependencies so you can consistently build your project.

Getting Started with Test Driven Development in Java

Categories: Testing Refactoring TDD Test Driven Development

Test-Driven Development is a test-first practice that drives the code through tests. It is a simple practice but not an easy practice.

  1. Quickly add a test.

  2. Run all tests and see the new one fail.

  3. Make a little change.

  4. Run all tests and see them all succeed.

  5. Refactor to remove duplication.

The details are what gets you. This presentation introduces you to Test Driven Development, how to get started, what modern tools are available, and the challenges you will face.

Next Gen Testing Tools for Java

Categories: Java JVM Property Testing Testing TDD Rest Restful Mutation

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.

The Interpreter Pattern in Light of Java 21

Categories: Java Design Patterns Interpreter Pattern

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.

Kubernetes Security Concepts Parts 1 & 2

Categories: Kubernetes Security

There are multiple elements to Kubernetes where each component seems like a character in a book, pods, services, deployments, secrets, jobs, config maps, and more. In this presentation, we just focus on the security aspect of Kubernetes and the components involved. Particularly centered around RBAC and ServiceAccounts. What they are, what they do. We discuss etcd and secrets. We will also discuss other options for security in Kubernetes.

Functional Reactive Programming on the Front-End using Elm

Categories: Language Elm Programming Reactive Functional Programming

The silent and deadly competitor to React and Angular. Meet Elm. All functional and client language. Absolutely Clean.

Spark Streaming

Categories: Scala Spark Streaming

Spark Streaming is one of the few additions that are available with Spark that uses its internal architecture and creates a Streaming processing framework to process data in real-time.

The Java Sessions: Reactive API

Categories: Java Reactive Flow Flow 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