<?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>DEV Community: Kera Cudmore</title>
    <description>The latest articles on DEV Community by Kera Cudmore (@keracudmore).</description>
    <link>https://dev.to/keracudmore</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%2F864006%2F13e1098a-fe01-424a-9dce-900632b21a0a.jpeg</url>
      <title>DEV Community: Kera Cudmore</title>
      <link>https://dev.to/keracudmore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keracudmore"/>
    <language>en</language>
    <item>
      <title>GitHub README images based on prefers-color-scheme</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Sun, 27 Jul 2025 16:36:07 +0000</pubDate>
      <link>https://dev.to/keracudmore/github-readme-images-based-on-prefers-color-scheme-5cp8</link>
      <guid>https://dev.to/keracudmore/github-readme-images-based-on-prefers-color-scheme-5cp8</guid>
      <description>&lt;p&gt;Have you ever been viewing a README on GitHub that blinds you due to a white background when you're in dark mode? Or had an image that didn't quite look right in dark mode due to the difference in background colors? Well suffer no more and implement images in your README best suited to the users color scheme.&lt;/p&gt;

&lt;p&gt;To achieve this, you'll need two images - one suitable for display in a light color scheme, and one for dark color schemes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bkpl9z5rk2mpxdnsp7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bkpl9z5rk2mpxdnsp7m.png" alt="Logo in light mode and dark mode" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, you'll want to include the following code in your README:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(prefers-color-scheme: dark)"&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"dark-mode-image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Logo"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"light-mode-image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we're using a picture element to allow us to display a different image dependent on the users preferred color scheme.&lt;/p&gt;

&lt;p&gt;Our source element defines the image we'd like to use for dark mode. The image element is what the README will default to if there is an issue with supporting the picture element, or none of the source tags are applicable. In the example above, we are using the image element to define the image we want to use in light mode and the image we want to be our default image should there be an issue rendering any of the source images.&lt;/p&gt;

&lt;p&gt;We could even take this a step further and define images for light and dark mode, and then a seperate image as our default backup image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(prefers-color-scheme: dark)"&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"dark-mode-image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(prefers-color-scheme: light)"&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"light-mode-image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Logo"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"default-rainbow-image.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! Now your README file will read the users preferred color scheme and display an image chosen for that theme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9502zwxyu4xw5z3cen3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9502zwxyu4xw5z3cen3.gif" alt="Light to dark mode example gif" width="720" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to see an example in action? Check out my example repository below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kera-cudmore/example-light-dark-github-readme-images" rel="noopener noreferrer"&gt;kera-cudmore/example-light-dark-github-readme-images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can emulate a color scheme in Chrome by opening the Command Menu (Ctrl + Shift + P or Cmd + Shift + P) and then typing in &lt;code&gt;emulate CSS prefers-color-scheme:dark&lt;/code&gt; and then enter.&lt;/p&gt;

</description>
      <category>github</category>
    </item>
    <item>
      <title>Reusable GitHub Worfklows</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Mon, 24 Mar 2025 08:58:50 +0000</pubDate>
      <link>https://dev.to/keracudmore/reusable-github-worfklows-md</link>
      <guid>https://dev.to/keracudmore/reusable-github-worfklows-md</guid>
      <description>&lt;p&gt;I was recently tasked with performing a spike at work to see if we could implement reusable workflows. My team maintain a large number of python repositories, each one containing several workflows to perform specific CI tasks (linting, code formatting etc) that must pass before a pull request can be reviewed. &lt;/p&gt;

&lt;p&gt;With our current setup, making a change to the workflow, for example updating an action version, would require us to make the update in the workflow and create a pull request in each python repository. This however takes valuable developer time which could be used on more important tickets and created overhead as we would need to keep track of which repositories have been updated.&lt;/p&gt;

&lt;p&gt;Reusable workflows looked like they may be a solution to our problem. A reusable workflow is pretty much what it says on the tin, a workflow that is declared, and can then be called from other repositories to run the jobs in the reusable workflow. By implementing reusable workflows, we would be able to save developer time as the change needed would only need to be made in one workflow, and make having to remember which repositories had been updated redundant, as no changes would be need to be made in the calling repositories, only the reusable workflow.&lt;/p&gt;

&lt;p&gt;I'm pleased to say that my spike was a success, allowing us to drastically reduce the workflow files in our repositories to a single CI workflow that calls off to our reusable workflow repository. It has been a great learning experience to dive into workflows, jobs steps and actions, and even to work with conditional logic to only run certain jobs and steps in certain cases.&lt;/p&gt;

&lt;p&gt;Obviously I can't share private work code, so I've written a simple reusable workflow below as an example of how you can set one up. For further information on setting up reusable workflows to be called from private reposititories, passing inputs or secrets, and more advanced usage etc see the GitHub official documentation in the resources section at the end of this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a simple reusable workflows for HTML validation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a reusable workflow
&lt;/h3&gt;

&lt;p&gt;You can call reusable workflows from within the same repository where you will be calling the reusable workflow from, but for this example I've create a new repository to store all my reusable workflows in one central place.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the repository create a &lt;code&gt;.github&lt;/code&gt; folder and within that a &lt;code&gt;workflows&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create your reusable workflow file - I've called mine &lt;code&gt;html_validation.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4.2.2&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;validate-html&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cyb3r-Jak3/html5validator-action@v7.2.0&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;root&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As this is the reusable workflow that will be &lt;strong&gt;called&lt;/strong&gt;, we need to include the trigger &lt;code&gt;on: workflow_call&lt;/code&gt;. This is what allows the workflow to be called from other repositories.&lt;/p&gt;

&lt;p&gt;This is a simple workflow with one job called Validation, and two steps - the first performs a checkout of the repository, then we validate the HTML using the &lt;code&gt;Cyb3r-Jak3/html5validator-action&lt;/code&gt; action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Call a reusable workflow
&lt;/h3&gt;

