<?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: charliedeveloper</title>
    <description>The latest articles on Forem by charliedeveloper (@charliedevelops).</description>
    <link>https://forem.com/charliedevelops</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%2F55902%2F85f20444-dab7-4f0e-81dc-68569c1195f0.jpg</url>
      <title>Forem: charliedeveloper</title>
      <link>https://forem.com/charliedevelops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/charliedevelops"/>
    <language>en</language>
    <item>
      <title>Combatting apathy when learning new coding language</title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Fri, 26 Mar 2021 16:07:01 +0000</pubDate>
      <link>https://forem.com/charliedevelops/combatting-apathy-when-learning-new-coding-language-5d57</link>
      <guid>https://forem.com/charliedevelops/combatting-apathy-when-learning-new-coding-language-5d57</guid>
      <description>&lt;p&gt;Feeling like you can’t be bothered or you don’t care about something is the greatest threat to your own personal progression. Here are a few ways to break through the wall of apathy and get enthusiastic about learning again.&lt;/p&gt;

&lt;p&gt;If you’ve experienced trying to learn any sort of coding language, you’ll know there’s usually a honeymoon period while you complete your ‘hello world’ project. You’re flying high, but keeping the motivation and the will to learn after this can be tough.&lt;/p&gt;

&lt;p&gt;There are a whole host of reasons why you might lose interest and find yourself taking a ‘meh’ attitude towards finishing what you started: maybe you’re too busy, or perhaps you find that the difficulty really ramps up quickly after step 1, or maybe another shiny new coding language/framework has been released (this happens a lot with JavaScript)…&lt;/p&gt;

&lt;p&gt;There are a host of reasons that apathy might begin to creep in. But this is the critical moment, and if you can learn to catch yourself at this point and train yourself to continue, you will vastly increase your chances of reaping the long term rewards.&lt;/p&gt;

&lt;p&gt;Your will to complete a task will only ever be as strong as your motivation to begin.&lt;/p&gt;

&lt;p&gt;When you hit a dip in learning try to make a conscious effort to remember why you started learning this new language in the first place. Battle apathy by picturing the rewards for adding that coding language to your skillset. It could be anything — more money, a new job, a more senior role or even an ability to build that side project you have always wanted to create.&lt;/p&gt;

&lt;p&gt;Right now, when finding learning tough I have to remind myself why I am doing it. My current motivation is to be able to explain difficult technical concepts in more simplistic terms when teaching/mentoring others. (Also one of my side web projects is in desperate need of an update!)&lt;/p&gt;

&lt;p&gt;Your ability to learn is only as good as the resources you have at your disposal.&lt;/p&gt;

&lt;p&gt;Understanding your most productive learning style is key to making progress. Nothing is more disheartening when learning a new coding language than finding you’re not engaging with the material.&lt;/p&gt;

&lt;p&gt;Personally, trying to learn from walls of text in textbooks has me shutting my laptop. I favour having someone standing in front of me spelling it out, but sadly this isn’t always an option. Instead, I opt for the next best thing — a video of someone standing in front of me spelling it out!&lt;/p&gt;

&lt;p&gt;No other industry has such a large bank of free high quality learning resources — you can find free ‘how to’ videos on nearly every coding language and often from multiple sources.&lt;/p&gt;

&lt;p&gt;Don’t like the whiney voice of a presenter on YouTube? No problem! Try someone else’s video.&lt;/p&gt;

&lt;p&gt;When I teach students how to code, they all have their own preferred method of learning — some liked using videos, others listening to discussions and podcasts, watching live demos, doing exercises or structured project work. We all found our best results for learning when we discovered our favourite learning style.&lt;/p&gt;

&lt;p&gt;Learning a coding language isn’t all sunshine and rainbows.&lt;/p&gt;

&lt;p&gt;Let’s be honest: nothing in life can be fun and super engaging 24/7. You can test this against everything.&lt;/p&gt;

&lt;p&gt;“But what about cake?” I hear you ask. Well, someone’s got to make it, plus it’s bad for you if you eat it all the time. “How about puppies?” Puppies are pretty close to being awesome 24/7, but you do still have to pick up their poo in the park. I could go on but I think you get the idea.&lt;br&gt;
Far from this being a negative outlook, what’s really important to see here is that all the best things in life take a little work and sacrifice on your part, and that ultimately victory is made all the more sweet by the toughness endured. &lt;/p&gt;

