<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DataEngineering on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/dataengineering/</link><description>Recent content in DataEngineering on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 02 Jul 2026 18:17:18 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/dataengineering/index.xml" rel="self" type="application/rss+xml"/><item><title>BoxLang 1.14.0 : Navigate Anything: JSONPath Comes to BoxLang's DataNavigator</title><link>https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</link><pubDate>Thu, 02 Jul 2026 18:17:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/BoxLang-release-1.14.0-3-700x394.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Every application eventually has to deal with deeply nested data. JSON API responses with payloads six levels deep. Configuration files where the key you need is buried inside an array of objects, one of which has a &lt;code&gt;null&lt;/code&gt; for the field you thought was required. Module metadata structures that nobody wrote a schema for. Runtime introspection data shaped like a tree that grew without a plan.&lt;/p&gt;
&lt;p&gt;BoxLang introduced DataNavigators in version 1 so you can use &lt;code&gt;dataNavigate()&lt;/code&gt;, call &lt;code&gt;.from()&lt;/code&gt; to scope down, chain your &lt;code&gt;.get()&lt;/code&gt; calls, provide defaults everywhere. Clean and safe. But even with the fluent API, extracting a specific slice of a complex payload still required multiple navigator hops, or a loop, or defensive key-exists checks stacked three levels deep.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #15</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-15/</link><pubDate>Fri, 20 Mar 2026 07:56:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-15/</guid><description>&lt;p&gt;Over the past two weeks, the field of artificial intelligence has continued its remarkable pace of advancement. As AI becomes increasingly woven into the fabric of daily life, shaping how we work, communicate, and make decisions, it is both timely and valuable to step back and understand the broader trajectory of this technology. Whether the developments around us feel promising or challenging, one truth remains clear: AI is not simply leaving. It is here to stay, and understanding its evolution is essential from many perspectives.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #11</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-11/</link><pubDate>Tue, 09 Dec 2025 16:12:01 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-11/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt;ourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;T&lt;/strong&gt;his newsletter explores the evolution of agentic AI systems, provides valuable insights into the Chain-of-Thought (CoT) approach, Vibe coding, and discusses the pattern-matching capabilities of LLMs. The newsletter features an insightful interview with Stuart J. Russell, known for his significant contributions to the AI field. Even more exciting is the published paper by Apple researchers titled &amp;lsquo;The Illusion of Thinking&amp;hellip;&amp;rsquo; and several immediate reactions to the authors&amp;rsquo; conclusions, which allow newsletter readers to observe current research challenges and scientific community responses. This provides readers with a vital picture of the state-of-the-art in AI research.&lt;/p&gt;</description></item><item><title>JC-AI Newsletter #10</title><link>https://foojayio.github.io/website/today/jc-ai-newsletter-10/</link><pubDate>Wed, 26 Nov 2025 18:39:40 +0000</pubDate><guid>https://foojayio.github.io/website/today/jc-ai-newsletter-10/</guid><description>&lt;p&gt;&lt;strong&gt;F&lt;/strong&gt;ourteen days have passed, and it is time to present a fresh collection of readings that could influence developments in the field of artificial intelligence.&lt;/p&gt;
&lt;p&gt;This newsletter focuses on examining how agentic AI systems improve accuracy, tutorials on agentic system architecture, and importnat security challenges arising from increased not only from agentic AI systems adoption. This edition of the AI newsletter includes compelling discussions and interviews about the future of AI and approaches.&lt;/p&gt;</description></item><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 1</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</link><pubDate>Tue, 27 May 2025 14:42:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/</guid><description>&lt;p&gt;Retrieval Augmented Generation (RAG) may sound complex, but it accurately represents the process of the system. RAG is a method that enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources.&lt;/p&gt;
&lt;p&gt;Each term represents a piece of the puzzle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retrieval - data retrieved from some external source outside the LLM (most often a database, but can include files, webpages, etc)&lt;/li&gt;
&lt;li&gt;Augmented - &amp;ldquo;augmenting&amp;rdquo; (or adding to) an LLM&amp;rsquo;s training data. This could include recent or private information that it did not have access to during its training period. Most often, this is done by adding the data to the prompt (or input) to the LLM.&lt;/li&gt;
&lt;li&gt;Generation - this is where LLMs are exceptional. They generate a response (text, image, video, etc) that is similar to the data being provided in the input. This is generated from probabilities, so cannot guarantee 100% consistency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of relying solely on the model&amp;rsquo;s internal training data, RAG retrieves relevant information from databases or document collections to ground its responses in factual and up-to-date content. This approach not only improves the accuracy and reliability of the generated outputs but also allows the system to adapt to specific contexts or domains, making it a powerful tool for many personal and professional applications.&lt;/p&gt;</description></item><item><title>Event-Driven Architecture and Change Data Capture Made Easy</title><link>https://foojayio.github.io/website/today/event-driven-architecture-and-change-data-capture-made-easy/</link><pubDate>Tue, 18 Feb 2025 16:44:14 +0000</pubDate><guid>https://foojayio.github.io/website/today/event-driven-architecture-and-change-data-capture-made-easy/</guid><description>&lt;p&gt;Hello again! In this article (Part 1), we will discuss two common ways to build modern &lt;a href="https://mezocode.com/microservice-journey-part-2-design-principles-for-well-crafted-architecture/" target="_blank" rel="noopener noreferrer"&gt;software systems&lt;/a&gt;
: &lt;strong&gt;Event-Driven Architecture (EDA) and Change Data Capture (CDC)&lt;/strong&gt;. They serve different purposes but can work well together in some situations.&lt;/p&gt;
&lt;p&gt;we&amp;rsquo;ll explain &lt;strong&gt;EDA&lt;/strong&gt; and &lt;strong&gt;CDC&lt;/strong&gt;, discuss their use cases, and explain when to use them and when not to. Using plain language and relatable examples, we&amp;rsquo;ll also explore how they work together.&lt;/p&gt;</description></item><item><title>Foojay Podcast #56: Vectors in Java Code, Databases, and LLMs</title><link>https://foojayio.github.io/website/today/foojay-podcast-56/</link><pubDate>Mon, 08 Jul 2024 07:33:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/foojay-podcast-56/</guid><description>&lt;p&gt;In this Foojay podcast, we enter the world of mathematics by discussing Vectors and how they are crucial for AI and machine learning.&lt;/p&gt;
&lt;p&gt;As ChatGPT explains: &lt;strong&gt;&amp;ldquo;A Vector is a mathematical structure that holds numerical values. Vectors are fundamental to the field of Artificial Intelligence, as they allow mathematical operations to be performed efficiently and form the basis of many machine learning algorithms.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OK, but&amp;hellip; how are these vectors crucial for the whole Artificial Intelligence evolution?&lt;/p&gt;</description></item><item><title>Writing a Data Orchestrator in Java</title><link>https://foojayio.github.io/website/today/writing-a-data-orchestrator-in-java/</link><pubDate>Thu, 02 May 2024 19:43:32 +0000</pubDate><guid>https://foojayio.github.io/website/today/writing-a-data-orchestrator-in-java/</guid><description>&lt;p&gt;&lt;strong&gt;A data orchestrator is a platform to schedule, organize, and monitor data-oriented workflows. A workflow is a set of tasks, most data orchestrators come with built-in tasks for a wide range of technologies and provide support for custom processing via a scripting language. A data orchestrator can have multiple types of triggers to start a workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Most Data orchestrators are written in Python.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Most Data orchestrators mandate that &lt;strong&gt;you&lt;/strong&gt; write Python code.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Managing Data Residency: The Demo</title><link>https://foojayio.github.io/website/today/managing-data-residency-the-demo/</link><pubDate>Mon, 29 May 2023 07:33:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-data-residency-the-demo/</guid><description>&lt;p&gt;I explained the concepts and theory behind Data Residency in a &lt;a href="https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/"&gt;previous post&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s time to get our hands dirty and implement it in a simple demo.&lt;/p&gt;
&lt;h2 id="h2-0-the-sample-architecture"&gt;The sample architecture&lt;/h2&gt;
&lt;p&gt;In the last section of the previous post, I proposed a sample architecture where location-based routing happened at two different stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The API Gateway checks for an existing &lt;code&gt;X-Country&lt;/code&gt; header. Depending on its value, it forwards the request to the computed upstream; If no value is found or no value matches, it forwards it to a default upstream.&lt;/li&gt;
&lt;li&gt;The application uses &lt;a href="https://shardingsphere.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache Shardingsphre&lt;/a&gt;
 to route again depending on the data. If the value computed by the API Gateway is correct, the flow stays &amp;ldquo;in its lane&amp;rdquo;; if not, it&amp;rsquo;s routed to the correct database, but with a performance penalty as it&amp;rsquo;s outside its lane.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I simplified some aspects:&lt;/p&gt;</description></item><item><title>Managing Data Residency: Concepts &amp; Theory</title><link>https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/</link><pubDate>Tue, 16 May 2023 09:18:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/managing-data-residency-concepts-theory/</guid><description>&lt;p&gt;Cloud computing has opened a Pandora&amp;rsquo;s Box of many original issues compared to sound old on-premise systems. I believe that chief among them is &lt;strong&gt;Data Residency&lt;/strong&gt;, or Data Location.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Data localization or data residency law requires data about a nation&amp;rsquo;s citizens or residents to be collected, processed, and/or stored inside the country, often before being transferred internationally. Such data is usually transferred only after meeting local privacy or data protection laws, such as giving the user notice of how the information will be used and obtaining their consent.&lt;/p&gt;</description></item><item><title>Ingesting Data from Kafka into the QuestDB time-series database</title><link>https://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</link><pubDate>Tue, 28 Mar 2023 09:38:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</guid><description>&lt;p&gt;If you are working on a project with fast or streaming data, chances are Apache Kafka is already &lt;a href="https://kafka.apache.org/powered-by#:~:text=Today%2C%20Kafka%20is%20used%20by,80%25%20of%20the%20Fortune%20100." target="_blank" rel="noopener noreferrer"&gt;part of your pipeline&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;But if you want to analyse your data, you will need to ingest from Kafka into some destination.&lt;/p&gt;
