<?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: Hayden Rouille</title>
    <description>The latest articles on DEV Community by Hayden Rouille (@hayden).</description>
    <link>https://dev.to/hayden</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%2F298558%2Fd6055f21-eb09-4a49-9073-a68ebd15d01a.JPG</url>
      <title>DEV Community: Hayden Rouille</title>
      <link>https://dev.to/hayden</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hayden"/>
    <language>en</language>
    <item>
      <title>My 2024 PDE: NeoVim</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Thu, 11 Jan 2024 02:43:27 +0000</pubDate>
      <link>https://dev.to/hayden/my-2024-pde-neovim-14e5</link>
      <guid>https://dev.to/hayden/my-2024-pde-neovim-14e5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;It's around that time of year where everyone's taking a look around and wishing they had better tools, fixing those small things that have been bugging them for months, and trying to set themselves up best for the year ahead. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/k0fBbRe4ySKZwmfXRj/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/k0fBbRe4ySKZwmfXRj/giphy.gif" alt="nynm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Theres one lingering TODO I'd been putting off for far too long: "DOTFILES OVERHAUL".&lt;/p&gt;

&lt;p&gt;Your &lt;a href="https://www.youtube.com/watch?v=QMVIJhC9Veg" rel="noopener noreferrer"&gt;personalised development environment™&lt;/a&gt; deserves some love every now and then, and what better time than the start of a new year to give it a visit with a fresh perspective, open up 20 tabs with different Colorschemes and finally upgrade your plugin manager.&lt;/p&gt;

&lt;p&gt;It always takes a bit of convincing myself, at the end of the day - &lt;a href="https://www.youtube.com/watch?v=Hgd2F2QNfEE" rel="noopener noreferrer"&gt;this is my configuration, there are many like it - but this ones mine&lt;/a&gt;. Eventually, however, I'll take a big breath and begin the process.&lt;/p&gt;

&lt;p&gt;On that note, sponsored by my several friends who wouldn't stop bragging about their configs, I figured I'd share what made this move worthwhile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;For those of you unfamiliar with the Vim world, &lt;a href="https://neovim.io/" rel="noopener noreferrer"&gt;Neovim&lt;/a&gt; is a Vim fork which in recent years has become the de facto for new Vim developers. NeoVim has all the bells and whistles you want from Vim, but with a bunch of extras, too. If you want a community more passionate about contributing to the ecosystem and a lot more options when it comes to customising your PDE, it's a no brainer.&lt;/p&gt;

&lt;p&gt;One of the largest draws to NeoVim for most is that you don't have to interface with VimScript any more. &lt;br&gt;
Lua is fully supported in NeoVim, meaning you can forget all those plugins you've gotten (or not gotten) working in VimScript and embrace a language which is already widely used, even outside of the NeoVim sphere. This is great for a myriad of reasons, but for me so far, it's mostly because if you need an answer, it's likely easy to find.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;My old dotfiles (specifically the Vim configuration) have done me well, but something I've been putting off for a while now is addressing the myriad of feature requests (requested by yours truly) I've amassed on various different TODO platforms.&lt;/p&gt;

