<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Work In Progress</title><link>https://www.pm50plus.co.uk/</link><description>Recent content on Work In Progress</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.pm50plus.co.uk/index.xml" rel="self" type="application/rss+xml"/><item><title>Graph in our pocket</title><link>https://www.pm50plus.co.uk/post/2026-05-21-graph-in-your-pocket/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2026-05-21-graph-in-your-pocket/</guid><description>&lt;p&gt;My day job is being a Product Manager. I spend time thinking about products and on the odd occasion I get to write code that helps explore those thoughts. It was during one of those moments that I got annoyed.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been learning about Go Interfaces and wanted to write code to land my understanding before carrying on with the book. The Go Programming Language, if you&amp;rsquo;re curious — worth it&lt;/p&gt;</description></item><item><title>Experiences with Claude Code</title><link>https://www.pm50plus.co.uk/post/2026-05-14-experiences-with-claude-code/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2026-05-14-experiences-with-claude-code/</guid><description>&lt;h2 id="coding-for-enjoyment"&gt;Coding for enjoyment&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re read any of the other articles on this site, you will have gathered that I enjoy coding. Whilst it is entirely true that the code itself may not be the most elegant that you&amp;rsquo;ve seen, it is also the case that writing it has been of great enjoyment. Even if, on the odd occasion, it has also been rather frustrating.&lt;/p&gt;
&lt;p&gt;And then Claude Code came along.&lt;/p&gt;</description></item><item><title>Aura API Go client</title><link>https://www.pm50plus.co.uk/post/2026-01-04-aura-go-client/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2026-01-04-aura-go-client/</guid><description>&lt;h2 id="a-go-client-for-aura-api"&gt;A Go client for Aura API&lt;/h2&gt;
&lt;p&gt;Over the last few weeks I&amp;rsquo;ve worked on creating a wrapper around the Aura API for use with Go. This is not wholly my own work; I&amp;rsquo;ve lifted the concept of using structs to model API request / responses from our Neo4j Labs Terraform Provider and embraced assistance from Claude to explore potential ideas, write tests and direct me when I got stuck.&lt;/p&gt;
&lt;p&gt;The Aura CLient ( I&amp;rsquo;m not that great with naming ) is ready for use - mostly. Did I mention that I&amp;rsquo;m a hobby coder ?&lt;/p&gt;</description></item><item><title>MCP for Aura API - List instances</title><link>https://www.pm50plus.co.uk/post/2026-01-04-mcp-4-aura-journey-2/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2026-01-04-mcp-4-aura-journey-2/</guid><description>&lt;h2 id="mcp-for-aura-api---list-instances"&gt;MCP for Aura API - List instances&lt;/h2&gt;
&lt;p&gt;The work from my &lt;a href="https://www.pm50plus.co.uk/2025/12/16/mcp-4-aura-journey-1.html"&gt;first step&lt;/a&gt; puts me in a positon to build the first tool - list instances. This MCP tool will&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get a list of instances&lt;/li&gt;
&lt;li&gt;Obtain a summary set of data for each one&lt;/li&gt;
&lt;li&gt;Return the response as a JSON document to the LLM / Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All that is need is to write the tool handler and spec. Lets get into that&lt;/p&gt;</description></item><item><title>Getting ready</title><link>https://www.pm50plus.co.uk/post/2025-12-16-mcp-4-aura-journey-1/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-12-16-mcp-4-aura-journey-1/</guid><description>&lt;h2 id="mcp-4-aura-api---taking-the-first-step"&gt;MCP 4 Aura API - taking the first step&lt;/h2&gt;
&lt;p&gt;As mentioned in my previous post, I&amp;rsquo;m basing my MCP for Aura API on the existing MCP for Neo4j. This post is all about stripping that down to get ready to then start writing the code I actually want.&lt;/p&gt;
&lt;h2 id="declutering"&gt;Declutering&lt;/h2&gt;
&lt;p&gt;After forking &lt;a href="https://github.com/neo4j/mcp"&gt;MCP for Neo4j&lt;/a&gt; and looking over the code, I now have this list of features that will not be needed and can be removed&lt;/p&gt;</description></item><item><title>PM tries to write MCP to control Aura infrastructure</title><link>https://www.pm50plus.co.uk/post/2025-12-12-mcp-bandwagon/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-12-12-mcp-bandwagon/</guid><description>&lt;h2 id="jumping-on-the-mcp-bandwagon"&gt;Jumping on the MCP bandwagon&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been learning Go over the last few months ( Its not a career change, just a desire to learn something new ). I&amp;rsquo;m now able do a pretty decent &amp;ldquo;Hello World&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also had the honour of working with some of Neo4j engineers to create and release MCP for Neo4j - which is written in Go - and proven to be popular.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s that now would be a good moment to sup from the trough of MCP success and see if my Go is suffiicent to allow me to fork MCP for Neo4j and modify it to provide a LLM tools to manage Aura infrastructure.&lt;/p&gt;</description></item><item><title>My reference python code for Neo4j</title><link>https://www.pm50plus.co.uk/post/2025-10-20-go-to-python/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-10-20-go-to-python/</guid><description>&lt;h2 id="when-you-cant-connect"&gt;When you can&amp;rsquo;t connect&lt;/h2&gt;
&lt;p&gt;Dear Reader,&lt;/p&gt;
&lt;p&gt;I find when having those &amp;lsquo;why can&amp;rsquo;t i connect to Neo4j&amp;rsquo; moments, having a reference code that you know works is rather useful.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s my reference Python code for that situatin in case anyone finds it useful&lt;/p&gt;
&lt;p&gt;There are two files, requirements.txt and the Python code, neo4jTest.py. These are given below. Save them both in the same folder.&lt;/p&gt;
&lt;p&gt;The requirements file which will install the latest version of the Neo4j Python driver. Save as requirements.txt&lt;/p&gt;</description></item><item><title>A guide to not loosing your shit over CORS</title><link>https://www.pm50plus.co.uk/post/2025-06-02-about-cors/</link><pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-06-02-about-cors/</guid><description>&lt;h2 id="cors"&gt;CORs?&lt;/h2&gt;
&lt;p&gt;Dear Reader,&lt;/p&gt;
&lt;p&gt;Take a moment and load web page in your browser. Then jump over into the browsers developer tools and look at all of the different domains that page is connecting to. This reflects the need of a web page to communicate across different domains to function properly ( although I&amp;rsquo;d bet a lot of what you can see right now is advertising or tracking ).&lt;/p&gt;
&lt;p&gt;Allowing cross domain connects can be of concern when it comes to security. But there&amp;rsquo;s something we can do about that. Enter &lt;strong&gt;CORS&lt;/strong&gt;—Cross-Origin Resource Sharing, a browser feature, that controls how and when web pages can make requests to domains other than their own.&lt;/p&gt;</description></item><item><title>Token for auth with GraphQL for AuraDB</title><link>https://www.pm50plus.co.uk/post/2025-05-23-graphql-jwks-part-2/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-05-23-graphql-jwks-part-2/</guid><description>&lt;h1 id="an-introduction-to-using-jwts-with-graphql-for-auradb---part-two"&gt;An introduction to using JWTs with GraphQL for AuraDB - Part Two&lt;/h1&gt;
&lt;p&gt;In &lt;a href="https://www.pm50plus.co.uk/2025/05/16/graphql-jwks-part-1.html"&gt;part one&lt;/a&gt; I covered how to set up GraphQL for AuraDB to use JWTs and the identity provider, okta, that generates them.&lt;/p&gt;
&lt;p&gt;This blog will look at using properties of a token to control access to the API and the data within.&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;m overreaching a bit as I&amp;rsquo;m assuming knowledge ( a trap so easier to stumble into when trying to convey information ) on the topic of JSON Web Token (JWT ).&lt;/p&gt;</description></item><item><title>Using token with GraphQL for AuraDB</title><link>https://www.pm50plus.co.uk/post/2025-05-16-graphql-jwks-part-1/</link><pubDate>Fri, 16 May 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-05-16-graphql-jwks-part-1/</guid><description>&lt;h1 id="an-introduction-to-using-jwts-with-graphql-for-auradb---part-one"&gt;An introduction to using JWTs with GraphQL for AuraDB - Part One&lt;/h1&gt;
&lt;p&gt;There are two options ( we&amp;rsquo;re looking at another token based approach for the future ) to control access to a GraphQL for AuraDB endpoint&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API Key&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using APIs keys are asimple, straight forward approach to control access to a GraphQL API and work really well for development environments. For production environments we recommend the use of a 3rd party indentity provider that manages tokens in the form of JWTs as these provide more flexibility when securing access to your GraphQL. Additionally, JWTs enable the use of rules within your type definitions for authentication and authorisation.&lt;/p&gt;</description></item><item><title>PM Haku</title><link>https://www.pm50plus.co.uk/post/2025-05-12-pm-haku/</link><pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-05-12-pm-haku/</guid><description>&lt;h1 id="haku"&gt;Haku&lt;/h1&gt;
&lt;p&gt;If you find my usual writing hard to get on with, then consider the poems I that could attempt.&lt;/p&gt;
&lt;p&gt;Your typical &lt;a href="https://hitchhikers.fandom.com/wiki/Vogon_poetry"&gt;Vogon&lt;/a&gt; would consider them excessive and get back to destroying planets for much need bypasses.&lt;/p&gt;
&lt;p&gt;So I asked a AI chat bot thingy to describe Product Management in the style of a Haku&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Features lost in launch&lt;/li&gt;
&lt;li&gt;Users want what isn&amp;rsquo;t there&lt;/li&gt;
&lt;li&gt;Dreams meet reality&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think the AI must have been trained on Vogon prose.&lt;/p&gt;</description></item><item><title>Conway Game Of Life application</title><link>https://www.pm50plus.co.uk/post/2025-04-03-conway-react-code/</link><pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-04-03-conway-react-code/</guid><description>&lt;h2 id="conway-game-of-life"&gt;Conway Game Of Life&lt;/h2&gt;
&lt;p&gt;A common piece of advice on how to best learn a new development language is to build an application. For example, you often see variants on &amp;lsquo;hello world&amp;rsquo; to start with and then folks try progressively more challenging endeavours. This technique follows the well trodden path of crawl, walk, run and, maybe, matharons ( I guess the equivalent in these times of AI assistants would be taking a metaphorical taxi to speed up the journey ).&lt;/p&gt;</description></item><item><title>Lets figure out the GraphQL for Conway Game Of Life</title><link>https://www.pm50plus.co.uk/post/2025-03-13-graphql-for-conway/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-03-13-graphql-for-conway/</guid><description>&lt;h2 id="graphql-for-conway-game-of-life"&gt;GraphQL for Conway Game Of Life&lt;/h2&gt;
&lt;p&gt;In my &lt;a href="https://www.pm50plus.co.uk/2025/03/01/conway-part-une.html"&gt;last post&lt;/a&gt; I covered setting up GraphQL for AuraDB with this Schema / Type Definition&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Text" data-lang="Text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;type Cell @node {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cellsConnected: [Cell!]! @relationship(type: &amp;#34;NEIGHBOUR_OF&amp;#34;, direction: IN)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; connectedCells: [Cell!]! @relationship(type: &amp;#34;NEIGHBOUR_OF&amp;#34;, direction: OUT)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; alive: Boolean!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id: String!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x: BigInt!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y: BigInt!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and checked it was all working with a very simple GraphQL Query&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-Text" data-lang="Text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl --location &amp;#39;YOUR_GRAPHQL_DATA_API_URL&amp;#39; \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--header &amp;#39;Content-Type: application/json&amp;#39; \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--header &amp;#39;x-api-key: YOUR_API_KEY&amp;#39; \
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--data &amp;#39;{&amp;#34;query&amp;#34;:&amp;#34;query getAllCells {\n cells {\n alive\n id\n x\n y\n }\n }&amp;#34;,&amp;#34;variables&amp;#34;:{}}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which means we have arrived at the point to start thinking about the GraphQL queries and mutations that will be needed as part of the implementation of Conway Game Of Life.&lt;/p&gt;</description></item><item><title>Enabling introspection on the GraphQL for Aura</title><link>https://www.pm50plus.co.uk/post/2025-03-12-enabling-introspection-on-grapqhl-api/</link><pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-03-12-enabling-introspection-on-grapqhl-api/</guid><description>&lt;h2 id="enabling-introspection-on-the-graphql-for-aura"&gt;Enabling introspection on the GraphQL for Aura&lt;/h2&gt;
&lt;p&gt;Enabling introspection for a GraphQL API in Aura is coming shortly but you can do it today using the Aura API. If you need this, and there&amp;rsquo;s a number of steps to follow, then do this.&lt;/p&gt;
&lt;p&gt;Although we will use CURL to enable / disable introspection, we will need to use the Aura CLI to get the Instance ID and ID of the associated GraphQL API.&lt;/p&gt;</description></item><item><title>About that Conway Game Of Life</title><link>https://www.pm50plus.co.uk/post/2025-03-01-conway-part-une/</link><pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-03-01-conway-part-une/</guid><description>&lt;h1 id="lets-figure-out-the-graphql-for-conway---part-one"&gt;Lets figure out the GraphQL for Conway - Part One&lt;/h1&gt;
&lt;p&gt;It would be advisable to grab an adult beverage before you start reading as this is a longer than usual post.&lt;/p&gt;
&lt;p&gt;Ready? Then lets begin.&lt;/p&gt;
&lt;p&gt;In his &lt;a href="https://medium.com/neo4j/a-cypher-game-of-life-53b5faf04caa/"&gt;blog post&lt;/a&gt; Christoffer Bergman describes implementing Conways Game of Life in Cypher. I&amp;rsquo;m going to base my attempt at Conway Game Of Life on his work but using GraphQL instead of Cypher. To do that I&amp;rsquo;m going to need a GraphQL schema and a GraphQL service. Then I can experiment with GraphQL Queries / Mutations to figure out what is needed to implement the game.&lt;/p&gt;</description></item><item><title>Using Neo4j GraphQL Introspector with the forthcoming v7 library</title><link>https://www.pm50plus.co.uk/post/2025-02-25-graphql-aura-v7-library/</link><pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-02-25-graphql-aura-v7-library/</guid><description>&lt;h1 id="using-neo4j-graphql-introspector-with-v7-library"&gt;Using Neo4j GraphQL Introspector with v7 library&lt;/h1&gt;
&lt;p&gt;In our roadmap &lt;a href="https://neo4j.com/blog/developer/neo4j-graphql-library-roadmap/"&gt;blog&lt;/a&gt; we outlined what to expect in GraphQL releases across 2025. One of those items is v7 of the library that introduces several changes that will massively reduce schema size to improve server startup and query time.&lt;/p&gt;
&lt;p&gt;This also means that the v7 Libary schema is different. For example, it is required to use the @node directive to any type they wish to be considered a &amp;ldquo;node&amp;rdquo; in their database for which we should generate graphql queries and mutations&lt;/p&gt;</description></item><item><title>GraphQL for AuraDB - A tutorial trilogy in 4 parts</title><link>https://www.pm50plus.co.uk/post/2025-01-31-graphql-aura-conway-intro/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-01-31-graphql-aura-conway-intro/</guid><description>&lt;h1 id="tutorial-for-graphql-for-neo4j-auradb---the-preamble"&gt;Tutorial for GraphQL for Neo4j AuraDB - The Preamble&lt;/h1&gt;
&lt;p&gt;With the launch of GraphQL for AuraDB, its seems an auspicious time to put together a tutorial. All tutorials have an outcome - seems sensible - so we&amp;rsquo;re going to show how you can build Conway Game Of Life.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Conway?&lt;/em&gt; Wait, what?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="from-the-1970s-to-neo4j-a-journey-through-conways-game-of-life"&gt;From the 1970s to Neo4j: A Journey Through Conway&amp;rsquo;s Game of Life&lt;/h3&gt;
&lt;p&gt;Cast your mind back to the 1970s (or Google it if you must)—an era of disco fever, bell-bottoms, and, in the UK, the &lt;a href="https://en.wikipedia.org/wiki/Winter_of_Discontent"&gt;Winter of Discontent&lt;/a&gt;. But while the world danced and protested, a youngish John Conway was tucked away in the world of academia, blissfully unaware of it all. Instead of embracing the chaos of the decade, he was pondering something far more abstract: a cellular automaton that could generate endlessly growing patterns while making it devilishly difficult to prove whether any given pattern would do so. (Because, really, what else would a brilliant young mathematician do with his time?)&lt;/p&gt;</description></item><item><title>A guide to the new Aura CLI</title><link>https://www.pm50plus.co.uk/post/2025-01-27-aura-cli-guide/</link><pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-01-27-aura-cli-guide/</guid><description>&lt;h1 id="a-guide-to-the-new-aura-cli"&gt;A Guide To The New Aura CLI&lt;/h1&gt;
&lt;p&gt;The new Neo4j Aura CLI is a powerful new tool designed to simplify and streamline the management of your Neo4j Aura resources directly from the command line. Whether you&amp;rsquo;re provisioning new databases or scaling existing ones, the Neo4j Aura CLI empowers developers and operations teams with greater flexibility, speed, and efficiency. Built with ease of use in mind, this CLI bridges the gap between automation and hands-on control, enabling you to integrate Neo4j Aura seamlessly into your workflows. Let&amp;rsquo;s explore how to install and use this essential addition to your Neo4j toolkit.&lt;/p&gt;</description></item><item><title>Neo4j Cluster built with containers</title><link>https://www.pm50plus.co.uk/post/2025-01-02-neo4j-cluster-containers/</link><pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2025-01-02-neo4j-cluster-containers/</guid><description>&lt;h1 id="build-a-neo4j-cluster"&gt;Build a Neo4j cluster&lt;/h1&gt;
&lt;p&gt;Most of time having a single copy of Neo4j running is suitable for what I need to do. There are occasions where only a cluster will do and, as it&amp;rsquo;s not something that happens that often, I&amp;rsquo;ve written down the steps i follow that results in a 3 member cluster which is front end by a load balancer - HA Proxy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m aware that you also go down the Kubernetes route for this but it seems overkill for a 3 node cluster with static membership.&lt;/p&gt;</description></item><item><title>SSL for Neo4j so the Query API can use it</title><link>https://www.pm50plus.co.uk/post/2024-11-08-ssl-query-api/</link><pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-11-08-ssl-query-api/</guid><description>&lt;h1 id="a-guide-to-using-ssl-with-neo4j-query-api"&gt;A guide to using SSL with Neo4j Query API&lt;/h1&gt;
&lt;p&gt;To save my fingers hammering out letters to form the words that describe why, lets just accecpt that using SSL is a good thing.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re using Aura then you can skip reading my prose and do something more interesting instead as Aura only uses SSL. For everyone else you will need to configure SSL.&lt;/p&gt;
&lt;p&gt;The following is a guide to doing this with LetsEncrypt, a free source of certificates, and an AWS EC2 running docker with Neo4j. I run that combination on a frequent basis - it&amp;rsquo;s my goto for trying stuff out.&lt;/p&gt;</description></item><item><title>Moving to Neo4j Query API - Partie Un</title><link>https://www.pm50plus.co.uk/post/2024-11-06-moving-to-query-api-1/</link><pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-11-06-moving-to-query-api-1/</guid><description>&lt;h1 id="considering-a-move-to-the-neo4j-query-api---partie-un"&gt;Considering a move to the Neo4j Query API - Partie Un&lt;/h1&gt;
&lt;p&gt;If you&amp;rsquo;re interested in transitioning to the Query API, this post will provide an overview of the key areas to consider and plan for. A follow up post post will dive deeper with a worked example. While there&amp;rsquo;s no immediate pressure to move from the HTTP API, it&amp;rsquo;s important to note that updates will be limited to critical security and defect fixes. All future development effort will be focused on the Query API.&lt;/p&gt;</description></item><item><title>Explicit transactions with the Neo4j Query API coming shortly</title><link>https://www.pm50plus.co.uk/post/2024-10-31-query-api-tx/</link><pubDate>Thu, 31 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-10-31-query-api-tx/</guid><description>&lt;h1 id="explicit-transactions-with-neo4j-query-api"&gt;Explicit transactions with Neo4j Query API&lt;/h1&gt;
&lt;p&gt;Over the last few months, we&amp;rsquo;ve been working hard (well, the engineers have — I&amp;rsquo;ve just been sipping tea and eating biscuits) to add support for Explicit Transactions to the Query API. I&amp;rsquo;m excited to announce that this feature will be available real soon for our self-managed and Aura customers.&lt;/p&gt;
&lt;p&gt;Up to now you gave the Query API a Cypher statement and it managed transaction for you - an Implicit Transaction. Explicit Transactions hands over control of the transaction , from start to finish, to you.&lt;/p&gt;</description></item><item><title>Applications, Tokens and Neo4j Query API</title><link>https://www.pm50plus.co.uk/post/2024-10-24-app-token-query-api/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-10-24-app-token-query-api/</guid><description>&lt;h1 id="applications-tokens-and-neo4j-query-api"&gt;Applications, Tokens and Neo4j Query API&lt;/h1&gt;
&lt;h1 id="using-tokens-with-applications-and-neo4j-query-api-for-auth"&gt;Using tokens with Applications and Neo4j Query API for auth&lt;/h1&gt;
&lt;p&gt;In a previous blog post I discussed a web application obtaining and using a token with Neo4j Query API as a result of a user successfully authenticating. This entry looks at what would be involved for an application to obtain a token and use it with Neo4j Query API.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plot spoiler&lt;/strong&gt; - it&amp;rsquo;s very similar.&lt;/p&gt;</description></item><item><title>Dipping into the code from the trinity of SSO, Neo4j and a web application</title><link>https://www.pm50plus.co.uk/post/2024-10-17-token-query-api-the-code/</link><pubDate>Thu, 17 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-10-17-token-query-api-the-code/</guid><description>&lt;h1 id="commentary-on-the-web-application-code-used-in-sso-post"&gt;Commentary on the web application code used in SSO post&lt;/h1&gt;
&lt;p&gt;As a follow on from my previous blog post, the trinity of SSO, Neo4j and a web application, this entry takes a deeper look at the code used for the web application to see how it all fits together.&lt;/p&gt;
&lt;p&gt;Given my JS / React knowledge is basic ( and I&amp;rsquo;m flattering myself there ) the more experienced of you are likely to be amused at my efforts.&lt;/p&gt;</description></item><item><title>Using token with Query API - an example with SSO</title><link>https://www.pm50plus.co.uk/post/2024-10-16-token-query-api/</link><pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-10-16-token-query-api/</guid><description>&lt;h1 id="the-trinity-of-sso-neo4j-and-a-web-application"&gt;The trinity of SSO, Neo4j and a web application&lt;/h1&gt;
&lt;p&gt;Consider a web application that consumes data from Neo4j. This will require the web application to authenticate and retrieve that data using credentials that are accepted by Neo4j. If our users needed to remember one set of credentials for the web application, another set for Neo4j and then enter those at the correct moment, it&amp;rsquo;s going to be a jarring user experience.&lt;/p&gt;</description></item><item><title>Aura welcomes Query API</title><link>https://www.pm50plus.co.uk/post/2024-09-06-aura-query-api-ga/</link><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-09-06-aura-query-api-ga/</guid><description>&lt;h1 id="querying-your-aura-neo4j-database-via-https-again"&gt;Querying your Aura Neo4j Database via HTTPS (Again)&lt;/h1&gt;
&lt;p&gt;The HTTPS based Query API is now GA for Aura and Self-managed customers
For almost 14 years you could query Neo4j via HTTP, originally with a REST API, later via Cypher, with a number of improvements (streaming, type representations etc). Since 2016 the focus has shifted to the binary Bolt protocol, advanced routing and native drivers. The existing HTTP APIs were still running for self-hosted customers but were lacking in features and because of those shortcomings, were not available in the Neo4j Aura Cloud Service. This is about to change now.&lt;/p&gt;</description></item><item><title>Exploring impersonating with the Neo4j Query API</title><link>https://www.pm50plus.co.uk/post/2024-05-29-neo4j-query-impersonateuser/</link><pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-05-29-neo4j-query-impersonateuser/</guid><description>&lt;h1 id="pretending-to-be-someone-else"&gt;Pretending to be someone else&lt;/h1&gt;
&lt;p&gt;I recently watched a TV broadcast where someone self-identified as the U.k Prime Minster and claimed to have a plan to solve all of countries challenges. But there were doubts in my mind as to his credibilty. Anyone who has visited the Unitied Kingdom ( and those of us who live here ) are well aware of the high probabilty for rain and yet this individual had not considered this possibility and they got drenced whilst shouting into the void. This makes me doubt his capability for forward planning and his claim to be the Prime Minister seems to be very far fetched indeed. Was this a prank and was it an impersonator out in the rain that day? We may never know.&lt;/p&gt;</description></item><item><title>Using the forthcoming Aura GraphQL API</title><link>https://www.pm50plus.co.uk/post/2024-05-03-aura-graphql-api/</link><pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-05-03-aura-graphql-api/</guid><description>&lt;h1 id="using-the-forthcoming-aura-graphql-api"&gt;Using the forthcoming Aura GraphQL API&lt;/h1&gt;
&lt;p&gt;Much later this year you&amp;rsquo;ll be able to us GraphQL API with our Aura platform - yep, you read that correctly, we&amp;rsquo;ve got the builders in to add an extension.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve done this as it removes the requirement for customers to provision, configure, and then maintain a graphql server for the purposes of hosting a graphQL API - we&amp;rsquo;re taking care of all of that in the Aura platform. Additionally, it also ensures the GraphQL API is next door, figratively speaking, to the Aura instance avoiding the transist of information across the occasionally choppy waters of the internet which improves responsiveness and security.&lt;/p&gt;</description></item><item><title>Using parameters with the Neo4j Query API</title><link>https://www.pm50plus.co.uk/post/2024-04-26-neo4j-query-parameters/</link><pubDate>Fri, 26 Apr 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-04-26-neo4j-query-parameters/</guid><description>&lt;h1 id="using-parameters-with-the-query-api"&gt;Using parameters with the Query API&lt;/h1&gt;
&lt;p&gt;Imagine that you find yourself needing to perform bulk updates in some shape or form to Neo4j Graph database; it could be a data import, creating relationships between nodes, changing properties or anything else that requires a lot of mutations.&lt;/p&gt;
&lt;p&gt;As an example of this, consider the work from an earlier blog post where we represented the London Underground as a graph; Nodes are used for Tube stations and Relationships are the Tube lines that form the network.&lt;/p&gt;</description></item><item><title>Introducing the new Query API in Neo4j 5.19</title><link>https://www.pm50plus.co.uk/post/2024-04-15-neo4j-query-api/</link><pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-04-15-neo4j-query-api/</guid><description>&lt;h1 id="we-built-a-thing"&gt;We built a thing&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve been lucky enough to work with our Neo4j Engineers to create a new API for Neo4j that allows the execution of Cypher statements in the form of network requests without requiring a driver to be installed. There was thought given ( briefly ) to asking the Internet for a what to call this but that doesn&amp;rsquo;t &lt;a href="https://en.wikipedia.org/wiki/Boaty_McBoatface#Naming"&gt;always turn out well&lt;/a&gt;. In the end we went with the simple approach of naming it after what it does and called it the &lt;strong&gt;Query API&lt;/strong&gt;. It&amp;rsquo;s available now with Neo4j 5.19 and will be coming to Aura , our cloud service, in early Summer this year. For those of you who are using the existing HTTP API, it&amp;rsquo;s not retiring anytime soon and will be kept updated with fixes for critical defects and security vulnerabilities. You&amp;rsquo;ll be able to choose which one to use.&lt;/p&gt;</description></item><item><title>Amatuer developer tries building a web app</title><link>https://www.pm50plus.co.uk/post/2024-02-06-react/</link><pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2024-02-06-react/</guid><description>&lt;h1 id="react"&gt;React&lt;/h1&gt;
&lt;p&gt;During the day, and often onwards into the evening, I&amp;rsquo;m gainfully employed as a Product Manager at Neo4j. My brief covers web services API strategy including delivery of our GraphQL libary. Its very humbling to be able to work with a very smart collective of people on those efforts.&lt;/p&gt;
&lt;p&gt;Back in the day I had desires of being a professional software developer; even went as far as accumalating a degree in software engineering ( it was a pass. See &amp;lsquo;Drinkers Degree&amp;rsquo; in any knowledge base ). Turns out that was a perfect case of talent overreach but I&amp;rsquo;ve kept an interest and can produce a &amp;lsquo;Hello World&amp;rsquo; application in at least 2 languages.&lt;/p&gt;</description></item><item><title>Starting out with the Aura API</title><link>https://www.pm50plus.co.uk/post/2023-12-19-aura-api/</link><pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-12-19-aura-api/</guid><description>&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/plane_window.png" alt="Turning left when boarding"&gt;&lt;/p&gt;
&lt;h1 id="api"&gt;API&lt;/h1&gt;
&lt;p&gt;When thinking about Application Programming Interfaces, or APIs as they are known as, you can imagine them as helpers that perform a requested, specific, task and return a response. They are the building blocks from which applications are composed from. There&amp;rsquo;s many different types of APIs and in this post I&amp;rsquo;m looking at those which are called across networks - Web APIs. If you&amp;rsquo;re regular reader then you&amp;rsquo;ve seen these before where I&amp;rsquo;ve used APIs from Transport For London to obtain information about the London Tube network.&lt;/p&gt;</description></item><item><title>There is a CLI for that</title><link>https://www.pm50plus.co.uk/post/2023-11-30-cli/</link><pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-11-30-cli/</guid><description>&lt;h1 id="sometimes-using-a-cli-is-the-only-way"&gt;Sometimes using a CLI is the only way&lt;/h1&gt;
&lt;p&gt;We&amp;rsquo;ve become sooo used to having a graphical user interface with swipy user-friendly experiences that we&amp;rsquo;ve become remarkably complacent about the shadowy figures that lurk in the background, able to unleash their power at will&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. I am, of course, describing command line interfaces whose ability to perform simple and complex actions quickly is unrivalled.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/chickens_at_a_table.png" alt="Attack chickens"&gt;&lt;/p&gt;
&lt;p&gt;Just be careful out there, with great power comes great responsibility; just ask anyone who has typed &lt;em&gt;&amp;lsquo;rm -rf /&amp;rsquo;&lt;/em&gt; on a Unix based computer. &lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description></item><item><title>Doing more with less</title><link>https://www.pm50plus.co.uk/post/2023-11-13-episode3-rabbit-hole/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-11-13-episode3-rabbit-hole/</guid><description>&lt;h1 id="episode-3-like-what-youre-done-with-that-rabbit-hole"&gt;Episode 3: Like what you&amp;rsquo;re done with that rabbit hole&lt;/h1&gt;
&lt;p&gt;Previously I wrote about the architectural pattern I was intending use for this adventure and I did make a start; honest.&lt;/p&gt;
&lt;p&gt;I took initial steps to move communications into two functions, one for tfl and the other for Neo4j but&amp;hellip;&lt;/p&gt;
&lt;p&gt;Along came a squirrel.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/tflTube/squirrel_snow.jpg" alt="Gosh it&amp;rsquo;s cute"&gt;&lt;/p&gt;
&lt;p&gt;Not a real one like that in the picture and really not this &lt;a href="https://www.independent.co.uk/life-style/food-and-drink/brewdog-worlds-strongest-beer-squirrel-bottle-the-end-of-history-a7436201.html"&gt;one&lt;/a&gt; &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; but a virtual one wearing a large badge of distraction that read &lt;em&gt;&amp;lsquo;I wonder if I could get all the information needed from tfl API in fewer calls?&amp;rsquo;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>I am always willing to learn</title><link>https://www.pm50plus.co.uk/post/2023-10-27-episode2-rtfm/</link><pubDate>Fri, 27 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-10-27-episode2-rtfm/</guid><description>&lt;h1 id="episode-2-i-am-always-willing-to-learn"&gt;Episode 2: I am always willing to learn&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/tflTube/layered-cake.png" alt="Layer Cake"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pm50plus.co.uk/2023/10/13/python-neo4j-and-the-tube.html"&gt;In Epsode 1&lt;/a&gt; I walked you through getting information from Tfl API ( transport for london ) and using that to start building a graph in Neo4j. Before we go much further in this endeavour, it&amp;rsquo;s time to look at how we&amp;rsquo;re approaching the architecture of this code and look at a couple ( there&amp;rsquo;s more I know ) of items that need looking at.&lt;/p&gt;</description></item><item><title>It is all about the REST</title><link>https://www.pm50plus.co.uk/post/2023-10-20-introduction-to-aura-api/</link><pubDate>Fri, 20 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-10-20-introduction-to-aura-api/</guid><description>&lt;h1 id="it-is-all-about-the-rest"&gt;It is all about the REST&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/mySleepingCat.png" alt="My sleeping cat"&gt;&lt;/p&gt;
&lt;p&gt;Neo4j DB as a Service ( DBaaS ) , Aura, now has a RESTful like API for provisioning. The full details of the API in long form are in the &lt;a href="https://neo4j.com/docs/aura/platform/api/specification/"&gt;documentation&lt;/a&gt;; in short it&amp;rsquo;s a set of endpoints that provide for CRUD operations. You can try the Aura API from the documentation. Here we&amp;rsquo;re going to dig in and write code to do the needful.&lt;/p&gt;</description></item><item><title>Using Python and data from Tfl API</title><link>https://www.pm50plus.co.uk/post/2023-10-13-python-neo4j-and-the-tube/</link><pubDate>Fri, 13 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-10-13-python-neo4j-and-the-tube/</guid><description>&lt;h1 id="episode-1--back-to-school"&gt;Episode 1 : Back to school&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/tflTube/tflStations.png" alt="London Tube Stations"&gt;&lt;/p&gt;
&lt;p&gt;To become more familar with the TfL API and working with Neo4j programmatically , I&amp;rsquo;m going to write some funky Python code to explore and learn more about them. In Agile terms, it&amp;rsquo;s a Spike. The vast majority of this code is likely to be thrown away - no need to make it pretty , optimised or anything like that, just functional.&lt;/p&gt;</description></item><item><title>Exploring London tube as a graph</title><link>https://www.pm50plus.co.uk/post/2023-10-03-exploring-london-tube-as-a-graph/</link><pubDate>Tue, 03 Oct 2023 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2023-10-03-exploring-london-tube-as-a-graph/</guid><description>&lt;h1 id="exploring-london-tube-as-a-graph"&gt;Exploring London tube as a graph&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://www.pm50plus.co.uk/img/tflTube/tfl.png" alt="London Tube from graph database"&gt;&lt;/p&gt;
&lt;p&gt;When I set out to do this, I had two main goals&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about practical applications of graph databases&lt;/li&gt;
&lt;li&gt;Improve my understanding of what it is like to work with graph databases from the perspective of a developer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ll need a data source to build the graph from. I picked the London Tube Network to use as it as the people who run it, Transport For London - TFL , have a well documented API that provides a wealth of information. And it&amp;rsquo;s free for basic use. Also, looking at a map of the Tube, it&amp;rsquo;s looks like a graph.&lt;/p&gt;</description></item><item><title>Cattle and Pets</title><link>https://www.pm50plus.co.uk/post/2022-01-06-cattle-and-pets/</link><pubDate>Thu, 06 Jan 2022 00:00:00 +0000</pubDate><guid>https://www.pm50plus.co.uk/post/2022-01-06-cattle-and-pets/</guid><description>&lt;h2 id="cattle-and-pets"&gt;Cattle and Pets&lt;/h2&gt;
&lt;p&gt;Cattle and Pets is a way to help think about compute resources that are involved in providing a service. The resources could be anything from a kubernetes pod to a S3 bucket. Determining which classification you assign determines how you can treat it. With most cloud service providers allowing you to tag a resource, you can use these as filters to see which resources are critical requiring care and attention and those that can be left ( almost ) alone.&lt;/p&gt;</description></item></channel></rss>