<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Graph on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/category/graph/</link><description>Recent content in Graph on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 11 Jun 2025 07:35:51 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/category/graph/index.xml" rel="self" type="application/rss+xml"/><item><title>Intro to RAG: Foundations of Retrieval Augmented Generation, part 2</title><link>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</link><pubDate>Tue, 10 Jun 2025 21:54:49 +0000</pubDate><guid>https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-2/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/intro-to-rag-foundations-of-retrieval-augmented-generation-part-1/"&gt;the last post&lt;/a&gt;
, we discussed the basics of Retrieval Augmented Generation (RAG) and how it enhances the capabilities of Large Language Models (LLMs) by integrating them with external knowledge sources. We also introduced the concept of vector embeddings and their role in semantic search.&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;ll dive deeper into the different layers of RAG, including vector RAG, graph RAG, and agents. We&amp;rsquo;ll explore how these layers can be combined to create more powerful and effective AI systems.&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep39): Why embedding models should match + Advice for starting a blog</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</link><pubDate>Wed, 16 Apr 2025 05:35:04 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep39-why-embedding-models-should-match-advice-for-starting-a-blog/</guid><description>&lt;p&gt;This is episode 39 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks podcast&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m at a conference this week presenting on a variety of different topics, but I stopped for just a few minutes to document some recent learnings while I was preparing the code projects for this week&amp;rsquo;s sessions.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll chat about a hands-on experience that helped me understand why embedding models for vectors and search should actually match. Then I came across an article with advice for creating a blog that outlines a lot of the practices I myself follow when I write tech blogs. I hope you enjoy it as well.&lt;/p&gt;</description></item><item><title>Breaktime Tech Talks (Ep37): Vector Database Frustration + Microsoft LazyGraphRAG</title><link>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</link><pubDate>Wed, 19 Mar 2025 12:54:36 +0000</pubDate><guid>https://foojayio.github.io/website/today/breaktime-tech-talks-ep37-vector-database-frustration-microsoft-lazygraphrag/</guid><description>&lt;blockquote&gt;
&lt;p&gt;This is episode 37 of the &lt;a href="https://www.youtube.com/playlist?list=PLzZ7iUdr2mwS6qexoz9dsI0NfnU614p1w" target="_blank" rel="noopener noreferrer"&gt;Breaktime Tech Talks&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hv-FtjIHg_I?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;You are listening to the Breaktime Tech Talks podcast, a bite-sized tech podcast for busy developers, where we&amp;rsquo;ll briefly cover technical topics, new snippets, and more in short time blocks. I&amp;rsquo;m your host, Jennifer Reif, an avid developer and problem solver with special interest in data, learning, and all things technology.&lt;/p&gt;</description></item><item><title>Spring Data Neo4j: How to update an entity</title><link>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</link><pubDate>Wed, 05 Feb 2025 18:58:12 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-data-neo4j-how-to-update-an-entity/</guid><description>&lt;p&gt;&lt;strong&gt;After working on a new &lt;a href="https://graphacademy.neo4j.com/courses/app-spring-data/" target="_blank" rel="noopener noreferrer"&gt;online Spring Data Neo4j course&lt;/a&gt;
, I learned a couple more things about updating an entity.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The course required a different set of scenarios than outlined in my &lt;a href="https://jmhreif.com/blog/2023/sdn-cypher-update-entity/" target="_blank" rel="noopener noreferrer"&gt;previous SDN update blog post&lt;/a&gt;
, so I wanted to cover those scenarios, as well.&lt;/p&gt;
&lt;h2 id="_spring_save_method"&gt;Spring save() method&lt;/h2&gt;
&lt;p&gt;First up is the out-of-the-box &lt;code&gt;save()&lt;/code&gt; method that is provided by Spring as a default. This method takes an input of the entity object you want to save to the database.&lt;/p&gt;</description></item><item><title>Gear Up for NODES 2024: What to Know</title><link>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</link><pubDate>Thu, 03 Oct 2024 17:00:46 +0000</pubDate><guid>https://foojayio.github.io/website/today/gear-up-for-nodes-2024-what-to-know/</guid><description>&lt;h3 id="h3-0-nodes-is-a-free-virtual-conference-run-by-neo4j-for-developers-data-scientists-and-other-technical-roles-who-want-to-learn-more-about-graph-databases-and-how-they-can-be-used-to-solve-complex-problems-join-us-online-november-7"&gt;NODES is a free, virtual conference run by Neo4j for developers, data scientists, and other technical roles who want to learn more about graph databases and how they can be used to solve complex problems. Join us online November 7!&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The NODES 2024 conference is approaching fast, and we have a lot of exciting activities, including talks, workshops, and more. Here&amp;rsquo;s what you need to know to get ready for NODES 2024.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Press the Easy Button: Organize a Virtual Conference Schedule with a Graph Database</title><link>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</link><pubDate>Tue, 10 Sep 2024 06:17:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/press-the-easy-button-organize-a-virtual-conference-schedule-with-a-graph-database/</guid><description>&lt;p&gt;&lt;strong&gt;Putting together a conference schedule for NODES 2024 (one of my favorite events of the year) is a massive undertaking, but my colleague and I used technologies and tools at our disposal to make this process a little more efficient and greatly reduce opportunities for mistakes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every year, Neo4j hosts the virtual event NODES 2024 - a free, technical event spanning global timezones and a variety of graph-related topics. This is one of my favorite events of the year, but it doesn&amp;rsquo;t happen without countless hours of planning and work to make it valuable to the graph community.&lt;/p&gt;</description></item><item><title>How to Run Neo4j on Kubernetes</title><link>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</link><pubDate>Tue, 25 Jun 2024 19:34:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/how-to-run-neo4j-on-kubernetes/</guid><description>&lt;h3 id="h3-0-kubernetes-is-an-open-source-container-orchestration-platform-that-automates-the-deployment-scaling-and-management-of-containerized-applications-in-this-post-we-walk-through-how-to-run-the-neo4j-graph-database-on-kubernetes"&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. In this post, we walk through how to run the Neo4j graph database on Kubernetes.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;For an upcoming event, I was asked to give a demo of how to run Neo4j on Kubernetes. I had very little experience with Kubernetes, so I decided to document my journey for later reference.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="_what_is_kubernetes"&gt;What is Kubernetes?&lt;/h2&gt;
&lt;p&gt;Kubernetes is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. It was originally developed by Google and is now maintained by the Cloud Native Computing Foundation.&lt;/p&gt;</description></item><item><title>How to Submit a Technical Presentation</title><link>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</link><pubDate>Thu, 16 May 2024 09:06:05 +0000</pubDate><guid>https://foojayio.github.io/website/today/nodes-2024-how-to-submit-a-technical-presentation/</guid><description>&lt;p&gt;&lt;strong&gt;There is no shortage of technical events such as conferences, meetups, trainings, hackathons, and so on. These events are a great way to learn new things, connect with people, and share knowledge with others. One of the most valuable and exciting ways to share knowledge is by giving a technical presentation.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Today, we will look at how to submit a technical presentation for an event and get some personal recommendations from me, as well. Though we will specifically gear the information for the NODES 2024 call for proposals, nearly everything discussed can be applied to other technical events and speaking engagements.&lt;/p&gt;</description></item><item><title>Spring AI: How to Write GenAI Applications with Java</title><link>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</link><pubDate>Thu, 09 May 2024 18:46:55 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-ai-how-to-write-genai-applications-with-java/</guid><description>&lt;p&gt;Generative AI (GenAI) is currently a hot topic in the tech world. It&amp;rsquo;s a subset of artificial intelligence that focuses on creating new content, such as text, images, or music. One popular type of GenAI component is the Large Language Model (LLM), which can generate human-like text based on a prompt.&lt;/p&gt;
&lt;p&gt;Retrieval-Augmented Generation (RAG) is a technique that enhances the accuracy and reliability of generative AI models by grounding them in external knowledge sources. While most GenAI applications and related content are centered around Python and its ecosystem, what if you want to write a GenAI application in Java?&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 10: Service Discovery with Eureka</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</link><pubDate>Thu, 13 Jul 2023 06:39:06 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-10-service-discovery-with-eureka/</guid><description>&lt;p&gt;Gaining complexity in a microservices system certainly isn&amp;rsquo;t for the faint of heart (though neither is complexity in monoliths!).&lt;/p&gt;
&lt;p&gt;When there are many services that need to communicate with one another, we might need to coordinate multiple services communicating with multiple other services.&lt;/p&gt;
&lt;p&gt;We also might code for varying environments such as local, development server, or the cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How do services know where to find one another?&lt;/li&gt;
&lt;li&gt;How can we avoid problems when a service is unavailable?&lt;/li&gt;
&lt;li&gt;How do we handle requests when we scale up or down certain parts of our system?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where something like Spring Cloud Netflix Eureka comes into play.&lt;/p&gt;</description></item><item><title>Time Machine: A Look-Back at Java Sessions from NODES 2022</title><link>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</link><pubDate>Wed, 28 Jun 2023 07:53:07 +0000</pubDate><guid>https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/time-machine-a-look-back-at-java-sessions-from-nodes-2022/nodes2023-java-scaled.jpg" alt="Base Photo by Compare Fibre on Unsplash" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;Figure 1. Base Photo by Compare Fibre on Unsplash&lt;/p&gt;
&lt;p&gt;As we prepare for NODES 2023, I wanted to pull out the time machine and review the Java sessions from &lt;a href="https://neo4j.com/video/nodes-2022/" target="_blank" rel="noopener noreferrer"&gt;NODES 2022&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;I will be submitting some abstracts to the &lt;a href="https://sessionize.com/neo4j-nodes-2023" target="_blank" rel="noopener noreferrer"&gt;2023 Call for Proposal&lt;/a&gt;
 here soon, likely in the Java category, so I thought looking at last year&amp;rsquo;s sessions might give me some inspiration or ideas for gaps or continuations I might want to explore.&lt;/p&gt;</description></item><item><title>Neo4j's Online Conference Is Coming In October...</title><link>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</link><pubDate>Wed, 07 Jun 2023 08:46:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/</guid><description>&lt;p&gt;&lt;img src="https://foojayio.github.io/website/today/neo4js-online-conference-is-coming-in-october-and-youre-invited/05.03_Nodes_Banner_1200x628-1-700x366.png" alt="" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;NODES is back for its fifth year on October 26, 2023!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the biggest graph community gathering dedicated to learning how to integrate graph technologies into ML and dev projects.&lt;/p&gt;