&lt;p&gt;Now we need to declare the &lt;strong&gt;calling&lt;/strong&gt; workflow - this is the workflow in our repository that will calling the reusable workflow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Provide the trigger you would like the workflow to be called on in the calling repository - this example is calling the workflow on a push to the main branch, but you could set this up for on a pull request, or other branches etc. Take a look at the GitHub documentation to get an idea of the types of triggers you could use for your own workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next we'll declare a job, &lt;code&gt;Validate&lt;/code&gt; and call off to our reusable workflow with the &lt;code&gt;uses&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The format for calling our reusable workflow is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;GitHub Username&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;Repository Name&amp;gt;&lt;/code&gt; / &lt;code&gt;.github&lt;/code&gt; / &lt;code&gt;workflows&lt;/code&gt; / &lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt; @ &lt;code&gt;&amp;lt;branch&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Validate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kera-cudmore/example-reusable-workflows/.github/workflows/html_validation.yml@main&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok time for the results!&lt;/p&gt;

&lt;p&gt;When we push a change in the calling repository, we can view the workflows runs in the actions tab, and then select the run with your commit message:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Faction-tab.webp%3Ftoken%3DGHSAT0AAAAAADASFQYD6DFAXCTLV7NYG2XYZ7BDWEA" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Faction-tab.webp%3Ftoken%3DGHSAT0AAAAAADASFQYD6DFAXCTLV7NYG2XYZ7BDWEA" alt="GitHub Actions page displaying the CI workflow runs" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are then shown a summary of the CI job - showing the workflow file that triggered the run &lt;code&gt;ci.yml&lt;/code&gt;, and the jobs run, &lt;code&gt;Validate&lt;/code&gt; and &lt;code&gt;html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fci-workflow-page.webp%3Ftoken%3DGHSAT0AAAAAADASFQYDOJREHMO3EVVPOUSGZ7BDYHA" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fci-workflow-page.webp%3Ftoken%3DGHSAT0AAAAAADASFQYDOJREHMO3EVVPOUSGZ7BDYHA" alt="GitHub Actions page displaying the CI workflow run details page" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on the &lt;code&gt;validate/html&lt;/code&gt; jobs box will then show you the steps detail page. You can expand the steps to view more information, for example the inputs passed in or the commands run as part of the step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fsteps-detail.webp%3Ftoken%3DGHSAT0AAAAAADASFQYCO46XLE5OW3YQUDMIZ7BDY3A" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fsteps-detail.webp%3Ftoken%3DGHSAT0AAAAAADASFQYCO46XLE5OW3YQUDMIZ7BDY3A" alt="GitHub Actions page displaying the steps detail page" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This expanded view is very useful to debug when a job fails, as you can see at which step the job failed and view the logs. The example below shows that the html validation step failed as element p is not allowed as a child of element h1 - this gives us an area of the code to check, and points to the h1 tag not being closed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fsteps-detail-failure.webp%3Ftoken%3DGHSAT0AAAAAADASFQYD3SDYCJFRGEP6Y62YZ7BDXEQ" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fkera-cudmore%2Fkera-blowfish-blog%2Frefs%2Fheads%2Fmaster%2Fcontent%2Fposts%2F2025-03-24%2Fsteps-detail-failure.webp%3Ftoken%3DGHSAT0AAAAAADASFQYD3SDYCJFRGEP6Y62YZ7BDXEQ" alt="GitHub Actions page displaying the steps detail page with a failed step and its logs" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've included the two repositories I created for this post in the resources below, feel free to fork them and play with the workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.github.com/en/actions/sharing-automations/reusing-workflows" rel="noopener noreferrer"&gt;GitHub Documentation on Reusing Workflows&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/marketplace?type=actions" rel="noopener noreferrer"&gt;GitHub Actions Marketplace&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/marketplace/actions/html5-validator" rel="noopener noreferrer"&gt;HTML5 Validator action&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/kera-cudmore/example-reusable-workflows" rel="noopener noreferrer"&gt;My Example Reusable Workflows Repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/kera-cudmore/example-calling-reusable-workflows" rel="noopener noreferrer"&gt;My Example Calling Reusable Workflows Repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Do you use reusable workflows to do something fun in your repositories? Never used them before but think you'll give them a go? Let me know in the comments below 😊&lt;/p&gt;

</description>
      <category>github</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>Create sub-issues in GitHub issues</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Mon, 08 Jan 2024 10:56:44 +0000</pubDate>
      <link>https://dev.to/keracudmore/create-sub-issues-in-github-issues-409m</link>
      <guid>https://dev.to/keracudmore/create-sub-issues-in-github-issues-409m</guid>
      <description>&lt;p&gt;I love utilising GitHub issues to organise a project, especially during a hackathon, and this little tip on how to create sub-issues may come in useful to break up larger tasks into smaller sections. This makes it easier than ever to track exactly what each team member is working on.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to create a sub-issue
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create an issue in GitHub for the parent task. &lt;/p&gt;

&lt;p&gt;In the body of the issue create a task list (checkboxes) for each item you want to make a sub-issue. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fkera-cudmore%2Fwired-brain-coffee%2Fassets%2F92253071%2F1ce8821d-fe7d-485f-99b3-63f46a006889" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fkera-cudmore%2Fwired-brain-coffee%2Fassets%2F92253071%2F1ce8821d-fe7d-485f-99b3-63f46a006889" alt="Create issue" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the issue. You will then be taken to the issue page.&lt;/p&gt;

&lt;p&gt;Hover over a task list items you want to convert into a sub-issue. You should see the issue icon appear on the right hand side of the list. Click the icon to create a sub-issue. The task item should change to a link to the new issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gyazo.com/ce3819ff744c1140ba84fbaf5367bbe8" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feq6jxkwuj51jpq09qjsz.gif" alt="Image from Gyazo" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the new sub-issue. Add a description , label, assignee etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to save time and edit the sub-issues description etc &lt;em&gt;before&lt;/em&gt; creating it you can hold the alt/option key and then click the issue icon. This will open the issue form allowing you to further edit the details before creation.&lt;/p&gt;