&lt;p&gt;When I last put together &lt;a href="https://dev.to/hayden/the-only-5-vim-plugins-i-need-4b7h"&gt;my five favourite plugins&lt;/a&gt; (&lt;a href="https://dev.to/hayden/optimizing-your-workflow-with-fzf-ripgrep-2eai"&gt;some of which&lt;/a&gt; I'm still using) and rewrote my &lt;code&gt;.vimrc&lt;/code&gt;, I was already aware I should've moved properly to NeoVim with a Lua configuration, but I decided that was a problem for future me. And that was over 18 months ago now!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/PhZqDgXlml04RU1Mkl/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/PhZqDgXlml04RU1Mkl/giphy.gif" alt="2020"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, I'd made small tweaks here and there. I wasn't going to put up with things just not working - but there are newer and better plugins in the NeoVim ecosystem I wanted to try out.&lt;/p&gt;

&lt;p&gt;Not only that, but I was also noticing a lack of enthusiasm for the ones I currently had. The community contributions were becoming less frequent, and when I was searching for solutions to any problems, Google would present me with a slap in the face by linking me to &lt;a href="https://www.reddit.com/r/neovim/comments/14pvyo4/why_is_nobody_using_coc_anymore/" rel="noopener noreferrer"&gt;threads asking why the plugin I'm referencing isn't even being used anymore&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;When that's happening, you know it's time.&lt;/p&gt;
&lt;h2&gt;
  
  
  My Favourite Additions
&lt;/h2&gt;

&lt;p&gt;Here are a few things that personally attracted me the most to take this on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treesitter&lt;/strong&gt; is a syntax parser that'll build a tree-like structure to enable anything from excellent syntax highlighting through to &lt;a href="https://github.com/ThePrimeagen/refactoring.nvim" rel="noopener noreferrer"&gt;complex refactoring&lt;/a&gt;. There are so many creative ways you can use Treesitter, from &lt;a href="https://github.com/nvim-lua/kickstart.nvim/blob/f6d67b69c3/init.lua#L330-L363" rel="noopener noreferrer"&gt;jumping around text objects&lt;/a&gt; to &lt;a href="https://github.com/numToStr/Comment.nvim" rel="noopener noreferrer"&gt;commenting sections of code&lt;/a&gt;, it's a must-have in my books.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nvim-treesitter" rel="noopener noreferrer"&gt;
        nvim-treesitter
      &lt;/a&gt; / &lt;a href="https://github.com/nvim-treesitter/nvim-treesitter" rel="noopener noreferrer"&gt;
        nvim-treesitter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Nvim Treesitter configurations and abstraction layer
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Telescope.nvim&lt;/strong&gt; brings a revolution to file searching, project navigation, and more. Its intuitive fuzzy finding capabilities, coupled with Lua scripting, make it an essential part of my modern Neovim setup.&lt;br&gt;
Telescope's fuzzy finding has been a breeze for me. With very minimal set-up to integrate fzf as an extension or to use ripgrep for project wide searches I use it for buffer searches, file searching, project searching &amp;amp; more!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nvim-telescope" rel="noopener noreferrer"&gt;
        nvim-telescope
      &lt;/a&gt; / &lt;a href="https://github.com/nvim-telescope/telescope.nvim" rel="noopener noreferrer"&gt;
        telescope.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find, Filter, Preview, Pick. All lua, all the time.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;lsp-zero&lt;/strong&gt; helps with configuring NeoVim's native LSP. It uses [mason] to manage the installation of different language servers and it was so easy to set up. Previously I was using coc.nvim, and whilst it served me great for a while, NeoVim's native LSP not only feels faster but is being actively maintained and seems to have a much brighter future. Removing coc.nvim's JS dependency was only a bonus :)&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VonHeikemen" rel="noopener noreferrer"&gt;
        VonHeikemen
      &lt;/a&gt; / &lt;a href="https://github.com/VonHeikemen/lsp-zero.nvim" rel="noopener noreferrer"&gt;
        lsp-zero.nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A starting point to setup some lsp related features in neovim.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Mold your workflow to use &lt;strong&gt;Harpoon&lt;/strong&gt; - I guarantee you won't go back. Harpoon is the best way to manage working in a large project. You can save the files and locations where you're actively working, adding and removing at a keystroke. For me, the biggest win here was stopping my terrible tab habit, where I'd have multiple tabs for different files, swapping between them with &lt;code&gt;gt&lt;/code&gt; and &lt;code&gt;gT&lt;/code&gt;. I can't imagine doing that any more.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ThePrimeagen" rel="noopener noreferrer"&gt;
        ThePrimeagen
      &lt;/a&gt; / &lt;a href="https://github.com/ThePrimeagen/harpoon" rel="noopener noreferrer"&gt;
        harpoon
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Lastly, &lt;strong&gt;alpha.nvim&lt;/strong&gt;. I mean, who doesn't love a cool looking dashboard when you first open up your editor?&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FqVCCpbT.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FqVCCpbT.jpeg" alt="a"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/goolord" rel="noopener noreferrer"&gt;
        goolord
      &lt;/a&gt; / &lt;a href="https://github.com/goolord/alpha-nvim" rel="noopener noreferrer"&gt;
        alpha-nvim
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      a lua powered greeter like vim-startify / dashboard-nvim
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Yabai &amp;amp; Skhd: Elevating Window Management
&lt;/h3&gt;

&lt;p&gt;Moving beyond NeoVim, the inclusion of Yabai and Skhd has given me the closest to an i3 feel for MacOS. With a combination of some system settings allowing for window movement using &lt;code&gt;&amp;lt;CMD&amp;gt;+1&lt;/code&gt; through &lt;code&gt;8&lt;/code&gt;, Yabai stretching out my windows where I need them and SKHD allowing me to move them all with a couple keys, everything just feels naturally in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Going Forward
&lt;/h2&gt;

&lt;p&gt;Now I've raved about NeoVim for a while, has it got you excited? Are you going to move to NeoVim from Vim or even better stop using Sublime?&lt;/p&gt;

&lt;p&gt;Probably not, but hey, I can still sit in my ivory castle and enjoy the forbidden fruits of what is a better PDE &lt;em&gt;for me&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I hope if nothing else, this has got you thinking about what your personal development environment could look like, or how it could change.&lt;/p&gt;

&lt;p&gt;Feel free to check out my dotfiles, or even give them a go!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;So, what does your PDE look like?&lt;/p&gt;

&lt;p&gt;P.S. is it too obvious that the header image is generated using DALL-E?&lt;/p&gt;

</description>
      <category>vim</category>
      <category>programming</category>
      <category>productivity</category>
      <category>coding</category>
    </item>
    <item>
      <title>What personal projects have you been working on recently?</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Sat, 20 Aug 2022 16:02:27 +0000</pubDate>
      <link>https://dev.to/hayden/what-personal-projects-have-you-been-working-on-recently-3ha2</link>
      <guid>https://dev.to/hayden/what-personal-projects-have-you-been-working-on-recently-3ha2</guid>
      <description>&lt;p&gt;For a while now, having focused more on work and personal life, spending time learning new languages was put on the back-burner for me. It's easy to change your priorities and push back pursuing the curiosity you may have in learning new languages or technologies.&lt;/p&gt;

&lt;p&gt;I've recently had a change in location and it's given me the  opportunity I needed to hone in and focus on learning a few technologies that I've wanted to for a while now.&lt;/p&gt;

&lt;p&gt;This time has reminded me that exploring new technologies is an integral part of my growth as a software developer. Once again, after spending time delving deep in to a technology I don't use so frequently is when I notice my overall confidence as a developer rise.&lt;/p&gt;

&lt;p&gt;Learning should be fun, and building small projects to address gaps in your workflow or anything you see a need for is all part of it.&lt;/p&gt;

&lt;p&gt;My most recent project has been a small CLI built in rust to make my interactions with Todoist easier, what have you built recently?&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/todoist_helper" rel="noopener noreferrer"&gt;
        todoist_helper
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      CLI to interact with Todoist
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;todoist_helper&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A simple CLI for adding, updating and viewing TODOs in Todoist&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Prerequisites&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Set an env variable for your Todoist API token (go to settings and integrations)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;export TODOIST_TOKEN=1234567890&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;To build, run &lt;code&gt;cargo build --release&lt;/code&gt;. The executable will live in &lt;code&gt;./target/release/todoist_helper&lt;/code&gt; - you can move this to somewhere your $PATH includes to run from anywhere&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;todoist_helper add todo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;todoist_helper show todos&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;todoist_helper complete todo 12345&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Options&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;When adding a TODO, you can give the content (&lt;code&gt;-c&lt;/code&gt;) flag to provide content
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;todoist_helper add todo -c "My new TODO"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When showing TODOs, you can add filters with the filters (&lt;code&gt;-f&lt;/code&gt;) flag, and multiple separated by commas. See &lt;a href="https://todoist.com/help/articles/introduction-to-filters" rel="nofollow noopener noreferrer"&gt;Todoist's filter documentation&lt;/a&gt; *
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;todoist_helper show todos -f "today"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When showing TODOs, you can specify the columns you'd like to see as a result with the attribute(s) (&lt;code&gt;-a&lt;/code&gt;) flag
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;todoist_helper show todos -a "id,content"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Advanced Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/haydenrou/todoist_helper" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Why contributing to open source matters</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Fri, 13 Nov 2020 03:38:31 +0000</pubDate>
      <link>https://dev.to/hayden/why-contributing-to-open-source-matters-3if5</link>
      <guid>https://dev.to/hayden/why-contributing-to-open-source-matters-3if5</guid>
      <description>&lt;p&gt;Open source is a pivotal part of modern web development, yet so many companies who use open source every day don't even think twice about encouraging their team to go forward and contribute themselves. It's often simply overlooked, yet supporting open source provides so many benefits to both teams and individuals.&lt;/p&gt;

&lt;h1&gt;
  
  
  Who?
&lt;/h1&gt;

&lt;p&gt;The team at Power has always seen the benefits of contributing towards open source. Our team frequently submit pull requests into open source repositories and it's strongly encouraged by our leadership team.&lt;/p&gt;

&lt;p&gt;Our business technology department host a quarterly Nitro Create event (usually in person). Nitro, being the internal software we build from day to day, and the event being, for lack of a better term, a week long hackathon. Anyone who contributes to the creation of our product from developers, to scrum masters, to UX - are given the opportunity to work on some cool ideas and spend time working with teammates that they don't see as often.&lt;/p&gt;

&lt;p&gt;Not only does this serve as a way to introduce all the new remote members to their teammates, but it gives our team something to look forward to on a regular basis that can be an outlet of creativity and social interaction. (which is much needed in today's climate!)&lt;/p&gt;

&lt;p&gt;As you can imagine, COVID brought a lot of stress to a home remodeling business, but our business technology department fortunately kept operating throughout the pandemic (when I was hired) and worked hard to help the business pick up as fast as possible on the other side. Our Nitro Create event in June was canceled, and in September, with the world still in an unpredictable state, could not be held in person. So we did something (arguably) better.&lt;/p&gt;

&lt;h1&gt;
  
  
  What?
&lt;/h1&gt;

&lt;p&gt;Instead of working together on our internal software, the team were given an opportunity to work on one of five open source projects which had the availability for us to support them and push out as much work as we could within a week. Needless to say, it was a great success. The team loved being given this opportunity. Over a third of the team that hadn't submitted an open source pull request before were enlightened to the idea and many have expressed they will continue contributing to open source as part of their ongoing development.&lt;/p&gt;

&lt;p&gt;With 103 contributors across our team from developers, producteers, scrum masters, UX and site reliability engineers, we submitted 142 pull requests over the course of the week. The companies we supported were so appreciative. And for us, the reward was seeing the incredible difference we made in such a short period of time.&lt;/p&gt;

&lt;p&gt;I'm sure I speak for us all when I say we're proud of the work we did, and genuinely felt welcomed by the teams as we integrated into their projects for the week.&lt;/p&gt;

&lt;h1&gt;
  
  
  Where?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Ruby for Good
&lt;/h2&gt;

&lt;p&gt;One of the organizations we worked closely with for the week was &lt;a href="https://rubyforgood.org/" rel="noopener noreferrer"&gt;Ruby for Good&lt;/a&gt;. Not only do they develop awesome products for communities that really need it, but it's all open source!&lt;/p&gt;

&lt;p&gt;Throughout our week, we worked on several projects in development with members of the Ruby for Good team. Here are a few:&lt;/p&gt;

&lt;h3&gt;
  
  
  Abalone
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rubyforgood" rel="noopener noreferrer"&gt;
        rubyforgood
      &lt;/a&gt; / &lt;a href="https://github.com/rubyforgood/abalone" rel="noopener noreferrer"&gt;
        abalone
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A data tracking and analytics app for abalone conservation efforts.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Abalone Analytics&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/rubyforgood/abalone/workflows/rspec/badge.svg"&gt;&lt;img src="https://github.com/rubyforgood/abalone/workflows/rspec/badge.svg" alt="rspec"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer" href="https://github.com/rubyforgood/abalone/workflows/rubocop/badge.svg"&gt;&lt;img src="https://github.com/rubyforgood/abalone/workflows/rubocop/badge.svg" alt="rubocop"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Abalone project is a data tracking and analytics system aimed at storing and measuring data for population trends, mortality rates, and breeding programs. Designed as a multi-tenant application, Abalone will initially serve two stakeholders, the &lt;a href="https://marinescience.ucdavis.edu/bml/about" rel="nofollow noopener noreferrer"&gt;Bodega Marine Laboratory&lt;/a&gt; at UC Davis and the &lt;a href="https://restorationfund.org/" rel="nofollow noopener noreferrer"&gt;Puget Sound Restoration Fund&lt;/a&gt; in Washington State.&lt;/p&gt;
&lt;p&gt;The Bodega Marine Laboratory's White Abalone captive breeding program is working to prevent the extinction of the &lt;a href="https://www.fisheries.noaa.gov/species/white-abalone" rel="nofollow noopener noreferrer"&gt;White Abalone&lt;/a&gt; (Haliotis sorenseni), an endangered marine snail. White abalone are one of seven species found in California and are culturally significant to the native people of the area. White abalone were perilously overfished throughout the 20th century, resulting in a 99 percent population decrease by the end of the 1970s. This group is working to reverse their decline and have already seen some great success, they currently have more abalone in the lab than exist in the wild!&lt;/p&gt;
&lt;p&gt;The…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rubyforgood/abalone" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxoe8doU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/rubyforgood/abalone/master/app/assets/images/Burgess%2520white%2520ab%25201.png" alt="abalone" width="800" height="1046"&gt;&lt;br&gt;
Who wouldn't want to save Gary the Abalone!?
&lt;h3&gt;
  
  
  CASA
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rubyforgood" rel="noopener noreferrer"&gt;
        rubyforgood
      &lt;/a&gt; / &lt;a href="https://github.com/rubyforgood/casa" rel="noopener noreferrer"&gt;
        casa
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Volunteer management system for nonprofit CASA, which serves foster youth in counties across America.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CASA Project and Organization Overview&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/rubyforgood/casa/actions/workflows/rspec.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rubyforgood/casa/workflows/rspec/badge.svg" alt="rspec"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/casa/actions/workflows/erb_lint.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rubyforgood/casa/actions/workflows/erb_lint.yml/badge.svg" alt="erb lint"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/casa/actions/workflows/ruby_lint.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rubyforgood/casa/actions/workflows/ruby_lint.yml/badge.svg" alt="standardrb lint"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/casa/actions/workflows/security.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rubyforgood/casa/workflows/brakeman/badge.svg" alt="brakeman"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/casa/actions/workflows/yarn_lint_and_test.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/rubyforgood/casa/actions/workflows/yarn_lint_and_test.yml/badge.svg" alt="yarn lint"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeclimate.com/github/rubyforgood/casa/trends/technical_debt" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/16cb5bda0719a6c19f79ebfba03de2b08fe11538e8930c1505266412c1bdd080/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f32346633626231306462366166616334313765322f6d61696e7461696e6162696c697479" alt="Maintainability"&gt;&lt;/a&gt;
&lt;a href="https://codeclimate.com/github/rubyforgood/casa/trends/test_coverage_total" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/728804349cbc3dde91147fec5b336c4a0e0e539ce3dd732cf8b768e78a5cf9c8/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f32346633626231306462366166616334313765322f746573745f636f766572616765" alt="Test Coverage"&gt;&lt;/a&gt;
&lt;a href="https://snyk.io/test/github/rubyforgood/casa" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/52d76fbfeb7b9fdd693ff8a0fd1b35168cd2e168ff2d440a2e1093a79edcf55e/68747470733a2f2f736e796b2e696f2f746573742f6769746875622f72756279666f72676f6f642f636173612f62616467652e737667" alt="Snyk Vulnerabilities"&gt;&lt;/a&gt;
&lt;a href="http://isitmaintained.com/project/rubyforgood/casa" title="Average time to resolve an issue" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3dbbb25e0ed633867a979a9d1ab0035ea90f18e06c0eb8938d5a2a1dbd33a8da/687474703a2f2f697369746d61696e7461696e65642e636f6d2f62616467652f7265736f6c7574696f6e2f72756279666f72676f6f642f636173612e737667" alt="Average time to resolve an issue"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A CASA (Court Appointed Special Advocate) is a role where a volunteer advocates on behalf of a youth in their county's foster care system. CASA is also the namesake role of the national organization, CASA, which exists to cultivate and supervise volunteers carrying out this work – with county level chapters (operating relatively independently of each other) across the country.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/rubyforgood/casa#welcome-contributors" rel="noopener noreferrer"&gt;Welcome contributors!&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#communication-and-collaboration" rel="noopener noreferrer"&gt;Communication and Collaboration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#about-this-project" rel="noopener noreferrer"&gt;About this project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/rubyforgood/casa#developing-" rel="noopener noreferrer"&gt;Developing! ✨🛠✨&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#how-to-contribute" rel="noopener noreferrer"&gt;How to Contribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/rubyforgood/casa#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#getting-started-codespaces---experimental-" rel="noopener noreferrer"&gt;Getting Started (Codespaces - EXPERIMENTAL) 🛠️&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#local-setup-instructions" rel="noopener noreferrer"&gt;Local Setup Instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#platform-specific-installation-instructions" rel="noopener noreferrer"&gt;Platform Specific Installation Instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#common-issues" rel="noopener noreferrer"&gt;Common issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#running-the-app--verifying-installation" rel="noopener noreferrer"&gt;Running the App / Verifying Installation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#other-documentation" rel="noopener noreferrer"&gt;Other Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#acknowledgements" rel="noopener noreferrer"&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rubyforgood/casa#feedback" rel="noopener noreferrer"&gt;Feedback&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Welcome contributors!&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;We are very happy to have you! CASA and Ruby for Good are committed to welcoming new contributors of all skill levels.&lt;/p&gt;
&lt;p&gt;Find issues to work on &lt;a href="https://github.com/rubyforgood/casa/issues?q=is%3Aissue+is%3Aopen+no%3Aassignee" rel="noopener noreferrer"&gt;here&lt;/a&gt; on the issue board. Issues on the &lt;a href="https://github.com/rubyforgood/casa/projects/1" rel="noopener noreferrer"&gt;project's&lt;/a&gt; TODO column are another way…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rubyforgood/casa" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Diaperbase
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rubyforgood" rel="noopener noreferrer"&gt;
        rubyforgood
      &lt;/a&gt; / &lt;a href="https://github.com/rubyforgood/human-essentials" rel="noopener noreferrer"&gt;
        human-essentials
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Human Essentials is an inventory management system for diaper, incontinence, and period-supply banks. It supports them in distributing to partners, tracking inventory, and reporting stats and analytics.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Human Essentials&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;a href="https://app.digitalpublicgoods.net/a/10622" rel="nofollow noopener noreferrer"&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qfppDlWL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/667909/181150972-e59a77ab-b657-4893-aef9-d3df1384a506.png" alt="DPG Approved" height="40"&gt;
&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://img.shields.io/badge/all_contributors-115-orange.svg?logo=github" alt="All contributors" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a26266128d92e39911bf3836d6fb41f0a47043c6e7becac5270af0627aff78a7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f616c6c5f636f6e7472696275746f72732d3131352d6f72616e67652e7376673f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://app.fossa.com/api/projects/git%2Bgithub.com%2Frubyforgood%2Fdiaper.svg?type=shield" alt="license scan" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a77e59ff3fc2a4681c2cedf68f26d94c8dc1c41399bc03b4b08417d5eb4cffbe/68747470733a2f2f6170702e666f7373612e636f6d2f6170692f70726f6a656374732f6769742532426769746875622e636f6d25324672756279666f72676f6f642532466469617065722e7376673f747970653d736869656c64"&gt;&lt;/a&gt;
&lt;a href="https://img.shields.io/badge/Knapsack%20Pro-Parallel%20%2F%20Rspec%20tests-%230074ff" alt="Knapsack Pro Parallel CI builds for RSpec tests" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6514c88531a1ee1b006042938152ce7fab190760596d553afc55f77d9e84a05e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6e61707361636b25323050726f2d506172616c6c656c253230253246253230527370656325323074657374732d253233303037346666"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/graphs/contributors" alt="Contributors" rel="noopener noreferrer"&gt; &lt;img src="https://camo.githubusercontent.com/8d52b7eb861ba05264e0c2c263864e3a67296699ef043ad442822967534a9136/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/issues" alt="Contributors" rel="noopener noreferrer"&gt; &lt;img src="https://camo.githubusercontent.com/799a12b1070b70d066f9c252c61d81158628e29bfe5252295608ffa7ca30b12b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d636c6f7365642f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/search" alt="Languages" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aac1056f8f91e9555d283b9245d24810186dffdbe4ef834469d57b8509a55e7d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f636f756e742f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/search" alt="Languages" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/837abb5558ebe965adc2016c1f681be52a84e75469fd42cf7ded0e14ea004b3b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f746f702f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/%20alt=" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/31896421bc91cc525c8453b744498447906481c85e5761fa126ae5419a38d634/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/pulls" alt="Pull Requests" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/62dd90f948522fa5e01644226fddfbff3b33cabbb803581fc96247ef2772b8ca/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d70722d636c6f7365642d7261772f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/%20alt=" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6411ec4dc73136ec99562686bf7c159dc50258274baeef1493f0b734f26acc31/68747470733a2f2f62616467656e2e6e65742f6769746875622f6c6963656e73652f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f69636f6e3d67697468756226636f6c6f723d677265656e"&gt;&lt;/a&gt;
&lt;a href="https://github.com/badges/shields/pulse" alt="Activity" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ac60f15e6b333785297b3a6b4f9d62335d4ccabb4c569552abd890272123d23/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/commits/main" alt="Last Commit" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fc61143b03a80d41b2c7df4ebaa8b97985e85eb7c4e00881ff7d7fa9528aee04/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f6c6f676f3d676974687562"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/commits/main" alt="Total Commits" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/67bb0811a0dc65af4589c8d223156a2dff03098990e2085512749a97055ef119/68747470733a2f2f62616467656e2e6e65742f6769746875622f636f6d6d6974732f72756279666f72676f6f642f68756d616e2d657373656e7469616c732f6d61696e3f69636f6e3d67697468756226636f6c6f723d677265656e"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/" alt="Stars" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0f168b2fc3786738e8568f9b049f51d8a3e5a97f51a6ca49cd5e2cbf85851f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f7374796c653d736f6369616c"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/" alt="Forks" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/973bedb870be8d088587272c8b159bc755af6eee458a3c99424b0dacefb1a996/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f666f726b732f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f7374796c653d736f6369616c"&gt;&lt;/a&gt;
&lt;a href="https://github.com/rubyforgood/human-essentials/" alt="Watchers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9a0fe57a8eae5d7d6532706ff0e4afa8afe08d008c185d83936fc0846f3725c6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f77617463686572732f72756279666f72676f6f642f68756d616e2d657373656e7469616c733f7374796c653d736f6369616c"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Mission 💖&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Human Essentials is an inventory management system built to address the needs of &lt;a href="https://nationaldiaperbanknetwork.org/diaper-need/" rel="nofollow noopener noreferrer"&gt;Diaper Banks&lt;/a&gt; as directly and explicitly as possible and adapted to meet the needs of other Essentials Banks. Essentials Banks maintain inventory, receive donations and other human essentials supplies (e.g. diapers, period supplies), and issue distributions to community partner organizations. Like any non-profit, they also need to perform reports on this data and have day-to-day operational information they need. This application aims to serve those needs and facilitate the general operations of the Diaper Banks (e.g., using barcode readers, scale weighing, inventory audits).&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Impact 🌟&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Human Essentials has over 200 registered banks across the United States at &lt;strong&gt;no cost&lt;/strong&gt; to them. It is currently helping over &lt;strong&gt;3 million&lt;/strong&gt; children receive diapers and over &lt;strong&gt;400k&lt;/strong&gt; period supply recipients receive period supplies. Our team is in partnership with the &lt;a href="https://nationaldiaperbanknetwork.org/" rel="nofollow noopener noreferrer"&gt;National Diaper Bank Network (NDBN)&lt;/a&gt; and…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rubyforgood/human-essentials" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Mutual Aid
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rubyforgood" rel="noopener noreferrer"&gt;
        rubyforgood
      &lt;/a&gt; / &lt;a href="https://github.com/rubyforgood/mutual-aid" rel="noopener noreferrer"&gt;
        mutual-aid
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Mutual aid management platform for groups who build, support, and strengthen community resilience. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CircleCI&lt;/th&gt;
&lt;th&gt;Demo site&lt;/th&gt;
&lt;th&gt;Test site&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://circleci.com/gh/rubyforgood/mutual-aid/tree/main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/072d35eef65e49d8e67a0375f39d932c9cec9320855656f9501f6d5b11c3352d/68747470733a2f2f636972636c6563692e636f6d2f67682f72756279666f72676f6f642f6d757475616c2d6169642f747265652f6d61696e2e7376673f7374796c653d737667" alt="CircleCI"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mutual-aid-demo.herokuapp.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e4fabe80f9d7399346c09341a4ebebb94868b07ed7bb177c49b6420d5ad708f3/68747470733a2f2f62616467656e2e6e65742f68747470732f6d757475616c2d6169642d64656d6f2e6865726f6b756170702e636f6d2f76657273696f6e" alt="Heroku Mutual Aid Demo Version"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mutual-aid-test.herokuapp.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2eefde46e445f7b1b61684a225287991cacda270eb93a4e96f8c51239a0c79f6/68747470733a2f2f62616467656e2e6e65742f68747470732f6d757475616c2d6169642d746573742e6865726f6b756170702e636f6d2f76657273696f6e" alt="Heroku Mutual Aid Test Version"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✋🏾 On Hiatus...&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Thanks for coming by! This project is in a period of &lt;strong&gt;diminution&lt;/strong&gt; 〽️.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚒️ We, the current maintainers, no longer have enough capacity to dedicate to it, and&lt;/li&gt;
&lt;li&gt;♻️ Mutual aid efforts we'd been connected to have evolved. As of now, none of them are actively using the app.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We of course welcome any injection of energy in the form of new &lt;strong&gt;maintainers, contributors&lt;/strong&gt; or interest in &lt;strong&gt;using the app&lt;/strong&gt;. Please get in touch by commenting &lt;a href="https://github.com/rubyforgood/mutual-aid/discussions/1003" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is mutual aid?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Mutual aid is when people get together to build community by volunarily sharing resources with each other. Mutual aid groups are more concerned with local resiliency than global campaigns, prefer solidarity over charity, and have existed around the world for over 200 years. Mutual aid groups recognize that structural inequality and injustice must be accounted for and addressed in…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rubyforgood/mutual-aid" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  TechGirlz
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.techgirlz.org/" rel="noopener noreferrer"&gt;TechGirlz&lt;/a&gt; is an awesome organization aiming to inspire young girls to pursue a career in tech. Their mission is for such an important cause and the impact they are having is truly outstanding.&lt;/p&gt;

&lt;p&gt;Our team really got stuck in throughout the week and led workshops for several groups of girls from all around the world teaching them about different fun tech such as VR. By the end of the week, the girls were teaching them!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/fxZrFt4tAynpBspIjo/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/fxZrFt4tAynpBspIjo/giphy.gif" alt="techgirlz" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having contributed to Abalone and CASA, I can personally say the team are a great bunch and very welcoming to newcomers. If you are looking to get involved in open source for the first time, any of these repositories would be more than happy to have you, so check them out!&lt;/p&gt;

&lt;h1&gt;
  
  
  Continuing into Hacktoberfest
&lt;/h1&gt;

&lt;p&gt;For Hacktoberfest, I submitted several PRs to both the Abalone and CASA projects, and I know that I'll be looking to do more in the future. It was a great challenge and a brilliant community initiative which brought together a lot of people and their awesome ideas.&lt;/p&gt;

&lt;p&gt;For myself, I've found that jumping into open source has given me the opportunity to see how others work, introduce myself to different libraries and learn from a new, innovative community. I attribute the majority of my development as a coder to open source, be it articles or pull requests. If you are on the fence as to whether it'll be beneficial, trust me - you won't regret it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Closing thoughts
&lt;/h1&gt;

&lt;p&gt;Open source is a community which so many businesses rely on but so few support. Power giving us the opportunity to make a difference &lt;br&gt;
by contributing to charitable and not-for-profit projects, truly emobodies the values of open source. &lt;/p&gt;

&lt;p&gt;I hope this article and the efforts of Hacktoberfest inspire others to take the leap into the open source world. There is so much more to gain than just notches on your Github profile. (though, who doesn't love them!)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/l1J3CagCfCbBenwxW/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/l1J3CagCfCbBenwxW/giphy.gif" alt="volunteer" width="500" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Power is a great company that has an ever-growing technology department, &lt;a href="https://apply.workatpower.com/jobs/ea7f11123ebf874d790217a35771192f94fa1ec4de56374483c0c321e92e2988" rel="noopener noreferrer"&gt;here's our job page&lt;/a&gt; if you're interested. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>[4/4] Beginners BASH basics - The student becomes the master</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Tue, 14 Jul 2020 17:04:03 +0000</pubDate>
      <link>https://dev.to/hayden/4-4-beginners-bash-basics-the-student-becomes-the-master-3h4m</link>
      <guid>https://dev.to/hayden/4-4-beginners-bash-basics-the-student-becomes-the-master-3h4m</guid>
      <description>&lt;h2&gt;
  
  
  Part 4 of a 4 part series
&lt;/h2&gt;

&lt;p&gt;Part 1 is available &lt;a href="https://dev.to/haydenrou/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk"&gt;here&lt;/a&gt;, 2 &lt;a href="https://dev.to/hayden/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b"&gt;here&lt;/a&gt; and 3 &lt;a href="https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9/"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you've learnt how to wield the command line to your advantage, I wanted to share some utilities that help with day-to-day tasks and show you how you can customise BASH to act how you want it to.&lt;/p&gt;

&lt;p&gt;The power of BASH truly surpasses the extent of these articles, but when you grasp what is capable, the sky is your limit and you can take yourself in a new direction and start teaching me!&lt;/p&gt;

&lt;h1&gt;
  
  
  scp
&lt;/h1&gt;

&lt;p&gt;As you remember using SSH in part 3, I wanted to show you a quick tool that may solve a problem you ran into not long after using SSH. How do I move files to my server?&lt;br&gt;
After developing an application, be it a static single page app or a fully fledged piece of software, you will reach the point where you need to move the files that you were likely developing on your local computer over to the server.&lt;br&gt;
There are many tools to do this (such as capistrano for ruby), and I'm sure this is not the route you'd go down for each individual deployment, but nonetheless you will occasionally need to move secret keys or small files to your server.&lt;/p&gt;

&lt;p&gt;Though we didn't cover it, &lt;code&gt;cp&lt;/code&gt; is a command that will copy a file. &lt;code&gt;cp my_file another_directory/&lt;/code&gt; will copy &lt;code&gt;my_file&lt;/code&gt; to &lt;code&gt;another_directory&lt;/code&gt;. Simple. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FVy_GCfH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media2.giphy.com/media/oCCLHVNt8YO64/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FVy_GCfH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media2.giphy.com/media/oCCLHVNt8YO64/giphy.gif" alt="copy cat" width="280" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scp&lt;/code&gt; though, takes it to another level. The secure copy can copy files over SSH using a secure copy protocol.&lt;/p&gt;

&lt;p&gt;Example usage:&lt;br&gt;
&lt;code&gt;scp ~/projects/my_stuff/my_file.md user@server:/home/user/app/&lt;/code&gt;&lt;br&gt;
If you have setup your SSH config file, you won't need to use the whole &lt;code&gt;user@server&lt;/code&gt; as we learnt last time.&lt;/p&gt;
&lt;h1&gt;
  
  
  htop
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;top&lt;/code&gt; is a utility that shows real-time information about running processes. If you want to see how much memory a specific process is taking up, or how hard your computer is working - use &lt;code&gt;top&lt;/code&gt;. (or &lt;code&gt;htop&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;htop&lt;/code&gt; is an enhanced version of top, there are a few of them with the word &lt;code&gt;top&lt;/code&gt; in the name, but they are all much of a muchness. I find &lt;code&gt;htop&lt;/code&gt; to have some nice colors and it's easy to read. Check it out: &lt;code&gt;htop&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fonwuq2l24g063jtu846f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fonwuq2l24g063jtu846f.png" alt="htop" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  ln
&lt;/h1&gt;

&lt;p&gt;One important command I wanted to briefly touch on is &lt;code&gt;ln&lt;/code&gt;. &lt;code&gt;ln&lt;/code&gt; will create links between different files. For example, if you had a repository with your dotfiles in, you could link them to the location that your system expects them to be in.&lt;/p&gt;

&lt;p&gt;Without the &lt;code&gt;-s&lt;/code&gt; flag, &lt;code&gt;ln&lt;/code&gt; will create a hardlink, and with the &lt;code&gt;-s&lt;/code&gt; flag, a symbolic link. The difference is that a hardlink will link directly to the inode the target is stored at, and a symlink will link to a file or directory. You can read more &lt;a href="https://bencane.com/2013/10/10/symlinks-vs-hardlinks-and-how-to-create-them/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example usage:&lt;br&gt;
&lt;code&gt;ln -s ~/projects/dotfiles/bashrc.symlink ~/.bashrc&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  oh my zsh
&lt;/h1&gt;

&lt;p&gt;Whilst I don't use &lt;code&gt;zsh&lt;/code&gt;, I thought it's worth touching on as it seems to be an industry favourite. &lt;code&gt;zsh&lt;/code&gt; is an interactive shell built on top of BASH which utilises all the great parts of BASH and has some extras on top. It has great coloring and command prompt customizability, and if you use the &lt;code&gt;oh my zsh&lt;/code&gt; framework, has some brilliant plugins you can install very easily to populate the most common aliases for tools such as &lt;code&gt;git&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Check out &lt;code&gt;oh my zsh&lt;/code&gt; &lt;a href="https://ohmyz.sh/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  customization
&lt;/h1&gt;

&lt;p&gt;BASH (and &lt;code&gt;zsh&lt;/code&gt; if you're using it) both allow you to customise your setup. This is done through the &lt;code&gt;~/.bashrc&lt;/code&gt; file. (or &lt;code&gt;~/.zshrc&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;rc&lt;/code&gt; files are loaded at the start of each session, so if you make a change, you'll have to &lt;code&gt;source&lt;/code&gt; the file to gain access to your changes in the current session. If you want to read more about how sourcing the &lt;code&gt;bashrc&lt;/code&gt; and &lt;code&gt;bash_profile&lt;/code&gt; works, read the below.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__stackexchange--container"&gt;
  &lt;div class="ltag__stackexchange--title-container"&gt;
    
      &lt;div class="ltag__stackexchange--title"&gt;
        &lt;div class="ltag__stackexchange--header"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IXITl-NL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackexchange-logo-37d4118c1280b00533496a8c870284b2c0d08fac862f7cf964b9469b9db96984.svg" alt=""&gt;
          &lt;a href="https://unix.stackexchange.com/questions/129143/what-is-the-purpose-of-bashrc-and-how-does-it-work" rel="noopener noreferrer"&gt;
            What is the purpose of .bashrc and how does it work?
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="ltag__stackexchange--post-metadata"&gt;
          &lt;span&gt;May 13 '14&lt;/span&gt;
            &lt;span&gt;Comments: 3&lt;/span&gt;
            &lt;span&gt;Answers: 3&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;a class="ltag__stackexchange--score-container" href="https://unix.stackexchange.com/questions/129143/what-is-the-purpose-of-bashrc-and-how-does-it-work" rel="noopener noreferrer"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oeieW07A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackexchange-arrow-up-eff2e2849e67d156181d258e38802c0b57fa011f74164a7f97675ca3b6ab756b.svg" alt=""&gt;
        &lt;div class="ltag__stackexchange--score-number"&gt;
          275
        &lt;/div&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h2-sXgSn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/stackexchange-arrow-down-4349fac0dd932d284fab7e4dd9846f19a3710558efde0d2dfd05897f3eeb9aba.svg" alt=""&gt;
      &lt;/a&gt;
    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--body"&gt;
    
&lt;p&gt;I found the &lt;code&gt;.bashrc&lt;/code&gt; file and I want to know the purpose/function of it. Also how and when is it used?&lt;/p&gt;

    
  &lt;/div&gt;
  &lt;div class="ltag__stackexchange--btn--container"&gt;
    &lt;a href="https://unix.stackexchange.com/questions/129143/what-is-the-purpose-of-bashrc-and-how-does-it-work" class="ltag__stackexchange--btn" rel="noopener noreferrer"&gt;Open Full Question&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;To source your &lt;code&gt;rc&lt;/code&gt; files, you can use the &lt;code&gt;source&lt;/code&gt; keyword, or &lt;code&gt;.&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.bashrc
. ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Your &lt;code&gt;bashrc&lt;/code&gt; can store all sorts of functions, variables or aliases that you want, here are just a few examples:&lt;/p&gt;
&lt;h2&gt;
  
  
  environment variables
&lt;/h2&gt;

&lt;p&gt;An environment variable can be stored by adding &lt;code&gt;export MYENVVARIABLE="my stuff"&lt;/code&gt; to your &lt;code&gt;bashrc&lt;/code&gt;. This can be useful because certain tools will check for environment variables to see where to store cache or load files. You can view your environment variable by using &lt;code&gt;echo $MYENVVARIABLE&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  aliases
&lt;/h2&gt;

&lt;p&gt;If you have a command you run frequently, you can alias it to something smaller to make it easier. Add an alias to your &lt;code&gt;bashrc&lt;/code&gt; like so: &lt;code&gt;alias gd="git diff"&lt;/code&gt;, and then access it after sourcing your &lt;code&gt;bashrc&lt;/code&gt; by just typing &lt;code&gt;gd&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  functions
&lt;/h2&gt;

&lt;p&gt;If you have a set of logic that you want to put into a single command, you can create a function in your &lt;code&gt;bashrc&lt;/code&gt;. I use &lt;a href="https://github.com/derf/feh" rel="noopener noreferrer"&gt;feh&lt;/a&gt; which can change my backgrounds via the command line, and so I created an alias of a function I made called &lt;code&gt;chbg&lt;/code&gt;, which changes my background to a random one from a folder. Check out an example &lt;a href="https://github.com/haydenrou/dotfiles/blob/84c31ca61e1b83fa4bf75b53c36966726791c37c/bashrc.symlink#L85" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple function could look like the following:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function say_hello () {
  echo "Hello, world!"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  conclusion &amp;amp; extras
&lt;/h1&gt;

&lt;p&gt;Now that you've learnt more than the basics of BASH, you can explore the world of scripting and play around with your own setup until your hearts content!&lt;/p&gt;

&lt;p&gt;You can check out how I've used the above techniques to make my workflow easier in my configuration repository below. You can see most of the useful parts in the README but have a look through the files to see how it's done! And don't forget to give it a star!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
    &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;haydenrou/dotfiles&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;strong&amp;gt;My Personalized Development Environment&amp;lt;/strong&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/80b3eb467596ecbd06916d2b0d0f086a0ceec13fad8c99a62d41d1c218ce608f/68747470733a2f2f692e696d6775722e636f6d2f715643437062542e6a706567"&gt;&lt;img src="https://camo.githubusercontent.com/80b3eb467596ecbd06916d2b0d0f086a0ceec13fad8c99a62d41d1c218ce608f/68747470733a2f2f692e696d6775722e636f6d2f715643437062542e6a706567" alt="Dotfiles Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To prevent myself from going down wild Linux rabbit holes and trying every distribution I can get my hands on, I've transcended into an Apple chad. Therefore, this configuration may require changes to work in a Linux environment.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Mandatory Software:&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/neovim/neovim" rel="noopener noreferrer"&gt;neovim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tmux/tmux" rel="noopener noreferrer"&gt;tmux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/koekeishiya/yabai" rel="noopener noreferrer"&gt;yabai&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/koekeishiya/skhd" rel="noopener noreferrer"&gt;skhd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;ripgrep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;fzf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zsh.org/" rel="nofollow noopener noreferrer"&gt;zsh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Optional Software: (Warning: you may have to remove some alises / plugins if these are not installed)&lt;/h3&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sharkdp/bat" rel="noopener noreferrer"&gt;bat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eza-community/eza" rel="noopener noreferrer"&gt;eza&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ajeetdsouza/zoxide" rel="noopener noreferrer"&gt;zoxide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/haydenrou/todoist_helper" rel="noopener noreferrer"&gt;todoist_helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dylanaraps/neofetch" rel="noopener noreferrer"&gt;neofetch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tmate.io/" rel="nofollow noopener noreferrer"&gt;tmate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aristocratos/btop" rel="noopener noreferrer"&gt;btop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alacritty.org/" rel="nofollow noopener noreferrer"&gt;alacritty terminal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ajeetdsouza/zoxide" rel="noopener noreferrer"&gt;zoxide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.nerdfonts.com/font-downloads" rel="nofollow noopener noreferrer"&gt;nerd fonts&lt;/a&gt; for devicons to display in nvim-tree
&lt;ul&gt;
&lt;li&gt;for instance, &lt;code&gt;brew tap homebrew/cask-fonts &amp;amp;&amp;amp; brew install --cask font-commit-mono-nerd-font&lt;/code&gt;, and added to your terminal (see &lt;a href="https://github.com/haydenrou/dotfiles./alacrity/config.yml" rel="noopener noreferrer"&gt;./alacrity/config.yml&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://cmake.org/" rel="nofollow noopener noreferrer"&gt;cmake&lt;/a&gt; &lt;code&gt;brew install cmake&lt;/code&gt; or else the installation of telescopes fzf plugin will fail&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/sharkdp/fd" rel="noopener noreferrer"&gt;fd&lt;/a&gt; as an optional dependency of telescope, used in telescope.lua&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://gpgtools.org/" rel="nofollow noopener noreferrer"&gt;gpgtools&lt;/a&gt; for signing commits. (Note: instead of symlinking &lt;code&gt;git/.gitconfig&lt;/code&gt;, copy it instead as you'll need to add a…&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I've left out my 2 favourite command line tools from these articles, and made an article dedicated to them, check out how to optimize your workflow with fzf and rg below!&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/hayden" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F298558%2Fd6055f21-eb09-4a49-9073-a68ebd15d01a.JPG" alt="hayden"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/hayden/optimizing-your-workflow-with-fzf-ripgrep-2eai" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;optimizing your workflow with fzf &amp;amp; ripgrep&lt;/h2&gt;
      &lt;h3&gt;Hayden Rouille ・ May 23 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#bash&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vim&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Let me know in the comments if you have learnt of some other cool tools or if you've written something thats improved your workflow - I'd love to hear about it!&lt;/p&gt;

&lt;p&gt;And that's a wrap - I hope everyone has enjoyed the series :)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>bash</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[3/4] Beginners BASH basics - Wait, BASH can do that?</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Tue, 30 Jun 2020 23:07:36 +0000</pubDate>
      <link>https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9</link>
      <guid>https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9</guid>
      <description>&lt;h2&gt;
  
  
  Part 3 of a 4 part series
&lt;/h2&gt;

&lt;p&gt;Part 1 is available &lt;a href="https://dev.to/haydenrou/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk"&gt;here&lt;/a&gt;, and 2 &lt;a href="https://dev.to/hayden/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In part 3 of the beginners BASH basics series, we're going to dive into some seemingly daunting tools. By the end, you're going to start to see that the power the command line provides is much greater than you ever realised..!&lt;/p&gt;

&lt;p&gt;This article cannot even scrape the surface of the likes of &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;tmux&lt;/code&gt; or &lt;code&gt;sed&lt;/code&gt;, so if you're getting to love them as much as I do, then I'm going to recommend some further reading which I'll leave at the bottom of part 4.&lt;/p&gt;

&lt;p&gt;Remember, there are people who have used these tools for 30+ years and are still learning things... &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/kbRb4eyCNC0aMz5x68/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/kbRb4eyCNC0aMz5x68/giphy.gif" alt="superfastwhaaaaaa"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On that note - let's get started.&lt;/p&gt;

&lt;h1&gt;
  
  
  sort
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;sort&lt;/code&gt; does exactly what it says on the tin. It will sort lines of text files. &lt;code&gt;sort&lt;/code&gt; is often used to help display a commands output in a more human readable fashion. Some useful flags include &lt;code&gt;-n&lt;/code&gt; to sort numerically instead of alphabetically, &lt;code&gt;-r&lt;/code&gt; to sort in descending order, or &lt;code&gt;--ignore-case&lt;/code&gt; to... ignore case.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;sort my_file.md&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  piping
&lt;/h1&gt;

&lt;p&gt;Lets put together a few of our learnt techniques into one command! &lt;br&gt;
Much like the common pipeline operator in other languages such as Elixir, "piping" is a very common way to pass the STDOUT of one command to other commands and manipulate the end result in the way you want.&lt;/p&gt;

&lt;p&gt;So how do we do it? Well, the &lt;code&gt;|&lt;/code&gt; key, AKA "the pipe" can be used after any command that will give STDOUT.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;ls | grep .md&lt;/code&gt; will get you all files in the current directory with &lt;code&gt;.md&lt;/code&gt; in the name by sending the result list of &lt;code&gt;ls&lt;/code&gt; into the last argument of &lt;code&gt;grep&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also pipe each individual argument into another command using &lt;code&gt;xargs&lt;/code&gt; such as &lt;code&gt;ls | xargs cat&lt;/code&gt; which will use &lt;code&gt;cat&lt;/code&gt; on each result.&lt;/p&gt;

&lt;p&gt;If you wanted to use the argument in a specific usecase, you can use &lt;code&gt;-I{}&lt;/code&gt; after &lt;code&gt;xargs&lt;/code&gt;, which will give you access to the argument through &lt;code&gt;{}&lt;/code&gt; in a following command.&lt;/p&gt;
&lt;h1&gt;
  
  
  sed
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; is used to manipulate text is a scriptable manner. It's commonly used for find and replace, or deleting values from a file or list of files. &lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;sed -i 's/my_search/my_new_value/' my_file.md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Find out how to create some awesome bindings for super-fast project wide search and replace in my article about &lt;a href="https://dev.to/hayden/optimizing-your-workflow-with-fzf-ripgrep-2eai"&gt;optimizing your workflow with fzf &amp;amp; ripgrep&lt;/a&gt;!&lt;/p&gt;
&lt;h1&gt;
  
  
  awk
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;awk&lt;/code&gt; is a great dynamic tool for working with files. It offers an API capable of printing or manipulating text in ways you can only imagine!&lt;/p&gt;

&lt;p&gt;One of the most common ways I use &lt;code&gt;awk&lt;/code&gt; is to print out specific values from a column of data.&lt;/p&gt;

&lt;p&gt;Say you want to see the filesize of every file in your directory. You'd probably start by executing &lt;code&gt;ls -lah&lt;/code&gt;. You can then pipe into &lt;code&gt;column&lt;/code&gt;, which maybe not for &lt;code&gt;ls&lt;/code&gt;, but for a lot of commands helps get the STDOUT into a format usable by &lt;code&gt;awk.&lt;/code&gt;&lt;br&gt;
Then you can pipe the result into &lt;code&gt;awk '{print $5,$9}'&lt;/code&gt; to see the values of the fifth and ninth column, the size and name respectively.&lt;br&gt;
If you want to get real fancy, you can use &lt;code&gt;awk&lt;/code&gt;s &lt;code&gt;OFS&lt;/code&gt; to set a tab delimiter and then sort them by filesize.&lt;/p&gt;

&lt;p&gt;Check this out:&lt;br&gt;
&lt;code&gt;ls -lah | column | awk 'OFS="\t" {print $5,$9}' | sort -h&lt;/code&gt;&lt;br&gt;
Awesome, right?&lt;/p&gt;
&lt;h1&gt;
  
  
  ssh
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt; is a secure shell protocol used to securely login to remote servers. If you have your own website, or are looking at creating one - you should at least know the basics of &lt;code&gt;ssh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Providing you know the name and IP of the server you want to connect to, you can connect simply by using &lt;code&gt;ssh username@ip&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh&lt;/code&gt; supports a lot of useful flags, some to note are &lt;code&gt;-J&lt;/code&gt; if you need to jump from one server to another, &lt;code&gt;-p&lt;/code&gt; for a specific port or &lt;code&gt;-D&lt;/code&gt; for tunnelling. &lt;/p&gt;

&lt;p&gt;Unless you've setup an ssh key and added it to the &lt;code&gt;.ssh/authorized_keys&lt;/code&gt; file at your remote server, you'll be required to enter a password when accessing your server. Learn more about setting up ssh keys with Digital Ocean's handy article &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Taking it a step further, you can even specify different hostnames, ports and access keys if you are accessing several servers and don't want to type the IP or full command every time by using your &lt;code&gt;ssh&lt;/code&gt; config file.&lt;br&gt;
The config file will be at &lt;code&gt;$HOME/.ssh/config&lt;/code&gt;, and will look something like the below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host thenameiwant
    HostName 127.0.0.1
    Port 3000
    User myuser
    IdentityFile /home/userName/.ssh/id_rsa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, when you use &lt;code&gt;ssh thenameiwant&lt;/code&gt;, it will be the same as writing &lt;code&gt;ssh myuser@127.0.0.1 -p 3000&lt;/code&gt;, except it will use the specified ssh-key (in case you need multiple).&lt;/p&gt;

&lt;p&gt;I've started writing a utility to help manage my ssh configuration file, you can check it out &lt;a href="https://github.com/haydenrou/confi" rel="noopener noreferrer"&gt;here&lt;/a&gt;. It's still in early development, but it's a fun tool!&lt;/p&gt;
&lt;h1&gt;
  
  
  tmux
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; is a terminal multiplexer. This means that within your terminal application, be it the basic terminal, Alacritty or iTerm, you can spin up multiple terminal sessions and easily move between them.&lt;br&gt;
This comes in super useful when you want to run a long download in one, and continue working in another. Or running a server in one and using your command line editor in another. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; usually comes standard with any Linux server you may have, and so when you're accessing another server, if you wanted to leave a command hanging on a port for instance, you could spin up &lt;code&gt;tmux&lt;/code&gt;, run the command, detach and exit. This will continue running after you exit &lt;code&gt;ssh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To enter a &lt;code&gt;tmux&lt;/code&gt; session, you can simply type &lt;code&gt;tmux&lt;/code&gt; to the command line, or create a named session with &lt;code&gt;tmux new-session -s my_name&lt;/code&gt;. This allows you to kill the session by name (&lt;code&gt;tmux kill-session -t my_name&lt;/code&gt;) or attach to a specific session (&lt;code&gt;tmux attach-session -t my_name&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;All &lt;code&gt;tmux&lt;/code&gt; specific commands are used after the set &lt;code&gt;tmux&lt;/code&gt; prefix. The default for this is &lt;code&gt;ctrl-b&lt;/code&gt;.&lt;br&gt;
For instance, if you want to detach your session, you can use &lt;code&gt;ctrl-b+d&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can then view your sessions with &lt;code&gt;tmux ls&lt;/code&gt; and attach or kill as per the above.&lt;/p&gt;
&lt;h1&gt;
  
  
  vim
&lt;/h1&gt;

&lt;p&gt;Vim is an extremely powerful text editor accessed via the command line. Whether you want to use it as your IDE or not, it's worth knowing the basics because there will undoubtedly be a day when you have to edit a file on a server and you'll be stuck using &lt;code&gt;nano&lt;/code&gt;. And nobody likes &lt;code&gt;nano&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vim has a concept of different modes. To start with, we'll just cover the two you need to edit a simple file - normal and insert mode. &lt;br&gt;
To move around in &lt;code&gt;vim&lt;/code&gt;, use the arrow keys, or &lt;code&gt;hjkl&lt;/code&gt;. &lt;code&gt;w&lt;/code&gt; will move you forward a word, and you can move down by paragraphs by pressing &lt;code&gt;{&lt;/code&gt; and &lt;code&gt;}&lt;/code&gt;, or half a page at a time with &lt;code&gt;ctrl-d&lt;/code&gt; and &lt;code&gt;ctrl-u&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vim uses a concept of motions when in normal mode. You can use &lt;code&gt;dd&lt;/code&gt; to delete a line, or &lt;code&gt;dw&lt;/code&gt; to "delete word". The same applies with &lt;code&gt;c&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you're in insert mode after using &lt;code&gt;c&lt;/code&gt;, pressing &lt;code&gt;i&lt;/code&gt; or &lt;code&gt;a&lt;/code&gt; (append), you can type as normal.&lt;/p&gt;

&lt;p&gt;Remember, you can always get back to normal mode by pressing esc.&lt;/p&gt;

&lt;p&gt;And the notorious question, how do you leave vim? &lt;code&gt;:wq&lt;/code&gt; will save and exit the current file, or &lt;code&gt;:q!&lt;/code&gt; will quit without saving.&lt;/p&gt;
&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;Feel like a command line pro now?&lt;/p&gt;

&lt;p&gt;As I've mentioned before, these command line tools have improved my productivity tenfold... it's just a bonus that you can show them off to your friends in your fancy scripts! &lt;/p&gt;

&lt;p&gt;If you want to check out how I customise tmux or my bashrc, head over to my repository below. If you have any questions, feel free to pop me a message or leave a comment below!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>beginners</category>
      <category>bash</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[2/4] Beginners BASH basics - learning the way of the shell</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Thu, 25 Jun 2020 00:06:16 +0000</pubDate>
      <link>https://dev.to/hayden/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b</link>
      <guid>https://dev.to/hayden/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b</guid>
      <description>&lt;h2&gt;
  
  
  Part 2 of a 4 part series
&lt;/h2&gt;

&lt;p&gt;Part 1 is available &lt;a href="https://dev.to/haydenrou/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk"&gt;here&lt;/a&gt; and &lt;a href="https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9"&gt;part 3 here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In part 1 we discussed commands that will give you your first feel into the world of the command line. We learnt how to read the docs, look at and read your files, remove them and even search in them, but now it's time to learn some tools that will &lt;em&gt;really&lt;/em&gt; increase your productivity in the terminal.&lt;/p&gt;

&lt;p&gt;Part 2 aims to give you the knowledge you'll need to start using the command line over your editor in certain scenarios. You'll learn how to start reading what's &lt;em&gt;actually&lt;/em&gt; happening in some basic scripts and more importantly, you'll be able to start being super fast and productive inside the often daunting black and white world that is the terminal. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/bAplZhiLAsNnG/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/bAplZhiLAsNnG/giphy.gif" alt="superfastwhaaaaaa"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's dive straight in.&lt;/p&gt;

&lt;h1&gt;
  
  
  touch
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;touch&lt;/code&gt; will create a file, in the same way that &lt;code&gt;mkdir&lt;/code&gt; will create a directory. You will learn later on how you can save a file directly through the vim editor, however there may be an occasion where you want to create one or multiple files but not edit them at the time.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;touch projects/TODO.md&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  echo
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; is a versatile command that allows you to print arguments or variables. &lt;code&gt;echo "Hello, world!"&lt;/code&gt; to print out some plain text to the terminal, or &lt;code&gt;echo $HOME&lt;/code&gt; to view an environment variables value. (P.S, we'll get more into that on part 4)&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;echo&lt;/code&gt; can be used just print a value, to append a line to the bottom of a file with &lt;code&gt;echo $HOME &amp;gt;&amp;gt; my_file.md&lt;/code&gt; or even to override a files content from the top with &lt;code&gt;echo $HOME &amp;gt; my_file.md&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  curl
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; is used to transfer data from or to a server. You can for instance try &lt;code&gt;curl https://dev.to&lt;/code&gt; which will give you the response for here!&lt;/p&gt;

&lt;p&gt;Example usage:&lt;br&gt;
You may see the following common usage for &lt;code&gt;curl&lt;/code&gt;, which will place the output to the file specified (setup.sh): &lt;code&gt;curl -fLo ~/setup.sh https://raw.githubusercontent.com/haydenrou/dotfiles/master/setup.sh&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  ping
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ping&lt;/code&gt; will send packets to a host, expecting the host to receive them. It's often used to check that a host is up and running.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;ping dev.to&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tip: Recently I came across an issue on one of my servers where I couldn't connect to github. My first point of call was to &lt;code&gt;ping github.com&lt;/code&gt;, to see if the issue was there. I knew my server had internet access, but for some reason my ping was dropping off and not working. This was preventing me deploying my application and in general was just a pain.&lt;/p&gt;

&lt;p&gt;To fix it, I simply added &lt;code&gt;140.82.112.3 github.com www.github.com&lt;/code&gt; to my &lt;code&gt;/etc/hosts&lt;/code&gt; file by using &lt;code&gt;echo "140.82.112.3 github.com www.github.com" &amp;gt;&amp;gt; /etc/hosts&lt;/code&gt; which makes sure when trying to access github, my server knew where to go to. Problem solved.&lt;/p&gt;
&lt;h1&gt;
  
  
  chmod
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;chmod&lt;/code&gt; can be used to change file modes.&lt;/p&gt;

&lt;p&gt;One of the most common usage is to change a file to be executable, for example if you've created a script and want to run it.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;chmod +x my_script.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And then you can run the script like so &lt;code&gt;sh my_script.sh&lt;/code&gt; or &lt;code&gt;./my_script.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use &lt;code&gt;chmod&lt;/code&gt; to change permissions to be read only, read and write, or just about whatever you want - you can see all the uses in the &lt;code&gt;man&lt;/code&gt; page!&lt;/p&gt;
&lt;h1&gt;
  
  
  less
&lt;/h1&gt;

&lt;p&gt;When you open up a &lt;code&gt;man&lt;/code&gt; page or use some other utilities, you may notice that the way the file is shown is within a menu that at first may be unfamiliar.&lt;br&gt;
You may gather quickly that you can go up and down using the arrow keys or &lt;code&gt;hjkl&lt;/code&gt; if you use vim, and that you can exit using &lt;code&gt;q&lt;/code&gt;, but I always wondered for a while... what exactly was this?&lt;/p&gt;

&lt;p&gt;In most cases, this opens an instance of &lt;code&gt;less&lt;/code&gt;. &lt;code&gt;less&lt;/code&gt; will open a file from the top, and allow you to scroll through it as mentioned above, or search for what you're looking for. &lt;code&gt;less&lt;/code&gt; is great if you want to quickly skim a file or see the contents in an easier to navigate way.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;less my_file.md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tips: &lt;code&gt;ctrl-d&lt;/code&gt; and &lt;code&gt;ctrl-u&lt;/code&gt; will go down and up respectively. &lt;code&gt;/my_search&lt;/code&gt; will search when you press enter and bring what you're looking for to the top. And of course you can go up and down slower using &lt;code&gt;hjkl&lt;/code&gt; or the arrow keys.&lt;/p&gt;
&lt;h1&gt;
  
  
  tail
&lt;/h1&gt;

&lt;p&gt;As you've probably guessed, &lt;code&gt;tail&lt;/code&gt; will show you the tail end of a file. &lt;/p&gt;

&lt;p&gt;Why is this useful? Well you can view the constant updates to a file by using &lt;code&gt;tail&lt;/code&gt;s &lt;code&gt;-f&lt;/code&gt; flag, and see it updating on the spot. &lt;/p&gt;

&lt;p&gt;If you have a file (like a Rails application's log for example) that you want to follow, you can run &lt;code&gt;tail -f log/development.log&lt;/code&gt; (or &lt;code&gt;production.log&lt;/code&gt; in the relevant environment) to see the stream of output.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;tail -f log/development.log&lt;/code&gt; to show a constant stream, which you can end by pressing &lt;code&gt;ctrl-c&lt;/code&gt;. &lt;code&gt;tail -n 5 log/development.log&lt;/code&gt; to view the last 5 lines.&lt;/p&gt;
&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;That's part 2 of our beginners BASH basics, I hope you enjoyed it! Next we're going to dive deep into some more complex tools and programs such as &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;sed&lt;/code&gt; and &lt;code&gt;awk&lt;/code&gt;, so stay tuned!&lt;/p&gt;

&lt;p&gt;As always, feel free to ask any questions or if you're interested in how I've customised my environment, head over to my repository below.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Check out part part 3 &lt;a href="https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9"&gt;here&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>bash</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[1/4] Beginners BASH basics - becoming one with the shell</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Tue, 23 Jun 2020 00:15:34 +0000</pubDate>
      <link>https://dev.to/hayden/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk</link>
      <guid>https://dev.to/hayden/1-4-beginners-bash-basics-becoming-one-with-the-shell-mpk</guid>
      <description>&lt;h2&gt;
  
  
  Part 1 of a 4 part series
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/haydenrou/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b"&gt;View part 2 here&lt;/a&gt; and &lt;a href="https://dev.to/hayden/3-4-beginners-bash-basics-wait-bash-can-do-that-4oh9"&gt;part 3 here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first started using the command line it seemed quite daunting to me. I didn't know what I &lt;em&gt;should&lt;/em&gt; know and I didn't know what benefits investing time into learning more would give me. My job required me to learn more Ruby, so why learn &lt;code&gt;bash&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2FoiJ0Yf3sLucp2%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2FoiJ0Yf3sLucp2%2Fgiphy.gif" alt="bash who?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have since learnt that having knowledge of just some basic commands improves your workflow tenfold, and for me in particular increased my confidence when &lt;code&gt;ssh&lt;/code&gt;ing to a server or even just having to navigate around my own environment.&lt;/p&gt;

&lt;p&gt;By the end of this series I hope you'll feel at home when navigating the command line and won't feel a need to use the file manager GUI again!&lt;/p&gt;

&lt;p&gt;Here are some of my most commonly used commands:&lt;/p&gt;

&lt;h1&gt;
  
  
  man
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;man&lt;/code&gt; provides you with the manual documentation for a utility. Use &lt;code&gt;man&lt;/code&gt; the same way you would when using programming documentation - it will tell you all the available flags for a command and what it can be used for. The main source of truth when questioning how to use a tool!&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;man ls&lt;/code&gt; (use &lt;code&gt;q&lt;/code&gt; to exit)&lt;/p&gt;

&lt;p&gt;Equally, you could also use &lt;code&gt;info ls&lt;/code&gt; to view this information too.&lt;/p&gt;

&lt;h1&gt;
  
  
  ls
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt; will list the files in your &lt;code&gt;cwd&lt;/code&gt; (current working directory).&lt;/p&gt;

&lt;p&gt;If you use &lt;code&gt;man ls&lt;/code&gt;, you can see that &lt;code&gt;ls&lt;/code&gt; offers many flags. The most common usage however, are (in my opinion) &lt;code&gt;lah&lt;/code&gt;. Executing &lt;code&gt;ls -lah&lt;/code&gt; will give you a list of all files in your CWD (current working directory) including hidden (&lt;code&gt;.files&lt;/code&gt;), with their file-sizes, permissions and dates when they were updated.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;ls -lah&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can then use the &lt;code&gt;file&lt;/code&gt; command on a file to view the details of it!&lt;/p&gt;

&lt;h1&gt;
  
  
  cat
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;cat&lt;/code&gt; will spit the contents of a file out to the command line.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;cat myfile&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  mkdir
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;mkdir&lt;/code&gt; creates a directory at the specified location. As with &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt; has many useful flags that you can see in the manual. The most notable being &lt;code&gt;-p&lt;/code&gt;, which will recursively create the directories as specified.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;mkdir -p ~/my_directory/my_subdirectory&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  rm
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;rm&lt;/code&gt; is used to remove a file or directory.&lt;br&gt;
&lt;strong&gt;Warning:&lt;/strong&gt; paired with &lt;code&gt;sudo&lt;/code&gt;, or even on it's own, this can be a very dangerous command if used incorrectly.&lt;/p&gt;

&lt;p&gt;You may want to use the following flags:&lt;br&gt;
&lt;code&gt;-r&lt;/code&gt; for recursive&lt;br&gt;
&lt;code&gt;-v&lt;/code&gt; for verbose (it will give feedback to what is happening)&lt;br&gt;
&lt;code&gt;-f&lt;/code&gt; for force&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;rm -rvf ~/asd&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  grep
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;grep&lt;/code&gt; will allow you to search for specific content from a file or result list.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;grep 'my_search' test.md&lt;/code&gt;, you will see all the lines containing &lt;code&gt;my_search&lt;/code&gt; within &lt;code&gt;test.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can view lines around them by using the &lt;code&gt;-C 3&lt;/code&gt;, or get all lines &lt;em&gt;not&lt;/em&gt; containing the match with &lt;code&gt;-v&lt;/code&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  sudo
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; will execute the following command as a superuser. You'll often need to use &lt;code&gt;sudo&lt;/code&gt; to run certain commands, for instance commands that will affect the system.&lt;/p&gt;

&lt;p&gt;Example usage: &lt;code&gt;sudo systemctl status mysql&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;And that's it for part 1 of my beginners bash series! If all of the above is below you... stay tuned for some more advanced tips!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/haydenrou/2-4-beginners-bash-basics-learning-the-way-of-the-shell-3f7b"&gt;Dive into &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;chmod&lt;/code&gt; and more in Part 2 - here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to ask any questions or if you're interested in how I've customised my environment, head over to my repository below.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>bash</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>optimizing your workflow with fzf &amp; ripgrep</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Sat, 23 May 2020 02:29:18 +0000</pubDate>
      <link>https://dev.to/hayden/optimizing-your-workflow-with-fzf-ripgrep-2eai</link>
      <guid>https://dev.to/hayden/optimizing-your-workflow-with-fzf-ripgrep-2eai</guid>
      <description>&lt;p&gt;On the back of my &lt;a href="https://dev.to/haydenrou/the-only-5-vim-plugins-i-need-4b7h"&gt;post about my favourite vim plugins&lt;/a&gt;, one tool that sparked particularly more interest was file and keyword searching using fzf &amp;amp; ripgrep. For that, I decided I'd give my 2 pence on what features I use the most and how I have them integrated into my workflow.&lt;/p&gt;

&lt;p&gt;Let's start with how you can use it outside of vim&lt;/p&gt;

&lt;h1&gt;
  
  
  the terminal
&lt;/h1&gt;

&lt;h3&gt;
  
  
  fzf
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/junegunn" rel="noopener noreferrer"&gt;
        junegunn
      &lt;/a&gt; / &lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;
        fzf
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🌸 A command-line fuzzy finder
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Whether you use &lt;a href="https://en.wikipedia.org/wiki/Bash_%28Unix_shell%29" rel="noopener noreferrer"&gt;bash&lt;/a&gt;, &lt;a href="http://www.zsh.org/" rel="noopener noreferrer"&gt;zsh&lt;/a&gt; or &lt;a href="https://github.com/fish-shell/fish-shell" rel="noopener noreferrer"&gt;fish&lt;/a&gt;, fzf works great with an easy installation process. Just follow along from their &lt;a href="https://github.com/junegunn/fzf#installation" rel="noopener noreferrer"&gt;github page instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As I'll keep saying, one of the main benefits of using fzf is the speed - it's just incredibly fast. But let's look at the use-cases and see exactly how it can speed up your workflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  command line search
&lt;/h4&gt;

&lt;p&gt;Whatever code editor you use, you most likely have a file searcher, usually bound to &lt;code&gt;ctrl-t&lt;/code&gt; or &lt;code&gt;ctrl-p&lt;/code&gt;. In vim, a lot of people use &lt;a href="https://github.com/kien/ctrlp.vim" rel="noopener noreferrer"&gt;ctrlp.vim&lt;/a&gt;. &lt;br&gt;
Fzf has this built into the command line, and it's super fast if I didn't already mention.&lt;/p&gt;

&lt;p&gt;Simply press &lt;code&gt;ctrl-t&lt;/code&gt; and your files will be loaded, you can use a fuzzy search and look for whatever you need. (fzf will by default ignore what your &lt;code&gt;.gitignore&lt;/code&gt; file contains)&lt;br&gt;
You may ask, what use is this if it just pastes the file to the command line? Well - take it to the next level and pipe (&lt;code&gt;|&lt;/code&gt;) it into a command.&lt;/p&gt;

&lt;p&gt;Working on several different features at once in a big application, and forget branch names?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch | fzf | xargs git checkout&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnpw4p787dchjf8yn2tpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnpw4p787dchjf8yn2tpw.png" alt="fzf to git"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I personally alias this in my &lt;code&gt;bashrc&lt;/code&gt; as the following, which makes my branch swaps easy as pie: &lt;code&gt;alias gcob='git branch | fzf | xargs git checkout'&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  command history
&lt;/h4&gt;

&lt;p&gt;This is probably the best feature here. How many times have you typed part of a command and hit &lt;code&gt;ctrl-r&lt;/code&gt; until you reached the right one, only to realise you got part of it wrong and have to &lt;code&gt;history | grep my_command&lt;/code&gt; to figure out what you ran. Not no more.&lt;/p&gt;

&lt;p&gt;Fzf has built in &lt;code&gt;ctrl-r&lt;/code&gt; functionality which when you find your command and press return will paste it to your command line, allowing you to edit it before sending it off.&lt;/p&gt;

&lt;p&gt;I can't begin to tell you how useful this is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5nb6drq856giuts0lcl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5nb6drq856giuts0lcl2.png" alt="fzf backward search"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  autocomplete
&lt;/h3&gt;

&lt;p&gt;When searching for a file to edit or a directory to move to you can simply &lt;code&gt;**&amp;lt;tab&amp;gt;&lt;/code&gt; to use fzf and complete your command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvso5cbdj4e9hfyj3vyme.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvso5cbdj4e9hfyj3vyme.png" alt="star search fzf"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take it to the next level with ssh support - &lt;code&gt;ssh **&amp;lt;tab&amp;gt;&lt;/code&gt;. Awesome right?&lt;/p&gt;
&lt;h3&gt;
  
  
  patterns
&lt;/h3&gt;

&lt;p&gt;Fzf also has patterns. Want to find a file that specifically ends in &lt;code&gt;.rb&lt;/code&gt;? Just add &lt;code&gt;$&lt;/code&gt; to the end of the search. Omit specific searches? &lt;code&gt;!ignored_search_result&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ripgrep
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BurntSushi" rel="noopener noreferrer"&gt;
        BurntSushi
      &lt;/a&gt; / &lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;
        ripgrep
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ripgrep recursively searches directories for a regex pattern while respecting your gitignore
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You've probably guessed by now that I &lt;em&gt;love&lt;/em&gt; fast programs. Ripgrep is no exception to the rule. Another tool that outright shows their speed in their readme, it really lives up to it.&lt;/p&gt;

&lt;p&gt;You can plug it in to fzf with the following, or use it for simple greps as per below.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export FZF_DEFAULT_COMMAND="rg --files --hidden --follow --glob '!.git'"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;On the command line you can use ripgrep as simple as &lt;code&gt;rg 'my_search'&lt;/code&gt; and it will recursively find your results in a flash. And it comes with some great options; &lt;code&gt;--hidden&lt;/code&gt; to show hidden files; &lt;code&gt;-s&lt;/code&gt; for case sensitive searches; &lt;code&gt;-l&lt;/code&gt; to just show the files that contain the result without showing the context; and &lt;code&gt;-g&lt;/code&gt; to include or exclude files or filetypes, such as &lt;code&gt;rg 'my_string' -g '*.rb'&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But the real fun comes in when you use it in vim.&lt;/p&gt;

&lt;h1&gt;
  
  
  vim
&lt;/h1&gt;

&lt;p&gt;Both fzf and rg work extremely well with vim. To get started, you'll have to get a couple plugins for fzf.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Plug 'junegunn/fzf', { 'do': { -&amp;gt; fzf#install() } }
Plug 'junegunn/fzf.vim'


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

&lt;/div&gt;
&lt;p&gt;And ripgrep works great with a small command to plug it in.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set grepprg=rg\ --vimgrep\ --smart-case\ --hidden\ --follow&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I personally don't use &lt;code&gt;set autochdir&lt;/code&gt; (&lt;a href="https://vim.fandom.com/wiki/Set_working_directory_to_the_current_file" rel="noopener noreferrer"&gt;auto set current directory&lt;/a&gt;) so setting the below will use the current working directory (&lt;code&gt;cwd&lt;/code&gt;) for ripgrep.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let g:rg_derive_root='true'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Here are another few configurations I use with fzf &amp;amp; rg in vim. This is personal preference so go ahead and use work makes the most sense to you.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

nnoremap \ :Rg&amp;lt;CR&amp;gt;
nnoremap &amp;lt;C-T&amp;gt; :Files&amp;lt;cr&amp;gt;
nnoremap &amp;lt;Leader&amp;gt;b :Buffers&amp;lt;cr&amp;gt;
nnoremap &amp;lt;Leader&amp;gt;s :BLines&amp;lt;cr&amp;gt;


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

&lt;/div&gt;
&lt;h4&gt;
  
  
  :Files is not working
&lt;/h4&gt;

&lt;p&gt;Check out &lt;a href="https://github.com/junegunn/fzf.vim/issues/456" rel="noopener noreferrer"&gt;this github issue&lt;/a&gt; if you're having this error. I made the below simple fix in my vimrc and haven't had any problems since.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

set rtp+=~/.fzf
set rtp+=/usr/local/opt/fzf


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

&lt;/div&gt;
&lt;p&gt;Now the magic happens.&lt;/p&gt;
&lt;h4&gt;
  
  
  searching
&lt;/h4&gt;

&lt;p&gt;For those of you familiar with vim mappings, you've probably already guessed, but simply press &lt;code&gt;ctrl-t&lt;/code&gt; to open up the menu, and get searching!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fioyghu2mvb5x5mfq5gxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fioyghu2mvb5x5mfq5gxn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you've probably noticed, this gives you a brilliant preview screen for the file you're planning on opening up. I find this brilliant with no performance change, however if you prefer no preview window, just use &lt;code&gt;:FZF&lt;/code&gt; instead of &lt;code&gt;:Files&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;From inside the menu, fzf will automatically detect &lt;code&gt;ctrl-t&lt;/code&gt; to open the file in a new tab, &lt;code&gt;ctrl-v&lt;/code&gt; for a vertical split or &lt;code&gt;ctrl-x&lt;/code&gt; for a horizontal split.&lt;/p&gt;
&lt;h4&gt;
  
  
  buffers
&lt;/h4&gt;

&lt;p&gt;I bind &lt;code&gt;&amp;lt;leader&amp;gt;b&lt;/code&gt; for my buffer menu, opening the standard fzf menu for all files in my buffer. This is super useful if you've had a long vim session going.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;:BLines&lt;/code&gt; will simply search the current buffer for a specific string. You may be thinking you can do this with vims &lt;code&gt;/&lt;/code&gt; or &lt;code&gt;?&lt;/code&gt; - but sometimes it's nice to see all occurrences in one window and look through, instead of spamming &lt;code&gt;n&lt;/code&gt; or &lt;code&gt;N&lt;/code&gt;. If you want to look at all the current buffers, you can use &lt;code&gt;:Lines&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  multiple files
&lt;/h4&gt;

&lt;p&gt;One other cool feature from the fzf menu that I mainly use in vim is &lt;code&gt;&amp;lt;tab&amp;gt;&lt;/code&gt;. As you can see below, I've selected several different files and now I can go through them one at a time to see or make the changes I needed.&lt;/p&gt;
&lt;h4&gt;
  
  
  rg
&lt;/h4&gt;

&lt;p&gt;This plays well with &lt;code&gt;rg&lt;/code&gt;. My &lt;code&gt;\&lt;/code&gt; binding will open a menu and scan all files recursively from your current working directory. Search for the string you want, and use fzf as you would normally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg375dvqj3nsge51jb6x2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg375dvqj3nsge51jb6x2.png" alt="rg search"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Bonus - Search &amp;amp; Replace
&lt;/h1&gt;

&lt;p&gt;Whilst we're at it, lets go over a couple ways to find and replace in vim using fzf/rg.&lt;/p&gt;

&lt;p&gt;If you search using the above set mapping &lt;code&gt;\&lt;/code&gt; for a keyword you need, and press &lt;code&gt;&amp;lt;tab&amp;gt;&lt;/code&gt; on the files you want to change, vim will then open up a Quickfix list. Inside of here, you can simply &lt;code&gt;:cfdo %s/my_search/replacement/gc&lt;/code&gt; to go over all the changes. You can then &lt;code&gt;:cdo update&lt;/code&gt; or &lt;code&gt;:wqa&lt;/code&gt; to update them all - easy!&lt;/p&gt;

&lt;p&gt;If you'd rather do this through the command line, &lt;code&gt;rg&lt;/code&gt; and &lt;code&gt;sed&lt;/code&gt; make this super easy.&lt;br&gt;
&lt;code&gt;rg -l 'my_search' | xargs sed -i 's/my_search/my_new_value/'&lt;/code&gt;&lt;br&gt;
and you're done!&lt;/p&gt;

&lt;p&gt;If you're using OSX - you may want to note an oddity with &lt;code&gt;sed&lt;/code&gt; addressed &lt;a href="https://stackoverflow.com/questions/19456518/invalid-command-code-despite-escaping-periods-using-sed" rel="noopener noreferrer"&gt;here&lt;/a&gt; which you can fix by simply changing the command to&lt;br&gt;
&lt;code&gt;rg -l 'my_search' | xargs sed -i '' -e 's/my_search/my_new_value/'&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Searching files and their contents is something that any text editor worth using must accommodate. Fzf &amp;amp; Ripgrep makes vim not only accommodate it, but thrive with them. Why settle for anything less?&lt;/p&gt;

&lt;p&gt;As always, here are my dotfiles, configuration for vim and other config files. Feel free to check them out!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Cheers :)&lt;/p&gt;

</description>
      <category>bash</category>
      <category>vim</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>the only 5 vim plugins i need</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Tue, 19 May 2020 01:56:19 +0000</pubDate>
      <link>https://dev.to/hayden/the-only-5-vim-plugins-i-need-4b7h</link>
      <guid>https://dev.to/hayden/the-only-5-vim-plugins-i-need-4b7h</guid>
      <description>&lt;p&gt;I've been hooked on vim for the best part of 18 months now, and earlier this year I decided it was time to step away from my comfort of using the &lt;a href="https://github.com/amix/vimrc" rel="noopener noreferrer"&gt;ultimate vim&lt;/a&gt; setup and make my own.&lt;/p&gt;

&lt;p&gt;At the end of the day, most users won't touch half the features that come with a pre-configured setup that big, and it turned out I could strip what I actually used from it into my own vimrc fairly easy.&lt;/p&gt;

&lt;p&gt;Whilst I have more than just the plugins below, these are the 5 I use the most frequently.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. vim surround
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tpope" rel="noopener noreferrer"&gt;
        tpope
      &lt;/a&gt; / &lt;a href="https://github.com/tpope/vim-surround" rel="noopener noreferrer"&gt;
        vim-surround
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Vim doesn't come with everything out of the box, part of the reason we love it. As simple as it is, vim surround makes editing code a breeze. How many times have you been in some js and realised you needed string interpolation? Vim surround makes this easy, simply press &lt;br&gt;
`&lt;code&gt;cs"` `{% endraw &lt;br&gt;
{% raw %}&lt;br&gt;
%}{% raw %}&lt;/code&gt;

&lt;p&gt;You can even change HTML tags with&lt;br&gt;
&lt;code&gt;` cst&amp;lt;div&amp;gt; `&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. vim commentary
&lt;/h3&gt;

&lt;p&gt;{% github &lt;a href="https://github.com/tpope/vim-commentary" rel="noopener noreferrer"&gt;https://github.com/tpope/vim-commentary&lt;/a&gt; no-readme %}&lt;br&gt;
Tpope is at it again - vim commentary is another simple plugin that just makes life easier. &lt;/p&gt;

&lt;p&gt;Want to comment out the 5 lines below in the correct format for the file you're in? Easy -&lt;/p&gt;

&lt;p&gt;&lt;code&gt;` gc5j `&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The only one I've had some issues with is typescript &amp;amp; react, and for that i've just written the below in my vimrc&lt;br&gt;
&lt;code&gt;`autocmd FileType javascript,javascriptreact,typescript,typescriptreact setlocal commentstring={/*\ %s\ */}`&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. emmet vim
&lt;/h3&gt;

&lt;p&gt;{% github &lt;a href="https://github.com/mattn/emmet-vim" rel="noopener noreferrer"&gt;https://github.com/mattn/emmet-vim&lt;/a&gt; no-readme %} &lt;br&gt;
Spending more time on front-end code recently has made me appreciate emmet even more. It's just one of those plugins you have to have in a code editor. &lt;br&gt;
&lt;code&gt;` div.test&amp;gt;li.item*2 `&lt;/code&gt;&lt;br&gt;
Will simply resolve to&lt;br&gt;
&lt;code&gt;`&amp;lt;div class="test"&amp;gt;&lt;br&gt;
  &amp;lt;li class="item"&amp;gt;&amp;lt;/li&amp;gt;&lt;br&gt;
  &amp;lt;li class="item"&amp;gt;&amp;lt;/li&amp;gt;&lt;br&gt;
&amp;lt;/div&amp;gt;`&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. coc.nvim
&lt;/h3&gt;

&lt;p&gt;{% github &lt;a href="https://github.com/neoclide/coc.nvim" rel="noopener noreferrer"&gt;https://github.com/neoclide/coc.nvim&lt;/a&gt; no-readme %}&lt;br&gt;
That's right, I've left the best for last. Jump around files like it's no ones business with some simple key mappings, and have code suggestions/autocomplete in almost any language.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`:coc-install coc-tsserver`&lt;/code&gt; and you're set up for javascript, giving you the best autocomplete you've seen. Ruby LSP? Easy, just &lt;br&gt;
&lt;code&gt;`:coc-install solargraph`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fde99t2d6a7s1brritp5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fde99t2d6a7s1brritp5l.png" alt="TSSever"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhvpc9dupacq3reo0w8u0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhvpc9dupacq3reo0w8u0.png" alt="Solarwind"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is even an LSP for TailwindCSS which I've been enjoying using recently, no more visiting the website every time you forget a classname!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx55uo3f18nxfczh4m55x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fx55uo3f18nxfczh4m55x.png" alt="TailwindCSS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the best things about vim is the movement - Not only does coc provide amazing autocomplete, but it just takes movement to the next level.&lt;/p&gt;

&lt;p&gt;Add a few bindings to your vimrc and from JS imports, classes or methods in Ruby, whatever you want.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`&lt;br&gt;
nmap &amp;lt;buffer&amp;gt; &amp;lt;leader&amp;gt;gd &amp;lt;Plug&amp;gt;(coc-definition)&lt;br&gt;
nmap &amp;lt;buffer&amp;gt; &amp;lt;leader&amp;gt;gr &amp;lt;Plug&amp;gt;(coc-references)&lt;br&gt;
`&lt;/code&gt;&lt;br&gt;
Go to the definition with your binding, and use vims built in &lt;a href="https://vim.fandom.com/wiki/Jumping_to_previously_visited_locations" rel="noopener noreferrer"&gt;jumping&lt;/a&gt; to get you right back where you were, no time wasted at all!&lt;/p&gt;

&lt;h3&gt;
  
  
  5. fzf
&lt;/h3&gt;

&lt;p&gt;{% github &lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;https://github.com/junegunn/fzf&lt;/a&gt; no-readme %}&lt;br&gt;
If you haven't used fzf yet, you're going to be blown away. I've been using FZFs file searching in a project that has been developed for over 10 years and FZF still proves its, as they put themselves, blazingly fast.&lt;/p&gt;

&lt;p&gt;I add some simple keybinds for easy access&lt;br&gt;
&lt;code&gt;`&lt;br&gt;
nnoremap &amp;lt;C-T&amp;gt; :Files&amp;lt;cr&amp;gt;&lt;br&gt;
nnoremap &amp;lt;Leader&amp;gt;b :Buffers&amp;lt;cr&amp;gt;&lt;br&gt;
nnoremap &amp;lt;Leader&amp;gt;s :BLines&amp;lt;cr&amp;gt;&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And after that, it's smooth sailing. You even get a cool preview window!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzsbj2ea6d8ek5jwvpoqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzsbj2ea6d8ek5jwvpoqg.png" alt="Fzf"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FZF and &lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;RG&lt;/a&gt; makes search a project easier than it's ever been.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Sitting down and writing my own vimrc, taking my favourite parts from different repositories and customising them took time, but has proved to be priceless. &lt;/p&gt;

&lt;p&gt;As with anyone who uses vim will tell you, there is always more to learn, and that's what I love about it.&lt;/p&gt;

&lt;p&gt;If you want to check out my dotfiles, you can see them below.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/haydenrou" rel="noopener noreferrer"&gt;
        haydenrou
      &lt;/a&gt; / &lt;a href="https://github.com/haydenrou/dotfiles" rel="noopener noreferrer"&gt;
        dotfiles
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My Personalised Development Environment
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Thanks for reading :)

</description>
      <category>vim</category>
      <category>neovim</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>5 Gems I use in every project</title>
      <dc:creator>Hayden Rouille</dc:creator>
      <pubDate>Fri, 24 Jan 2020 01:59:51 +0000</pubDate>
      <link>https://dev.to/hayden/5-gems-i-use-in-every-project-4ggm</link>
      <guid>https://dev.to/hayden/5-gems-i-use-in-every-project-4ggm</guid>
      <description>&lt;p&gt;When you're building applications with such a large open source community such as Ruby on Rails, it's important to know what resources you have at hand. &lt;a href="https://rubygems.org/" rel="noopener noreferrer"&gt;RubyGems&lt;/a&gt; have thousands of contributors worldwide and is one of the biggest open source language communities around, why wouldn't you take advantage of that?&lt;/p&gt;

&lt;p&gt;Here are some gems that I find myself using in every project:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Rubocop
&lt;/h3&gt;

&lt;p&gt;A Ruby code standard enforcer and formatter, Rubocop is an essential gem for development, helping you write better code. We all know reading code is harder than writing it, so when you're given a community agreed set of code standards, why not use them?&lt;/p&gt;

&lt;p&gt;Remember, writing code can be subjective, and if you're working in a team it's important you all agree on a style guide as it's there to help you.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rubocop" rel="noopener noreferrer"&gt;
        rubocop
      &lt;/a&gt; / &lt;a href="https://github.com/rubocop/rubocop" rel="noopener noreferrer"&gt;
        rubocop
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Ruby static code analyzer and formatter, based on the community Ruby style guide.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  2. Pry
&lt;/h3&gt;

&lt;p&gt;Debugging can be a pain to say the least. When I was a junior dev, there were countless times where I'd be re-running code with a slightly different &lt;code&gt;puts&lt;/code&gt; every time until I could figure out what's wrong. Pry changed all that.&lt;/p&gt;

&lt;p&gt;My most used feature of pry is by far &lt;code&gt;binding.pry&lt;/code&gt;. By placing a &lt;code&gt;binding.pry&lt;/code&gt; within your code, when it's ran your server will stop there and allow you to play around in the console.&lt;/p&gt;

&lt;p&gt;Don't stop there though, as it says in the README: Pry is not just an alternative to IRB. Pry gives you access to so much more than just its local variables and methods. For example, you can navigate to completely different classes by just typing &lt;code&gt;cd MyClass&lt;/code&gt; or see all the different method calls on a class by &lt;code&gt;ls MyClass&lt;/code&gt;. If you've just used Pry for generic IRB commands, you've barely scratched the surface.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pry" rel="noopener noreferrer"&gt;
        pry
      &lt;/a&gt; / &lt;a href="https://github.com/pry/pry" rel="noopener noreferrer"&gt;
        pry
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A runtime developer console and IRB alternative with powerful introspection capabilities.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  3. Webpacker
&lt;/h3&gt;

&lt;p&gt;Webpacker is essentially a wrapper for javascript's webpack that allows rails to manage and bundle javascript code in the same way webpack would.&lt;/p&gt;

&lt;p&gt;One of the best features of webpacker (in my opinion) is live reloading. Webpacker will generate a file, &lt;code&gt;bin/webpack-dev-server&lt;/code&gt; which when ran will keep an eye on your packs and when saved live reload for you.&lt;/p&gt;

&lt;p&gt;Note: webpacker comes as a default gem with any project using Rails 6 and above. If you don't want to use webpacker you can simply run &lt;code&gt;rails new myapp --skip-webpack-install&lt;/code&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rails" rel="noopener noreferrer"&gt;
        rails
      &lt;/a&gt; / &lt;a href="https://github.com/rails/webpacker" rel="noopener noreferrer"&gt;
        webpacker
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Use Webpack to manage app-like JavaScript modules in Rails
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  4. Whenever
&lt;/h3&gt;

&lt;p&gt;Whenever is a way of adding cron-jobs to your rails application. It might be sending out daily emails or checking and updating configurations, but whatever it is, whenever is always a gem I end up using somewhere along the line.&lt;/p&gt;

&lt;p&gt;With minimal setup, Whenever will write the jobs for you and you can view them by simply running &lt;code&gt;crontab -l&lt;/code&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/javan" rel="noopener noreferrer"&gt;
        javan
      &lt;/a&gt; / &lt;a href="https://github.com/javan/whenever" rel="noopener noreferrer"&gt;
        whenever
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Cron jobs in Ruby
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  5.  Exception notification
&lt;/h3&gt;

&lt;p&gt;No one likes to find out about bugs from the end-user. Whilst this can be unavoidable, exception notifications gives me a a head start fixing them.&lt;/p&gt;

&lt;p&gt;When I use devise on projects that require authentication, the warden user key is stored in the session, allowing me to see who's produced the error. Users are impressed when you tell them you're fixing a bug they've encountered without them even raising it, talk about customer service!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/smartinez87" rel="noopener noreferrer"&gt;
        smartinez87
      &lt;/a&gt; / &lt;a href="https://github.com/smartinez87/exception_notification" rel="noopener noreferrer"&gt;
        exception_notification
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Exception Notifier Plugin for Rails
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Some close runners up include Devise, Audited and Fast JsonApi, but they are usually more situational.&lt;/p&gt;

&lt;p&gt;This is obviously personal preference, so what gems do find yourself using every project?&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