&lt;p&gt;For time-series data, QuestDB can be an excellent choice.&lt;/p&gt;
&lt;p&gt;For those of you who are not yet familiar with &lt;a href="https://github.com/questdb/questdb" title="QuestDB" target="_blank" rel="noopener noreferrer"&gt;QuestDB&lt;/a&gt;
, it is an Apache 2.0 licensed database designed for high throughput ingestion and fast SQL queries.&lt;/p&gt;</description></item><item><title>Structured Error Messages for HTTP APIs</title><link>https://foojayio.github.io/website/today/structured-error-messages-http-apis/</link><pubDate>Tue, 01 Nov 2022 11:01:18 +0000</pubDate><guid>https://foojayio.github.io/website/today/structured-error-messages-http-apis/</guid><description>&lt;p&gt;Ever since I started to work on the &lt;a href="https://apisix.apache.org/" target="_blank" rel="noopener noreferrer"&gt;Apache APISIX&lt;/a&gt;
 project, I&amp;rsquo;ve been trying to improve my knowledge and understanding of REST RESTful HTTP APIs.&lt;/p&gt;
&lt;p&gt;For this, I&amp;rsquo;m reading and watching the following sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Books. At the moment, I&amp;rsquo;m finishing &lt;a href="https://www.manning.com/books/api-design-patterns" target="_blank" rel="noopener noreferrer"&gt;API Design Patterns&lt;/a&gt;
. Expect a review soon.&lt;/li&gt;
&lt;li&gt;YouTube. I&amp;rsquo;d recommend &lt;a href="https://www.youtube.com/ErikWilde" target="_blank" rel="noopener noreferrer"&gt;ErikWilde&amp;rsquo; channel&lt;/a&gt;
. While some videos are better than others, they all focus on APIs.&lt;/li&gt;
&lt;li&gt;s. Most RFCs are not about APIs, but a friendly person compiled a list of the &lt;a href="https://standards.rest/" target="_blank" rel="noopener noreferrer"&gt;ones who are&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, I&amp;rsquo;d like to introduce the &amp;ldquo;Problem Details for HTTP APIs&amp;rdquo; RFC, &lt;em&gt;aka&lt;/em&gt; , &lt;a href="https://www.rfc-editor.org/rfc/rfc7807" target="_blank" rel="noopener noreferrer"&gt;RFC 7807&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Storing 1TB in Virtual Memory on a 128GB Machine</title><link>https://foojayio.github.io/website/today/chronicle-queue-storing-1tb-in-virtual-memory-on-a-128gb-machine/</link><pubDate>Tue, 27 Sep 2022 09:10:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/chronicle-queue-storing-1tb-in-virtual-memory-on-a-128gb-machine/</guid><description>&lt;p&gt;If you use a standard JVM like the Oracle JVM or the OpenJDK, you might find that as the heap size grows the performance of your JVM can drop as GC pause time escalates.&lt;/p&gt;
&lt;p&gt;This tends to be a problem around 32 GB of heap, but it often depends on the application at which point the size of your heap becomes a problem.&lt;/p&gt;
&lt;p&gt;One way around this is to use an always concurrent collector such as &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;
 which is designed to both scale to much larger heap sizes and even reduces the GC pause times for smaller heap consistently.&lt;/p&gt;</description></item><item><title>MicroStream - Part 5: Caching, Integrations and Clustering</title><link>https://foojayio.github.io/website/today/microstream-part-5-caching-integrations-and-clustering/</link><pubDate>Wed, 06 Jul 2022 07:11:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-5-caching-integrations-and-clustering/</guid><description>&lt;p&gt;&lt;strong&gt;In this last article of the series, we cover a few other MicroStream features: caching, clustering, and the integrations into other frameworks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have now covered three main aspects of MicroStream:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have seen how you can &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;configure the StorageManager&lt;/a&gt;
 to define where data is stored.&lt;/li&gt;