&lt;p&gt;For 24 hours nonstop, speakers from around the world will showcase their implementations, tools, models, and more &amp;ndash; sharing everything they&amp;rsquo;ve learned over this past year.&lt;/p&gt;
&lt;p&gt;Join thousands of fellow developers, data scientists, and data engineers to get firsthand knowledge from peers who will show you the ropes &amp;ndash; for free! So be sure to &lt;a href="https://neo4j.registration.goldcast.io/events/6fb85147-ca27-4310-9dec-cb345c53bd6f" title="save your seat" target="_blank" rel="noopener noreferrer"&gt;save your seat&lt;/a&gt;
!&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 9: Docker compose all the things</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</link><pubDate>Sun, 26 Feb 2023 10:02:15 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-9-docker-compose-all-the-things/</guid><description>&lt;p&gt;Our microservices project contains quite a few pieces now.&lt;/p&gt;
&lt;p&gt;We have two databases, three API services, a user-view service for books, and a service to host our configuration.&lt;/p&gt;
&lt;p&gt;With so many pieces to manage, it would be nice to have something that orchestrates the individual services into a system, such as Docker Compose.&lt;/p&gt;
&lt;p&gt;Back in our &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-5-building-an-empire-of-microservices/"&gt;Level 5&lt;/a&gt;
 rendition, we did exactly this for our smaller version of the project.&lt;/p&gt;
