<?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: Christopher Wray</title>
    <description>The latest articles on Forem by Christopher Wray (@cwraytech).</description>
    <link>https://forem.com/cwraytech</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%2F317428%2F9b5d34bd-4809-401c-a3d2-2623c6ac37fd.jpeg</url>
      <title>Forem: Christopher Wray</title>
      <link>https://forem.com/cwraytech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/cwraytech"/>
    <language>en</language>
    <item>
      <title>Best UI Component Library for Desktop Keyboard support?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Fri, 16 Sep 2022 17:08:07 +0000</pubDate>
      <link>https://forem.com/cwraytech/best-ui-component-library-for-desktop-keyboard-support-45b7</link>
      <guid>https://forem.com/cwraytech/best-ui-component-library-for-desktop-keyboard-support-45b7</guid>
      <description>&lt;p&gt;Hey web developers, &lt;/p&gt;

&lt;p&gt;I'm needing some help.&lt;/p&gt;

&lt;p&gt;What is the best UI element toolkit you have found for desktop keyboard support?&lt;/p&gt;

&lt;p&gt;For desktop power users that prefer a keyboard vs a mouse.&lt;/p&gt;

&lt;p&gt;Working within the browser, so needs to be a web UI kit.&lt;/p&gt;

&lt;p&gt;(Tab enter, up-down arrow for select, etc.)&lt;/p&gt;

&lt;p&gt;Thank you!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ux</category>
      <category>discuss</category>
      <category>css</category>
    </item>
    <item>
      <title>About Me- A Software Engineer &amp; CEO- at Work.</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Sat, 28 May 2022 20:18:42 +0000</pubDate>
      <link>https://forem.com/cwraytech/about-me-a-software-engineer-at-work-3ae1</link>
      <guid>https://forem.com/cwraytech/about-me-a-software-engineer-at-work-3ae1</guid>
      <description>&lt;p&gt;I'm Chris. I'm a senior software engineer at a web agency I founded: &lt;a href="https://sol.company/"&gt;Sol Company&lt;/a&gt;, and CEO &amp;amp; Founder of &lt;a href="https://awia.co"&gt;a company that's mission is to make work better.  Awia&lt;/a&gt;. Here is a little about me and what I do for work and how that relates to my priorities.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I do
&lt;/h3&gt;

&lt;p&gt;I do web development for work, and I'm working with a team to make work better. &lt;/p&gt;

&lt;p&gt;This involves a lot of things, like writing code on both backend frameworks, like Laravel, or doing front-end development with Vue. I also get the opportunity to work with a great team of other engineers, designers, and writers (contractors) that together help make work better.&lt;/p&gt;

&lt;p&gt;I love my work. For me, doing things with incredible skill and care is something I've aspired to do since I was just out of High School. A lot of this came from my heritage passed down from my grandparents to my parents to my siblings, and also to me.&lt;/p&gt;

&lt;p&gt;I was raised on a family farm north of a small town called Pasco in Washington state. Growing up, I started helping rake hay on the farm in the summer times to make any money I had for spending. Watching my parents and siblings had a huge impact on me, and my work ethic and has helped me in my career now as a software engineer.&lt;/p&gt;

&lt;h2&gt;
  
  
  My priorities are:
&lt;/h2&gt;

&lt;p&gt;This list is not exhaustive, but below are the three key priorities of my life that are non-negotiable. &lt;/p&gt;

&lt;h3&gt;
  
  
  My King
&lt;/h3&gt;

&lt;p&gt;Jesus. He's transformed my life and saved me from the guilt that I rightly deserve for the wrong things I have done. He is the life that gives us breath every day. He has mercies for us every morning. To deny Him, would be to deny life itself, and I cannot do that. I love Him.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Queen
&lt;/h3&gt;

&lt;p&gt;Ariel, my beautiful wife. She is my Queen. I love her and everything she is is wonderful. I live to support her in her dreams, honor her with my choices and love her as Christ loves his bride, the Church.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our children.
&lt;/h3&gt;

&lt;p&gt;As of writing, we have two children. Noah James is 3 and Evelin Grace is almost 1. Loving and leading them as they become instruments for the glorious kingdom, which is God's family, is my greatest joy. My work supports me and helps me do that in a way they can see. I must provide for them as God has called me as he has all fathers.&lt;/p&gt;

