<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-AU" xmlns:media="http://search.yahoo.com/mrss/">
  <id>https://david.gardiner.net.au/tags/Talks.xml</id>
  <title type="html">David Gardiner - Talks</title>
  <updated>2026-04-10T02:36:14.418Z</updated>
  <subtitle>Blog posts tagged with &apos;Talks&apos; - A blog of software development, .NET and other interesting things</subtitle>
  <rights>Copyright 2026 David Gardiner</rights>
  <icon>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=64</icon>
  <logo>https://www.gravatar.com/avatar/37edf2567185071646d62ba28b868fab?s=256</logo>
  <generator uri="https://github.com/flcdrg/astrojs-atom" version="3">astrojs-atom</generator>
  <author>
    <name>David Gardiner</name>
  </author>
  <link href="https://david.gardiner.net.au/tags/Talks.xml" rel="self" type="application/atom+xml"/>
  <link href="https://david.gardiner.net.au/tags/Talks" rel="alternate" type="text/html" hreflang="en-AU"/>
  <category term="Talks"/>
  <category term="Software Development"/>
  <entry>
    <id>https://david.gardiner.net.au/2025/11/aspire-without-dotnet</id>
    <updated>2025-11-17T08:00:00.000+10:30</updated>
    <title>Aspire with Python, React, Rust and Node apps</title>
    <link href="https://david.gardiner.net.au/2025/11/aspire-without-dotnet" rel="alternate" type="text/html" title="Aspire with Python, React, Rust and Node apps"/>
    <category term=".NET"/>
    <category term="Aspire"/>
    <category term="Talks"/>
    <published>2025-11-17T08:00:00.000+10:30</published>
    <summary type="html">Using Aspire to build a distributed application with Python, React, Rust and Node.js components</summary>
    <content type="html">&lt;p&gt;Aspire (formerly .NET Aspire) is a great way to create observable, production-ready distributed apps by defining a code-based model of services, resources, and connections. It simplifies local development and debugging, as well as deployment.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/aspire-logo-256.CA6LsmXl_2gR0dV.webp&quot; alt=&quot;Aspire logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;By their very nature, distributed applications will have at least a few (if not a lot) of components. This presents a challenge both for the local developer experience and for deployment. Aspire seeks to simplify this by allowing you to model the services, resources, and connections in code. With one command you can then not only launch everything locally, but ensure that each service knows how to connect to the other services it needs to function.&lt;/p&gt;
&lt;p&gt;You can use it for both development and deployment, or if you already have an existing deployment process you&apos;re happy with (eg. Infrastructure as Code/deployment pipelines) you can just use Aspire to simply your local development experience.&lt;/p&gt;
&lt;p&gt;Check out my previous post &lt;a href=&quot;/2025/11/aspire&quot;&gt;Introducing Aspire&lt;/a&gt; for an overview of what Aspire is and how it works.&lt;/p&gt;
&lt;p&gt;As part of this year&apos;s .NET Conf virtual conference, I presented a talk &quot;Taking .NET out of .NET Aspire - working with non-.NET applications&quot;, in which I show how despite Aspire being written in .NET, it can integrate with a whole range of other software languages ecosystems. Here&apos;s the recording of that presentation:&lt;/p&gt;



&lt;p&gt;One issue with the talk was that it had to be pre-recorded a couple of weeks beforehand, so it was done using the Aspire 9.5 bits. Now that Aspire 13.0 is out, some of the packages that I used from the Community Toolkit in the demo are no longer necessary as Aspire has improved the integration with Python and Node.js applications.&lt;/p&gt;
&lt;p&gt;The source code for the demo can be found at &lt;a href=&quot;https://github.com/flcdrg/aspire-non-dotnet&quot;&gt;https://github.com/flcdrg/aspire-non-dotnet&lt;/a&gt;. A quick glance and you might think &quot;there&apos;s no .NET or Aspire in this repo&quot; and if you just look at the &lt;code&gt;main&lt;/code&gt; branch then you&apos;d be right. There are separate branches where I incrementally integrate each component into Aspire.&lt;/p&gt;
&lt;p&gt;The scenario I demo is a &apos;Pet supplies&apos; e-commerce website, with a React front-end, Python backend API running with MongoDB. The Python backend also talks to a Rust-based payment gateway service, and as a bonus step right at the end I add a Node.js server app to provide random pet jokes!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/aspire-petstore-web.NuLNUsqZ_Z2ud4JN.webp&quot; alt=&quot;Screenshot of Pet supplies web page&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The technology mix is not unheard of, particularly at some larger organisations where you may have different teams working on different features or services and sometimes they are allowed enough autonomy to choose their own technology stack. Whether this is a case of &quot;using the right tool for the job&quot; or &quot;must use the current shiny new thing&quot; isn&apos;t so important. The reality is that for good or other reasons you often find yourself in this situation.&lt;/p&gt;
&lt;h2&gt;MongoDB&lt;/h2&gt;
&lt;p&gt;MongoDB is supported out of the box in Aspire. The original process was to launch this via &lt;code&gt;docker compose&lt;/code&gt;. Aspire actually &lt;a href=&quot;https://aspire.dev/integrations/compute/docker/&quot;&gt;supports compose files too (via the Aspire.Hosting.Docker package)&lt;/a&gt;, but in this case I&apos;m taking advantage of the &lt;a href=&quot;https://aspire.dev/integrations/databases/mongodb/&quot;&gt;&lt;code&gt;Aspire.Hosting.MongoDB&lt;/code&gt;&lt;/a&gt; to configure the MongoDB service, database, and for bonus points, include the Mongo Express management UI. This will still run in a Docker container, but Aspire handles all the configuration for me.&lt;/p&gt;



&lt;pre&gt;&lt;code&gt;var mongo = builder.AddMongoDB(&quot;mongo&quot;)
    .WithDataVolume()
    .WithMongoExpress();

var mongodb = mongo.AddDatabase(&quot;petstore&quot;);
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;code&gt;WithDataVolume()&lt;/code&gt; means that a Docker volume is created to persist the database data between runs.&lt;/p&gt;
&lt;p&gt;The original implementation also has a PowerShell script to populate the database with sample data. I wired up that script so that it gets run automatically when the MongoDB service starts up in Aspire.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var loadData = builder.AddExecutable(&quot;load-data&quot;, &quot;pwsh&quot;, &quot;../mongodb&quot;, &quot;-noprofile&quot;, &quot;./populate.ps1&quot;)
    .WaitFor(mongo)
    .WithArgs(&quot;-connectionString&quot;)
    .WithArgs(new ConnectionStringReference(mongo.Resource, false));
//.WithExplicitStart();
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The script conveniently already had a parameter defined to pass in a connection string, so I take advantage of that.&lt;/p&gt;
&lt;p&gt;If you&apos;d prefer to just run the script manually (rather than every time you start Aspire) you could uncomment the &lt;code&gt;.WithExplicitStart()&lt;/code&gt; method.&lt;/p&gt;
&lt;h2&gt;Rust&lt;/h2&gt;
&lt;p&gt;I&apos;ve never used the Rust programming language before, but it is becoming increasingly popular, especially where you might previously have used C or C++. Rust uses &lt;a href=&quot;https://doc.rust-lang.org/cargo/&quot;&gt;Cargo&lt;/a&gt; as its package manager and build tool. Support for building and running Rust applications is provided by the &lt;a href=&quot;https://aspire.dev/integrations/frameworks/rust/&quot;&gt;Community Toolkit&apos;s CommunityToolkit.Aspire.Hosting.Rust package&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Configuring the Rust application is quite straightforward with the &lt;code&gt;AddRustApp&lt;/code&gt; method. The application has a default port it listens on but allows that to be overridden via the &lt;code&gt;PAYMENT_API_PORT&lt;/code&gt; environment variable. Aspire will set that to the appropriate port number by the call to &lt;code&gt;WithHttpEndpoint&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var rust = builder.AddRustApp(&quot;rustpaymentapi&quot;, &quot;../RustPaymentApi&quot;, [])
    .WithHttpEndpoint(env: &quot;PAYMENT_API_PORT&quot;);