&lt;p&gt;Navigating back to the parent issue is easy, just click the parent issue button located underneath the title on the sub-issues page.&lt;/p&gt;

&lt;p&gt;Another fun feature is that the task in the parent will automatically be checked once you close the sub-issue - perfect for keeping track of what issues are left to complete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p45rwjohy3oy0z9g63c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1p45rwjohy3oy0z9g63c.gif" alt="Screen Recording 2024-01-05 at 8 36 20 pm" width="566" height="348"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Have you ever used sub-issues? I'm looking forward to giving them a spin during my next hackathon, and would love to know what you think of them if you do give them a try.&lt;/p&gt;

</description>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to add budget alerts to your AWS account</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Wed, 06 Dec 2023 16:50:17 +0000</pubDate>
      <link>https://dev.to/keracudmore/how-to-add-budget-alerts-to-your-aws-account-2e3g</link>
      <guid>https://dev.to/keracudmore/how-to-add-budget-alerts-to-your-aws-account-2e3g</guid>
      <description>&lt;p&gt;I'm writing this article to hopefully save someone else going through the pain I did earlier in the year when I received an email from AWS stating that my bill for that March was $14,890 😱&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodu-code%2Fcodu%2Fassets%2F92253071%2F3ba28404-ff61-49a2-ac4d-ba905b2e1c4d" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcodu-code%2Fcodu%2Fassets%2F92253071%2F3ba28404-ff61-49a2-ac4d-ba905b2e1c4d" alt="fainting" width="200" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have only dabbled with AWS a small amount and was only utilising AWS S3 buckets to store images for my full stack e-commerce project with the Code Institute at that point. &lt;/p&gt;

&lt;p&gt;I naively thought that my account would be fine as I was on the free tier, and hadn't reached anywhere near the thresholds - I'd forgotten that nothing online is safe, and that you always need to make sure &lt;strong&gt;EVERYTHING&lt;/strong&gt; is kept as secure as possible, especially anything connected to your billing information!&lt;/p&gt;

&lt;p&gt;I'd fallen victim to someone who'd somehow managed to gain access to my account and was using it to stream massive amounts of video data, hence the pretty hefty bill. So lets learn how you can protect yourself from this happening to you by adding some budget alerts to your AWS account. 🚨&lt;/p&gt;




&lt;h3&gt;
  
  
  Add a Zero Spend Budget
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log into your AWS account as the root user. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; If you don't have MFA set up on your account, take a quick detour and get that set up now - it's another step that can really help keep your account as secure as possible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the top right hand corner click on your account name and then select Billing and Cost Management from the dropdown menu.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpebf85svv6gq327um2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpebf85svv6gq327um2h.png" alt="aws-budget-1" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From the left hand menu, select budgets and then click the create budget button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nnnkfxddfrtu0xtx3kb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nnnkfxddfrtu0xtx3kb.png" alt="aws-budget-2" width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For this article we will be using a template to set up our budget alert, so select use a template, and then choose the Zero spend budget template. This budget which will notify you once your spending exceeds $0.01 for any AWS service (so anything over the free tier).  Customise the budget name, add an email address to be notified on and then click the create budget button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni10pdcqviuanhpereqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fni10pdcqviuanhpereqa.png" alt="aws-budget-3" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On the budget page you can now select the budget you just created and can view the alert by selecting the Alerts tab. You also have the option to add additional alerts - for example if you wanted to add a an alert for when you reach 75% of your budgeted amount (in this example that would be once our actual cost reaches $0.75). To add additional alerts click the edit alerts button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9o0hdft3jkshictgwa9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9o0hdft3jkshictgwa9.png" alt="aws-budget-4" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On this page you can make further adjustments to the original alert - such as the threshold amount or notification preferences -and add further alerts. To add your second alert, scroll to the bottom of the page and select the Add alert threshold button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe13uqfzqxilgfh5vpqhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe13uqfzqxilgfh5vpqhv.png" alt="aws-budget-5" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter the new alert threshold and click the next button - confirm your alert parameters are correct and click the next button again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F818ioej8l9hd4w2bpojb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F818ioej8l9hd4w2bpojb.png" alt="aws-budget-6" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The review page gives you an overview of the details and alerts set up for your budget. Once you have confirmed these details you can select save and this will add the additional alert to your budget. You will then be taken back to the budget overview page where you can once again click into your budget and the alerts tab to see your new alert.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxkc88i9payojr7e1un3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhxkc88i9payojr7e1un3.png" alt="aws-budget-7" width="800" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now explore all that AWS has to offer, safe in the knowledge that you have budget alerts set up to let you know if you go over any free tier allowances 😊&lt;/p&gt;




&lt;h3&gt;
  
  
  Other Budgets
&lt;/h3&gt;

&lt;p&gt;As you saw in an earlier step, there are a number of templates you can use to customise to your budget which may be better suited to your purposes - for example you are exceeding the free tier, the free tier period has expired or are paying to use AWS services in a professional capacity you may prefer to use the monthly cost budget template to set a monthly budget amount.&lt;/p&gt;




&lt;p&gt;I'd love to know if you found this article helpful, and what you're currently using AWS for - leave your comments below ⬇️&lt;/p&gt;

</description>
      <category>aws</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Advent of Code</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Wed, 06 Dec 2023 16:47:32 +0000</pubDate>
      <link>https://dev.to/keracudmore/advent-of-code-4338</link>
      <guid>https://dev.to/keracudmore/advent-of-code-4338</guid>
      <description>&lt;p&gt;It's that time of year again - Advent of Code starts! And if this is your first time hearing about Advent of Code, worry not and read on to find out all about it 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Advent of Code?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://adventofcode.com/2023/" rel="noopener noreferrer"&gt;Advent of Code&lt;/a&gt; was created by  Eric Wastl back in 2015 as an advent calendar - but instead of little chocolates you get little  programming puzzles to solve instead!&lt;/p&gt;