&lt;li&gt;We have discussed the &lt;a href="https://foojayio.github.io/website/today/microstream-part-3-storing-data/"&gt;strategy&lt;/a&gt;
 that you should follow to make sure the changes are also reflected in the storage so that we do not lose data.&lt;/li&gt;
&lt;li&gt;We described the &lt;a href="https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/"&gt;serialisation framework of MicroStream&lt;/a&gt;
 that stores the objects in a binary format so that it survives a process restart.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this last article of the series, we cover a few other features of MicroStream: caching, integrations into other products, and we discuss a major upcoming feature.&lt;/p&gt;</description></item><item><title>MicroStream Next-Generation Serialisation Engine</title><link>https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/</link><pubDate>Wed, 29 Jun 2022 08:07:20 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-4-serialisation-engine/</guid><description>&lt;p&gt;&lt;strong&gt;In this fourth part we go deeper into the Serialisation engine that is within MicroStream to store the Object graph in a binary format.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the previous articles (&lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/"&gt;part 1&lt;/a&gt;
, &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;part 2&lt;/a&gt;
 and &lt;a href="https://foojayio.github.io/website/today/microstream-part-3-storing-data/"&gt;part 3&lt;/a&gt;
), we have already mentioned that MicroStream stores Java instances in storage in a binary way with a new, from the ground up created, serialisation framework.&lt;/p&gt;
&lt;p&gt;In this article, we go a bit more in detail about the next generation Java serialisation that we have built to achieve the MicroStream Java Object database and how you can use it outside the functionality of storing the root object that makes up your database.&lt;/p&gt;</description></item><item><title>MicroStream: How to store your data?</title><link>https://foojayio.github.io/website/today/microstream-part-3-storing-data/</link><pubDate>Wed, 22 Jun 2022 11:10:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-3-storing-data/</guid><description>&lt;p&gt;&lt;strong&gt;In the third article of the MicroStream series, we go into the details what you need to do so that data is stored externally to survive the process restart.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the previous articles in this series, we introduced the &lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/"&gt;main features of the framework&lt;/a&gt;
 and how you can &lt;a href="https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/"&gt;configure the &lt;em&gt;StorageManager&lt;/em&gt;&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Java instances in memory are your database but the &lt;em&gt;StorageManager&lt;/em&gt; makes sure that the data are persisted so that they are read the next time the runtime is started again.&lt;/p&gt;</description></item><item><title>MicroStream: Configure the StorageManager</title><link>https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/</link><pubDate>Wed, 15 Jun 2022 08:04:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-2-configure-the-storage-manager/</guid><description>&lt;p&gt;&lt;strong&gt;In this second article in the series, we cover how to get started configuring the StorageManager of MicroStream!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As we have discussed in the &lt;a href="https://foojayio.github.io/website/today/microstream-part-1-what-is-it/" title="introduction article"&gt;introduction article&lt;/a&gt;
 of this series, MicroStream provides you with a solution to use Java instances in memory as your database.&lt;/p&gt;
&lt;p&gt;You can access the data through getters, the Stream API, or any other method provided on the Java Objects.&lt;/p&gt;
&lt;p&gt;This means ultrafast, no mapping required, and no external system for your data.&lt;/p&gt;</description></item><item><title>MicroStream: High-Performance Java-Native-Persistence framework</title><link>https://foojayio.github.io/website/today/microstream-part-1-what-is-it/</link><pubDate>Mon, 06 Jun 2022 08:03:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/microstream-part-1-what-is-it/</guid><description>&lt;p&gt;Within every application, data plays a very important role.&lt;/p&gt;
&lt;p&gt;In every industry, you have data, such as customer or product information, analysis results, patient data, or account data is a vital part of the business and the applications that support your business processes.&lt;/p&gt;
&lt;p&gt;Data must be in memory to be processed by your application, but must be stored outside of it because the application&amp;rsquo;s memory is temporary.&lt;/p&gt;
&lt;p&gt;Information is lost when the process ends unless we have stored it somewhere else in a sustainable way.&lt;/p&gt;</description></item></channel></rss>