&lt;p&gt;In the same way that marathon runners wouldn’t feel the level of satisfaction they do from finishing a race without powering through ‘the wall’, you must be prepared to dig deep and plough through tough learning patches.&lt;/p&gt;

&lt;p&gt;Gaining this mental fortitude is not easy, however it gets easier with practice, so if you are feeling apathetic about whether to continue learning, stick at it and you may surprise yourself!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>What are the basic courses/topics a software developer should learn to start their career?</title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Thu, 02 Aug 2018 08:57:48 +0000</pubDate>
      <link>https://forem.com/charliedevelops/what-are-the-basic-coursestopics-a-software-developer-should-learn-to-start-their-career-20a0</link>
      <guid>https://forem.com/charliedevelops/what-are-the-basic-coursestopics-a-software-developer-should-learn-to-start-their-career-20a0</guid>
      <description>&lt;p&gt;&lt;em&gt;Note for devs already in the industry: hopefully this article will be helpful to you when you are inevitably asked how to get into programming as a link you can send to the interested person&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;So when starting to train, it is important to be using the correct resources. Luckily in the software development industry there are loads!&lt;/p&gt;

&lt;p&gt;Assuming you want to be a full stack developer (know a bit of everything) the best place to start is &lt;a href="https://www.codecademy.com/learn"&gt;Codecademy’s&lt;/a&gt; free HTML, CSS and Javascript courses. They are completed online and serve as a great starting point to some of the basics.&lt;/p&gt;

&lt;p&gt;From here try and pick up a backend language, I would recommend PHP as that is what I did, but take a look at job postings in your area and see what technologies that they are looking for. &lt;a href="https://www.youtube.com/watch?v=-oUXcTz1eEA&amp;amp;list=PL_c9BZzLwBRK-pdEkJHvsqd5yBDxvggbs"&gt;This guys PHP video series is great&lt;/a&gt;. I totally understand that PHP won’t be for everyone but one of the benefits is that it sits nicely in between loosely typed languages such as Javascript and strictly typed languages such as C. This means it strict enough to enforce some good coding habits but loose enough to be beginner friendly. Also if you are learning on a mac PHP plays very nicely with the UNIX environment (will take a little arm wrestling to get it going on Windows although it’s getting better).  Youtube videos, books and blogs are the best free places to learn this, coding bootcamps are the best if you can afford it and have the time to dedicate to it (however be very picky about which one you go to as they are not all the same).&lt;/p&gt;