&lt;p&gt;The puzzles range from beginner friendly and become more advanced as time goes on. You can choose to solve them in any programming language you like.&lt;/p&gt;

&lt;h3&gt;
  
  
  But what's the point?
&lt;/h3&gt;

&lt;p&gt;Advent of Code is a nice bit of fun over the Christmas period. &lt;/p&gt;

&lt;p&gt;Make it a bit more of a challenge by competing with a group of friends, co-workers or community group, challenge yourself to complete the puzzles within a set amount of time, use them to boost your understanding while learning a new language, or complete them in each programming language you know - it really is whatever you make of it!&lt;/p&gt;

&lt;p&gt;The site hosts a &lt;a href="https://adventofcode.com/2023/leaderboard" rel="noopener noreferrer"&gt;global leaderboard&lt;/a&gt;, and also allows you to create your own private leaderboards if you wanted to get competitive with them.&lt;/p&gt;

&lt;p&gt;The puzzles can also be a nice way of preparing for interview style questions, and get you practicing that problem-solving mindset.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I get involved?
&lt;/h3&gt;

&lt;p&gt;Head over to the calendar section on the &lt;a href="https://adventofcode.com/2023" rel="noopener noreferrer"&gt;Advent of Code website&lt;/a&gt; to find the days puzzle.&lt;/p&gt;

&lt;p&gt;Puzzles are released daily starting on the 1st of December, midnight EST (5am GMT).&lt;/p&gt;

&lt;p&gt;If you're a member of the Codú Discord community, I'll be popping a thread up everyday to allow the community to discuss the daily puzzle - so feel free to to drop a message in to let us know how you got on, what language you used to complete the puzzle, or if you need a bit of help 😊&lt;/p&gt;




&lt;h3&gt;
  
  
  One Advent not enough?
&lt;/h3&gt;

&lt;p&gt;If you really want to challenge yourself this year, or you're more into cyber security, you may like TryHackMe's &lt;a href="https://tryhackme.com/r/christmas" rel="noopener noreferrer"&gt;Advent of Cyber&lt;/a&gt; with the added motivation of prizes&lt;/p&gt;

&lt;p&gt;And Scrimba are also joining in the advent fun with &lt;a href="https://scrimba.com/learn/javascriptmas#" rel="noopener noreferrer"&gt;JavaScriptmas&lt;/a&gt; - which also has some prizes&lt;/p&gt;




&lt;p&gt;Have you ever taken part in Advent of Code before? Or will you be giving it a go for the first time this year? Leave me a comment below ⬇️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Spaces vs Tabs: The Great Python Debate</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Tue, 21 Nov 2023 12:39:12 +0000</pubDate>
      <link>https://dev.to/keracudmore/spaces-vs-tabs-the-great-python-debate-b79</link>
      <guid>https://dev.to/keracudmore/spaces-vs-tabs-the-great-python-debate-b79</guid>
      <description>&lt;p&gt;If you've ever used the Python language, you'll know that it is very particular about whitespace and indentation! Each nested block of code needs to be indented 4 spaces in from the last block of code, which is equivalent to a tab - or is it?&lt;/p&gt;

&lt;p&gt;Python documentation, more specifically the &lt;a href="https://peps.python.org/pep-0008/#tabs-or-spaces" rel="noopener noreferrer"&gt;PEP8 style guide&lt;/a&gt;, states that spaces should be used, and if you end up accidentally switching between spaces and tabs in your code Python 3 will throw a TabError. So why is this?&lt;/p&gt;

&lt;p&gt;After doing some digging I found a &lt;a href="https://www.reddit.com/r/learnpython/comments/8cann8/tabs_vs_spaces_i_dont_get_it/" rel="noopener noreferrer"&gt;Reddit thread&lt;/a&gt; that explains that a tab is actually a single character, despite it taking up the length of four spaces - check out the gif below to see what I mean - the first line is a tab, which when we use the arrow to move back is one character. The second line is 4 spaces, which are 4 separate characters that we can move back through individually.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gyazo.com/9bcaf4d1095b4fb9c93c18d1e59690fc" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14m22co90elyjxj60uam.gif" alt="Example of tabs vs spaces characters" width="244" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This can cause issues when different IDE's interpret the characters differently to your IDE, or working within a team where some people tab and some people space - Madness and lots of errors!&lt;/p&gt;

&lt;p&gt;Thankfully there is a workaround 🥳 Most IDE's allow you to customise your tab size, allowing you to specify the number of spaces a tab is equal to. &lt;/p&gt;

&lt;p&gt;To adjust this in VSCode, open the settings and search for:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Editor: Tab Size&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;You can then adjust this to use 4 spaces each time you tab within a file. You can also adjust this in the settings.json file and configure the tab size for different languages - read more about this in my article &lt;a href="https://www.codu.co/articles/configure-spacing-in-vscode-by-language-9rgmb0k4" rel="noopener noreferrer"&gt;Configure spacing in VSCode by Language&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what camp you fall into in the comments below, and have a giggle at the clip below from Silicon Valley about tabs versus spaces 🤣&lt;/p&gt;

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




</description>
      <category>python</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Brag documents &amp; why you should have one!</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Thu, 10 Aug 2023 19:40:40 +0000</pubDate>
      <link>https://dev.to/keracudmore/brag-documents-why-you-should-have-one-3ldn</link>
      <guid>https://dev.to/keracudmore/brag-documents-why-you-should-have-one-3ldn</guid>
      <description>&lt;p&gt;I'm currently participating in a Career MOOC hosted by Code First Girls and was introduced to the concept of using a Brag Document. &lt;/p&gt;

&lt;h3&gt;
  
  
  What is a brag document?
