<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ben Osborne</title>
    <description>The latest articles on Forem by Ben Osborne (@mrbenosborne).</description>
    <link>https://forem.com/mrbenosborne</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F102180%2F42609cc3-7f59-45b3-adce-3d650be5b757.jpeg</url>
      <title>Forem: Ben Osborne</title>
      <link>https://forem.com/mrbenosborne</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mrbenosborne"/>
    <language>en</language>
    <item>
      <title>Let’s build a SaaS together</title>
      <dc:creator>Ben Osborne</dc:creator>
      <pubDate>Sat, 29 Oct 2022 12:28:45 +0000</pubDate>
      <link>https://forem.com/mrbenosborne/lets-build-a-saas-together-31pf</link>
      <guid>https://forem.com/mrbenosborne/lets-build-a-saas-together-31pf</guid>
      <description>&lt;p&gt;Howdy 🤠 &lt;/p&gt;

&lt;p&gt;I’ve had this idea for about a year now and I’ve started developing it but the project is fairly large, I will most definitely burn out if I try and do it all myself hence why I’m looking for a partner to contribute.&lt;/p&gt;

&lt;p&gt;Obviously I don’t want to say too much but essentially it would target all sizes of businesses and help them deploy their applications easily including an all in one system to manage their infrastructure.&lt;/p&gt;

&lt;p&gt;I’d be happy to give away 40% of the company to whoever wants to go on this journey with me.&lt;/p&gt;

</description>
      <category>sass</category>
      <category>business</category>
      <category>partnership</category>
      <category>cofounder</category>
    </item>
    <item>
      <title>Laravel 8 PHP Co-Founder Opportunity</title>
      <dc:creator>Ben Osborne</dc:creator>
      <pubDate>Wed, 07 Apr 2021 14:04:14 +0000</pubDate>
      <link>https://forem.com/mrbenosborne/laravel-8-php-co-founder-opportunity-l75</link>
      <guid>https://forem.com/mrbenosborne/laravel-8-php-co-founder-opportunity-l75</guid>
      <description>&lt;p&gt;I am looking for a technical co-founder to help with a Laravel 8 project I have recently started. &lt;/p&gt;

&lt;p&gt;The service is similar to that of Pingdom, Uptime Robot etc.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;40% share. &lt;/li&gt;
&lt;li&gt;Let's do great things together&lt;/li&gt;
&lt;li&gt;Message me for more details.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>cofounder</category>
      <category>business</category>
    </item>
    <item>
      <title>JSON Unmarshal using PHP 8 Attributes</title>
      <dc:creator>Ben Osborne</dc:creator>
      <pubDate>Tue, 12 Jan 2021 14:29:49 +0000</pubDate>
      <link>https://forem.com/mrbenosborne/json-unmarshal-using-php-8-attributes-2p3f</link>
      <guid>https://forem.com/mrbenosborne/json-unmarshal-using-php-8-attributes-2p3f</guid>
      <description>&lt;p&gt;I was un-marshalling some JSON data onto my class and realised we could use PHP 8 attributes to make it cleaner and more easier to use.&lt;/p&gt;

&lt;p&gt;Let me walk you through a quick example, imagine you have some JSON data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"airline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Foo Airlines"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aircraft"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Boeing 747"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"route"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cost"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;50.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"luggageIncluded"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"airline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Foo Airlines"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"departureAirport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"London Gatwick"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"arrivalAirport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Malta International"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cost"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;20.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"luggageIncluded"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"airline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Foo Airlines"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"departureAirport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Malta International"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"arrivalAirport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"London Gatwick"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above data represents a flight departing from London Gatwick to Malta International.&lt;/p&gt;

&lt;p&gt;Let's assume we have the following 2 classes, a Flight class and a FlightRoute class that represents the above data structure.&lt;/p&gt;

&lt;p&gt;Flight.php&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Flight&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;#[JSON(field: 'airline')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$airlineName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON(field: 'aircraft.type')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$aircraftType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON(field: 'route', type: FlightRoute::class)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt; &lt;span class="nv"&gt;$route&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FlightRoute.php&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FlightRoute&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;#[JSON('sequence')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nv"&gt;$sequence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON('cost')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="nv"&gt;$cost&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON('luggageIncluded')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nv"&gt;$luggageIncluded&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON('airline')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$airline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON('departureAirport')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$departureAirport&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="na"&gt;#[JSON('arrivalAirport')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$arrivalAirport&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see we are using the JSON attribute from the library to declare the field in the JSON data and the type if the data is an array of something.&lt;/p&gt;

&lt;p&gt;Let's un-marshal this data :)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a new flight class&lt;/span&gt;
&lt;span class="nv"&gt;$flight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Flight&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Load our JSON data from file&lt;/span&gt;
&lt;span class="nv"&gt;$jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;file_get_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'flight.json'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Unmarshal JSON&lt;/span&gt;
&lt;span class="nc"&gt;Unmarshal&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$flight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$jsonData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and voila!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Flight#3 (3) {
  public string $airlineName =&amp;gt;
  string(12) "Foo Airlines"
  public string $aircraftType =&amp;gt;
  string(10) "Boeing 747"
  public array $route =&amp;gt;
  array(2) {
    [0] =&amp;gt;
    class FlightRoute#11 (6) {
      public int $sequence =&amp;gt;
      int(1)
      public float $cost =&amp;gt;
      double(50.25)
      public bool $luggageIncluded =&amp;gt;
      bool(true)
      public string $airline =&amp;gt;
      string(12) "Foo Airlines"
      public string $departureAirport =&amp;gt;
      string(14) "London Gatwick"
      public string $arrivalAirport =&amp;gt;
      string(19) "Malta International"
    }
    [1] =&amp;gt;
    class FlightRoute#8 (6) {
      public int $sequence =&amp;gt;
      int(2)
      public float $cost =&amp;gt;
      double(20.25)
      public bool $luggageIncluded =&amp;gt;
      bool(true)
      public string $airline =&amp;gt;
      string(12) "Foo Airlines"
      public string $departureAirport =&amp;gt;
      string(19) "Malta International"
      public string $arrivalAirport =&amp;gt;
      string(14) "London Gatwick"
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to use the package you can install it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require mrbenosborne/json-unmarshal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy coding! 🍺&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrbenosborne/json-unmarshal" rel="noopener noreferrer"&gt;https://github.com/mrbenosborne/json-unmarshal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credit: Hero image, &lt;a href="https://php.watch/articles/php-attributes" rel="noopener noreferrer"&gt;https://php.watch/articles/php-attributes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>json</category>
      <category>unmarshal</category>
      <category>php8</category>
    </item>
    <item>
      <title>MySQL : InnoDB : RAM</title>
      <dc:creator>Ben Osborne</dc:creator>
      <pubDate>Sat, 10 Nov 2018 20:18:14 +0000</pubDate>
      <link>https://forem.com/mrbenosborne/mysql--innodb--ram-154m</link>
      <guid>https://forem.com/mrbenosborne/mysql--innodb--ram-154m</guid>
      <description>&lt;p&gt;Are InnoDB tables held in RAM even if they are not frequently queried or at all?&lt;/p&gt;

&lt;p&gt;How does MySQL work out which table to hold in memory etc?&lt;/p&gt;

&lt;p&gt;For example, if I had 5 tables and all 5 were InnoDB, I query only two of the five tables, will the other three tables still be held in memory?&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>innodb</category>
      <category>memory</category>
    </item>
  </channel>
</rss>