&lt;p&gt;Now that we have expanded our services, we need to add those new pieces into the existing Docker Compose management umbrella.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 8: Add MongoDB to Spring Cloud Config</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</link><pubDate>Thu, 09 Feb 2023 16:56:28 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-8-add-mongodb-to-spring-cloud-config/</guid><description>&lt;p&gt;In &lt;a href="https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/"&gt;our last article&lt;/a&gt;
, we used Spring Cloud Config to provide database credentials to a microservice application connecting to a cloud-hosted Neo4j database. This post will backport this concept to our existing MongoDB database instance and its related microservices.&lt;/p&gt;
&lt;p&gt;We will add our MongoDB credentials to the config server, so that it will be the central place for both our Neo4j and MongoDB database access. However, each service only has access to the credentials that it needs to operate, which provides some level of security through &amp;ldquo;separation of concerns&amp;rdquo; (versus universal access).&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 7: Externalize Microservice Configuration</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</link><pubDate>Mon, 30 Jan 2023 15:43:16 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-7-externalize-microservice-configuration/</guid><description>&lt;p&gt;Our decided next step for this project takes us in a new direction by adding externalized configuration for our applications.&lt;/p&gt;
&lt;p&gt;We already saw how to do something similar with &lt;a href="https://jmhreif.com/blog/microservices-level5/" target="_blank" rel="noopener noreferrer"&gt;MongoDB database credentials in Docker Compose&lt;/a&gt;
 to access a local database container, but what do we do when the database is hosted on public cloud or contains sensitive data?&lt;/p&gt;