&lt;/h3&gt;

&lt;p&gt;A brag document (also known as a shine document or hype document) is a small but mighty tool for your career advancement.&lt;/p&gt;

&lt;p&gt;It's a way for you to record all your accomplishments, big or small, throughout the year.&lt;/p&gt;

&lt;h3&gt;
  
  
  So why should you use one?
&lt;/h3&gt;

&lt;p&gt;Most of us can relate to that moment when our minds go blank  when asked what we've accomplished during our yearly reviews, and if we can't remember our own accomplishments, it would be unfair to expect our line manager to remember them for us!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Enter the Brag Document!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By adding your wins to your brag document when they happen, you have something you can refer back to at review time to refresh your memory of all the amazing things you've achieved over the past year.&lt;/p&gt;

&lt;p&gt;They can also be a fantastic tool to help you provide evidence during a pay or promotion review, or to utilise when refreshing your CV or LinkedIn profile when applying for new positions.&lt;/p&gt;

&lt;p&gt;Another fantastic reason to keep a brag document is for your own self reflection and to help build your confidence. We've all had a day where we feel like we're stupid and can't understand even the simplest of things - so it can be great to give your brag document a look over to remind yourself of everything you’ve achieved and how far you’ve come!&lt;/p&gt;

&lt;h3&gt;
  
  
  What should you include and where to keep it?
&lt;/h3&gt;

&lt;p&gt;There are no hard and fast rules for what should be included in a brag document, or where to keep it - it should be personalised to suit your circumstances and the reason why you're keeping the document. &lt;/p&gt;

&lt;p&gt;Some people like to use a notebook, others prefer to use an online document or private GitHub repo - find what works best for you!&lt;/p&gt;

&lt;p&gt;Some examples of what you can include are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are your goals for the year?&lt;/li&gt;
&lt;li&gt;If you are working over several projects, make a section for each project.&lt;/li&gt;
&lt;li&gt;Mentorship - are you providing mentorship (officially or not) to someone else?&lt;/li&gt;
&lt;li&gt;Documentation - did you create or improve the documentation for a project?&lt;/li&gt;
&lt;li&gt;Learning - what are your plans for further learning? Have you completed any courses?&lt;/li&gt;
&lt;li&gt;Outside of work wins - do you write a tech blog, mentor someone outside of work? Do you participate in any tech communities, or contribute to open-source?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also be kind to your future self and write some entries using the STAR or CARL technique - this will be a big win for when you start thinking about applying for a new position, and have some examples ready to go!&lt;/p&gt;

&lt;h3&gt;
  
  
  When should you add to it?
&lt;/h3&gt;

&lt;p&gt;Time is our enemy when it comes to remembering what we've accomplished - so the sooner we can get those accomplishments documented, the more we will remember about it!&lt;/p&gt;

&lt;p&gt;It can be a good idea to make yourself a regular appointment, perhaps at the end of each week to fill out your brag document, while your wins are still fresh in your mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  How should you share it?
&lt;/h3&gt;

&lt;p&gt;It can be a great idea to let your line manager and team know you are using a brag document, and invite them to make suggestions on what you can add to it - as we all know we can be toughest on ourselves and only see our failures, so it can be great to get another perspective on our accomplishments.&lt;/p&gt;

&lt;p&gt;You could also reciprocate to your teammates and point out when they do something that you feel they could add to their own brag documents - for example if a teammate provides you some mentorship on a project.&lt;/p&gt;

&lt;p&gt;However when its time to utilise the document, its best to share the evidence from it rather than the actual document itself. &lt;/p&gt;




&lt;p&gt;I'd love to know if you already keep a brag document, or if you plan to start one - I’ve shared some further reading below together with some templates - feel free to share in the comments 😊&lt;/p&gt;




&lt;h3&gt;
  
  
  Further Reading
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://jvns.ca/blog/brag-documents/" rel="noopener noreferrer"&gt;Get your work recognised: write a brag document by Julia Evans&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/edition-4-tech-brag-documents-free-notion-template-parul-singh/" rel="noopener noreferrer"&gt;Tech Brag Documents with Free Notion Template by Parul Singh&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/readme/guides/document-success" rel="noopener noreferrer"&gt;Brag now, remember later: Document your accomplishments&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.thefountaininstitute.com/blog/brag-documents" rel="noopener noreferrer"&gt;Keeping Track of Your Accomplishments with a Brag Document by Jeff Humble&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>What are node_modules in React?</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Mon, 24 Jul 2023 13:18:43 +0000</pubDate>
      <link>https://dev.to/keracudmore/what-are-nodemodules-in-react-4pc8</link>
      <guid>https://dev.to/keracudmore/what-are-nodemodules-in-react-4pc8</guid>
      <description>&lt;p&gt;When creating a new React app your project will be populated with a bunch of new folders and files, and you may have noticed a &lt;strong&gt;node_modules&lt;/strong&gt; folder that contains an insane amount of folders. &lt;/p&gt;

&lt;p&gt;If you're nosy like me you may have wondered what is this node_modules folder, and what is its purpose? Well wonder no more!&lt;/p&gt;

&lt;h3&gt;
  
  
  What are node_modules?
&lt;/h3&gt;

&lt;p&gt;node_modules are one of the most important directories in your React project as React requires node_modules to run. The node_modules directory is where all the dependancies packages are stored that are used to build and run your react project. &lt;/p&gt;

&lt;p&gt;So this is you'll find packages like React and React-DOM, your build packages like Vite, Babal or Webpack, and linters like ESLint or Prettier to name just a few. This directory can contain hundreds of dependancies! &lt;/p&gt;

&lt;h3&gt;
  
  
  Why aren't they included in version control?
&lt;/h3&gt;

&lt;p&gt;So if node_modules is such a crucial directory for your react project, why isn't it tracked with version control and included in the project repo? &lt;/p&gt;