&lt;p&gt;This is a little bit about me. There are so many things I learn on a daily basis, and God updates my priorities and callings daily. Today, as I write this, these are the things that stick out to me that those I work with should know. I don't foresee those priorities changing, but my relationship with work will continue to. God will continue to make me into the type of person He wants me to be, and for that I am grateful.&lt;/p&gt;

&lt;h2&gt;
  
  
  My thoughts on work:
&lt;/h2&gt;

&lt;p&gt;I believe that people should not be discriminated against for being who they believe themselves to be, or even the past things they've done that they regret and have changed.&lt;/p&gt;

&lt;p&gt;This is why I am open about my faith in the Creator of the Universe. This may offend some, but that is not my intention.&lt;/p&gt;

&lt;p&gt;My intention is to be transparent about who I am as a person so that I can be part of a culture where people are open and honest about their beliefs, and willing to accept others that believe differently than them.&lt;/p&gt;

&lt;p&gt;I'm growing in this way, but I feel strongly that one of the best ways I can contribute to this culture is by being transparent myself.&lt;/p&gt;

&lt;p&gt;When I'm at work, my goal is to work for the Glory of God. In order to do this, I don't make my workplace a setting where I try to force or coerce others to believe the way I do. &lt;/p&gt;

&lt;p&gt;My goal is to do every job I have with skill and care. I only bring up my faith in a setting where I can share in a way that allows me to be raw and open about who I am as a person. &lt;/p&gt;

&lt;p&gt;Every day at work, you will find me working my utmost to serve my employer or client to the absolute best of my ability. Every single day I get the opportunity to honor God, not with words only but with the actions I take in serving my co-workers and clients in the best way I'm able.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Past and My Struggles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I have struggled with mental health and have learned to overcome it.
&lt;/h3&gt;

&lt;p&gt;In fact, I take medication daily for depression and anxiety, and preserving my mental well-being is a key part of the decisions I make regarding work. If I am healthy and happy, I can do so much more, and preserving this state is crucial to my above priorities.&lt;/p&gt;

&lt;h3&gt;
  
  
  I was charged with &lt;a href="https://chriswray.dev/posts/why-was-i-charged-with-a-felony"&gt;a felony&lt;/a&gt;.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It is on for dismissal.&lt;/li&gt;
&lt;li&gt;It has taught me a lot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This felony (charge) is a stain on my past and a reminder to me of a time of grief, but thankfully, because of this charge, I've been able to get consistent counseling monthly, and I've found medical providers that are able to help me with my struggles with mental health, and I've found much more empathy for people that are struggling in more than one way. I can say now, well over a year after the charge letter came in the mail, that I am truly grateful for this part of my past.&lt;/p&gt;

&lt;h2&gt;
  
  
  My future plans
&lt;/h2&gt;

&lt;p&gt;I'm working with a team to build &lt;a href="https://awia.co/"&gt;a company to make work better&lt;/a&gt;.  Our first product is &lt;a href="https://nurseries.awia.co/"&gt;a wholesale nursery management platform&lt;/a&gt;. We plan to make it the absolute best software for wholesale nurseries to manage inventory and plant sales.&lt;/p&gt;

&lt;p&gt;Thanks so much for taking the time to read this, and get to know who I am a little. I would love to learn more about you! Could you &lt;a href="https://chriswray.dev/contact"&gt;send me a letter via my contact form&lt;/a&gt;? I read every message sent, and I respond to most of them!&lt;/p&gt;

&lt;p&gt;Have a super day.&lt;/p&gt;

&lt;p&gt;-Chris&lt;/p&gt;

</description>
      <category>career</category>
      <category>codenewbie</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>How to Create Multiple Wildcard Routes at the Same Root Path in Laravel.</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Fri, 15 Apr 2022 17:41:01 +0000</pubDate>
      <link>https://forem.com/cwraytech/how-to-create-multiple-wildcard-routes-at-the-same-root-path-in-laravel-2j42</link>
      <guid>https://forem.com/cwraytech/how-to-create-multiple-wildcard-routes-at-the-same-root-path-in-laravel-2j42</guid>
      <description>&lt;p&gt;Sometimes, you may want to make sure that multiple types of resources are available at a same root wildcard path on your applications website. &lt;/p&gt;