&lt;/code&gt;&lt;/pre&gt;


&lt;h2&gt;Node.js&lt;/h2&gt;
&lt;p&gt;JavaScript is well known as a front end language, but platforms like Node.js allow you to write server-side applications in JavaScript (and TypeScript) too. Aspire 13.0 introduces improved support for JavaScript apps via a new &lt;a href=&quot;https://www.nuget.org/packages/Aspire.Hosting.JavaScript&quot;&gt;Aspire.Hosting.JavaScript package&lt;/a&gt;. This includes the ability to configure using &lt;code&gt;pnpm&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt; package managers (the default being &lt;code&gt;npm&lt;/code&gt;).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var nodeApp = builder.AddJavaScriptApp(&quot;node-joke-api&quot;, &quot;../NodeApp&quot;, &quot;start&quot;)
    .WithPnpm()
    // If you are using fnm for Node.js version management, you might need to adjust the PATH
    .WithEnvironment(&quot;PATH&quot;, Environment.GetEnvironmentVariable(&quot;PATH&quot;) + &quot;;&quot; + Environment.ExpandEnvironmentVariables(@&quot;%USERPROFILE%\AppData\Roaming\fnm\aliases\default&quot;))
    .WithHttpEndpoint(env: &quot;PORT&quot;)
    .WithOtlpExporter();
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;I use &lt;a href=&quot;https://github.com/Schniz/fnm&quot;&gt;&lt;code&gt;fnm&lt;/code&gt;&lt;/a&gt; (Fast Node Manager) to manage my Node.js versions. This means that the actual &lt;code&gt;node&lt;/code&gt; executable is not in the PATH by default, but rather is added (or updated) dynamically as I change directory via my PowerShell profile script. Because that script isn&apos;t run by Aspire, I explicity append the &lt;code&gt;fnm&lt;/code&gt; default alias directory to the PATH environment variable so that &lt;code&gt;node&lt;/code&gt; can be found.&lt;/p&gt;
&lt;h2&gt;Python&lt;/h2&gt;
&lt;p&gt;Python is an interesting ecosystem. There are a number of different package managers that will influence how you work with it. Aspire has first-class support for Python applications that use &lt;code&gt;pip&lt;/code&gt; via the &lt;code&gt;Aspire.Hosting.Python&lt;/code&gt; NuGet package. (See &lt;a href=&quot;https://aspire.dev/get-started/first-app/?lang=python&quot;&gt;Python apps in Aspire&lt;/a&gt; for more details).&lt;/p&gt;
&lt;p&gt;I recently worked on a client engagement where they were using &lt;a href=&quot;https://docs.astral.sh/uv/&quot;&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt; with their Python applications. Aspire 13.0 now includes direct support for &lt;code&gt;uv&lt;/code&gt; (via &lt;code&gt;WithUv()&lt;/code&gt;) and &lt;code&gt;uvicorn&lt;/code&gt; (with &lt;code&gt;AddUvicornApp()&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var pythonApp = builder.AddUvicornApp(&quot;python-api&quot;, &quot;../PythonUv&quot;, &quot;src.api:app&quot;)
    .WithUv()
    .WaitFor(mongo)
    .WaitFor(rust)
    .WaitFor(nodeApp)
    .WithEnvironment(&quot;PYTHONIOENCODING&quot;, &quot;utf-8&quot;)
    .WithEnvironment(&quot;MONGO_CONNECTION_STRING&quot;, new ConnectionStringReference(mongo.Resource, false))
    .WithEnvironment(&quot;PAYMENT_API_BASE_URL&quot;, new EndpointReference(rust.Resource, &quot;http&quot;))
    .WithEnvironment(&quot;NODE_APP_BASE_URL&quot;, ReferenceExpression.Create($&quot;{nodeApp.Resource.GetEndpoint(&quot;http&quot;)}&quot;))
    .WithHttpHealthCheck(&quot;/&quot;)
    .WithExternalHttpEndpoints();
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;We wait for the MongoDB service, the Rust payment service, and the Node.js joke service, so that they have all started before the Python app. We also set up environment variables to pass in the connection strings and endpoints that the Python app needs to connect to those services.&lt;/p&gt;
&lt;h2&gt;A Vite React Frontend web app&lt;/h2&gt;
&lt;p&gt;The same &lt;code&gt;Aspire.Hosting.JavaScript&lt;/code&gt; package that we used to wire up the Node.js application can also be used for the frontend web app. Helpfully, it specifically includes support for Vite apps&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var web = builder.AddViteApp(&quot;web&quot;, &quot;../web-vite-react&quot;)
    .WithPnpm()
    // If you are using fnm for Node.js version management, you might need to adjust the PATH
    .WithEnvironment(&quot;PATH&quot;, Environment.GetEnvironmentVariable(&quot;PATH&quot;) + &quot;;&quot; + Environment.ExpandEnvironmentVariables(@&quot;%USERPROFILE%\AppData\Roaming\fnm\aliases\default&quot;))
    .WaitFor(pythonApp)
    .WithEnvironment(&quot;VITE_API_BASE_URL&quot;, new EndpointReference(pythonApp.Resource, &quot;http&quot;));
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Again, because I use &lt;code&gt;fnm&lt;/code&gt; to manage my Node.js versions, I need to append the &lt;code&gt;fnm&lt;/code&gt; default alias directory to the PATH environment variable so that &lt;code&gt;node&lt;/code&gt; can be found.&lt;/p&gt;
&lt;p&gt;The frontend application only talks to the Python backend API, so we enusre that service has started first, and set up the &lt;code&gt;VITE_API_BASE_URL&lt;/code&gt; environment variable so that the Vite app knows where to find the API.&lt;/p&gt;
&lt;p&gt;And with that in place, we can run the entire distributed application locally with a single command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet run --project ./AspireAppHost/AspireAppHost.csproj --launch-profile http
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Not all of the applications I&apos;m using here support HTTPS self-signed development certificates, so I stick with running everything over HTTP for now. This is something that Aspire has improved on in 13.0. Obviously in a production deployment you&apos;d want to use HTTPS everywhere. If I didn&apos;t need to set the launch profile, then I could use the Aspire CLI instead:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;aspire run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The nice thing about all this is I didn&apos;t need to make any changes any of the front end or back end applications to get them to work with Aspire. All the configuration was done in the Aspire host application. This assumes that your applications have provided a &apos;seam&apos; (eg. environment variables or command line arguments) to allow you to configure things like connection strings, ports, and endpoints.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/aspire-petstore-resources.CkupUbS-_Z1nuOUe.webp&quot; alt=&quot;Screenshot of Aspire dashboard showing resources page&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here&apos;s the final version of AppHost.cs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var builder = DistributedApplication.CreateBuilder(args);

// MongoDB
var mongo = builder.AddMongoDB(&quot;mongo&quot;)
    .WithDataVolume()
    .WithMongoExpress();

var mongodb = mongo.AddDatabase(&quot;petstore&quot;);

var loadData = builder.AddExecutable(&quot;load-data&quot;, &quot;pwsh&quot;, &quot;../mongodb&quot;, &quot;-noprofile&quot;, &quot;./populate.ps1&quot;)
    .WaitFor(mongo)
    .WithArgs(&quot;-connectionString&quot;)
    .WithArgs(new ConnectionStringReference(mongo.Resource, false));
//.WithExplicitStart();

// Rust service
var rust = builder.AddRustApp(&quot;rustpaymentapi&quot;, &quot;../RustPaymentApi&quot;, [])
    .WithHttpEndpoint(env: &quot;PAYMENT_API_PORT&quot;);

// Node.js App
var nodeApp = builder.AddJavaScriptApp(&quot;node-joke-api&quot;, &quot;../NodeApp&quot;, &quot;start&quot;)
    .WithPnpm()
    // If you are using fnm for Node.js version management, you might need to adjust the PATH
    .WithEnvironment(&quot;PATH&quot;, Environment.GetEnvironmentVariable(&quot;PATH&quot;) + &quot;;&quot; + Environment.ExpandEnvironmentVariables(@&quot;%USERPROFILE%\AppData\Roaming\fnm\aliases\default&quot;))
    .WithHttpEndpoint(env: &quot;PORT&quot;)
    .WithOtlpExporter();

// Python API
var pythonApp = builder.AddUvicornApp(&quot;python-api&quot;, &quot;../PythonUv&quot;, &quot;src.api:app&quot;)
    .WithUv()
    .WaitFor(mongo)
    .WaitFor(rust)
    .WaitFor(nodeApp)
    .WithEnvironment(&quot;PYTHONIOENCODING&quot;, &quot;utf-8&quot;)
    .WithEnvironment(&quot;MONGO_CONNECTION_STRING&quot;, new ConnectionStringReference(mongo.Resource, false))
    .WithEnvironment(&quot;PAYMENT_API_BASE_URL&quot;, new EndpointReference(rust.Resource, &quot;http&quot;))
    .WithEnvironment(&quot;NODE_APP_BASE_URL&quot;, ReferenceExpression.Create($&quot;{nodeApp.Resource.GetEndpoint(&quot;http&quot;)}&quot;))
    .WithHttpHealthCheck(&quot;/&quot;)
    .WithExternalHttpEndpoints();

// Frontend
var web = builder.AddViteApp(&quot;web&quot;, &quot;../web-vite-react&quot;)
    .WithPnpm()
    // If you are using fnm for Node.js version management, you might need to adjust the PATH
    .WithEnvironment(&quot;PATH&quot;, Environment.GetEnvironmentVariable(&quot;PATH&quot;) + &quot;;&quot; + Environment.ExpandEnvironmentVariables(@&quot;%USERPROFILE%\AppData\Roaming\fnm\aliases\default&quot;))
    .WaitFor(pythonApp)
    .WithEnvironment(&quot;VITE_API_BASE_URL&quot;, new EndpointReference(pythonApp.Resource, &quot;http&quot;));

builder.Build().Run();
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;To get the full benefit of Aspire you will want to take a look at adding OpenTelemetry instrumentation. If you already have that in place then there&apos;s probably nothing to change. Aspire will set a bunch of OpenTelemetry-related environment variables for each application. If that&apos;a new thing then you&apos;ll get the double benefit of then being able to take advantage of that telemetry when your applications are deployed to production too!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/aspire-petstore-traces.ZXy-RHuR_Z1wOzaQ.webp&quot; alt=&quot;Screenshot of Aspire dashboard showing traces page&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/aspire-petstore-metrics.B07KqI6V_Z1h2lSh.webp&quot; alt=&quot;Screenshot of Aspire dashboard showing metrics page&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Aspire has the potential to greatly simplify and improve the local development experience for distributed applications - potentially removing the need for numerous scripts and manual steps for a developer to get up and running much more quickly. It&apos;s also a tool that can benefit almost every development team, regardless of the technology stack they are using.&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/aspire-logo-256.CA6LsmXl.png" width="256" height="256"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/aspire-logo-256.CA6LsmXl.png" width="256" height="256"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2025/05/adelaide-azure</id>
    <updated>2025-05-26T22:00:00.000+09:30</updated>
    <title>Import Azure applications into Terraform</title>
    <link href="https://david.gardiner.net.au/2025/05/adelaide-azure" rel="alternate" type="text/html" title="Import Azure applications into Terraform"/>
    <category term="Azure"/>
    <category term="Talks"/>
    <category term="User Groups"/>
    <published>2025-05-26T22:00:00.000+09:30</published>
    <summary type="html">Speaking at the Adelaide Azure User Group about importing legacy Azure apps into Terraform</summary>
    <content type="html">&lt;p&gt;I&apos;m looking forward to presenting at the &lt;a href=&quot;https://www.meetup.com/adelaide-azure-user-group/events/308059790/&quot;&gt;Adelaide Azure User Group&lt;/a&gt; next month about the process of importing a &apos;brownfield&apos; Azure application into Terraform.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/terraform-logo.CiRDK2M7_Z21UAf8.webp&quot; alt=&quot;Terraform logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform&quot;&gt;Terraform&lt;/a&gt; is a popular infrastructure as code tool. Starting off from scratch with Terraform is pretty straightforward. But what if you&apos;ve already got your cloud infrastructure deployed but you didn&apos;t use Terraform, Bicep or another Infrastructure as Code tool? Maybe you just created resources in the Portal directly, or used the Azure CLI or PowerShell.&lt;/p&gt;
&lt;p&gt;This talk steps through this scenario, demonstrating how to use tools to generate Terraform, common issues to watch out for, and hwo to make it work across multiple environments.&lt;/p&gt;
&lt;p&gt;Register to attend at &lt;a href=&quot;https://www.meetup.com/adelaide-azure-user-group/events/308059790&quot;&gt;https://www.meetup.com/adelaide-azure-user-group/events/308059790&lt;/a&gt;.&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/terraform-logo.CiRDK2M7.png" width="309" height="312"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/terraform-logo.CiRDK2M7.png" width="309" height="312"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2024/12/ddd-brisbane</id>
    <updated>2024-12-08T22:00:00.000+10:30</updated>
    <title>DDD Brisbane 2024</title>
    <link href="https://david.gardiner.net.au/2024/12/ddd-brisbane" rel="alternate" type="text/html" title="DDD Brisbane 2024"/>
    <category term="Conferences"/>
    <category term="Talks"/>
    <published>2024-12-08T22:00:00.000+10:30</published>
    <summary type="html">Well this was an early Christmas present. I had submitted a talk for DDD Brisbane earlier this year, and it got voted in! So my work (SixPivot) kindly flew me up to Brisbane for the weekend. I&apos;d never been to DDD Brisbane before, so I was really looking forward to being there.</summary>
    <content type="html">&lt;p&gt;Well this was an early Christmas present. I had submitted a talk for &lt;a href=&quot;https://www.dddbrisbane.com&quot;&gt;DDD Brisbane&lt;/a&gt; earlier this year, and it got voted in! So my work (&lt;a href=&quot;https://www.sixpivot.com.au&quot;&gt;SixPivot&lt;/a&gt;) kindly flew me up to Brisbane for the weekend. I&apos;d never been to DDD Brisbane before, so I was really looking forward to being there.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-crazy-dave.BCd6jGBB_1rJ7OO.webp&quot; alt=&quot;David very excited to be at DDD Brisbane&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It was only &lt;a href=&quot;/2024/11/ddd-adelaide-2024&quot;&gt;two weeks ago&lt;/a&gt; that we ran &lt;a href=&quot;https://www.dddadelaide.com&quot;&gt;DDD Adelaide&lt;/a&gt;, but it&apos;s quite a different experience being an organiser compared to just being an attendee. &lt;a href=&quot;https://www.linkedin.com/in/chriswithpants&quot;&gt;Chris Gilbert&lt;/a&gt; (one of the DDD Brisbane organisers) also works at SixPivot so when I knew I&apos;d be going I mentioned to him I&apos;d be happy to help out on the day. So as well as speaking I was also a DDD Brisbane volunteer (complete with a bright red t-shirt!). It was a great way to support the event, as well as giving me an inside perspective on how the Brisbane team do DDD and hopefully be able to bring home some new ideas for Adelaide.&lt;/p&gt;
&lt;p&gt;I stayed at the &lt;a href=&quot;https://www.vineapartments.com.au/&quot;&gt;Vine Apartments&lt;/a&gt;, which is conveniently a short walk from Brisbane State High School (where DDD Brisbane is held). Just before 7am Saturday morning, &lt;a href=&quot;https://soulsolutions.com.au/&quot;&gt;Bronwen Zande&lt;/a&gt; (the other DDD Brisbane 2024 organiser) and John O&apos;Brien (who was also the DDD Brisbane photographer) picked me up on their way through, and we began setting up.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-setup.DhbH03rf_ZPV5HK.webp&quot; alt=&quot;Main room being readied early Saturday&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A bunch of other volunteers quickly appeared and a very organised preparation began. They have obviously done this before as they knew what needed to be done, and what needed to go where.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-registration.CJoPcTjT_Z1t8BrQ.webp&quot; alt=&quot;People registering and receiving their bags and lanyards&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Around 8am registrations began. It&apos;s a similar process to Adelaide, with attendees being &apos;checked in&apos; via an app, and then given lanyards and really nifty bags (made by &lt;a href=&quot;https://boomerangbags.org/&quot;&gt;Boomerang Bags&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The keynote speaker was &lt;a href=&quot;https://www.linkedin.com/in/joelpob/&quot;&gt;Joel Pobar&lt;/a&gt;. I remember seeing him speak at a few Microsoft TechEd conferences &lt;a href=&quot;/2005/11/microsoft-sydney-launch-party-part-2&quot;&gt;many years ago&lt;/a&gt;, so it was interesting to hear what he&apos;s been up to since those days. He now works for &lt;a href=&quot;https://www.anthropic.com/&quot;&gt;Anthropic&lt;/a&gt;, and his talk on AI was a) pretty deep, with a few maths equations that were a bit over my head and b) left me feeling a bit uneasy about the future as he shared his own concerns about where things might be heading. A personal quibble, I would have preferred he kept his language G rated. That was a distraction I didn&apos;t think was necessary.&lt;/p&gt;
&lt;p&gt;Then I was off to act as host for the &apos;PAC 2&apos; session room (they ran 4 breakout sessions in parallel for most of the day).&lt;/p&gt;
&lt;p&gt;I heard Daniel Fang present &quot;LEGO + Python + GPT = The Journey from Dad to Superdad with OpenAI and Robotics!&quot;&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-morning-tea.DscqPf5E_S63DK.webp&quot; alt=&quot;Fruit and biscuits for morning tea&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A short break for morning tea with fresh fruit and some nice biscuits.&lt;/p&gt;
&lt;p&gt;Then Jason Taylor with &quot;Practical Clean Architecture with ASP.NET Core 9&quot;. I hope we can get Jason down to Adelaide to speak at &lt;a href=&quot;https://www.adnug.net&quot;&gt;Adelaide .NET User Group&lt;/a&gt; sometime.&lt;/p&gt;
&lt;p&gt;Followed by Stephen Rees-Carter with &quot;Th1nk Lik3 a H4cker&quot;. This was really interesting hands-on session with the audience invited to try and hack along with Stephen.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-lunch2.B_seImm4_Z22x3Sw.webp&quot; alt=&quot;Attendees lining up to get lunch&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Lunch was served outside. Roast beef, chicken, and hot vegetables - yum.&lt;/p&gt;
&lt;p&gt;I handed over my room hosting duties for PAC 2 to my SixPivot colleague Dylan (who was also volunteering for the day), so I was now free to check out some sessions in different rooms for the afternoon (apart from when it was time for me to present back in PAC 2).&lt;/p&gt;
&lt;p&gt;I caught a bit of Bryden Oliver &amp;amp; Luke Parker presenting &quot;Feel the Mayhem - When Deployments go Wrong&quot;. This was less about the technical details of failed deployments (which I&apos;ve previously done talks on myself) and more about the &quot;people and process&quot; part of recovering from an incident.&lt;/p&gt;
&lt;p&gt;I left a few minutes early (to get back to the PAC 2 room to start preparing for my presentation) and caught the end of Aaron Powell&apos;s &quot;I&apos;ve burnt out, now what&quot;.&lt;/p&gt;
&lt;p&gt;Then it was my turn to present &quot;10 tips and tricks for GitHub Actions and Azure DevOps&quot;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-david-presenting.DssuerHN_Z1So3YK.webp&quot; alt=&quot;David presenting his talk&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&apos;d previously presented this talk at Adelaide .NET User Group a few months ago and it went over an hour. I knew I only had 45 minutes at DDD, so when I did a test run for my work colleagues earlier this week I tried to tighten it up, but over compensated by finishing it in about 25 minutes! A few more practice runs helped to find the middle ground, such that on the day I finished right about the 40 minute mark, giving 5 minutes for a few questions at the end. I also was able to give out a couple of pairs of DDD Adelaide socks.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-after-davids-talk.CvG_mUTI_Zsq1eW.webp&quot; alt=&quot;David speaking to some people after his talk had finished&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After a spot of afternoon tea (actually I was chatting to people so much it was all gone by the time I realised!), it was off the last session of the day - Joe Patterson with &quot;Simplicity Driven Design&quot;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-audience.JLd0d5BF_ZNOiLt.webp&quot; alt=&quot;Closing keynote audience&quot; /&gt;&lt;/p&gt;
&lt;p&gt;DDD Brisbane have a locknote to finish off the day. This year it was &lt;a href=&quot;https://www.jeninebeekhuyzen.com&quot;&gt;Dr Jenine Beekhuyzen OAM&lt;/a&gt;. I have not met her before, but I do have an interesting connection. A number of years ago Bronwen Zande was promoting the &lt;a href=&quot;https://www.amazon.com.au/Tech-Girls-Superheroes-Jenine-Beekhuyzen-ebook/dp/B07MJ6QTR9?&amp;amp;linkCode=ll1&amp;amp;tag=flcdrg07-22&amp;amp;linkId=7217e1eb2c0c05b458eec0cb87d16cc9&amp;amp;language=en_AU&amp;amp;ref_=as_li_ss_tl&quot;&gt;Tech Girls are Superheroes&lt;/a&gt; books (written by Dr Beekhuyzen) on Twitter and I was able to get a copy for my eldest daughter.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-jenine-beekhuyzen.DUxtGj2e_Z1NObGy.webp&quot; alt=&quot;Dr Jenine Beekhuyzen on stage&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Sometime later, I&apos;d arranged for Bronwen to speak to the Adelaide .NET User Group and while she was visiting I also arranged for her to visit the high school my kids attended and she gave a talk about her experience as a software developer (and more excitingly for the students) working with Microsoft&apos;s HoloLens.&lt;/p&gt;
&lt;p&gt;So now it was great to hear Dr Beekhuyzen in person. Bronwen had asked me a few weeks ago if I might ask my daughter if she had any thoughts on the impact reading the book and having relevant role models might have had.&lt;/p&gt;
&lt;p&gt;Near the end of Jenine&apos;s talk, Bronwen invited me up on stage to share her thoughts. I was able to thank both Jenine and Bronwen for their positive influence and read out the following quote from my daughter:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It was encouraging to read stories about women in tech at a young age when I was making decisions about what I wanted to do in the future&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-prize-draw.Dgr91a7I_ZblfDB.webp&quot; alt=&quot;Chris and Bronwen doing the prize draw&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After the prize draw (which cleverly required that you had submitted feedback at least once to be eligible to win, as well as be present in the room), there were thank yous and a closing farewell, and also an intriguing hint of a possible &apos;DDD Outback 2025&apos; satellite event.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-outback.CI6s06hk_Z25Anz4.webp&quot; alt=&quot;Slide for DDD Outback 2025&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then it was time to pack down (which again didn&apos;t take too long with the volunteers all pitching in), and a final farewell to my DDD Brisbane friends.&lt;/p&gt;
&lt;p&gt;It was such a privilege to be able to attend and I can&apos;t thank enough the organisers, volunteers and also the sponsors for all they&apos;ve done to put on another successful event. I hope I get an opportunity to visit again in the future.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddd-bne-david-banner.sKYYcTlK_daYfr.webp&quot; alt=&quot;David next to the DDD Brisbane banner&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[OAM]: Medal of the Order of Australia&lt;/li&gt;
&lt;/ul&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/ddd-bne-logo.CmuF17oD.png" width="660" height="403"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/ddd-bne-logo.CmuF17oD.png" width="660" height="403"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2022/01/speaking-at-dotnet-conference</id>
    <updated>2022-01-25T07:00:00.000+10:30</updated>
    <title>Speaking at .NET Conference 2022</title>
    <link href="https://david.gardiner.net.au/2022/01/speaking-at-dotnet-conference" rel="alternate" type="text/html" title="Speaking at .NET Conference 2022"/>
    <category term="Talks"/>
    <category term=".NET"/>
    <published>2022-01-25T07:00:00.000+10:30</published>
    <summary type="html">I&apos;m excited to be speaking at C# Corner&apos;s .NET Conference 2022 tomorrow.  I&apos;ll be presenting my talk &quot;What&apos;s new in .NET 6 and Visual Studio 2022&quot;. Join me online at (depending on your time zone): So yes, an early start for me on my Australia Day public holiday! It&apos;s free to attend the conference, just head over to here to register.</summary>
    <content type="html">&lt;p&gt;I&apos;m excited to be speaking at C# Corner&apos;s &lt;a href=&quot;https://dotnetconference.com/&quot;&gt;.NET Conference 2022&lt;/a&gt; tomorrow.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/dotnet-conference-2022.d9BfdTDE_ZachwM.webp&quot; alt=&quot;.NET Conference 2022 title&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&apos;ll be presenting my talk &quot;What&apos;s new in .NET 6 and Visual Studio 2022&quot;. Join me online at (depending on your time zone):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.timeanddate.com/worldclock/converter.html?iso=20220125T211000&amp;amp;p1=tz_et&amp;amp;p2=5&amp;amp;p3=1440&quot;&gt;UTC 25-Jan-2022 21:10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;UTC+1030 26-Jan-2022 7:40&lt;/li&gt;
&lt;li&gt;UTC-5 25-Jan-2022 4:10&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So yes, an early start for me on my Australia Day public holiday!&lt;/p&gt;
&lt;p&gt;It&apos;s free to attend the conference, just head &lt;a href=&quot;https://www.c-sharpcorner.com/login?returnurl=https://www.c-sharpcorner.com/chapters/joinevent/1389/&quot;&gt;over to here to register&lt;/a&gt;.&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/dotnet-conference-2022.d9BfdTDE.jpg" width="274" height="101"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/dotnet-conference-2022.d9BfdTDE.jpg" width="274" height="101"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2020/12/ddd-uk</id>
    <updated>2020-12-05T11:00:00.000+10:30</updated>
    <title>Speaking at DDD UK</title>
    <link href="https://david.gardiner.net.au/2020/12/ddd-uk" rel="alternate" type="text/html" title="Speaking at DDD UK"/>
    <category term="Talks"/>
    <category term="Conferences"/>
    <published>2020-12-05T11:00:00.000+10:30</published>
    <summary type="html">I just found out that my talk &apos;Harder, Better, Faster, Stronger Builds&apos; has been accepted for Developer! Developer! Developer! Day in the United Kingdom on Saturday 12th December. I won&apos;t be flying to the other side of the world, but rather this year the UK&apos;s premier free developer conference is being run virtually. Given the time zone difference, I&apos;ll be staying up into the early hours of Sunday morning to present my talk (12.30am my time, so manageable). …</summary>
    <content type="html">
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/ddduk.CXTbobqs_Z1Ce0G.webp&quot; alt=&quot;DDD UK Logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I just found out that my talk &apos;Harder, Better, Faster, Stronger Builds&apos; has been accepted for &lt;a href=&quot;https://www.developerdeveloperdeveloper.com&quot;&gt;Developer! Developer! Developer! Day&lt;/a&gt; in the United Kingdom on Saturday 12th December. I won&apos;t be flying to the other side of the world, but rather this year the UK&apos;s premier free developer conference is being run virtually.&lt;/p&gt;
&lt;p&gt;Given the time zone difference, I&apos;ll be staying up into the early hours of Sunday morning to present my talk (12.30am my time, so manageable).&lt;/p&gt;
&lt;p&gt;They&apos;re running &lt;a href=&quot;https://www.developerdeveloperdeveloper.com/schedule&quot;&gt;7 tracks of content&lt;/a&gt;, and given it&apos;s virtual then everyone is invited to &lt;a href=&quot;https://www.eventbrite.co.uk/e/developer-developer-developer-2020-tickets-130976549385?aff=oddtdtcreator&quot;&gt;register and attend&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See you there!&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/ddduk.CXTbobqs.png" width="400" height="400"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/ddduk.CXTbobqs.png" width="400" height="400"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2020/09/why-im-excited</id>
    <updated>2020-09-23T09:52:00.000+09:30</updated>
    <title>Why I&apos;m excited to be a developer right now</title>
    <link href="https://david.gardiner.net.au/2020/09/why-im-excited" rel="alternate" type="text/html" title="Why I&apos;m excited to be a developer right now"/>
    <category term="Conferences"/>
    <category term="Talks"/>
    <published>2020-09-23T09:52:00.000+09:30</published>
    <summary type="html">Microsoft&apos;s Ignite 2020 conference is on this week. It&apos;s all online and registration is free! This Thursday at 3pm +930 I&apos;m participating in a &quot;Table Talk&quot; open discussion on the topic &quot;Why we&apos;re excited to be a developer right now&quot;, along with Samir Behara, Sal Janssen, Dr Neil Roodyn, Senthamil V. We&apos;d love to have you join and take part in the discussion!</summary>
    <content type="html">
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/microsoft-ignite.Dd-D5qza_1tfn19.webp&quot; alt=&quot;Microsoft Ignite 2020 logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Microsoft&apos;s &lt;a href=&quot;https://ignite.microsoft.com/en-US/home&quot;&gt;Ignite 2020 conference&lt;/a&gt; is on this week. It&apos;s all online and &lt;a href=&quot;https://msignite.eventcore.com/&quot;&gt;registration is free&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This Thursday at 3pm +930 I&apos;m participating in a &quot;Table Talk&quot; open discussion on the topic &quot;&lt;a href=&quot;https://ignite.microsoft.com/en-US/home&quot;&gt;Why we&apos;re excited to be a developer right now&lt;/a&gt;&quot;, along with Samir Behara, Sal Janssen, Dr Neil Roodyn, Senthamil V.&lt;/p&gt;
&lt;p&gt;We&apos;d love to have you &lt;a href=&quot;https://ignite.microsoft.com/en-US/home&quot;&gt;join and take part in the discussion&lt;/a&gt;!&lt;/p&gt;
</content>
    <media:thumbnail url="https://david.gardiner.net.au/_astro/microsoft-ignite.Dd-D5qza.jpg" width="625" height="209"/>
    <media:content medium="image" url="https://david.gardiner.net.au/_astro/microsoft-ignite.Dd-D5qza.jpg" width="625" height="209"/>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2019/06/global-devops-bootcamp</id>
    <updated>2019-06-16T15:00:00.000+09:30</updated>
    <title>Global DevOps Bootcamp 2019</title>
    <link href="https://david.gardiner.net.au/2019/06/global-devops-bootcamp" rel="alternate" type="text/html" title="Global DevOps Bootcamp 2019"/>
    <category term="Events"/>
    <category term="DevOps"/>
    <category term="Talks"/>
    <published>2019-06-16T15:00:00.000+09:30</published>
    <summary type="html">Yesterday (Saturday 15th) was the 3rd Global DevOps Bootcamp we&apos;ve run in Adelaide. 
Using the great facilities of the University of South Australia, a bunch of people gathered to learning more about DevOps, and in particular this year on the &apos;Run&apos; part of DevOps, including introducing the role of a Site Reliability Engineer (SRE).</summary>
    <content type="html">
&lt;p&gt;Yesterday (Saturday 15th) was the 3rd &lt;a href=&quot;https://globaldevopsbootcamp.com/&quot;&gt;Global DevOps Bootcamp&lt;/a&gt; we&apos;ve run in Adelaide.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/gdbc-selfie._NQ9PG2O_1669qd.webp&quot; alt=&quot;Selfie&quot; /&gt;
Using the great facilities of the University of South Australia, a bunch of people gathered to learning more about DevOps, and in particular this year on the &apos;Run&apos; part of DevOps, including introducing the role of a Site Reliability Engineer (SRE).&lt;/p&gt;
&lt;p&gt;The day started off with a recorded introduction from international event organisers, then a keynote from &lt;a href=&quot;https://twitter.com/niallm&quot;&gt;Niall Murphy&lt;/a&gt; (Microsoft Ireland Director of Engineering for Azure Cloud Services and Site Reliability Engineering), followed by a local keynote delivered by me.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/attendees-watching-keynote.DGYmlYws_Z23pWnX.webp&quot; alt=&quot;Keynote&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After this people got into teams and worked through different challenges relating to a mythical online car-parts company that was experiencing all kinds of problems in production. Teams were encouraged to follow the pattern of &apos;Detect, Respond and Recover&apos; - identifying the problem, putting in a quick fix to get the website back up and then implementing a long-term solution to prevent the problem from reoccurring.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/gdbc-working-on-challenges.yFgMV_XQ_OXUiK.webp&quot; alt=&quot;Team challenges&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The teams worked through the rest of the day, doing a great job on the challenges. The light-hearted video introductions to each challenge were a new thing this year and were a nice touch.&lt;/p&gt;
&lt;p&gt;All credit to Rene, Marcel, Mathias and their team of helpers who put all the content together and coordinated a massive global event together with Microsoft.&lt;/p&gt;
&lt;p&gt;Microsoft provided Subway for lunch and special thanks to my employer &lt;a href=&quot;https://www.rldatix.com&quot;&gt;RLDatix&lt;/a&gt; who picked up the tab for fresh coffees for all attendees.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2018/12/2018-draws-to-close</id>
    <updated>2018-12-26T17:24:00.000+10:30</updated>
    <title>2018 draws to a close..</title>
    <link href="https://david.gardiner.net.au/2018/12/2018-draws-to-close" rel="alternate" type="text/html" title="2018 draws to a close.."/>
    <category term=".NET"/>
    <category term="Animals"/>
    <category term="Conferences"/>
    <category term="Cycling"/>
    <category term="Faith"/>
    <category term="Family"/>
    <category term="Gardening"/>
    <category term="Talks"/>
    <category term="Travel"/>
    <category term="User Groups"/>
    <published>2018-12-26T17:24:00.000+10:30</published>
    <summary type="html">2018 is almost done. It&apos;s the day after Christmas, about 38°C outside (just over 100°F in the old money - not uncommon for this time of year in Adelaide). As I sit here under the cooling, gentle breeze from the air conditioner, I&apos;ve compiled some of my 2018 highlights. (Let me know in the comments if I&apos;ve missed something obvious) RL Solutions are/have merged with Datix. No changes yet, other than getting to meet a couple of people from the Datix side (including from their Melbourne office). …</summary>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20181125_055520606_ios.DlGmV5XV_Z1NqFgJ.webp&quot; alt=&quot;Stone stairway, with sunlight casting shadows&quot; /&gt;&lt;/p&gt;
&lt;p&gt;2018 is almost done. It&apos;s the day after Christmas, about 38°C outside (just over 100°F in the old money - not uncommon for this time of year in Adelaide). As I sit here under the cooling, gentle breeze from the air conditioner, I&apos;ve compiled some of my 2018 highlights. (Let me know in the comments if I&apos;ve missed something obvious)&lt;/p&gt;
&lt;h2&gt;Work&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20241112181846/http://www2.rlsolutions.com/&quot;&gt;RL Solutions&lt;/a&gt; are/have merged with &lt;a href=&quot;https://web.archive.org/web/20161126152544/http://www.datix.co.uk:80/&quot;&gt;Datix&lt;/a&gt;. No changes yet, other than getting to meet a couple of people from the Datix side (including from their Melbourne office).&lt;/p&gt;
&lt;p&gt;Our Adelaide team also grew this year with some new hires. We do miss Tom (having lost him to Toronto), but we&apos;ve managed to survive, and it was great to have him back for a week last month. A part from my coding and team lead responsibilities, Tom&apos;s move has meant I&apos;ve picked up additional roles of office grocery/supplies organiser and local IT support.&lt;/p&gt;
&lt;p&gt;One particular recent highlight was upgrading the office to a 1G fibre Internet connection, taking advantage of the &lt;a href=&quot;https://web.archive.org/web/20190626085640/https://www.cityofadelaide.com.au/city-business/why-adelaide/adelaide-smart-city/ten-gigabit-adelaide/&quot;&gt;10G Adelaide initiative&lt;/a&gt;. That&apos;s been a huge win - bandwidth is essentially no longer a constraint on getting things done.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20181219_223749070_ios.DjYxbYur_1VsD7f.webp&quot; alt=&quot;Tarts and fruit mince pies&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Toronto sent a lovely Christmas present to the Adelaide office. Yum!&lt;/p&gt;
&lt;h2&gt;User Group&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.meetup.com/Adelaide-dotNET/&quot;&gt;Adelaide .NET User Group&lt;/a&gt; has finished on a positive note. We&apos;ve had increased attendances the last few months which is really encouraging. We&apos;ve also had a sponsor come on board, which means we can run meetings for free now that our pizza costs are covered.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20181212_082720948_ios.CaC__z5w_Z2lYi4n.webp&quot; alt=&quot;People seated, watching a presentation&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It would be great to have others join me in organising the group - it does concern me that I&apos;m the &apos;single point of failure&apos; at the moment.&lt;/p&gt;
&lt;p&gt;In addition to monthly meetings, I&apos;m looking forward to some announcements in the new year about a bigger developer event for Adelaide.&lt;/p&gt;
&lt;h2&gt;Presentations&lt;/h2&gt;
&lt;p&gt;Managed to do some user group talks locally as well as while I was in Toronto, but the highlight for the year was being picked to present as part of &lt;a href=&quot;https://www.dotnetconf.net/&quot;&gt;.NET Conf&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Travel&lt;/h2&gt;
&lt;p&gt;A bit less this year - two weeks in North America in March (Toronto for work and then Seattle/Redmond for the Microsoft MVP Summit). Coming down with a nauseous gastro-type bug for the last couple of days and the flight home was not a highlight. Definitely an incentive to remember &lt;a href=&quot;https://hha.org.au/hand-hygiene/5-moments-for-hand-hygiene&quot;&gt;good hand hygiene&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;We also had a family holiday interstate and flew (instead of driving all the way). More costly, but quicker and less stressful.&lt;/p&gt;
&lt;h2&gt;Christmas&lt;/h2&gt;
&lt;p&gt;A significant time of year, and one I really enjoy. I have many happy memories of Christmases as a child, and I hope we&apos;re creating them for our kids now.&lt;/p&gt;
&lt;p&gt;Our family traditions include taking part in &lt;a href=&quot;https://web.archive.org/web/20250120110555/https://welcome.seedschurch.org/&quot;&gt;our Church&apos;s&lt;/a&gt; &lt;a href=&quot;https://www.facebook.com/Road-to-Christmas-240458206018078/&quot;&gt;Road to Christmas&lt;/a&gt; &apos;Bethlehem re-enactment&apos;, joining with friends to sing carols at a local hospital, attending a Christmas Eve church service, and then gathering with family for a meal on Christmas Day.&lt;/p&gt;
&lt;p&gt;Bonus tip: My aunty told me that she buys a platter/plate from a 2nd hand shop for the food that she brings. That way she doesn&apos;t need to worry about having to remember to bring it home.&lt;/p&gt;
&lt;h2&gt;Turtles&lt;/h2&gt;
&lt;p&gt;We bought my son a turtle for his birthday the previous year. &apos;Nibbles&apos; is now fast outgrowing his tank, so the current project is to build a pond out in the garden where he can live (the turtle, not my son!)&lt;/p&gt;
&lt;p&gt;The pond shell/liner, redgum wood sleepers, a pump and filter, shade-cloth all add up to be a surprising amount. Not to mention the manual labour of digging the hole in the ground!&lt;/p&gt;
&lt;p&gt;I think Nibbles will appreciate it when it&apos;s all done.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20181202_041340767_ios.bCUfs4AU_Y8v3b.webp&quot; alt=&quot;Person lowering a turtle into a pond&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Nibbles the turtle, about to give the pond a test drive/swim&lt;/p&gt;
&lt;h2&gt;Sevenfold&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.sevenfoldband.com/&quot;&gt;That&apos;s the band I play in&lt;/a&gt;. We&apos;ve had a few gigs this year, and might be doing some recording in 2019. I was sad when Jane (our violin/mandolin player) retired as that left me as the sole string player on &apos;Cello. I&apos;ve had to pick up some of Jane&apos;s parts in some of our songs. Our last gig for the year was something a bit different (and special) - playing for Liz (who also sings in our band) as part of her service of ordination to become a &lt;a href=&quot;https://en.wikipedia.org/wiki/Deacon#Uniting_Church_in_Australia&quot;&gt;Deacon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20181006_083909559_ios.C_NfnQnI_29Gl3N.webp&quot; alt=&quot;David at a band soundcheck&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Sound check, with Pete and Keith photo-bombing&lt;/p&gt;
&lt;p&gt;When you&apos;re young, you sometimes dream about being a rock-star. Well that hasn&apos;t happened! But I do get to play instruments and sing on stage with good friends, and people seem to like our music, so while I&apos;m not giving up my day job, it is a lot of fun.&lt;/p&gt;
&lt;h2&gt;Cycling&lt;/h2&gt;
&lt;p&gt;I try and get out for a ride when I can. Seemed to be less commute riding this year, but got out for a few Saturdays with the Mud, Sweat and Gears mob. Looking forward to the Tour Down Under in January and riding in the Challenge Tour with my Dad and my Son (3 generations of Gardiners) as well as brother-in-law James.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20180926_042411362_ios.BoeMtGOc_1OJYUh.webp&quot; alt=&quot;Bicycle sitting next to a fence, overlooking green rolling hills&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Family&lt;/h2&gt;
&lt;p&gt;I tend not to post much about my family here. If you know me personally then I might have shared a bit more about how we&apos;re all going. Needless to say, the kids are growing up fast!&lt;/p&gt;
&lt;p&gt;Thanks for reading, see you in 2019 :-)&lt;/p&gt;
&lt;p&gt;David&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2018/09/speaking-at-net-conf-put-your-c-vb-and</id>
    <updated>2018-09-13T08:04:00.002+09:30</updated>
    <title>Speaking at .NET Conf - Put your C#, VB and F# projects and packaging on a diet</title>
    <link href="https://david.gardiner.net.au/2018/09/speaking-at-net-conf-put-your-c-vb-and" rel="alternate" type="text/html" title="Speaking at .NET Conf - Put your C#, VB and F# projects and packaging on a diet"/>
    <category term=".NET"/>
    <category term="Talks"/>
    <published>2018-09-13T08:04:00.002+09:30</published>
    <summary type="html">I&apos;m really exited to be selected as one of the community speakers for .NET Conf  .NET Conf is a free “virtual” conference organised by Microsoft and the .NET developer community that is streamed live around the world. Being virtual, it means organising travel and accommodation is remarkably easy!</summary>
    <content type="html">&lt;p&gt;I&apos;m really exited to be selected as one of the community speakers for &lt;a href=&quot;https://www.dotnetconf.net/&quot;&gt;.NET Conf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;../../assets/2018/09/dotnetconf%20diet.png&quot; alt=&quot;Title slide for .NET Conf talk&quot; /&gt;&lt;/p&gt;