&lt;p&gt;The main reason is the sheer size of this directory. Rather than including hundreds of package dependancies in version control, we can instead track a file called &lt;strong&gt;package.json&lt;/strong&gt; which contains information about the project, and a list of dependencies required by the app. Other developers can use the package.json file and  &lt;strong&gt;npm install&lt;/strong&gt; to regenerate the node_modules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd6jp8vizl5swcrvt6u2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwd6jp8vizl5swcrvt6u2.png" alt="Heaviest objects in the universe - node modules" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  😱 I've accidentally tracked node_modules
&lt;/h3&gt;

&lt;p&gt;Best practice would be to include the node_modules in the &lt;strong&gt;.gitignore&lt;/strong&gt; file in your project before pushing any code, which will prevent version control from tracking this folder - but if you've accidentally tracked and pushed the node_modules to GitHub, like I did in my first project 🤦🏻‍♀️, simply follow the steps below.&lt;/p&gt;

&lt;h4&gt;
  
  
  Remove node_modules from version control
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;strong&gt;.gitignore&lt;/strong&gt; file in your project and add &lt;strong&gt;node_modules&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove the node_modules:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--cached&lt;/span&gt; node_modules
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit and push without the node_modules. The node_modules should now be deleted from your repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Podcasts for Pythonistas 🐍</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Mon, 17 Jul 2023 13:40:03 +0000</pubDate>
      <link>https://dev.to/keracudmore/podcasts-for-pythonistas-5g42</link>
      <guid>https://dev.to/keracudmore/podcasts-for-pythonistas-5g42</guid>
      <description>&lt;p&gt;Following on from some of my previous articles: &lt;a href="https://dev.to/keracudmore/8-podcasts-perfect-for-junior-developers-2e1d"&gt;Podcasts for Junior Developers&lt;/a&gt; and &lt;a href="https://dev.to/keracudmore/podcasts-for-javascript-reactjs-developers-iod"&gt;Podcasts for React &amp;amp; JS Developers&lt;/a&gt;, I've compiled a list of 6 podcasts perfect for all you Pythonistas!&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://realpython.com/podcasts/rpp/" rel="noopener noreferrer"&gt;The Real Python Podcast&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://realpython.com/podcasts/rpp/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlw5of5ztjasjbyimjoz.png" alt="The Real Python Podcast Banner" width="688" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This weekly podcast airs every Friday morning - bringing you weekly interviews with guests from the python community along with some useful coding tips, career advice and best practices.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;a href="https://pythonbytes.fm/episodes/all" rel="noopener noreferrer"&gt;Python Bytes&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pythonbytes.fm/episodes/all" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpythonbytes.fm%2Fstatic%2Fimg%2Fpodcast-theme-img_1400.webp" alt="Python Bytes Banner" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to stay abreast of all the latest Python developer news, but don't want to spend hours scouring the internet for it? Tune into Python Bites every week and listen to the best picks curated by the hosts Michael Kennedy and  Brian Okken.&lt;/p&gt;




&lt;h3&gt;
  
  
   3. &lt;a href="https://talkpython.fm/" rel="noopener noreferrer"&gt;Talk Python To Me&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://talkpython.fm/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wce8w3vanof0xh6devs.png" alt="Talk Python To Me Banner" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another podcast hosted by Michael Kennedy, however Talk Python To Me is a more in-depth hour-long conversation with industry experts covering python and related topics. &lt;/p&gt;




&lt;h3&gt;
  
  
   4. &lt;a href="https://www.teachingpython.fm/" rel="noopener noreferrer"&gt;Teaching Python&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.teachingpython.fm/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fselazv6pif3rrw9vuz9w.jpg" alt="Teaching Python Banner" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kelly Paredes and Sean Tibor share their adventures of teaching middle school computer science using the Python programming language.&lt;/p&gt;




&lt;h3&gt;
  
  
   5. &lt;a href="https://www.pybitespodcast.com/" rel="noopener noreferrer"&gt;Pybites&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.pybitespodcast.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh2bg2qserfrbyq1mxqk.jpg" alt="Pybites Banner" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PyBites is perfect for anyone interested in python and covers python Development, career advice and mindset skills along with lots of other tips and tricks. Hosted by the Co-Founders of PyBites, Bob Belderbos and Julian Sequeira.&lt;/p&gt;




&lt;h3&gt;
  
  
   6. &lt;a href="https://podcasts.apple.com/us/podcast/sad-python-girls-club/id1625160773" rel="noopener noreferrer"&gt;Sad Python Girls Club&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://podcasts.apple.com/us/podcast/sad-python-girls-club/id1625160773" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9cc8q8e0r621qiwqyu1.jpg" alt="Sad Python Girls Club Banner" width="400" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A podcast that gives you an insight into the VSCode python team - with their perspective on the python ecosystem and where VSCode fits in. Hosted by Kim-Adeline Miguel and Luciana Abud.&lt;/p&gt;




&lt;p&gt;Are you a regular listener of any of the above, or have I missed a podcast that you think is a must listen? Let me know in the comments 😊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>👩🏻‍💻 Favicon Generators</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Thu, 06 Jul 2023 09:18:11 +0000</pubDate>
      <link>https://dev.to/keracudmore/favicon-generators-k45</link>
      <guid>https://dev.to/keracudmore/favicon-generators-k45</guid>
      <description>&lt;h3&gt;
  
  
  What is a Favicon?
&lt;/h3&gt;

&lt;p&gt;A favicon is a fun little icon that promotes brand recognition and trust in your website. It can also help users easily identify your site in their address bar, bookmarks or in the sea of tabs they have open.&lt;/p&gt;

&lt;p&gt;A favicon can also indirectly affect your sites SEO. Some search engines display the favicon with the search results, and having an eye-catching favicon could improve your click through rate!&lt;/p&gt;