&lt;p&gt;For example, you may want to access blog articles at a /blog-article-slug  root URL, and you may also want to find custom pages like /privacy-policy at the root URL as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Laravel Route Model Binding
&lt;/h2&gt;

&lt;p&gt;In Laravel, there is a nice feature called route model binding that works for most dynamic resource routing requirements. In order to utilize them, you define a route in your route config file, and implicitly or explicitly bind that route to a model that you have defined in your Models directory. &lt;/p&gt;

&lt;h3&gt;
  
  
  Route definition
&lt;/h3&gt;

&lt;p&gt;Laravel will automatically use the variable name you use in your route definition to find the appropriate model, or you can set the type of resource you are expecting directly in your controller method parameters, which is most recommended.&lt;/p&gt;

&lt;p&gt;For our example of /blog-slug-url we would first define the route in the routes file, defining the route with the static function get() on the Route façade. &lt;/p&gt;

&lt;p&gt;Then, we would write a callback function or controller that the route should use to handle the request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;//In routes/web.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Http\Controllers\BlogController&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/{blog}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;BlogController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pages.show'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above example, we are adding a wildcard route parameter for any blog in the curly places, and telling our application to handle the request in the Blog Controller using the show() method. &lt;/p&gt;

&lt;p&gt;💡 &lt;em&gt;You can also give this route a name for easy reference, which is what the name() method is doing in our example.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Model controllers
&lt;/h3&gt;

&lt;p&gt;Just so you know what a blog controller may look like, I’ve provided an example here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;//in App/Http/Controllers/BlogController.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Http\Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Blog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BlogController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Controller&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * Display a blog article
     *
     * @return \Illuminate\Http\Response
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blog&lt;/span&gt; &lt;span class="nv"&gt;$blog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'blogs.show'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;compact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'blog'&lt;/span&gt;&lt;span class="p"&gt;));&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;Most of the times, you will want your routes to be nested in logical resource directories, which for our needs, we would probably define our example blog route to be /blog/blog-slug-url, making it easy to define routes and use model binding for multiple kinds of resources.&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="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="c1"&gt;//This goes to a blog page&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;blog&lt;/span&gt; &lt;span class="c1"&gt;//This goes to an index view of all recent blogs.&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="c1"&gt;//This goes to a service page&lt;/span&gt;
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt; &lt;span class="c1"&gt;// This goes to a list of services&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get the idea.&lt;/p&gt;

&lt;p&gt;For most web applications, this is exactly the type of behavior you should implement and expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Routes with Same Root Path
&lt;/h2&gt;

&lt;p&gt;But,  in some cases, you may have a need to put multiple types of resources on the same root directory. Like in the example I started with, you may want to put blogs and custom pages all at the same logical place in the app.&lt;/p&gt;

&lt;p&gt;This is where things will get tricky.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requests made to the path: the first route defined will be served
&lt;/h3&gt;

&lt;p&gt;The issue is that our app doesn’t care at all about what you put between the curly braces. If the route matches, it will automatically serve the request to the first wildcard route in your app, no matter what comes after.&lt;/p&gt;

&lt;p&gt;This will automatically cause an issue in our case. If we define the route for /blog-slug first, then the app will send requests made to /about to the same controller as the blogs! &lt;/p&gt;

&lt;p&gt;This means we cannot use Laravel’s route model binding in these cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use a switch controller
&lt;/h3&gt;

&lt;p&gt;In order to ensure that requests are sent correctly to either the blog controller for blogs, or the page controller for custom pages, we must create an intermediary controller. This controller will act as a switch for our app to tell it which controller is most appropriate for the request it is being served.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define the route to the controller
&lt;/h3&gt;

&lt;p&gt;So, instead of defining two routes for both blogs and pages, we should define one route that both resources use to handle a matching request.&lt;/p&gt;

&lt;p&gt;Here is what that looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;// In routes/web.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Http\Controllers\ResolvePathController&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//You can name this controller whatever makes sense to you.&lt;/span&gt;