&lt;p&gt;We probably don&amp;rsquo;t want to publish our credentials anywhere or even prevent accidental publishing.&lt;/p&gt;</description></item><item><title>Native GraphQL API with Neo4j AuraDB on Heroku</title><link>https://foojayio.github.io/website/today/native-graphql-api-with-neo4j-auradb-on-heroku/</link><pubDate>Mon, 08 Aug 2022 07:29:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/native-graphql-api-with-neo4j-auradb-on-heroku/</guid><description>&lt;p&gt;In my first article on Foojay, I would like to present one of many possible approaches to create a GraphQL API. I work at &lt;a href="https://neo4j.com/" target="_blank" rel="noopener noreferrer"&gt;Neo4j&lt;/a&gt;
, so it should not be a big suprise that I will use the Graph database with the same name as a backend for the application.&lt;/p&gt;
&lt;p&gt;In this post I will cover a couple of things and I&amp;rsquo;ll start with a simple use case. Conceptually we will look at the &amp;ldquo;Schema-First&amp;rdquo; vs &amp;ldquo;Object-First&amp;rdquo; discussions and why - at least in my opinion - GraphQL can be seen much more like an object mapping concept than a query language itself. You will learn that while Neo4j is a Graph database, it does not have a built-in GraphQL layer. It does however a great query language called &lt;a href="https://neo4j.com/docs/cypher-manual/current/" target="_blank" rel="noopener noreferrer"&gt;&amp;ldquo;Cypher&amp;rdquo;&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Journeys in Java, Level 6: Build a Neo4j Microservice</title><link>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</link><pubDate>Wed, 13 Jul 2022 15:13:43 +0000</pubDate><guid>https://foojayio.github.io/website/today/journeys-in-java-level-6-build-a-neo4j-microservice/</guid><description>&lt;p&gt;For our next adventure in Java microservices, we want to expand our system for book review data.&lt;/p&gt;
&lt;p&gt;While books and authors are well-suited for a document database such as MongoDB, once you add reviews to the mix, the importance of the relationships makes this project better suited for a graph database.&lt;/p&gt;
&lt;p&gt;This way, we can utilize relationships between the different entities to improve analysis based on the structure of the connections.&lt;/p&gt;</description></item><item><title>Fullstack IMDB Clone with a Java Backend using SparkJava and Neo4j</title><link>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</link><pubDate>Wed, 20 Apr 2022 07:11:02 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-a-fullstack-imdb-clone-with-a-java-backend-using-sparkjava-and-neo4j/</guid><description>&lt;p&gt;Our &lt;a href="https://graphacademy.neo4j.com" target="_blank" rel="noopener noreferrer"&gt;GraphAcademy&lt;/a&gt;
 is teaching folks starting out in the graph space the fundamentals of the data model, query language, and graph algorithms.&lt;/p&gt;
&lt;p&gt;And for developers, there are &lt;a href="https://graphacademy.neo4j.com/categories/developer/" target="_blank" rel="noopener noreferrer"&gt;courses for using our drivers&lt;/a&gt;
 and building the backend of a fullstack app in JavaScript, Go, Python, Java, and soon .Net.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/OzxHfAx.png" alt="OzxHfAx" loading="lazy"&gt;
&lt;/p&gt;
&lt;p&gt;The application is an IMDB clone based on the &lt;a href="https://github.com/neo4j-graph-examples/recommendations" target="_blank" rel="noopener noreferrer"&gt;MovieLens recommendation&lt;/a&gt;
 dataset augmented with movie and cast data from &lt;a href="https://themoviedb.org" target="_blank" rel="noopener noreferrer"&gt;themoviedb.org&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The front-end is written in vue.js and looks pretty slick.&lt;/p&gt;</description></item></channel></rss>