<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dbulmen on Black Marble</title><link>https://blogs.blackmarble.co.uk/dbulman/</link><description>Recent content in Dbulmen on Black Marble</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Copyright © Black Marble; all rights reserved.</copyright><lastBuildDate>Tue, 12 May 2026 22:34:54 +0100</lastBuildDate><atom:link href="https://blogs.blackmarble.co.uk/dbulman/feed.xml" rel="self" type="application/rss+xml"/><item><title>What I Saw at AWS Summit London 2026</title><link>https://blogs.blackmarble.co.uk/dbulman/what-i-saw-at-aws2026/</link><pubDate>Tue, 12 May 2026 22:34:54 +0100</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/what-i-saw-at-aws2026/</guid><description>
&lt;h3 id="aws-summit-london-2026">AWS Summit London 2026&lt;/h3>
&lt;p>AWS Summit London 2026 was a compact, fast-moving event with practical sessions. The theme was &amp;ldquo;Innovate at Scale,&amp;rdquo; and the show was heavy on AI, sustainability, and hybrid cloud.&lt;/p>
&lt;h4 id="opening-keynote">Opening Keynote&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Main focus&lt;/strong>: resilience, scale, and customer-driven innovation.&lt;/li>
&lt;li>&lt;strong>Graviton4 expansion&lt;/strong>: broader regional availability and better performance for ML workloads.&lt;/li>
&lt;li>&lt;strong>Sustainability&lt;/strong>: AWS data centers now targeting carbon neutrality by 2030.&lt;/li>
&lt;/ul>
&lt;h4 id="ai-and-machine-learning">AI and Machine Learning&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Amazon Q&lt;/strong>: emphasis on responsible AI, bias mitigation, and explainability.&lt;/li>
&lt;li>&lt;strong>AI track&lt;/strong>: practical sessions on using foundations models and edge AI in real projects.&lt;/li>
&lt;/ul>
&lt;h4 id="serverless-and-containers">Serverless and Containers&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>AWS Lambda&lt;/strong>: advanced patterns, event-driven architectures, and AWS Step Functions integration.&lt;/li>
&lt;li>&lt;strong>Lambda Power Tuning&lt;/strong>: announced to optimize memory and concurrency automatically.&lt;/li>
&lt;/ul>
&lt;h4 id="security-and-compliance">Security and Compliance&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Zero trust&lt;/strong>: core theme for identity and access.&lt;/li>
&lt;li>&lt;strong>AWS IAM + Verified Permissions&lt;/strong>: presented as the foundation for modern security models.&lt;/li>
&lt;li>&lt;strong>AWS Security Hub AI&lt;/strong>: previewed as a way to turn threat intelligence into actionable recommendations.&lt;/li>
&lt;/ul>
&lt;h4 id="sustainability-and-social-impact">Sustainability and Social Impact&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Cloud for Good&lt;/strong>: AWS projects using satellite data and global infrastructure for climate and disaster response.&lt;/li>
&lt;li>&lt;strong>AWS Ground Station&lt;/strong>: showcased as a tool for environmental monitoring and analysis.&lt;/li>
&lt;/ul>
&lt;h3 id="final-thoughts">Final Thoughts&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>AWS remains focused on practical innovation&lt;/strong>: sessions were about applying cloud services, not just vision.&lt;/li>
&lt;li>&lt;strong>AI is becoming mainstream&lt;/strong>: the message was to start using it now.&lt;/li>
&lt;li>&lt;strong>Security is mandatory&lt;/strong>: zero trust and automation are core expectations.&lt;/li>
&lt;li>&lt;strong>Sustainability is a real part of the conversation&lt;/strong>: AWS is leaning into it with aggressive targets.&lt;/li>
&lt;/ul>
&lt;p>AWS Summit London 2026 felt like a useful check-in on what’s next for the cloud. The event was dense, technical, and grounded in the kind of tooling that developers can apply immediately.&lt;/p></description></item><item><title>What in the SQL? An in depth discussion of SQL vs NOSQL Implementations</title><link>https://blogs.blackmarble.co.uk/dbulman/what-in-the-sql/</link><pubDate>Thu, 15 Jan 2026 12:20:03 +0000</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/what-in-the-sql/</guid><description>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Databases are rarely glamorous. They do not have sleek animations and nobody has ever bragged about getting to nth normal form on their table at a dinner party. And yet, in modern systems, databases decide whether your platform scales or collapses.&lt;/p>
&lt;p>This post is a guided ramble— err I mean an opinionated, comparison of SQL and NoSQL. We will cover what they are, how they think, where they shine, where they suck, and why the correct answer is almost never “just pick one and hope”.&lt;/p></description></item><item><title>Five Web Frameworks in Ten Minutes</title><link>https://blogs.blackmarble.co.uk/dbulman/five-web-frameworks-in-ten-minutes/</link><pubDate>Wed, 14 Jan 2026 22:04:08 +0000</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/five-web-frameworks-in-ten-minutes/</guid><description>
&lt;h2 id="react">React&lt;/h2>
&lt;p>React is not technically a framework—it’s a JavaScript library—but at this point arguing that distinction is kind of pointless. Created by Meta, React focuses on building user interfaces using reusable components. You describe what the UI should look like, and React handles how it updates, thanks to its declarative approach.&lt;/p>
&lt;p>Under the hood, React uses a Virtual DOM to efficiently update only what changes, which keeps interfaces fast and responsive. Its real superpower, however, is its ecosystem. Tools like Next.js and Vite bolt on everything from routing to performance optimisation, making React endlessly adaptable.&lt;/p></description></item><item><title>Building a Github Action for Cloudflare Project Deployment</title><link>https://blogs.blackmarble.co.uk/dbulman/building-a-github-action-for-cloudflare-project-deployment/</link><pubDate>Thu, 08 Jan 2026 08:48:25 +0000</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/building-a-github-action-for-cloudflare-project-deployment/</guid><description>
&lt;p>During recent development for the &lt;a href="https://github.com/HeckingGoose/Oyster">oyster language&lt;/a> by &lt;a href="https://github.com/heckinggoose">@HeckingGoose&lt;/a> I was asked to assist with building a github action to deploy a Jekyll static pages site to a cloudflare project this was to allow for documentation to be referenced both within the linter for the language and in general.&lt;/p>
&lt;p>Then after some initial investigation i discovered the beauty of the &lt;a href="https://github.com/cloudflare/wrangler-action">Cloudflare wrangler action&lt;/a> which allows for the easy deployment of any specified set of files to a cloudflare project directly in a github action.&lt;/p></description></item><item><title>What I Saw at Integrate</title><link>https://blogs.blackmarble.co.uk/dbulman/what-i-saw-at-integrate/</link><pubDate>Thu, 12 Jun 2025 11:19:45 +0100</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/what-i-saw-at-integrate/</guid><description>
&lt;h3 id="codeful-workflows">Codeful Workflows&lt;/h3>
&lt;p>Integrate 2025 was a whirlwind of innovation and insights, and I’m excited to share some of the highlights that caught my attention. Here’s a breakdown of what I saw and learned:&lt;/p>
&lt;h4 id="agentic-loops-and-multi-agent-hand-offs">Agentic Loops and Multi-Agent Hand-Offs&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Agentic Loops&lt;/strong>: A big push on workflows that leverage AI to create self-sustaining, codeful processes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Multi-Agent Hand-Offs&lt;/strong>: Two exciting features are on the horizon:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>State Machine-Based Hand-Offs&lt;/strong> (Coming Soon)&lt;/li>
&lt;li>&lt;strong>Nested Hand-Offs&lt;/strong> (Coming Soon)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="microsoft-fabric-and-real-time-data">Microsoft Fabric and Real-Time Data&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>A plethora of sessions showcased &lt;strong>Microsoft Fabric&lt;/strong>, emphasizing real-time data access and manipulation.&lt;/p></description></item><item><title>A Quick Over-Vue to Vue</title><link>https://blogs.blackmarble.co.uk/dbulman/a-quick-over-vue-to-vue/</link><pubDate>Wed, 11 Jun 2025 01:14:17 +0100</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/a-quick-over-vue-to-vue/</guid><description>
&lt;h3 id="what-is-vue">What is Vue?&lt;/h3>
&lt;p>Vue is a progressive JavaScript framework for building user interfaces, first released in 2014. Vue is designed to be incrementally adoptable, meaning you can use as much or as little of it as you need, from enhancing a single page to even more.&lt;/p>
&lt;h3 id="the-need-for-vue">The Need for Vue&lt;/h3>
&lt;p>Modern web development often requires dynamic, interactive interfaces. Before frameworks like Vue, developers relied on vanilla JavaScript or jQuery, which could quickly become unwieldy as applications grew. Vue addresses these challenges by providing a reactive data-binding system, component-based architecture, and a declarative approach to UI development, making code more maintainable and scalable.&lt;/p></description></item><item><title>Building a GitHub Action for React App Deployment</title><link>https://blogs.blackmarble.co.uk/dbulman/building-a-github-action-for-react-app-deployment/</link><pubDate>Tue, 21 Jan 2025 09:51:38 +0000</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/building-a-github-action-for-react-app-deployment/</guid><description>
&lt;p>Issue:&lt;/p>
&lt;p>During the creation of a basic react app, the result of a build of this app must be displayed as a static web application hosted in GitHub pages.&lt;/p>
&lt;p>Solution:&lt;/p>
&lt;p>Configuring a GitHub action (YAML) in order to build the react app and then clone the build over to the GitHub pages deployment branch.&lt;/p>
&lt;p>Below is the resulting YAML pipeline for this:&lt;/p>
&lt;div class="highlight">&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;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Deploy gh-page Branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">contents&lt;/span>: &lt;span style="color:#ae81ff">write&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Run workflow on every push to the master branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">on&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">push&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">branches&lt;/span>: [ &lt;span style="color:#ae81ff">main ]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">jobs&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">deploy-to-github-pages&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># use ubuntu-latest image to run steps on&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">runs-on&lt;/span>: &lt;span style="color:#ae81ff">ubuntu-latest&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">steps&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># uses GitHub&amp;#39;s checkout action to checkout code form the master branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/checkout@v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># sets up node&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Setup node&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">actions/setup-node@v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Installs required npm packages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Installs required npm dependencies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: &lt;span style="color:#ae81ff">npm install&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Generate npm build&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Generates npm build&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">run&lt;/span>: &lt;span style="color:#ae81ff">npm run build&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Commit to gh-pages branch&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">name&lt;/span>: &lt;span style="color:#ae81ff">Commit wwwroot to GitHub Pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">uses&lt;/span>: &lt;span style="color:#ae81ff">JamesIves/github-pages-deploy-action@v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">with&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">BRANCH&lt;/span>: &lt;span style="color:#ae81ff">gh-pages&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">FOLDER&lt;/span>: &lt;span style="color:#ae81ff">build&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>&lt;strong>For the original version of this post see Daniel Bulman's personal blog at &lt;a href="https://d.abulman.com/blog/posts/building-a-github-action-for-react-app-deployment/">Building a GitHub Action for React App Deployment&lt;/a>&lt;/strong>&lt;/p></description></item><item><title>GraphQL the Basics</title><link>https://blogs.blackmarble.co.uk/dbulman/graphql-the-basics/</link><pubDate>Tue, 21 Jan 2025 09:50:37 +0000</pubDate><author>Daniel Bulman</author><guid>https://blogs.blackmarble.co.uk/dbulman/graphql-the-basics/</guid><description>
&lt;h3 id="what-is-graphql">What is GraphQL?&lt;/h3>
&lt;p>GraphQL is an open-source data query language developed by Facebook in 2012, which was then released as an open-source project in 2015. Unlike traditional RESTful APIs, which require specific endpoints for data retrieval, GraphQL adopts a different approach. Instead of fetching entire resources, GraphQL allows clients to request the specific data they require from requested objects.&lt;/p>
&lt;h3 id="the-need-for-graphql">The Need for GraphQL&lt;/h3>
&lt;p>Facebook struggled with performance issues in its mobile application during the early 2010s. The sheer volume of data being requested, including every user, post, comment, and article on a users feed led to slow loading times, high data consumption, and excessive battery drain on client devices.&lt;/p></description></item></channel></rss>