&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/{blogOrPageSlug}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;ResolvePathController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pages.show'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="k"&gt;As&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;see&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;curly&lt;/span&gt; &lt;span class="n"&gt;brace&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;changed&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nc"&gt;The&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;really&lt;/span&gt; &lt;span class="n"&gt;doesn&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;matter&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nc"&gt;I&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="n"&gt;ve&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;blogOrPageSlug&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="n"&gt;because&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;makes&lt;/span&gt; &lt;span class="n"&gt;sense&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also notice that I’m not using either the Blog controller or the Page controller in our route file, but telling the app to use a new controller that acts as the switch for our app.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Make sure to define this route after any other static routes that are using the same directory path!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create the controller
&lt;/h3&gt;

&lt;p&gt;Then, we need to create that new controller, accept the slug and request as parameters, and use the slug to see which controller to direct our requests to.&lt;/p&gt;

&lt;p&gt;In our case, the slug either references a blog or a page stored in our database. &lt;/p&gt;

&lt;p&gt;That should help us out a lot, so we know that we need to look for a matching slug in one of those resources. &lt;/p&gt;

&lt;p&gt;If we can’t find the first resource, we know that the slug either references the other model, or it doesn’t exist.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;//In App/Http/Controllers/ResolvePathController.php
&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Http\Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Blog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Page&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ResolvePathController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Controller&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$pageOrBlogSlug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;whereSlug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pageOrBlogSlug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;PageController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nv"&gt;$blog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Blog&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;whereSlug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pageOrBlogSlug&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;firstOrFail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;BlogController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$blog&lt;/span&gt;&lt;span class="p"&gt;);&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;h3&gt;
  
  
  Search mindfully
&lt;/h3&gt;

&lt;p&gt;In our example application, first we’re searching our database for pages. I chose to search pages first, because I am guessing that eventually our app will have fewer custom pages than blog articles. &lt;/p&gt;

&lt;p&gt;Since we have to search through one of the resources before the other, it makes sense to me to search through the smallest dataset first, as it wouldn’t be good if we had to search through every blog article slug in the database each time a user wanted to visit the about page. That’s up to you to decide though. &lt;/p&gt;

&lt;h3&gt;
  
  
  Don't return a failure if you can't find the first model resource
&lt;/h3&gt;

&lt;p&gt;I’m also only using the first() method on the collection for the page model. I want to check if there is a page but be able to check a blog if the page doesn’t exist. &lt;/p&gt;

&lt;h3&gt;
  
  
  On the final search, return a 404 if the resource is not found.
&lt;/h3&gt;

&lt;p&gt;On the second call to look for blogs, though, I am using firstOrFail() because we want to return a 404 page if no blog article exists with the slug that is requested. If you needed to have more than two Models you are wanting to direct users to, then you will want to make that call the first() method as well but make sure the last model you search is returning a 404 for unfound resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Call model controllers statically
&lt;/h3&gt;

&lt;p&gt;One other thing that you may notice is that we are returning a call to the controllers methods &lt;strong&gt;statically&lt;/strong&gt;. This is a very important change that you will need to make to your controller methods in order to call them properly, &lt;strong&gt;you must make those controller methods static methods so that they can be called this way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In our example PageController:&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="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Http\Controllers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Page&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PageController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Controller&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * Display a page
     * This has to be static, because we call this from the resolve path controller.
     *
     * @param Page $page
     * @return \Illuminate\View\View
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Page&lt;/span&gt; &lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'pages.show'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nb"&gt;compact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'page'&lt;/span&gt;&lt;span class="p"&gt;));&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;This controller method is different than other controller methods because we are not instantiating the controller class when directing the app to use the show method. There may be a better way to do this but I felt this was a nice way.&lt;/p&gt;

&lt;p&gt;Make sure you also you update the show method of your Blog Controller in the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Couple Things to Consider
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Validate slug uniqueness
&lt;/h3&gt;

&lt;p&gt;One thing to think about is validation. &lt;/p&gt;

&lt;p&gt;What happens if a user creates a page with the same slug as a blog article? Well, no-one will ever be directed to the blog article if they use that slug, making the article removed from the site. &lt;/p&gt;

&lt;p&gt;You will run into some major painful bugs if you don’t include validation on both models slugs to ensure slugs are never the same. If not, you may be clicking on an article link that should take you to an article page, and instead you keep getting to the same picky custom page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Index slug columns on the database
&lt;/h3&gt;