&lt;p&gt;.NET Conf is a free “virtual” conference organised by Microsoft and the .NET developer community that is streamed live around the world. Being virtual, it means organising travel and accommodation is remarkably easy!&lt;/p&gt;
&lt;p&gt;My talk is titled “Put your C#, VB and F# projects and packaging on a diet”, drilling in to the new project system for .NET, and how you can use it even with old projects that target .NET Framework and it starts at 04:00 UTC on Friday 14th September (&lt;a href=&quot;https://www.timeanddate.com/worldclock/fixedtime.html?msg=David%27s+.NET+Conf+talk&amp;amp;iso=20180914T04&amp;amp;p1=1440&amp;amp;ah=1&quot;&gt;check local times&lt;/a&gt;). Go to &lt;a href=&quot;https://www.dotnetconf.net/&quot;&gt;https://www.dotnetconf.net/&lt;/a&gt; to watch the live stream.&lt;/p&gt;
&lt;p&gt;All the demos from my talk and links to other resources can be found in the Github repo &lt;a href=&quot;https://github.com/flcdrg/project-system-diet&quot;&gt;https://github.com/flcdrg/project-system-diet&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://david.gardiner.net.au/2017/08/ndc-sydney-2017</id>
    <updated>2017-08-26T17:02:00.000+09:30</updated>
    <title>NDC Sydney 2017</title>
    <link href="https://david.gardiner.net.au/2017/08/ndc-sydney-2017" rel="alternate" type="text/html" title="NDC Sydney 2017"/>
    <category term="Conferences"/>
    <category term="Talks"/>
    <published>2017-08-26T17:02:00.000+09:30</published>
    <summary type="html">My second time attending NDC Sydney, and this was extra special as I’d been accepted as a speaker. I was excited and pretty nervous! I flew over Tuesday evening. It was quite windy with a fair bit of turbulence on the flight. A decent tailwind meant even though we left Adelaide late, we still got into Sydney on time.</summary>
    <content type="html">