&lt;p&gt;Make sure you understand object oriented programming (&lt;a href="https://youtu.be/SS-9y0H3Si8"&gt;OOP&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Get your head into databases by learning SQL - &lt;a href="https://sqlzoo.net/"&gt;SQLZOO&lt;/a&gt; is a great resource I found useful when learning. &lt;a href="http://www.sequelpro.com/"&gt;Sequel Pro&lt;/a&gt; is my favourite GUI to visualise the databases you are working with and will make your life easier. If you do learn PHP use &lt;a href="http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers"&gt;PDO&lt;/a&gt; to link it to your database.&lt;/p&gt;

&lt;p&gt;Also try and learn a version control system such as Git (&lt;a href="https://youtu.be/9GKpbI1siow"&gt;this video course is a good starting point&lt;/a&gt;), get comfortable using the &lt;a href="https://www.computerworld.com/article/2598082/linux/linux-linux-command-line-cheat-sheet.html"&gt;command line&lt;/a&gt; and try and do some research on an agile working methodology such as Scrum (potential employer will be impressed).&lt;/p&gt;

&lt;p&gt;Go to &lt;a href="https://www.meetup.com/"&gt;meetup&lt;/a&gt; and find tech meetups to do with coding in your area - this is a good way to find a mentor. Maintain an active &lt;a href="https://www.meetup.com/"&gt;Github&lt;/a&gt; (For storing/sharing your code), &lt;a href="https://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt; (for requesting/giving help) and &lt;a href="https://codepen.io/"&gt;codepen&lt;/a&gt; (like a doodle pad but for code) accounts.&lt;/p&gt;

&lt;p&gt;Finally research “&lt;a href="https://www.google.co.uk/search?q=software+developer+technical+interviews&amp;amp;oq=software+developer+technical+interviews&amp;amp;aqs=chrome..69i57j0l5.789j0j4&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8"&gt;software developer technical interviews&lt;/a&gt;” and have a go at some &lt;a href="https://www.practiceaptitudetests.com/free-tests/"&gt;free online aptitude tests&lt;/a&gt; so that you are not surprised by the interview process (it’s not like other industries).&lt;/p&gt;

&lt;p&gt;After all that you should be well placed to have a crack at getting your first gig.&lt;/p&gt;

&lt;p&gt;Good luck! Remember to enjoy yourself while your learning otherwise you might find yourself giving up, It’s not going to be easy but it’s an awesome job if you can get it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A note about procrastination:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start right now! There is no time like the present. As someone who has experienced learning to code from scratch I became very aware of the negative impact of procrastination. I used to look at forums for hours, posting questions about what to do and how to do it. The truth is that time could have been spent learning. It’s the difference between loving software development or loving the idea of being a software developer - you must make a choice about which one you want to be and get cracking!&lt;/p&gt;

&lt;p&gt;...That being said, if you are going to procrastinate then you should do it right. Here is my current favourite place to procrastinate on the &lt;a href="http://chihuahuaspin.com/"&gt;internet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>learning</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Getting started with Slim PHP framework by building a very simple MVC/OOP app</title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Fri, 29 Jun 2018 07:45:27 +0000</pubDate>
      <link>https://forem.com/charliedevelops/getting-started-with-slim-php-framework-by-building-a-very-simple-mvcoop-app-4j2b</link>
      <guid>https://forem.com/charliedevelops/getting-started-with-slim-php-framework-by-building-a-very-simple-mvcoop-app-4j2b</guid>
      <description>&lt;p&gt;&lt;em&gt;Aim:&lt;/em&gt; &lt;br&gt;
We are going to build a Slim application that creates a farm pen and outputs the noises that the cow &amp;amp; chicken inside the pen make.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Requirements:&lt;/em&gt;&lt;br&gt;
    - A pen can only contain a cow and a chicken (will help us practice with slim dependancy injection container)&lt;br&gt;
    - Must implement an MVC approach (help us understand how models, views and controllers work together)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; So we are gonna need the slim skeleton application - open your command line and run:&lt;br&gt;
&lt;br&gt;
&lt;code&gt;composer create-project slim/slim-skeleton slimFarm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if you don’t have composer installed globally use the composer documentation to get it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; On your command line navigate (cd) into slimFarm directory that has been made for you&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; We are going to run a php server so we can see that the slim app is present and working &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your command line run:

&lt;code&gt;php -S 0.0.0.0:8080 -t ./public/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Go to &lt;a href="http://0.0.0.0:8080/"&gt;http://0.0.0.0:8080/&lt;/a&gt; to check its working (you should get the slim default page)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Open files in your text editor and make a Classes folder inside src&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Add your namespace to autoloading in composer.json:&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="nl"&gt;"autoload"&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;"psr-4"&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;"Farm\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/classes/"&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="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;n.b: this is in addition to the already existing autoload-dev&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This will mean we can reference our classes using namespaces rather than having loads of require's everywhere.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; Open a new tab in your command line and run &lt;code&gt;composer dump-autoload&lt;/code&gt; in the command line&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This regenerates our autoloading and namespaces to contain the changes we just made in step 6.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8.&lt;/strong&gt; We need our Cow and Chickens to go in the pen! so make our classes inside Classes/Models folder:&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="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Farm\Models&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;ChickenModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$speak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'cluck'&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Farm\Models&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;CowModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$speak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'moo'&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;&lt;strong&gt;9.&lt;/strong&gt; Create a Pen class inside Classes/Models folder:&lt;br&gt;
namespace Farm\Models;&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;PenModel&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$cow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$chicken&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;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$chicken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$cow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;chicken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$chicken&lt;/span&gt;&lt;span class="p"&gt;;&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;getCowNoise&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;cow&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;;&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;getChickenNoise&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;chicken&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;speak&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;&lt;strong&gt;10.&lt;/strong&gt; Lets make a factory so that Pen can be created quickly with its dependencies in just one call.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make a Factories folder (inside the Classes folder)&lt;/li&gt;
&lt;li&gt;Make PenModelFactory:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Farm\Factories&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;PenModelFactory&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__invoke&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$cow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nf"&gt;Farm\Models\CowModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nv"&gt;$chicken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nf"&gt;Farm\Models\ChickenModel&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nf"&gt;Farm\Models\PenModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$chicken&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;ul&gt;
&lt;li&gt;Our factory doesn't need a constructor function, the logic is put inside the __invoke magic method because of the way it is called from our Dependency Injection Container (DIC) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11.&lt;/strong&gt; So now we have made our factory let's put it in our DIC&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Think of the DIC as a big associative array that knows how to instantiate objects for you we put in there for use later in our application&lt;/li&gt;
&lt;li&gt;Open up src/dependancies.php&lt;/li&gt;
&lt;li&gt;There are preexisting things inside the DIC already&lt;/li&gt;
&lt;li&gt;Add our factory like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$container&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'penModel'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nf"&gt;Farm\Factories\PenModelFactory&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;We are saying "inside our container (DIC) add a new key of 'penModel' and when we ask for that 'penModel' run our factory to instantiate and return a ready made pen object with all the dependencies (cow + chicken) taken care of."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;12.&lt;/strong&gt; Let’s look in our routing file to see how we deal with different HTTP Requests to our application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Like the defaults already written in here we could use quick anonymous functions to save having to create a factory but we instead are gonna "do it right" so we will make a route and use a controller to call our business logic.&lt;/li&gt;
&lt;li&gt;Delete the existing $app-&amp;gt;get(.....) routes already in the file (we will create our own)&lt;/li&gt;
&lt;li&gt;Set up our route:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;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;'/makeMeAPen'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt; &lt;span class="n"&gt;our&lt;/span&gt; &lt;span class="n"&gt;callback&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;go&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;/makeMeAPen is the URL extension people are expecting to visit to run our code&lt;/li&gt;
&lt;li&gt;But we don't have a controller yet so....&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;13.&lt;/strong&gt; Let’s make a controller to call our PenFactory and render out a view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Controllers directory inside src/Classes&lt;/li&gt;
&lt;li&gt;Create PenController inside src/Classes/Controllers/
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Farm\Controllers&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;PenController&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$container&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;//this constructor passes the DIC in so we can get our PenFactory out of it later&lt;/span&gt;
    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$container&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$container&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__invoke&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;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//create our pen from Penfactory in DIC&lt;/span&gt;
        &lt;span class="nv"&gt;$pen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;-&amp;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;'penModel'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;//assign args (variables that will be available on rendered view)&lt;/span&gt;
        &lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'cowNoise'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$pen&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getCowNoise&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nv"&gt;$args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'chickenNoise'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$pen&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getChickenNoise&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;//get the default template renderer out of DIC and pass the response and $args to a template file&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;-&amp;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;'renderer'&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;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'showFarm.phtml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$args&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;&lt;strong&gt;14.&lt;/strong&gt; Now our controller exists lets add it in as the thing that happens when our route is hit:&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="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;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;'/makeMeAPen'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="nc"&gt;Farm\Controllers\PenController&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;15.&lt;/strong&gt; Notice in our PenController we are calling a template file that doesn't exist yet so lets create it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create showFarm.phtml in /templates folder&lt;/li&gt;
&lt;li&gt;Use the values you put into the $args associative array as normal variables:
&lt;/li&gt;
&lt;/ul&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;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;slimFarm&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&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;/style&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Cows go: &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cowNoise&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;!&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Chickens go: &lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$chickenNoise&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;!&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;16.&lt;/strong&gt; Navigate to &lt;a href="http://0.0.0.0:8080/makeMeAPen"&gt;http://0.0.0.0:8080/makeMeAPen&lt;/a&gt; and behold the brilliance of your super advanced app!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>php</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Which contentious opinions in programming actually matter?</title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Thu, 14 Jun 2018 13:56:41 +0000</pubDate>
      <link>https://forem.com/charliedevelops/which-contentious-opinions-in-programming-actually-matter-5dcc</link>
      <guid>https://forem.com/charliedevelops/which-contentious-opinions-in-programming-actually-matter-5dcc</guid>
      <description>&lt;p&gt;I think this question would breed a toxic comment section if it was posted in most places on the internet but I think the dev.to community is up to the challenge for a positive chat about stereotypical programming opinions! So hold my beer, here goes... &lt;/p&gt;

&lt;p&gt;There are more stereotypical opinions floating around the development community than you can shake a stick at: tabs vs spaces, Windows vs Mac, nano vs vim etc...&lt;/p&gt;

&lt;p&gt;The vast majority don't really matter in the long run, however I am interested in peoples opinions about which stereotypically contentious issues actually make a difference and have as close to a generally accepted 'correct answer' as you are likely to find in programming? &lt;/p&gt;

&lt;p&gt;An example (in my current opinion) to mull over: &lt;code&gt;"the less code you write the better"&lt;/code&gt; I find this breeds unreadable code that causes knowledge silos and junior devs to spontaneously combust when they see it.  &lt;/p&gt;

&lt;p&gt;The difference in opinions in the topics raised are potential powder kegs so please try and be respectful if you respond. If in doubt, just imagine you are discussing it with your granny. &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>programming</category>
      <category>grannyrulescomments</category>
    </item>
    <item>
      <title>Should we do away with junior/middleweight/senior? </title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Fri, 30 Mar 2018 16:25:31 +0000</pubDate>
      <link>https://forem.com/charliedevelops/should-we-do-away-with-juniormiddleweightsenior--4pal</link>
      <guid>https://forem.com/charliedevelops/should-we-do-away-with-juniormiddleweightsenior--4pal</guid>
      <description>&lt;p&gt;Sometimes you have to step back from a situation to see it for what it really is, and I think this is particularly true of the way software developers are labelled as junior, middleweight and senior.&lt;/p&gt;

&lt;p&gt;For some reason, it’s become an accepted part of the software development industry that if you’re a junior developer looking to get an junior level job and learn the ropes, you may end up being passed over because you haven’t got — in some cases — up to the necessary three years experience!&lt;/p&gt;

&lt;p&gt;Sounds silly right? Junior level jobs that need three years experience?&lt;/p&gt;

&lt;p&gt;Well that’s because it is.&lt;/p&gt;

&lt;p&gt;Seeing this in a job advert does have its uses however. It serves as a pretty clear warning about the kind of company you’re applying to. There seems to be a growing culture in the software industry of businesses playing the job title game: slap ‘junior’ in front of any job description you publish and you can get away with paying a much lower salary.&lt;/p&gt;

&lt;p&gt;The sad truth is that these businesses are going to find it harder to hold on to staff as new starters quickly realise their own worth and spot the gap between the value of what they are doing, and what they are getting paid. In the long run, as word gets around, they’re going to find it more and more difficult to recruit great candidates.&lt;/p&gt;

&lt;p&gt;There’s a huge difference between a developer looking for his or her first job and someone who has been working in the industry for three years. You might think I’m advocating a new term for another strata of developer to be introduced, but quite the opposite.&lt;/p&gt;

&lt;p&gt;From my own experience I have found it easiest to grow professionally when working within a flat structure where developers are simply called developers. There are no senior developers, no middleweight or junior developers… just developers.&lt;/p&gt;

&lt;p&gt;Maybe it’s psychological, but I’ve found that this kind of structure goes a long way to encourage opinions and input from newer coders in meetings, whilst also taking the pressure off those who have been doing it longer who may feel (and this is often unnecessarily) that they need to carry the team and almost take on a managerial role. It means that developers are judged solely on what they know and on their actions.&lt;/p&gt;

&lt;p&gt;This is not to say that everyone learns at the same pace. I would encourage people to consider that years aren’t a reliable comparator across developers. Due to the volume of complex technical knowledge that makes up the industry it’s not uncommon to have incredibly intelligent long term coders not know very basic stuff about a rudimentary technology. Similarly there are plenty of very new coders who have abilities far beyond what you would expect based on their time in the industry.&lt;/p&gt;

&lt;p&gt;I’m certain that coding abilities across a group of devs after three years in the industry could look very different, based on the relative speeds at which they each pick up new material. In that case, the labels of junior, middleweight and senior are pretty unhelpful when it comes to choosing the best candidate for the job.&lt;/p&gt;

&lt;p&gt;The answer? Employers should be gleaning information about skill levels from aptitude and developer tests coupled with interviews, rather than relying on number of years experience. As an industry, we should break free of the labels that plague the developer job search. When time is taken to find out what people are capable of rather than how long they’ve been in the workplace, everyone wins!&lt;/p&gt;

</description>
      <category>career</category>
      <category>culture</category>
      <category>workplace</category>
      <category>progress</category>
    </item>
    <item>
      <title>How to stop being a n00b at wireframing</title>
      <dc:creator>charliedeveloper</dc:creator>
      <pubDate>Thu, 15 Mar 2018 14:42:11 +0000</pubDate>
      <link>https://forem.com/charliedevelops/how-to-stop-being-a-n00b-at-wireframing--28fb</link>
      <guid>https://forem.com/charliedevelops/how-to-stop-being-a-n00b-at-wireframing--28fb</guid>
      <description>&lt;p&gt;&lt;em&gt;Are your wireframes wack? Are you embarrassed to be seen with them in public? Do they end up useless because you can’t face looking at them?&lt;/em&gt; If you want to get better and aren’t sure how to go about it, this article is for you!&lt;/p&gt;

&lt;p&gt;First, are you actually attempting to create wireframes at all? Nine times out of ten when starting a project, it feels like it’ll be easier to dive head first into writing code. By the time you realise that you need a wireframe to guide you, it feels too late. But the good news is, it’s never too late for a wireframe. Many a project has been rescued with an overdue wireframe. Think about the benefits of having a plan before attempting anything - in life or in coding. You wouldn’t set out toward a destination you’ve never driven to without first looking at a map or setting up your sat nav. Give yourself the best opportunity to succeed and by creating a wireframe to follow before you start.&lt;/p&gt;

&lt;p&gt;Whether you’re a new dev or someone with more experience, you might find the idea of learning to wireframe a bit intimidating. The truth is, there’s no bad time to learn something new in development, so either practice in private or on collaborative projects. Often, others will offer positive assistance when asked for constructive criticism. &lt;/p&gt;

&lt;p&gt;So how do you actually get better? Here is a handy to do list:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Keep it low fi&lt;/strong&gt; &lt;br&gt;
All you need is a pen and paper. This is the fastest, easiest way to transfer ideas from your head into a wireframe, and you don’t have to get used to using wireframing software. Plus, if you don’t like the result, you can chuck it and have another go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Strip out unnecessary detail&lt;/strong&gt; &lt;br&gt;
Be sure to make your wireframe fit for purpose. If you’re just using the wireframe to guide your structure or layout, it doesn’t have to be an all singing, all dancing design document with every element beautifully detailed. It’s perfectly acceptable for a wireframe to be a collection of boxes on a page indicating where content will go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Label as you go&lt;/strong&gt; &lt;br&gt;
More specifically, label the things that are going to help you do your job and save you time when you come to building. This means identifying HTML tags such as divs. Extra marks for using HTML5 semantic elements such as header, footer, section and main to better structure your document. This will get you thinking about how your HTML structure will look before you have even switched on your laptop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Build the things you wireframe&lt;/strong&gt;&lt;br&gt;
The process of turning a sketch on the back of a napkin into a glorious website will help you learn more and you’ll develop a deeper understanding of what you need from your wireframes in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Document changes as you go&lt;/strong&gt;&lt;br&gt;
Just as an entrepreneur understands that the best business plans are the ones that are kept up to date and used as a guide all year round, you too will have to keep your wireframe up to date as you go to get the most out of it throughout your build. Changed that &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; into an &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;? Moved that element to be on a new line? Make sure you record the changes. The good news is you did it in pencil. Now where is that eraser...?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Keep hunting for inspiration&lt;/strong&gt;&lt;br&gt;
Get out there and cruise &lt;a href="https://codepen.io/"&gt;Codepen&lt;/a&gt;, check out design blogs and seek out developer portfolios - these are a great places to find incredibly innovative work that may get you creative juices flowing and give you ideas for your next exciting wireframe layout.&lt;/p&gt;

&lt;p&gt;These are just a few quick wins for stepping your wireframe game up and increasing your ability in what is a hugely useful skill to have. Just keep practicing and you’ll have the confidence to wireframe like a champ in no time!&lt;/p&gt;

</description>
      <category>wireframing</category>
      <category>design</category>
      <category>development</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
