<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-AU">
                        <id>https://dyrynda.com.au/blog/feed</id>
                                <link href="https://dyrynda.com.au/blog/feed" rel="self"></link>
                                <title><![CDATA[Michael Dyrynda | Laravel, PHP, DevOps]]></title>
                    
                                <subtitle>RSS feed for the blog of Michael Dyrynda</subtitle>
                                                    <updated>2026-05-11T11:31:10+09:30</updated>
                        <entry>
            <title><![CDATA[Using property hooks in PHP]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/using-property-hooks-in-php" />
            <id>https://dyrynda.com.au/71</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[PHP 8.4's property hooks let you replace simple getter methods with virtual properties, keeping a consistent property-based API. Here's when I reach for them and why.]]>
            </summary>
                                    <updated>2026-05-11T11:31:10+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Validating distinct data in requests]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/validating-distinct-request-data" />
            <id>https://dyrynda.com.au/70</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Learn how Laravel's distinct validation rule can help ensure uniqueness across array items in your form requests, preventing ambiguous references before they cause problems downstream.]]>
            </summary>
                                    <category term="laravel" />
                        <updated>2026-05-08T16:19:26+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Mapping request to model fields]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/mapping-request-to-model-fields" />
            <id>https://dyrynda.com.au/69</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I often use more semantic names in my API surfaces that need mapping back to database fields. Here's one approach I reach for.]]>
            </summary>
                                    <category term="eloquent" />
                        <updated>2026-05-06T16:55:59+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Speed up your Livewire tests]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/speed-up-your-livewire-tests" />
            <id>https://dyrynda.com.au/68</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I'd been having very slow Livewire tests in my application but hadn't put much stock into it until I started work on the app again and was running the suite often.]]>
            </summary>
                                    <category term="laravel" />
                        <updated>2026-03-01T16:20:29+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Protecting Laravel Cloud endpoints]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/protecting-laravel-cloud-endpoints" />
            <id>https://dyrynda.com.au/67</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've seen a whole heap of invalid 4xx-level requests hit your website inside of Nightwatch (and subsequently consume all your events), here's one approach to stop those requests hitting your app entirely.]]>
            </summary>
                                    <updated>2025-06-25T01:02:16+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Working with fixture data in your tests]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/working-with-test-fixtures" />
            <id>https://dyrynda.com.au/66</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Fixture data is a great way to ensure your application code can handle known data structures, but it can be a little tedious to work with. Lets look at one approach to streamlining the process.]]>
            </summary>
                                    <updated>2026-02-01T13:39:43+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Monitoring Laravel Vapor metrics with Grafana Cloud]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/monitoring-laravel-vapor-with-grafana-cloud" />
            <id>https://dyrynda.com.au/65</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If, like me, you've ever had to monitor metrics for your Laravel Vapor application you'll find that the basic options are either tedious, or just don't work. Enter Grafana (Cloud)]]>
            </summary>
                                    <updated>2026-02-01T13:55:43+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Presentation: Building an application to scale on Laravel Vapor]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/presentation-building-an-application-to-scale" />
            <id>https://dyrynda.com.au/64</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[On August 31, 2021 I presented remotely to the BrisPHP meetup on building an application to scale on Laravel Vapor]]>
            </summary>
                                    <updated>2026-02-01T13:56:04+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Immutable dates in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/laravel-immutable-dates" />
            <id>https://dyrynda.com.au/62</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever run in to mysterious issues working with dates in Laravel, immutable dates are for you!]]>
            </summary>
                                    <updated>2026-02-01T13:59:10+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Altering large tables on Laravel Vapor]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/altering-large-tables-with-laravel-vapor" />
            <id>https://dyrynda.com.au/61</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I recently stumbled upon a peculiar issue with Laravel Vapor where I was getting collisions with index names when running database migrations on deploy and wanted to share how to get around this.]]>
            </summary>
                                    <updated>2026-02-01T13:59:42+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Using tailwind-intellisense with Neovim LSP]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/neovim-tailwind-intellisense" />
            <id>https://dyrynda.com.au/60</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[The Tailwind team provide an excellent Intellisense plugin to enhance the development experience with VSCode but with built-in LSP support, getting it to work in Neovim is 🍰]]>
            </summary>
                                    <updated>2021-08-03T07:21:59+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Building an app to scale on Laravel Vapor]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/scaling-on-laravel-vapor" />
            <id>https://dyrynda.com.au/59</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Running thenping.me reminds me of an old colleague that used to say "billing everybody on the 1st of the month leaves you with compute doing nothing for the rest of it"]]>
            </summary>
                                    <updated>2026-02-01T13:59:56+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Using Tailwind's JIT compiler with Laravel Mix]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/using-tailwind-jit-with-laravel-mix" />
            <id>https://dyrynda.com.au/58</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Getting set up with Laravel Mix and Tailwind's JIT compiler is simple and Just Works*]]>
            </summary>
                                    <updated>2026-02-01T14:00:13+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Using pcov instead of XDebug for code coverage]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/using-pcov-instead-of-xdebug-for-coverage" />
            <id>https://dyrynda.com.au/57</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever found yourself dreading using Xdebug just to get a code coverage report for your test suite, there is a cure!]]>
            </summary>
                                    <updated>2020-07-13T22:22:44+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Getting interactive with testing in Vim]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/getting-interactive-with-testing-in-vim" />
            <id>https://dyrynda.com.au/56</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Vim is a text editor that has been around for a very long time, and while it may not look like much, it's highly configurable; and that makes it incredibly powerful!]]>
            </summary>
                                    <updated>2020-03-10T02:49:39+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Using existing certificates with Laravel Forge]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/existing-certificates-on-laravel-forge" />
            <id>https://dyrynda.com.au/54</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[When you work with clients that are supplying you with their own secure certificates, they may arrive in different formats that you need to convert, in order to add them to Laravel Forge.]]>
            </summary>
                                    <updated>2020-03-12T07:25:16+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Customising Laravel's URL signing key]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/customising-laravels-url-signing-key" />
            <id>https://dyrynda.com.au/52</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[A look at how you can use signed URLs between Laravel applications, without having to share your application key]]>
            </summary>
                                    <updated>2026-02-01T14:12:28+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Farewell 2018]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/farewell-2018" />
            <id>https://dyrynda.com.au/51</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[As another year draws to a close - like many of us - I take a look back over the year that was, and think about the year ahead.]]>
            </summary>
                                    <updated>2019-01-01T08:24:29+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[How I work]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/how-i-work-2018" />
            <id>https://dyrynda.com.au/50</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Take a look at my setup and how I go about work]]>
            </summary>
                                    <updated>2019-01-02T08:34:13+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Using Laravel Telescope in specific environments]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/using-laravel-telescope-in-specific-environments" />
            <id>https://dyrynda.com.au/49</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Telescope is an elegant debug assistant for the Laravel Framework but it is also useful for production. Lets learn how!]]>
            </summary>
                                    <updated>2019-04-17T18:33:44+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Configuring your Netlify build process]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/configuring-your-netlify-build-process" />
            <id>https://dyrynda.com.au/48</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Take a look at how you can move configuration of your Netlify build process to version control.]]>
            </summary>
                                    <updated>2018-08-19T05:09:45+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Review workflow on Netlify]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/review-workflow-on-netlify" />
            <id>https://dyrynda.com.au/47</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Getting a static site up and running on Netlify is pretty easy, but what about a review workflow that allows you to preview upcoming changes on your site before pushing them live?]]>
            </summary>
                                    <updated>2018-08-02T07:21:16+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Running Tighten's Jigsaw on Netlify]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/running-tighten-jigsaw-on-netlify" />
            <id>https://dyrynda.com.au/46</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[A lot of people have been talking about using Netlify, so I thought I'd see what all the fuss is about.]]>
            </summary>
                                    <updated>2018-07-28T23:56:36+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Sharing databases between Laravel applications]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/sharing-databases-between-laravel-applications" />
            <id>https://dyrynda.com.au/45</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever found yourself working with a Laravel application that shares its databases with other applications, you may have found yourself wondering how to effectively work with and test]]>
            </summary>
                                    <updated>2018-04-10T09:07:35+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Uploading files to Amazon S3 from the browser - Part Two]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/uploading-files-to-amazon-s3-from-the-browser-part-two" />
            <id>https://dyrynda.com.au/44</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Now that we've established how to upload files directly from the browser to Amazon S3, lets look at Dropzone JS, to handle making the user experience a little prettier than the standard file]]>
            </summary>
                                    <updated>2026-02-01T14:01:27+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Uploading files to Amazon S3 from the browser - Part 1a]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/uploading-files-to-amazon-s3-from-the-browser-part-1a" />
            <id>https://dyrynda.com.au/43</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Whilst part one of this series used AWS Signature Version 2, this post extends the original and discusses using AWS Signature Version 4 for greater compatibility across availability regions.]]>
            </summary>
                                    <updated>2026-02-01T14:04:07+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Uploading files to Amazon S3 from the browser - Part One]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/uploading-files-to-amazon-s3-from-the-browser-part-one" />
            <id>https://dyrynda.com.au/41</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[This post looks at how and why you might handle uploading files to Amazon's S3 platform directly from the browser, rather than via your server as an intermediary.]]>
            </summary>
                                    <updated>2018-12-31T22:00:08+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[A call-recording Proof of Concept with Nexmo and Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/a-call-recording-proof-of-concept-with-nexmo-and-laravel" />
            <id>https://dyrynda.com.au/40</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Recently, I had cause to put together a Proof of Concept that would handle call recording through a multiple choice IVR and I discovered this was a lot simpler than anticipated.]]>
            </summary>
                                    <updated>2021-08-02T09:07:38+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Laracon US 2017 talk recaps]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/laracon-us-2017-talk-recaps" />
            <id>https://dyrynda.com.au/39</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Throughout Laracon US 2017, I was live-tweeting all of the talks. I've collected those tweets using Twitter moments and present them in one place here.]]>
            </summary>
                                    <updated>2018-12-31T22:00:54+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Presentation: Introducing Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/presentation-introducing-laravel" />
            <id>https://dyrynda.com.au/38</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Originally presented at the PHP Adelaide meetup in June 2017, this talk aims to serve as an introduction to the Laravel Framework and some of its most common and powerful aspects.]]>
            </summary>
                                    <updated>2017-06-19T17:14:05+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Package: Easily create application users in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/package-easily-create-application-users-in-laravel" />
            <id>https://dyrynda.com.au/37</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever found yourself in a situation where you need to quickly whip up a new application user and fire off a password reset email, this might be the package for you.]]>
            </summary>
                                    <updated>2017-06-13T07:06:41+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Presentation: PHP in 2017]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/presentation-php-in-2017" />
            <id>https://dyrynda.com.au/36</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Originally presented at the PHP Adelaide meetup in May 2017, this talk aims to serve as a very high-level overview of concepts, groups, and methodologies modern PHP developers should be consi]]>
            </summary>
                                    <updated>2017-06-19T16:46:20+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Elegant form handling in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/elegant-form-handling-in-laravel" />
            <id>https://dyrynda.com.au/35</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[There are a number of different ways to handle forms in Laravel, whether using helpers or writing HTML by hand, but I consider this approach elegant and easy to work with in most cases.]]>
            </summary>
                                    <updated>2017-06-29T20:25:01+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Partial model updates in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/partial-model-updates-in-laravel" />
            <id>https://dyrynda.com.au/34</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[From time to time, I will need to perform a PATCH-style - or partial - update of a model via a HTTP request. The first instinct for this might be to use a bunch of conditionals, but there's a]]>
            </summary>
                                    <updated>2018-12-31T22:04:46+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Single action controllers in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/single-action-controllers-in-laravel" />
            <id>https://dyrynda.com.au/33</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Many Laravel applications will typically follow a RESTful structure, but sometimes, you just want to have a controller responsible for a single action. This is easier than you think.]]>
            </summary>
                                    <updated>2018-12-31T22:16:19+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Environment variables, config caching, and Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/environment-variables-config-caching-and-laravel" />
            <id>https://dyrynda.com.au/32</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever used Laravel's environment-specific configuration in your application and found it not working after caching the configuration, read on to find out why this is the case.]]>
            </summary>
                                    <updated>2017-02-06T20:18:42+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Switching PHP versions with Laravel Valet]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/switching-php-versions-with-laravel-valet" />
            <id>https://dyrynda.com.au/31</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Switching PHP versions when using Laravel Valet is simple with just two brew commands.]]>
            </summary>
                                    <updated>2017-06-29T23:42:55+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Review: Laravel up and Running by Matt Stauffer]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/review-laravel-up-and-running-by-matt-stauffer" />
            <id>https://dyrynda.com.au/30</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Matt Stauffer has released far and away the most comprehensive and accurate book on Laravel development to date - and it shouldn't show its age over time, either!]]>
            </summary>
                                    <updated>2017-01-11T00:07:49+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[On the Laravel Certification Program]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/on-the-laravel-certification-program" />
            <id>https://dyrynda.com.au/29</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[The Laravel Certification Program was announced at the end of the Laracon EU 2016 conference and got me excited about the possibilities, but I've thought more about it since then. I'm not ent]]>
            </summary>
                                    <updated>2017-02-06T00:34:14+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Better handling of TokenMismatchException in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/better-handling-of-tokenmismatchexception-in-laravel" />
            <id>https://dyrynda.com.au/28</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Have you ever seen your errors filling up with TokenMismatchException errors for routes that don't support POST, or just don't exist? Here's one way to handle the exception better.]]>
            </summary>
                                    <updated>2017-02-06T00:05:24+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Review: Adam Wathan's Refactoring to Collections]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/review-adam-wathans-refactoring-to-collections" />
            <id>https://dyrynda.com.au/27</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Adam Wathan has been a big proponent of Collection pipelines, so much so that he wrote a book on it, which I've had a chance to read (and think you should, too)]]>
            </summary>
                                    <updated>2017-01-11T00:08:04+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Configuring per-environment logging in Laravel 5]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/configuring-per-environment-logging-in-laravel-5" />
            <id>https://dyrynda.com.au/26</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Development often leads to adding debug logging to your application, but it's a pain to remove it all before deploying to production. Here's how to work around that.]]>
            </summary>
                                    <updated>2017-01-11T00:08:15+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Testing JSON APIs with Laravel 5]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/testing-json-apis-with-laravel-5" />
            <id>https://dyrynda.com.au/25</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Testing for JSON responses in Laravel is easy with seeJson, but testing validation errors requires a little bit more work.]]>
            </summary>
                                    <updated>2018-12-31T22:20:46+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Cascading soft deletes with Laravel and Eloquent]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/cascading-soft-deletes-with-laravel-and-eloquent" />
            <id>https://dyrynda.com.au/24</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever found yourself wondering how to implement cascading soft deletes with Laravel and Eloquent, I may have a solution for you.]]>
            </summary>
                                    <updated>2016-05-23T00:57:37+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Communicating between components in VueJS]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/communicating-between-components-in-vuejs" />
            <id>https://dyrynda.com.au/22</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[If you've ever been in the situation where you need to have components be aware of each other's state, Vue's custom event interface may be what you're after.]]>
            </summary>
                                    <updated>2018-12-31T22:21:38+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Should I use v-show or v-if?]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/should-i-use-v-show-or-v-if" />
            <id>https://dyrynda.com.au/21</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I discovered the other day how to easily figure out when to use v-show and when to use v-if (hint: it's in the docs)]]>
            </summary>
                                    <updated>2016-02-24T19:38:46+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Automatically fixing code styles before you commit your code]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/automatically-fixing-code-styles-before-you-commit-your-code" />
            <id>https://dyrynda.com.au/19</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Working on ConFOMO, and to make life easier, my first step was to come up with a set of rules for PHP CS Fixer and enforcing them on each commit.]]>
            </summary>
                                    <updated>2016-02-15T19:23:50+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Dead simple domain mapping in Laravel Homestead]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/dead-simple-domain-mapping-in-laravel-homestead" />
            <id>https://dyrynda.com.au/18</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[The entire process is pretty simple now, but what if I told you it could be even simpler?]]>
            </summary>
                                    <updated>2017-02-06T00:08:17+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Integration testing controller authorisation in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/integration-testing-controller-authorisation-in-laravel" />
            <id>https://dyrynda.com.au/17</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Testing controller authorisation in Laravel, I stumbled across an issue due to exception handling. The fix was simple enough, though tricky to track down.]]>
            </summary>
                                    <updated>2017-02-06T00:08:59+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Updating FusionInvoice 2016 with ease]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/updating-fusioninvoice-2016-with-ease" />
            <id>https://dyrynda.com.au/16</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[With the release of the latest version of Fusion Invoice, updating the application has become really simple.]]>
            </summary>
                                    <updated>2016-02-08T00:15:48+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Testing multiple dependency versions with Travis CI]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/testing-multiple-dependency-versions-with-travis-ci" />
            <id>https://dyrynda.com.au/15</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Have you ever wanted to ensure package compatibility with multiple versions of a dependency but not sure how? It's easier than you think!]]>
            </summary>
                                    <updated>2016-02-01T21:55:34+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[SSL with Let's Encrypt on Laravel Forge]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/ssl-with-lets-encrypt-on-laravel-forge" />
            <id>https://dyrynda.com.au/14</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I recently received my beta invite for Let's Encrypt, and set about getting my SSL certificate setup on my Forge-provisioned server.]]>
            </summary>
                                    <updated>2017-02-06T00:12:05+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Cleaning array values with ease]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/cleaning-array-values-with-ease" />
            <id>https://dyrynda.com.au/13</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[I often find myself working with arrays that may have empty values in them. I've put together a small function to tidy them up.]]>
            </summary>
                                    <updated>2015-10-27T19:35:06+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Bring back three-finger-swipe in OS X]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/bring-back-three-finger-swipe-in-os-x" />
            <id>https://dyrynda.com.au/12</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Somewhere between Mountain Lion and Yosemite, three finger swipe (to move windows) was removed. Here's how to get it back.]]>
            </summary>
                                    <updated>2018-12-31T22:31:53+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Contextual container bindings]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/contextual-container-bindings" />
            <id>https://dyrynda.com.au/11</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Have you ever had to use multiple implementations of an interface within a Laravel app and got stuck with how? Read on!]]>
            </summary>
                                    <updated>2018-12-31T22:38:46+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Ubiquiti EdgeOS - IP-restricted NAT forwarding]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/ubiquiti-edgeos-ip-restricted-nat-forwarding" />
            <id>https://dyrynda.com.au/10</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Recently changing ISP, I found myself having to configure NAT rules in my router, but wanted to restrict access from specific hosts.]]>
            </summary>
                                    <updated>2017-02-06T00:13:27+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Working with nullable field in Eloquent models - Part Deux]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/working-with-nullable-field-in-eloquent-models-part-deux" />
            <id>https://dyrynda.com.au/9</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Today I take a look at a more extensible and easily reusable version of the nullable fields trait from my previous blog post.]]>
            </summary>
                                    <updated>2015-07-12T09:30:42+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Opinionated development practices (or when to do what)]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/opinionated-development-practices-or-when-to-do-what" />
            <id>https://dyrynda.com.au/8</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[The question always comes up "can I do x in y?" and you will often have someone telling you about purity or the "right way" - but what is the "right way?"]]>
            </summary>
                                    <updated>2017-02-06T00:13:47+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Working with nullable fields in Eloquent models]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/working-with-nullable-fields-in-eloquent-models" />
            <id>https://dyrynda.com.au/6</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[Nullable model attributes still need to have their value explicitly set to null in order to be persisted as null. If you have a few nullable fields across a multiple models, the duplication o]]>
            </summary>
                                    <updated>2017-02-06T00:14:13+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[An Envoyer-like deployment script using Envoy]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/an-envoyer-like-deployment-script-using-envoy" />
            <id>https://dyrynda.com.au/5</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[As the release of Envoyer.io was announced last week, I finally spent a bit of time looking into making use of Laravel's Envoy.]]>
            </summary>
                                    <updated>2015-12-08T16:35:21+10:30</updated>
        </entry>
            <entry>
            <title><![CDATA[serve.sh in Homestead fails to restart nginx]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/serve-sh-in-homestead-fails-to-restart-nginx" />
            <id>https://dyrynda.com.au/4</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[A slight change was made to the serve.sh command in February 2015 that caused serve function to incorrectly set the listen port in the nginx config. Here's a brief discussion of the problem a]]>
            </summary>
                                    <updated>2015-07-12T09:31:40+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Eloquent ORM, route model binding, and repositories]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/eloquent-orm-route-model-binding-and-repositories" />
            <id>https://dyrynda.com.au/3</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[As you progress as a developer, you learn more and more ways to achieve a given outcome. The more knowledge you have, however, the more difficult it can be to determine when to use any given ]]>
            </summary>
                                    <updated>2015-07-12T09:31:57+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Filtering models with Eloquent in Laravel]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/filtering-models-with-eloquent-in-laravel" />
            <id>https://dyrynda.com.au/2</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[The Eloquent ORM that ships with Laravel is a very powerful tool; it simplifies many tasks - from relationships between models to eager loading. In this post, I talk about query scopes and ho]]>
            </summary>
                                    <updated>2015-07-12T09:32:22+09:30</updated>
        </entry>
            <entry>
            <title><![CDATA[Simple environment switching in Laravel 5]]></title>
            <link rel="alternate" href="https://dyrynda.com.au/blog/simple-environment-switching-in-laravel-5" />
            <id>https://dyrynda.com.au/1</id>
            <author>
                <name><![CDATA[Michael Dyrynda]]></name>
                <email><![CDATA[michael@dyrynda.com.au]]></email>

            </author>
            <summary type="html">
                <![CDATA[When Laravel 5 was released, the app configuration structure was changed so that the environment-specific configuration files were dropped. Some people desire the ability to 'switch' between ]]>
            </summary>
                                    <updated>2015-07-12T09:32:58+09:30</updated>
        </entry>
    </feed>