&lt;p&gt;Adding a favicon to your site doesn't have to be difficult, and I've rounded up 5 sites for you to use to create your next custom favicon!&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://favicon.io/" rel="noopener noreferrer"&gt;Favicon.io&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://favicon.io/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6e9aji0ri5wk9740n4u1.png" alt="Favicon.io site image" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This has been my go-to favicon generator, due to its ease of use.&lt;/p&gt;

&lt;p&gt;You have a choice between text, image or emoji when generating your favicon, and they even give you the code to make adding a favicon to your static site a breeze!&lt;/p&gt;




&lt;h3&gt;
  
  
  2. &lt;a href="https://realfavicongenerator.net/" rel="noopener noreferrer"&gt;Real Favicon Generator&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://realfavicongenerator.net/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6s4666xqmgm7n639mkre.png" alt="Real Favicon Generator Logo" width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confused about which sizes and devices your favicon covers? Well Real Favicon Generator has got you covered! Real Favicon Generator have done all the research and testing and will craft the perfect favicon to suit each platform, and display a preview for you along with some settings that can be tweaked, allowing you to get your favicon right the first time.&lt;/p&gt;

&lt;p&gt;Another really cool feature of Real Favicon Generator is check your favicon. This tool allows you to input your site and they will then an analysis of what platforms you have covered, and some you may have missed.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. &lt;a href="https://www.favicon.cc/" rel="noopener noreferrer"&gt;Favicon.cc&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.favicon.cc/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl9oogdcd6pa5ym55eaj.jpg" alt="Favicon.cc site logo" width="800" height="356"&gt;&lt;/a&gt;&lt;br&gt;
Favicon.cc allows you to import an image, or paint your own favicon in the style of pixel art, or choose from hundreds of user uploaded designs.&lt;/p&gt;

&lt;p&gt;What makes favicon.cc interesting is their animation generator, which allows you to create an animated pixel-art styled favicon!&lt;/p&gt;

&lt;p&gt;Favicons created on favicons.cc are currently only available in ico format.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. &lt;a href="https://favicomatic.com/" rel="noopener noreferrer"&gt;Favic-o-matic&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://favicomatic.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FR_BxUOClc8LC_xWszX4H7IUT8dUXVjrzJ0ikJPMnBzHZPoUklrJQM1kRzf1B_v-3uIZDlkxELPr8IvF-XoFblCwZcQ%3Dw640-h400-e365-rj-sc0x00ffffff" alt="Favicomatic Website" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Favic-o-matic is a one stop shop that generates the favicon image and code required for your site. You can choose to create just an ico file, or create all the favicons for different platforms.&lt;/p&gt;

&lt;p&gt;They also have the favic-o-meter, which reads your website URL and lets you know if you're missing any platform specific favicons which would improve user experience.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. &lt;a href="https://fav.farm/" rel="noopener noreferrer"&gt;Fav.farm&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fav.farm/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14rn8dk7cuimth4u49ek.png" alt="fav.farm website" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Created by the awesome &lt;a href="https://twitter.com/wesbos" rel="noopener noreferrer"&gt;Wes Bos&lt;/a&gt;, fav.farm is the simplest favicon generator, but is a perfect tool for adding a quick favicon to your learning projects.&lt;/p&gt;

&lt;p&gt;Wes also shares the code required to use this generator to create a custom cursor!&lt;/p&gt;




&lt;p&gt;Do you have a go to favicon generator that isn't listed above? If you do, I'd love to hear about it in the comments 😊&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Create a workflow to display your latest articles on your GitHub profile</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Tue, 20 Jun 2023 13:40:42 +0000</pubDate>
      <link>https://dev.to/keracudmore/create-a-workflow-to-display-your-latest-articles-on-your-github-profile-341k</link>
      <guid>https://dev.to/keracudmore/create-a-workflow-to-display-your-latest-articles-on-your-github-profile-341k</guid>
      <description>&lt;p&gt;I recently added a workflow to list my 5 latest Codú articles in my profile, and thought I'd share how I did it to allow you to do the same 😊&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; These instructions are for adding an RSS Feed for Codú articles specifically. If you would like to add a list for your dev.to articles, you can skip step 1 and use the following URL &lt;code&gt;https://dev.to/feed/[your username here]&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 1: Create your RSS URL
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Copy the URL for your profile page on the Codú site.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter your URL into the RSS generator. I used &lt;a href="https://fetchrss.com/" rel="noopener noreferrer"&gt;FetchRSS&lt;/a&gt; to create my RSS URL as it is free to use. Another alternative would be &lt;a href="https://rss.app/" rel="noopener noreferrer"&gt;rss.app&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This will either automatically generate the URL for you, or ask you to mark up the parsing pattern. This is basically where you let the generator know which parts to map as the news item, headline, summary, date, author and link etc. On the right hand side you can see the results of the generator. Once you are happy with your selections, click the Generate Feed button for your URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gyazo.com/b9d09fc466c85b2e4d30ca345bfab543" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqtvqy95vdw1kv534mfg.gif" alt="Marking up the parsing pattern" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Part 2: Create a GitHub Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open you GitHub profile repo and create a &lt;strong&gt;.github&lt;/strong&gt; folder, and within that create a &lt;strong&gt;workflow&lt;/strong&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the workflow folder create a new file called &lt;strong&gt;blog-post-workflow.yml&lt;/strong&gt; and insert the code below into the file. Update the &lt;code&gt;feed_list&lt;/code&gt; value to be your RSS URL.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Latest blog post workflow&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# Run workflow automatically&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt; &lt;span class="c1"&gt;# Runs daily at 01:00&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# Run workflow manually (without waiting for the cron to be called), through the GitHub Actions Workflow page directly&lt;/span&gt;
&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# To write the generated contents to the readme&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;update-readme-with-blog&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update this repo's README with latest blog posts&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pull in codu posts&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gautamkrishnar/blog-post-workflow@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;feed_list&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;❗️INSERT&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;YOUR&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RSS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;FEED&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;URL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HERE&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;❗️&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; This workflow contains a cron job which tells the workflow how often to run. The code above will run daily at 01:00. If you would like to change the timing of when this workflow runs, you may find &lt;a href="https://crontab.guru/" rel="noopener noreferrer"&gt;crontab.guru&lt;/a&gt; a useful site to format your cron value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In your GitHub profile README, add the following code where you want to see your articles list. You can change the heading to whatever you would like to display, but don't adjust the comments.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# 📰  My Latest Articles&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- BLOG-POST-LIST:START --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- BLOG-POST-LIST:END --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit and push your changes to your repo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Part 3: Manually Run the Workflow
&lt;/h3&gt;