&lt;p&gt;Another thing to think about is site speed. You will definitely want to index your slug column on your database tables in order to ensure lookup time is as fast as possible. I would try to steer clear away from this type of resource structuring as much as possible as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is something I thought about a long time, and thankfully had an incredible senior engineer Alex Topal to bounce the idea off of. Within a couple minutes he had this solution and we were able to implement this much faster. &lt;/p&gt;

&lt;p&gt;I’m writing this down so that you hopefully don’t have to spend too much time thinking about a way to do this, and can quickly get going the next time you run into a feature requesting this.&lt;/p&gt;

&lt;p&gt;I originally posted &lt;a href="https://chriswray.dev/posts/how-to-create-multiple-wildcard-routes-at-the-same-root-path-in-laravel"&gt;this article on my website&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>php</category>
    </item>
    <item>
      <title>How to add Amazon affiliate and Google AdSense ads to your Vue app.</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Mon, 31 Jan 2022 05:16:21 +0000</pubDate>
      <link>https://forem.com/cwraytech/how-to-add-amazon-affiliate-and-google-adsense-ads-to-your-vue-app-3a</link>
      <guid>https://forem.com/cwraytech/how-to-add-amazon-affiliate-and-google-adsense-ads-to-your-vue-app-3a</guid>
      <description>&lt;p&gt;Sooner or later, if you are developing a content site, niche blog, or some other website that attracts organic visitors, you may decide you want to start making money with your website in the form of ads. When you go to do that, you may end up using some sort of script tag that the ad service provides you with that you need to add to your html somewhere. &lt;/p&gt;

&lt;p&gt;If you go ahead and paste the script tag as it is somewhere in your Vue app template, right away your console will start to give you errors:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as script, as they will not be parsed.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, how should you go about fixing this issue? &lt;/p&gt;

&lt;p&gt;For me, the best way I found was by creating a Vue component just for my ad. That way, I could simply add the component to the pages I wanted the ads to appear, and have a single source of truth for each ad I was going to serve. &lt;/p&gt;

&lt;p&gt;I also needed a way to load the script asynchronously from the Vue script tag so that the browser wouldn't have issues with ads calling document.write synchronously. For that, I found a link to &lt;a href="https://www.npmjs.com/package/postscribe"&gt;postscribe&lt;/a&gt;, an npm package just for doing that.&lt;/p&gt;