&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170818_074157000_iOS-2-.DJfnVP18_Z15Nm1e.webp&quot; alt=&quot;Delegate badge&quot; /&gt;My second time attending NDC Sydney, and this was extra special as I’d been accepted as a speaker. I was excited and pretty nervous!&lt;/p&gt;
&lt;p&gt;I flew over Tuesday evening. It was quite windy with a fair bit of turbulence on the flight. A decent tailwind meant even though we left Adelaide late, we still got into Sydney on time.&lt;/p&gt;
&lt;h2&gt;Wednesday&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170815_230553777_iOS-10-.oG8L6qhE_1QIakJ.webp&quot; alt=&quot;Jennifer Marsman&quot; /&gt;The conference kicked off with a keynote from Jennifer Marsman talking about using EEG and Machine Learning to perform lie detection (on her husband!). Not sure about the lie detection, but I do like the application of EEG to enable things like controlling a wheelchair, and it was useful to learn about the different kinds of algorithms and models you used for different types of problems.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_002616689_iOS-10-.C5dzh0o5_Z1UF4M8.webp&quot; alt=&quot;Barry Dorrans&quot; /&gt;Barry Dorrans walked through a bunch of security vulnerabilities that had been discovered in .NET. Some subtle causes and a few things to watch out for in your own code.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_015442434_iOS-10-.BAMKI8uL_Z1DrAfg.webp&quot; alt=&quot;Edith Harbaugh&quot; /&gt;Edith Harbaugh gave a good overview of using feature flags. She is from Launch Darkly, a company that provides ‘feature flags as a service’, though her talk was more general. One point she made was that feature flags can be dynamic – something that can be changed at runtime, not just a config setting that is set at startup.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_034106298_iOS-10-.lAzixVBH_1lb6rf.webp&quot; alt=&quot;Damian Edwards&quot; /&gt;Damian Edwards raced through what’s new in ASP.NET Core. This is looking pretty good.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_050538184_iOS-10-.BgEsABO__ZgvD0y.webp&quot; alt=&quot;Bart De Smet&quot; /&gt;Bart De Smet is a guru of .NET and CLR internals. I&apos;ve watched some of his Pluralsight courses already. This talk on C# internals was fascinating.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_062053378_iOS-10-.9NPpLpmd_13aMU2.webp&quot; alt=&quot;20170816_062053378_iOS&quot; /&gt;Filip Ekberg dug into asynchronous programming.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_074407961_iOS-10-.CkIspADR_1WhUjk.webp&quot; alt=&quot;20170816_074407961_iOS&quot; /&gt;Rounding out the day with Jimmy Bogard doing CI with Azure.
&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_103047694_iOS-3-.Dq0ies52_Z1vzOYW.webp&quot; alt=&quot;20170816_103047694_iOS&quot; /&gt;Wednesday evening there was a cruise on Sydney harbour. It was a little chillier than the last time I’d been out, but nice food and great to socialise with other attendees.&lt;/p&gt;
&lt;h2&gt;Thursday&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170816_230056563_iOS-3-.CYtxZRwo_uidVk.webp&quot; alt=&quot;20170816_230056563_iOS&quot; /&gt;First thing Michele Bustamante stepped through using Docker.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/DavidRGardiner&quot;&gt;@DavidRGardiner&lt;/a&gt; talks chocolatey at &lt;a href=&quot;https://twitter.com/hashtag/ndcsydney?src=hash&quot;&gt;#ndcsydney&lt;/a&gt; &lt;a href=&quot;https://t.co/3fhH2Bj9VH&quot;&gt;pic.twitter.com/3fhH2Bj9VH&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;— Ben Laan (@benlaan) &lt;a href=&quot;https://twitter.com/benlaan/status/897977837533020161&quot;&gt;August 17, 2017&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then it was my talk on using Chocolatey and Boxstarter! All my demos went off without a hitch and there were lots of questions from the audience. I think the early attendees appreciated the bonus chocolate frogs too.
Thanks to Ben for coming along and being a friendly face in the front row (and taking the photo!)&lt;/p&gt;
&lt;p&gt;I hung around because Bart De Smet was up after me diving in to a bunch of areas of .NET to watch out for when you really care about performance.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170817_045257268_iOS-3-.BHhar1JQ_Z2bCrFs.webp&quot; alt=&quot;Steve Sanderson&quot; /&gt;Steve Sanderson showed off some nice options available now in ASP.NET Core.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170817_050044595_iOS-3-.IztcBNJq_nhsmW.webp&quot; alt=&quot;Richard Campbell&quot; /&gt;The one and only Richard Campbell with a history lesson about .NET. Informative and entertaining.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170817_061954459_iOS-3-.d6NelxyW_Zo1xuz.webp&quot; alt=&quot;Dina Goldshtein&quot; /&gt;Dina Goldshtein on self-monitoring apps. Some interesting ways to do logging and diagnostics.&lt;/p&gt;
&lt;p&gt;Finally a bit more Michelle Bustamante with more Docker – this time looking at some of the orchestration tools.&lt;/p&gt;
&lt;p&gt;Thursday evening there was a social evening, including a bunch of pretty funny “short stories about failure” from some of the speakers. Some people partied on late into the night, but I retired early.&lt;/p&gt;
&lt;h2&gt;Friday&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170817_230442377_iOS-3-.3F9ZJfZY_ZdF3fU.webp&quot; alt=&quot;Nick Blumhardt&quot; /&gt;Nick Blumhardt gave a great talk introducing SeriLog and structured logging.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170818_002255333_iOS-3-.BorlBtQG_ZwvXIG.webp&quot; alt=&quot;Kylie Hunt&quot; /&gt;Kylie Hunt talked about dealing with problem bosses. A mix of good suggestions and sharing personal experiences.
Maybe I’m just an old fuddy-duddy, but personally I’m less impressed by speakers at conferences that need a swear jar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170818_014120493_iOS-3-.B-rm4Psp_O88vo.webp&quot; alt=&quot;Laura Bell&quot; /&gt; Laura Bell had some good content on building in security.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170818_060017934_iOS-3-.DpmK9pBf_Z27Lssx.webp&quot; alt=&quot;Cosmo robot with Lars Klint&quot; /&gt;Lars Klint did a really interesting talk about Cosmo – a little programmable robot.
&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170818_062124506_iOS-7-.CONSNwjT_ZpBs9H.webp&quot; alt=&quot;Jimmy Pelletier&quot; /&gt;Last talk I caught was from Jimmy Pelletier on how his team introduced micro services into their architecture.&lt;/p&gt;
&lt;p&gt;There was the option of attending PubConf after the main conference had finished, but I’d already made plans to catch up with some old Adelaide friends who are now living in Sydney. It was really great to spend Friday evening and Saturday with them before my flight home in the late afternoon.&lt;/p&gt;
&lt;p&gt;Here’s a pretty waterfall that I saw on Saturday when we went out for a walk. It&apos;s been dry in Sydney recently, so imagine what it would be like after a bit of rain.
&lt;img src=&quot;https://david.gardiner.net.au/_astro/20170819_003920404_iOS-3-.DupBy9bl_2t4eM3.webp&quot; alt=&quot;Waterfall&quot; /&gt;&lt;/p&gt;
&lt;p&gt;All in all, again NDC Sydney didn’t disappoint and I can only hope it continues to grow and get better next year. There were quite a few times where I was spoiled for choice. I&apos;ll be looking forward to catching up on missed sessions when the recordings are published in a few weeks. It was great to see the Adelaide contingent growing from 2 last year to 9 (that I know of). The word is getting out that this is THE developer conference you should attend!&lt;/p&gt;
</content>
  </entry>
</feed>