&lt;p&gt;Now that we have all the code in place, lets manually run the workflow to get our articles displaying in our profile 😊&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In your GitHub profile repo, head on over to the actions tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On the left hand side, find and click the workflow we just created.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the right hand side you will see a tab called Run Workflow. Click and select the run workflow button. You will only need to run this workflow using another branch if you have saved the workflow to a different branch within your repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gyazo.com/4958333256a0f93d5d07a3118638cf0f" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6sejo4ulr7uhrtk8piwv.gif" alt="Run Workflow button" width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once the workflow has run successfully, head on over to your profile and you'll be able to see your articles list!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n32rv9xsazn3sajamy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n32rv9xsazn3sajamy8.png" alt="Screenshot 2023-06-20 at 12 07 55 pm" width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://blog.sachinchaurasiya.dev/how-to-show-your-latest-blogs-on-github-profile" rel="noopener noreferrer"&gt;This Article&lt;/a&gt; was the inspiration for me adding a RSS feed to my profile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/gautamkrishnar/blog-post-workflow" rel="noopener noreferrer"&gt;Blog Post Workflow Repo&lt;/a&gt; by gautamkrishnar. The workflow used to update the articles list. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://fetchrss.com/account" rel="noopener noreferrer"&gt;FetchRSS&lt;/a&gt; - Free RSS URL generator (login required).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://crontab.guru/" rel="noopener noreferrer"&gt;crontab.guru&lt;/a&gt; - Easily create your cron schedule expressions using this generator.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubactions</category>
      <category>githubprofile</category>
    </item>
    <item>
      <title>Create your Own Code Snippets in VSCode</title>
      <dc:creator>Kera Cudmore</dc:creator>
      <pubDate>Mon, 19 Jun 2023 13:11:15 +0000</pubDate>
      <link>https://dev.to/keracudmore/create-your-own-code-snippets-in-vscode-3n8n</link>
      <guid>https://dev.to/keracudmore/create-your-own-code-snippets-in-vscode-3n8n</guid>
      <description>&lt;p&gt;Code snippets are similar to emmet abbreviations which allow you to insert a snippet of code completely customised to your requirements simply by typing a prompt. Want to join in on the snippet fun? Carry on reading to learn how to configure your own snippets file!&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the snippets file
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In VSCode navigate to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mac:&lt;/strong&gt; Code -&amp;gt; Settings -&amp;gt; Configure User Snippets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt; File -&amp;gt;  Preferences -&amp;gt; Configure User Snippets&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decide on the scope of your snippets file:&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;New Global Snippets File&lt;/strong&gt; - which will make snippets available in all languages&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;New Snippets File for '&lt;em&gt;folder Name&lt;/em&gt;'&lt;/strong&gt;. This will allow you to make a snippets file for use in the folder than you have open. Note this option is only shown if you have a folder open in the workspace. &lt;/p&gt;

&lt;p&gt;For a specific language - select the language from the dropdown list.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type the name of your snippets file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your snippets to the file. Snippets are written in JSON and there is no limit to the number of snippets you can define in the file.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Snippets syntax
&lt;/h3&gt;

&lt;p&gt;The example below shows an example of the snippets file with one snippet declared:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Heading1"&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;"prefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"he1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"body"&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="s2"&gt;"&amp;lt;Heading1 text={`$1`} /&amp;gt;$0"&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;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Heading Level 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;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"typescriptreact"&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;So lets break down each part of the snippet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Snippet Name
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"Heading1"&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="err"&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;This is the name of the snippet that will show in intelliSense when you start typing the prefix which allows quick selection. The snippet name is an object that contains all the other pieces of the snippet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prefix.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"prefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"he1"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the trigger word/s you want to type to display (and insert) the snippet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Body.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"body"&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="s2"&gt;"&amp;lt;Heading1 text={`$1`} /&amp;gt;$0"&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;p&gt;This is what you want to insert using the snippet. It can be made up of one or more lines.&lt;/p&gt;

&lt;p&gt;We can also use &lt;code&gt;$1&lt;/code&gt; syntax to insert tabs to enable us to quickly tab through the snippet and insert the values once inserted in the file. These tabstops start at 1. &lt;code&gt;$0&lt;/code&gt; will always the last tab within a snippet, and so can be useful to use at the end of the code block, as shown in the example above.&lt;/p&gt;

&lt;h4&gt;
  
  
  Description.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Heading Level 1"&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;p&gt;&lt;em&gt;Optional&lt;/em&gt;. This is the description that will show in intelliSense for the snippet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Language Scope.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"typescriptreact"&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;p&gt;&lt;em&gt;Optional&lt;/em&gt;. If defined, this will only enable the snippet to be used within files of the defined languages, so in the example above this snippet would only be available in typescript react files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gyazo.com/bdbea2615a9101225d4c93b0b6645189" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7srbk04svsacgbebros.gif" alt="Image from Gyazo" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Additional Reading
&lt;/h3&gt;

&lt;p&gt;This article only scratches the surface of what can be achieved with snippets. If you'd like to find out about some of the more advanced ways to use snippets I would recommend the following article from Microsoft: &lt;a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets" rel="noopener noreferrer"&gt;VSCode: Define your own snippets&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