&lt;p&gt;First, install postscribe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; postscribe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, use postscribe to asynchronously load your script in your Vue component and attach it to the dom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"homeadinfo"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"homeadimage"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="cm"&gt;/* eslint-disable no-useless-escape */&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;postscribe&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;postscribe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;home-garden-banner-ad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Edit as needed&lt;/span&gt;
    &lt;span class="na"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;postscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#homeadinfo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;`&amp;lt;script type="text/javascript"&amp;gt;
                        amzn_assoc_ad_type = "banner";
                        amzn_assoc_marketplace = "amazon";
                        amzn_assoc_region = "US";
                        amzn_assoc_placement = "assoc_banner_placement_default";
                        amzn_assoc_campaigns = "your campaign";
                        amzn_assoc_banner_type = "category";
                        amzn_assoc_isresponsive = "true";
                        amzn_assoc_banner_id = "your banner id";
                        amzn_assoc_tracking_id = "your tracking id";
                        amzn_assoc_linkid = "your id";
                    &amp;lt;\/script&amp;gt;`&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;postscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#homeadimage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;`&amp;lt;script type="text/javascript"
                                        src="//z-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&amp;amp;Operation=GetScript&amp;amp;ID=OneJS&amp;amp;WS=1"&amp;gt;
                    &amp;lt;\/script&amp;gt;`&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This attaches the scripts and loads them asynchronously using the postscribe package. &lt;/p&gt;

&lt;p&gt;Edit the id and script tags as needed. &lt;/p&gt;

&lt;p&gt;Then, import and use your component in your pages/ components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;home-garden-banner-ad&amp;gt;&amp;lt;/home-garden-banner-ad&amp;gt;&lt;/span&gt;
  ...
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HomeGardenBannerAd&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/Components/Ads/HomeGardenBannerAd.vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;HomeGardenBannerAd&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The great way about this method is you can use those ads over and over, and you can have one central place to edit your ads as needed!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>vue</category>
      <category>html</category>
    </item>
    <item>
      <title>Show Your Work!</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Sat, 22 Jan 2022 22:35:17 +0000</pubDate>
      <link>https://forem.com/cwraytech/share-your-work-1ab2</link>
      <guid>https://forem.com/cwraytech/share-your-work-1ab2</guid>
      <description>&lt;p&gt;My wife got me this awesome book by Austin Kleon titled, &lt;a href="https://www.amazon.com/gp/product/076117897X/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=076117897X&amp;amp;linkCode=as2&amp;amp;tag=solcompany-20&amp;amp;linkId=445239168b9dc3f789daede16426c461"&gt;"Show your Work!".&lt;/a&gt; The book is super easy to read and I highly recommend it. The title is pretty clear, but the point of the book is how to share your work and use that as a way to get discovered.&lt;/p&gt;

&lt;p&gt;Here is me sharing my work.&lt;/p&gt;

&lt;p&gt;The past few months I've been working on a project with &lt;a href="https://gardengatetrees.com"&gt;Garden Gate Nursery&lt;/a&gt; that soon will be finished. It's an inventory program that will help plant nurseries track inventory as it comes and goes from their nursery and generate orders &amp;amp; quotes for customers.&lt;/p&gt;

&lt;p&gt;It will be fully integrated with QuickBooks Online &amp;amp; Desktop to generate invoices for orders and track sales. We may integrate with the QuickBooks Payments API as well to be able to charge customers through the app.&lt;/p&gt;

&lt;p&gt;It is built on Laravel utilizing Inertia JS as a connector with the backend and Vue on the frontend. I'm using Tailwind CSS for the styling and Daisy UI for some components.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/XR1rS-CCfx0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This video is a fast forwarded version of all the updates I took while working on the project. You can see the progress I made on the app and how it evolved over time! All in under 10 minutes.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>vue</category>
      <category>laravel</category>
    </item>
    <item>
      <title>Tell me 1 reason why I should go with Ruby on Rails for my next Web App project.</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Fri, 12 Mar 2021 15:58:09 +0000</pubDate>
      <link>https://forem.com/cwraytech/tell-me-1-reason-why-i-should-go-with-ruby-on-rails-for-my-next-web-app-project-2ll5</link>
      <guid>https://forem.com/cwraytech/tell-me-1-reason-why-i-should-go-with-ruby-on-rails-for-my-next-web-app-project-2ll5</guid>
      <description>&lt;p&gt;Tell me 1 reason why I should go with Ruby on Rails for my next Web App project!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>rails</category>
      <category>api</category>
    </item>
    <item>
      <title>Going with dotnet for a new project. What’s your best advice?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Sun, 28 Feb 2021 16:11:47 +0000</pubDate>
      <link>https://forem.com/cwraytech/going-with-dotnet-for-a-new-project-what-s-your-best-advice-4cfh</link>
      <guid>https://forem.com/cwraytech/going-with-dotnet-for-a-new-project-what-s-your-best-advice-4cfh</guid>
      <description>&lt;p&gt;For a new project I’m starting on in a couple months, I am planning to utilize .net. &lt;/p&gt;

&lt;p&gt;I would love to hear what your best advice is for someone starting with the ecosystem? &lt;/p&gt;

&lt;p&gt;My goal is to first build the web app then build the mobile and desktop application for the project. &lt;/p&gt;

&lt;p&gt;How’s the best way to go about learning the web side of things?&lt;/p&gt;

&lt;p&gt;Any other advice you have?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>dotnet</category>
      <category>mvc</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How personal should you go?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Fri, 26 Feb 2021 11:29:59 +0000</pubDate>
      <link>https://forem.com/cwraytech/how-personal-should-you-go-3gao</link>
      <guid>https://forem.com/cwraytech/how-personal-should-you-go-3gao</guid>
      <description>&lt;p&gt;Recently, I remembered some extremely painful life events that have caused me to pretty much poop out of everything. &lt;/p&gt;

&lt;p&gt;My question to you is how personal should you go when sharing with clients that it will take longer to get work done than before?&lt;/p&gt;

&lt;p&gt;Another question is: Has something like this ever happened to you? How did you work through your pain healthily? &lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>It’s hard.</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Thu, 11 Feb 2021 05:22:14 +0000</pubDate>
      <link>https://forem.com/cwraytech/it-s-hard-5dp7</link>
      <guid>https://forem.com/cwraytech/it-s-hard-5dp7</guid>
      <description>&lt;p&gt;Moving back to the USA. Any tips?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Apple Mac OS or Microsoft Windows 10?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Mon, 01 Feb 2021 14:02:51 +0000</pubDate>
      <link>https://forem.com/cwraytech/apple-computers-or-microsoft-windows-for-rapid-expansion-4hc8</link>
      <guid>https://forem.com/cwraytech/apple-computers-or-microsoft-windows-for-rapid-expansion-4hc8</guid>
      <description>&lt;p&gt;Trying to set up our business for future success. &lt;/p&gt;

&lt;h3&gt;
  
  
  Things We're Looking For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ease of addition to team. (Adding more computers, etc.)&lt;/li&gt;
&lt;li&gt;Ease of integrating development processes.&lt;/li&gt;
&lt;li&gt;Ease of CI deployments.&lt;/li&gt;
&lt;li&gt;Ease of interacting with git &amp;amp; GitHub &lt;/li&gt;
&lt;li&gt;Ease of secure remote communications between a dispersed workforce across continents.&lt;/li&gt;
&lt;li&gt;Financially sustainable long term.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What have you prefered to use on your team, and why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is no right answer, just want to see what others have decided and what reasonings are behind that decision. &lt;/p&gt;

</description>
      <category>operatingsystems</category>
      <category>discuss</category>
      <category>webdev</category>
      <category>operations</category>
    </item>
    <item>
      <title>Google or Microsoft for email?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Sat, 30 Jan 2021 06:23:08 +0000</pubDate>
      <link>https://forem.com/cwraytech/google-or-microsoft-for-email-1mak</link>
      <guid>https://forem.com/cwraytech/google-or-microsoft-for-email-1mak</guid>
      <description>&lt;p&gt;When I opened my business 3 years ago, I created a G Suite  account and became quite fed up with the interface, leading me to move to Office 365. &lt;/p&gt;

&lt;p&gt;Recently I found that Google has majorly improved its offering and changed the name to workspace. They have also made the interface much easier to use.&lt;/p&gt;

&lt;p&gt;Now, I’m trying to set up our systems for rapid growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developers:
&lt;/h2&gt;

&lt;p&gt;I want to see what you guys feel is best for a developers work life? &lt;/p&gt;

&lt;h2&gt;
  
  
  And if you do project management:
&lt;/h2&gt;

&lt;p&gt;From a project management standpoint, which email and cloud provider is the simplest to maintain, integrate with software, and add new users to?&lt;/p&gt;

&lt;p&gt;Thank you 🙏 &lt;/p&gt;

</description>
      <category>developers</category>
      <category>googlecloud</category>
      <category>microsoft</category>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>How would you structure an application like the Bible app "YouVersion" or an eReader?</title>
      <dc:creator>Christopher Wray</dc:creator>
      <pubDate>Mon, 18 Jan 2021 22:55:35 +0000</pubDate>
      <link>https://forem.com/cwraytech/how-would-you-structure-an-application-like-the-bible-app-youversion-or-and-ereader-2kcf</link>
      <guid>https://forem.com/cwraytech/how-would-you-structure-an-application-like-the-bible-app-youversion-or-and-ereader-2kcf</guid>
      <description>&lt;p&gt;I have been pondering on my mind a lot lately about how to build a reader application. Specifically, how to build the data structure.&lt;/p&gt;

&lt;p&gt;Have any of you built a reader app before, or bible application?&lt;/p&gt;

&lt;p&gt;Do you know of open source projects that show how a database should be set up for this kind of project?&lt;/p&gt;

&lt;p&gt;Are eReaders built on open source tech?&lt;/p&gt;

</description>
      <category>database</category>
      <category>javascript</category>
      <category>books</category>
    </item>
  </channel>
</rss>
