<?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: Kev Quirk</title>
    <description>The latest articles on DEV Community by Kev Quirk (@kevquirk).</description>
    <link>https://dev.to/kevquirk</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%2F621387%2F6a5806b6-c62c-4972-a2a6-34357d84beea.png</url>
      <title>DEV Community: Kev Quirk</title>
      <link>https://dev.to/kevquirk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kevquirk"/>
    <language>en</language>
    <item>
      <title>Core Web Vitals and WordPress</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Wed, 08 Sep 2021 11:01:39 +0000</pubDate>
      <link>https://dev.to/kevquirk/core-web-vitals-and-wordpress-1p0b</link>
      <guid>https://dev.to/kevquirk/core-web-vitals-and-wordpress-1p0b</guid>
      <description>&lt;p&gt;Google &lt;a href="https://web.dev/vitals/" rel="noopener noreferrer"&gt;recently announced&lt;/a&gt; Core Web Vitals and it worries WordPress site owners everywhere. There’s no need to be worried; I get a perfect 100 across the board and it’s relatively simple to do.  &lt;/p&gt;

&lt;p&gt;Here’s how…&lt;/p&gt;

&lt;p&gt;Yes, dear reader, it is possible (and relatively easy) to get a perfect score on Core Web Vitals on a WordPress site. This site is built on WordPress and &lt;a href="https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fkevq.uk" rel="noopener noreferrer"&gt;I get a perfect score&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rZuNhuXH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-results.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rZuNhuXH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-results.png" width="591" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Core Web Vitals?
&lt;/h2&gt;

&lt;p&gt;First things first, let’s take a quick look at what CWV actually is. If you go and &lt;a href="https://web.dev/measure/" rel="noopener noreferrer"&gt;test your site&lt;/a&gt;, its performance will be measured against three attributes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Largest Contentful Paint (LCP)&lt;/strong&gt; – This is the time it takes for the largest piece of content to appear on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First Input Delay (FID)&lt;/strong&gt; – This is how long it takes for your website to respond to the first interaction. For example, clicking a menu button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cumulative Layout Shift (CLS)&lt;/strong&gt; – This measures how much your website jiggles around while it loads.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each attribute is graded on a traffic light system:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T6IzIQkp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-traffic-lights-1220x375.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T6IzIQkp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-traffic-lights-1220x375.png" alt="Core web vitals traffic lights" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we look at the CWV performance results for my homepage, here’s what they look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ofwLA0Lx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-performance-results.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ofwLA0Lx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/core-web-vitals-performance-results.png" alt="Core web vitals performance results" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;Total Blocking Time&lt;/em&gt; in the image above is equivalent to FID.&lt;/p&gt;

&lt;p&gt;Now you know what Core Web Vitals are, let’s take a look at how I’ve managed to get such a score with WordPress.&lt;/p&gt;

&lt;p&gt;My recent post on how to &lt;a href="https://kevq.uk/how-to-speed-up-wordpress/" rel="noopener noreferrer"&gt;speed up WordPress&lt;/a&gt; goes into some of the basic things you can do at a high level, but this post will talk about the specific things I’ve done to get those magical green orbs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a good host
&lt;/h2&gt;

&lt;p&gt;I spoke about this in my previous post, so I won’t go into detail here. Forget about shared hosting and get either a Virtual Private Server (VPS) or managed WordPress hosting.&lt;/p&gt;

&lt;p&gt;I personally use a &lt;a href="https://www.ionos.co.uk/servers/vps?ac=OM.UK.UKf11K357003T7073a&amp;amp;kwk=634887631" rel="noopener noreferrer"&gt;VPS from Ionos&lt;/a&gt; to host this site. I have the Medium package, which costs £6/month – not much more than shared hosting.&lt;/p&gt;

&lt;p&gt;If you have no interest in managing a server yourself, managed hosting is the way to go. I’d recommend &lt;a href="https://www.cloudways.com/en/" rel="noopener noreferrer"&gt;Cloudways&lt;/a&gt; for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get a well coded theme
&lt;/h2&gt;

&lt;p&gt;I was previously using a theme that I had built myself. It was lightweight and highly optimised, but I had heard good things about GeneratePress. So I tried them out and have since flipped over to their theme.&lt;/p&gt;

&lt;p&gt;You don’t need to get buried in the weeds of code with GeneratePress, but you can if you wish. The best thing about it is that it’s extremely well written and my site is actually &lt;strong&gt;smaller&lt;/strong&gt; using GeneratePress than it was with my old theme. I’d highly recommend GeneratePress if you’re in the market for a new theme.&lt;/p&gt;

&lt;p&gt;I would also recommend staying away from themes that try to be everything – they look good on the surface, but because they try to do so much, they just end up being a bloated mess.&lt;/p&gt;

&lt;h2&gt;
  
  
  WP Rocket
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://shareasale.com/r.cfm?b=1075949&amp;amp;u=2420767&amp;amp;m=74778&amp;amp;urllink=&amp;amp;afftrack=" rel="noopener noreferrer"&gt;WP Rocket&lt;/a&gt; is the secret sauce that underpins everything. I have a fast server, a well coded theme and now WP Rocket comes in and caches everything so it’s served &lt;strong&gt;really&lt;/strong&gt; quickly.&lt;/p&gt;

&lt;p&gt;To add some extra juice to WP Rocket, I also sprinkle some &lt;a href="https://bunnycdn.com/?ref=gnn7bkvipc" rel="noopener noreferrer"&gt;BunnyCDN&lt;/a&gt; fairy dust on top to help serve the static assets of my site all over the world.&lt;/p&gt;

&lt;p&gt;If you don’t want to shell out for WP Rocket, &lt;a href="https://jetpack.com/boost/" rel="noopener noreferrer"&gt;Jetpack Boost&lt;/a&gt; is also a great caching plugin that’s free.&lt;/p&gt;

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

&lt;p&gt;To run such a stack is &lt;a href="https://kevq.uk/the-hunt-for-better-wordpress-hosting/" rel="noopener noreferrer"&gt;fairly expensive&lt;/a&gt;, but I feel the performance it provides is worth it. The result of my investment is a website that is highly performant and easy to manage.&lt;/p&gt;

&lt;p&gt;The price I pay isn’t actually that much more than some crappy shared hosts. For example, BlueHost’s &lt;strong&gt;awful&lt;/strong&gt; shared “Pro” hosting is nearly £20/month and your site would be orders of magnitude slower!&lt;/p&gt;

&lt;p&gt;So there you have it, folks. It’s fairly simple to have a highly performant site on WordPress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you’re running WordPress and want some help improving its performance, please feel free to &lt;a href="https://kevq.uk/contact/" rel="noopener noreferrer"&gt;contact me&lt;/a&gt; and I’ll see what I can do to help.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
    </item>
    <item>
      <title>The Hunt For Better WordPress Hosting</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Fri, 03 Sep 2021 15:44:46 +0000</pubDate>
      <link>https://dev.to/kevquirk/the-hunt-for-better-wordpress-hosting-5dj2</link>
      <guid>https://dev.to/kevquirk/the-hunt-for-better-wordpress-hosting-5dj2</guid>
      <description>&lt;p&gt;I’ve recently been trying to improve my WordPress hosting workflow, and the related costs involved. It hasn’t been a great success so far.&lt;/p&gt;

&lt;p&gt;Before we get into the meat of the post, let me take a minute to set the scene here, dear reader. I have what I would consider a fairly complicated and expensive stack for a personal website such as this.&lt;/p&gt;

&lt;p&gt;Here’s the details of the parts that make up my WordPress hosting stack and the associated annual cost:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line item&lt;/th&gt;
&lt;th&gt;Annual price ($)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VPS hosting&lt;/td&gt;
&lt;td&gt;$105.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yoast Premium&lt;/td&gt;
&lt;td&gt;$123.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newsletter Glue&lt;/td&gt;
&lt;td&gt;$76.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WP Rocket&lt;/td&gt;
&lt;td&gt;$49.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Updraft SFTP Plugin&lt;/td&gt;
&lt;td&gt;$16.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bunny CDN&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Annual total:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$381.50&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monthly total:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$31.79&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So all in, this site costs me approximately $380.00/year, or $30.00/month. That’s around £275.00/year, or £22.00/month for my fellow brits. 🇬🇧&lt;/p&gt;

&lt;p&gt;What isn’t factored in here is my time. Since i use a self-hosted VPS with &lt;a href="https://www.ionos.co.uk/servers/vps?ac=OM.UK.UKf11K357003T7073a&amp;amp;kwk=634887631" rel="noopener noreferrer"&gt;Ionos&lt;/a&gt; (highly recommend them by the way) I have to maintain the OS and application stack. Maintenance is made &lt;strong&gt;way&lt;/strong&gt; easier by running Plesk on the server, but it’s still an overhead nonetheless.&lt;/p&gt;

&lt;p&gt;I consider this stack to be very expensive for what basically equates to a hobby. Now I could get my WordPress hosting way cheaper, but as a result of my investment, I get a &lt;a href="https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fkevq.uk" rel="noopener noreferrer"&gt;perfect lighthouse score&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qg7zrg-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/09/perfect-lighthouse-score.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qg7zrg-_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/09/perfect-lighthouse-score.png" alt="Perfect lighthouse score" width="705" height="215"&gt;&lt;/a&gt;My perfect lighthouse score&lt;/p&gt;

&lt;p&gt;I’m very fortunate to have a well paid job, but this is still a lot of money. &lt;strong&gt;There had to be a better way…?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The hunt for WordPress hosting
&lt;/h2&gt;

&lt;p&gt;Recently I’ve been looking at Andy Bell’s most excellent &lt;a href="https://piccalil.li/course/learn-eleventy-from-scratch/" rel="noopener noreferrer"&gt;learn Eleventy from scratch&lt;/a&gt;; and I have to say, it had me seriously thinking about yet another switch in blogging platform.&lt;/p&gt;

&lt;p&gt;But after a week or so of playing around with it in my spare time, it became apparent that it would be a time sink, just like &lt;a href="https://kevq.uk/goodbye-wordpress-switched-to-jekyll/" rel="noopener noreferrer"&gt;when I ran Jekyll previously&lt;/a&gt; and ultimately &lt;a href="https://kevq.uk/the-wonderful-world-of-wordpress-wizardry-for-working-with-websites/" rel="noopener noreferrer"&gt;switched back to WordPress&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I didn’t want to be in that same boat again, plus I love the WordPress writing workflow. Gutenberg is a joy to use and I’ve got my whole workflow down at this point.&lt;/p&gt;

&lt;p&gt;So I started hunting for WordPress hosting that would continue to be performant, yet save me a few quid and hopefully, some time too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Managed WordPress hosting
&lt;/h2&gt;

&lt;p&gt;I decided that managed WordPress hosting was probably a good way to go. As there’s no server, OS or application stack for me to manage. Plus, they often come pre-optmised so I can do away with WP Rocket and Bunny CDN.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloudways
&lt;/h3&gt;

&lt;p&gt;My first attempt at managed WordPress hosting was &lt;a href="https://www.cloudways.com/" rel="noopener noreferrer"&gt;Cloudways&lt;/a&gt;, who are basically an intermediary between users and VPS providers, like Digital Ocean and Linode.&lt;/p&gt;

&lt;p&gt;They build a VPS and manage all the stack automatically. It’s a great service and lighthouse tests show that it’s gets pretty much perfect scores too. My performance score dropped from 100, to around 97. So still very happy with that.&lt;/p&gt;

&lt;p&gt;Because Cloudways servers are optmised out of the box, and use their free &lt;a href="https://en-gb.wordpress.org/plugins/breeze/" rel="noopener noreferrer"&gt;Breeze plugin&lt;/a&gt; for caching, I would no longer need a WP Rocket subscription. Having said that, they recommend a 2GB VPS, so their service would cost me $22/month.&lt;/p&gt;

&lt;p&gt;That’s more than double the price of my current VPS. So anything I would save by ditching WP Rocket would be off-set by the hosting charges. Therefore, in the long run I’d be around $100 &lt;strong&gt;worse&lt;/strong&gt; off every year:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line item&lt;/th&gt;
&lt;th&gt;Annual price ($)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloudways hosting&lt;/td&gt;
&lt;td&gt;$264.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yoast Premium&lt;/td&gt;
&lt;td&gt;$123&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newsletter Glue&lt;/td&gt;
&lt;td&gt;$76.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WP Rocket&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Updraft SFTP Plugin&lt;/td&gt;
&lt;td&gt;$16.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bunny CDN&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Annual total:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$491.50&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monthly total:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$40.96&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  EasyWP
&lt;/h3&gt;

&lt;p&gt;Cloudways was great, but too expensive. So next up I decided to try &lt;a href="https://www.shareasale.com/m-pr.cfm?merchantID=46483&amp;amp;userID=2420767&amp;amp;productID=964069415" rel="noopener noreferrer"&gt;EasyWP by Namecheap&lt;/a&gt;. I had used them in the past and seemed to remember them being pretty good.&lt;/p&gt;

&lt;p&gt;I signed up for the &lt;strong&gt;Turbo&lt;/strong&gt; account as the site said it had more resources, plus SSL and CDN services thrown in. All this for around $35/year (first year is discounted by 50% so full price is $70/year) – almost too good to be true!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TFn_ULA9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/09/easywp-pricing.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TFn_ULA9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/09/easywp-pricing.png" alt="EasyWP pricing" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If something looks too good to be true, it usually is.&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;A very wise person.&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was surprised that a free SSL certificated is touted as a selling point these days, with services like Let’s Encrypt being commonplace these days. Anyway, what I was really looking for here was the performance and CDN combination.&lt;/p&gt;

&lt;p&gt;I set everything up and migrated my site over to EasyWP using a temporary domain, but I had no option to claim my free SSL certificate. I contacted support, only to find that there was a prerequisite where the domain in use had to be managed by Namecheap.&lt;/p&gt;

&lt;p&gt;Namecheap is my domain registrar, but I use &lt;a href="https://www.cloudns.net/aff/id/74311/" rel="noopener noreferrer"&gt;ClouDNS&lt;/a&gt; for all my DNS services. So I begrudgingly changed the Name Servers back to Namecheap so I could setup the SSL certificate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limping along
&lt;/h3&gt;

&lt;p&gt;I could now claim my free SSL, but found that this would take &lt;em&gt;“a few hours”&lt;/em&gt; to process. Considering Let’s Encrypt takes less than a minute to provision, this surprised me. Anyway, 3 hours later I had my SSL working – time to get the CDN sorted.&lt;/p&gt;

&lt;p&gt;After reading Namecheap’s &lt;a href="https://www.namecheap.com/support/knowledgebase/article.aspx/10191/2251/how-to-setup-supersonic-cdn-with-easywp/" rel="noopener noreferrer"&gt;how to guide&lt;/a&gt; on setting up the CDN with EasyWP, it quickly became apparent than the CDN offering was a basic one that needed to be upgraded for anything over 50GB of traffic/month.&lt;/p&gt;

&lt;p&gt;This site uses way less than 50GB of traffic/month, so not the end of the world. But I felt like it was a poor show from Namecheap that their CDN offering was Billy basic.&lt;/p&gt;

&lt;p&gt;After setting it all up, I had issues with caching and not being able to clear it. I spoke to support and they manually cleared the cache for me, but they couldn’t fix the issue. So they logged a ticket with L2 to have the problem sorted long-term.&lt;/p&gt;

&lt;p&gt;Finally I was limping along, but all these little niggles left a bad taste in my mouth. I did a lighthouse test and it returned scores of mid-80s for performance, and my best practices score was somewhere in the high 70s.&lt;/p&gt;

&lt;p&gt;It seems the EasyWP caching isn’t as good as that of WP Rocket or Cloudways. So after all that work, my performance had dropped fairly significantly.&lt;/p&gt;

&lt;p&gt;The WordPress dashboard was where I &lt;strong&gt;really&lt;/strong&gt; noticed the reduced performance. On my current server and on Cloudways, the &lt;code&gt;wp-admin&lt;/code&gt; dashboard was snappy and responsive, but on EasyWP is felt bloated and lethargic for some reason.&lt;/p&gt;

&lt;p&gt;I had lost a fair amount of time, and saved little money. So I decided to ditch EasyWP too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What now?
&lt;/h2&gt;

&lt;p&gt;Well, I’m back on my original setup and nothing has changed. Performance is still great, but my fairly significant financial outlay remains.&lt;/p&gt;

&lt;p&gt;There’s a fair amount of time left on my various contracts with my hosting provider and plugins, so I can afford some time to think about what I’m going to do long-term. But at the moment, I feel like the best WordPress hosting solution for me is…&lt;em&gt;drumroll please&lt;/em&gt;… &lt;strong&gt;what I have now!&lt;/strong&gt; 🤦‍♂️&lt;/p&gt;

&lt;p&gt;To save some some cash, I don’t think I’ll renew my Yoast Premium subscription. I’ve used their free plugin for years, and wanted to contribute back to the project, but the only Premium feature I use are redirects which can be easily achieved using &lt;code&gt;.htaccess&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That’s a total saving of $123/year over what I have now. So it’s certainly something. I don’t know, this whole thing is a minefield; but I still have plenty of time to decide what I’m going to do with my WordPress hosting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the meantime, if you have any recommendations as to what I should do, please use the reply button below to send me an email.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
    </item>
    <item>
      <title>How To Restore The Default PiHole Block List</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Wed, 14 Jul 2021 21:55:50 +0000</pubDate>
      <link>https://dev.to/kevquirk/how-to-restore-the-default-pihole-block-list-29fg</link>
      <guid>https://dev.to/kevquirk/how-to-restore-the-default-pihole-block-list-29fg</guid>
      <description>&lt;p&gt;&lt;a href="https://pi-hole.net/" rel="noopener noreferrer"&gt;PiHole&lt;/a&gt; is awesome. I use it &lt;a href="https://kevq.uk/how-to-setup-pi-hole-on-a-synology-nas/" rel="noopener noreferrer"&gt;on my Synology via Docker&lt;/a&gt; and it’s been working great for years. But what if you get a little too trigger happy with the block list and end up with too many? In this post I’ll show you how to restore the default PiHole block list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Psst…&lt;/strong&gt; if you’re not interested in all my pre-waffle, click here to skip to the solution.&lt;/p&gt;

&lt;p&gt;The reason I’m writing this is because I’ve done this exact thing. I went bat shit crazy with PiHole block lists and ended up with over a quarter of a million domains blocked.&lt;/p&gt;

&lt;p&gt;That sounds great in principle, right? &lt;strong&gt;Woooh! No more ads!&lt;/strong&gt; Well, yeah, kinda. But it also had the undesired effect of constantly causing issues on my network.&lt;/p&gt;

&lt;p&gt;I was finding that I had to regularly disable PiHole to troubleshoot connectivity issues. Shock horror, 90% of the time my ridiculously large block lists were to blame.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why restore the default PiHole block list?
&lt;/h2&gt;

&lt;p&gt;I started using a number of additional PiHole block lists a few months ago, and since then I’ve noticed occasional connectivity issues when on my home network.&lt;/p&gt;

&lt;p&gt;However, I’ve been using PiHole for a couple of years now and never had any issues when using the standard block list (which still has over 80k domains at the time of writing this).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e3sPzkdC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pi-hole-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e3sPzkdC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pi-hole-dashboard.png" alt="My dashboard with the default PiHole blocklist enabled" width="800" height="500"&gt;&lt;/a&gt;My PiHole dashboard&lt;/p&gt;

&lt;p&gt;I decided it was time to ditch all the additional block list and use the default PiHole block list alone. Problem is, &lt;strong&gt;I had no idea which list was the default!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Which is where this post comes in…I did some research and worked out which is the default list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restoring the default PiHole block list
&lt;/h2&gt;

&lt;p&gt;The first thing you need to do, is login to your PiHole’s dashboard, then navigate to &lt;strong&gt;Group Management &amp;gt; Adlists&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once you’re in the Adlists page, you should see a list of all the adlists you have added to your PiHole. It will look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wlXmPdUA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pihole-adlists.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wlXmPdUA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pihole-adlists.png" alt="PiHole adlists" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you may have removed the default Adlist, or it may still be there, buried in the depths of your many block lists. &lt;strong&gt;The default PiHole block list is as follows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All you need to do is look for this in the list, and delete everything else. If you removed the default list, just re-add it by pasting the URL above into the &lt;code&gt;Address&lt;/code&gt; field on the Adlists page.&lt;/p&gt;

&lt;p&gt;I would also recommend adding a comment to the default PiHole block list so you know which is the main one in the future. Once you’re done, it should look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GpR60yLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pihole-default-block-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GpR60yLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/pihole-default-block-list.png" alt="Default block list" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final step is to update Gravity, which is the cumulative list of blocked domains. To do this, navigate to &lt;strong&gt;Tools &amp;gt; Update Gravity&lt;/strong&gt;. Then click on the &lt;code&gt;Update&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;PiHole should now parse the default block list and remove any domains that aren’t on it.&lt;/p&gt;

&lt;p&gt;That’s it, you’re done! Congratulations, you just restored the default PiHole block list. Not that difficult, is it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;I’m going to continue running the default PiHole block list on its own for a while to see if there continues to be connectivity issues on my network.&lt;/p&gt;

&lt;p&gt;Once I’m happy, I’ll probably add individual lists, one at a time, then re-test for a while. With a bit of luck, this will help me identify any problematic lists.&lt;/p&gt;

&lt;p&gt;There are tonnes of block lists out there, but if you want a list of additional block lists in all kinds of categories, check out &lt;a href="https://firebog.net/" rel="noopener noreferrer"&gt;The Firebog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are you using a million and one block lists with your PiHole? If so, are there any you would recommend?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>pihole</category>
      <category>privacy</category>
    </item>
    <item>
      <title>A Sombre Goodbye To Linux</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Sat, 10 Jul 2021 21:27:13 +0000</pubDate>
      <link>https://dev.to/kevquirk/a-sombre-goodbye-to-linux-1icd</link>
      <guid>https://dev.to/kevquirk/a-sombre-goodbye-to-linux-1icd</guid>
      <description>&lt;p&gt;I recently wrote about why I think &lt;a href="https://kevq.uk/is-windows-unstable-here-are-my-thoughts/" rel="noopener noreferrer"&gt;complaints about the stability of Windows&lt;/a&gt; are unfounded. Since then, I’ve actually said goodbye to Linux on all my machines and I now run Windows 10 exclusively. Here’s why…&lt;/p&gt;

&lt;p&gt;The TL;DR is that I became sick of the many little issues with Linux. I just want my OS to get out of the way so I can crack on and get shit done.&lt;/p&gt;

&lt;h2&gt;
  
  
  My frustrations with Linux
&lt;/h2&gt;

&lt;p&gt;I was running &lt;a href="https://kubuntu.org/" rel="noopener noreferrer"&gt;Kubuntu&lt;/a&gt; on both my laptop and my desktop, but I’ve used a number of other Linux distros over the years too. Ubuntu, UbuntuMATE, Xubuntu, Fedora, KDE Neon and many more.&lt;/p&gt;

&lt;p&gt;My biggest frustration with pretty much all of the distributions I had run was the sheer number of ways to install applications. I had some that were DEBs, others were Snaps, a couple of Flatpaks and an AppImage to finish it all off.&lt;/p&gt;

&lt;p&gt;I didn’t use the various mechanisms for installing software by choice. Either applications were only available on some of these platforms, or they had issues, so I had to defer to another way of installing.&lt;/p&gt;

&lt;p&gt;On Windows, whether it’s an EXE or an MSI, it’s all the same process. You download the package, click next &amp;gt; next &amp;gt; finish and you’re done. No issues, no fuss. Just done.&lt;/p&gt;

&lt;p&gt;I don’t have to waste time troubleshooting a package that isn’t integrating with the system properly, or looks like it’s straight out of 1995 because no theming is applied for some unknown reason.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RUR5qgj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/inkscape-no-theme-1220x657.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RUR5qgj_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/07/inkscape-no-theme-1220x657.png" alt="Inkscape with no theme applied" width="800" height="431"&gt;&lt;/a&gt;Example of Inkscape with no theming applied&lt;/p&gt;

&lt;p&gt;Sure, there’s no package manager in Windows, and their store is nothing short of atrocious. But I don’t use their store, and all the apps that I use on Windows have an update mechanism within them, so they don’t stagnate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time is precious
&lt;/h2&gt;

&lt;p&gt;I first started using Linux in 2010. Back then I had lots of free time to tinker with my system and learn new stuff. It was exciting. If I came across an issue, I could afford the time to troubleshoot and fix it.&lt;/p&gt;

&lt;p&gt;Fast-forward 11 years and things have changed dramatically. I now have a stressful job, a wife and 2 kids. My computers &lt;strong&gt;need&lt;/strong&gt; to just work. I don’t have the time to piss around with them.&lt;/p&gt;

&lt;p&gt;Let me give you a couple of scenarios that explain how thing can go today…&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1
&lt;/h3&gt;

&lt;p&gt;It’s Saturday afternoon. I’m about to go for a walk with my wife, kids and dog. I’m doing a bit of work and need some notes that I recorded on my phone using &lt;a href="https://standardnotes.com" rel="noopener noreferrer"&gt;Standard Notes&lt;/a&gt;. To save time flipping between mobile and desktop, I decide to quickly install the Standard Notes desktop app.&lt;/p&gt;

&lt;p&gt;I start with the Snap package. Once I run the application, I get a weird error message about the Ubuntu key-chain and local storage.&lt;/p&gt;

&lt;p&gt;I spend an hour or so troubleshooting the issue, admit defeat and log &lt;a href="https://github.com/standardnotes/desktop/issues/637" rel="noopener noreferrer"&gt;an issue on GitHub&lt;/a&gt;. I end up installing the AppImage to get around it, but now I’m having issues with launching the AppImage and having it integrate with my system.&lt;/p&gt;

&lt;p&gt;Another hour or so passes and I find that I need to install the &lt;code&gt;AppImage Launcher&lt;/code&gt; package to get it to work correctly on my system.&lt;/p&gt;

&lt;p&gt;Approximately 2.5 hours later I have Standard Notes installed and I’m good to go. It’s now too late to go for a walk as we will be having dinner soon. Afternoon with the family wasted. 😥&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 2
&lt;/h3&gt;

&lt;p&gt;Same thing, except this time I’m on Windows. I download and install the Standard Notes EXE. It works as expected and 2 minutes later I have the app working on my desktop.&lt;/p&gt;

&lt;p&gt;I finish my work and go and enjoy a lovely afternoon walking around the countryside with my family.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Big difference, huh?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Ultimately, I’d much rather be spending time with my family than wasting it troubleshooting issues. I bet right now you’re probably thinking something along the lines of…&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kev! This is a problem with the Standard Notes package, not Linux!&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Linux folk everywhere&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You’re absolutely right, Linux folk. But this scenario is by no means unique. By way of a quick list off the top of my head, here are a few of the I’ve had to work around while using Linux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Massive system tray icons for various applications.&lt;/li&gt;
&lt;li&gt;No theming on certain snap packages.&lt;/li&gt;
&lt;li&gt;Having to install certificates to get Citrix receiver working.&lt;/li&gt;
&lt;li&gt;Firefox crashing pretty much every time I open it.&lt;/li&gt;
&lt;li&gt;Spell check &lt;a href="https://github.com/typora/typora-issues/issues/3584" rel="noopener noreferrer"&gt;not working&lt;/a&gt; on Typora.&lt;/li&gt;
&lt;li&gt;Having to install a separate package for spell checking in Ghostwriter, once I realised I couldn’t get Typora working properly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, these may all be application issues, but they’re issues that simply don’t exist in Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy (or lack of)
&lt;/h2&gt;

&lt;p&gt;Yep, privacy is an issue now I’m using Windows 10. I’m aware of that, but I’d rather sacrifice some personal data and be able to spend precious time with my family, than be completely private and miss that time.&lt;/p&gt;

&lt;p&gt;Windows 10 can be made more private relatively easily. It will never be as private as a Linux distribution, and that’s regrettable, but for me the balance of getting shit done vs messing around with my systems is worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;I’m sure I’m going to get a lot of heated responses to this post. I get it, Linux &lt;em&gt;is&lt;/em&gt; better than Windows in a lot of ways. But, as much as I hate to admit it, Windows &lt;em&gt;is&lt;/em&gt; better than Linux in many ways too.&lt;/p&gt;

&lt;p&gt;I still run Linux on my servers, so it’s not like I’m completely ditching Linux. Lets be honest, there’s no comparison between Linux and anything else in the server space.&lt;/p&gt;

&lt;p&gt;I may come back to Linux at some point, and I’ll certainly try various distributions in VM/live environments whenever time permits. But for now, I’m a Windows guy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you replaced Linux with Windows for similar reasons? Or do you find Linux to be hands down the best OS out there? I’d love to hear your thoughts.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>windows</category>
    </item>
    <item>
      <title>Online Conversations &amp; Website Engagement</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Sat, 03 Jul 2021 12:33:53 +0000</pubDate>
      <link>https://dev.to/kevquirk/online-conversations-website-engagement-57j8</link>
      <guid>https://dev.to/kevquirk/online-conversations-website-engagement-57j8</guid>
      <description>&lt;p&gt;I was reading a post on online conversations &lt;a href="https://manuelmoreale.com/online-conversations" rel="noopener noreferrer"&gt;by Manu&lt;/a&gt; last night, and the whole thing resonated with me. So I wanted to jot down my thoughts about online conversations and why I think it’s broken.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ll keep saying it till the day I die, or until someone invents something better: &lt;em&gt;private conversations via email.&lt;/em&gt; If you care about discussing something with someone, like genuinely care, try contacting them directly, in private, via email.&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;Manu Moreale&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A couple of years ago, I removed all comments from this site. It’s a WordPress site, so enabling comments is trivial. However, I found that the vast majority of the comments I was getting were along the lines of this:&lt;/p&gt;

&lt;p&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%2Fuploads%2Farticles%2F86a0mxan4c7jehkq6j5n.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%2Fuploads%2Farticles%2F86a0mxan4c7jehkq6j5n.png" alt="Fake comment" width="594" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it wasn’t my pal &lt;em&gt;Some Internet Guy&lt;/em&gt; it was spam comments, usually about viagra, or sometimes trolls wishing me dead. Which is always nice. 😍&lt;/p&gt;

&lt;p&gt;Luckily for me &lt;a href="https://akismet.com/" rel="noopener noreferrer"&gt;Akismet&lt;/a&gt; caught most of the spam, but I still had to wade through &lt;em&gt;Some Internet Guy&lt;/em&gt; and his ilk’s useless comments on a daily basis.&lt;/p&gt;

&lt;h2&gt;
  
  
  I still wanted online conversations
&lt;/h2&gt;

&lt;p&gt;Problem was, despite all the useless comments, I still wanted the engagement from genuine readers, as that’s the main reason I write content. So I replaced the comment form with a simple button that said &lt;strong&gt;Reply via email&lt;/strong&gt; , which linked to my email address.&lt;/p&gt;

&lt;p&gt;You can still find that button at the bottom of this (and every other) post on this site!&lt;/p&gt;

&lt;p&gt;At first I wasn’t sure it would work. But a couple years on, I’m happy to report that it has. I’m sure I miss many useful comments, as a lot of people are less likely to send an email than write a comment. Mainly because there’s more involved in the latter, I think.&lt;/p&gt;

&lt;p&gt;But that’s precisely why it &lt;em&gt;has&lt;/em&gt; worked (I think). You see, this very small barrier of having to click a button, compose an email and send it &lt;strong&gt;just to me&lt;/strong&gt; means many don’t bother. Those that do aren’t looking for traffic to their site, like &lt;em&gt;Some Internet Guy&lt;/em&gt;. They’re genuinely interested in the subject of the post, and just want to discuss it further.&lt;/p&gt;

&lt;p&gt;I’ve had email conversations last weeks, and some people who have emailed me have kinda become friends off the back of it. I don’t think that would have happened if I was still using comments.&lt;/p&gt;

&lt;p&gt;I emailed Manu after reading his post, and we had a nice little conversation. He checked out my posts and we had a short chat about some stuff on this blog that he had thoughts on. It was a great connection, as are many of the engagements I have as a result of people emailing me.&lt;/p&gt;

&lt;p&gt;And don’t get me started on how much time it has saved me by not having to wade through useless comments every. Single. Day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;I’m really happy I decided to remove comments from this site. If you have comments on your site, and you’re having similar problems to me (or if you’re using the &lt;a href="https://kevq.uk/commento-the-privacy-respecting-commenting-system/" rel="noopener noreferrer"&gt;horrendous Disqus&lt;/a&gt;) maybe consider doing the same?&lt;/p&gt;

&lt;p&gt;I’m not saying it will definitely work for you, but it has for me, and it seems to have done the trick for Manu too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are you all in on comments on your site? Or do you have nothing at all? Please do let me know your thoughts using the — you guessed it — email button below. 😁&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>blogging</category>
      <category>opinion</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Chasing Visitors – The Web Analytics Rabbit Hole</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Fri, 25 Jun 2021 15:27:49 +0000</pubDate>
      <link>https://dev.to/kevquirk/chasing-visitors-the-web-analytics-rabbit-hole-24bf</link>
      <guid>https://dev.to/kevquirk/chasing-visitors-the-web-analytics-rabbit-hole-24bf</guid>
      <description>&lt;p&gt;When I check my web analytics the response is often frustration, or even mild anxiety. I’m in a perpetual cycle of thinking &lt;em&gt;it’s not enough!&lt;/em&gt; This obsession isn’t healthy, so what’s the point?&lt;/p&gt;

&lt;p&gt;Picture the scene – I publish a new post on my blog and share it on social media. Maybe even &lt;a href="https://kevq.uk/notes/why-lobste-rs-is-better-than-hacker-news/" rel="noopener noreferrer"&gt;Hacker News and Lobste.rs&lt;/a&gt; too. I leave things a few days, then check my analytics.&lt;/p&gt;

&lt;p&gt;The post did fairly well. It garnered a 1,000 or so visits and my site is averaging thousands of visits every month. Life is good.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sg-4SkgF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/plausible-stats-jan-2021.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sg-4SkgF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/plausible-stats-jan-2021.png" alt="Plausible analytics example stats" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then I read a post that’s akin to &lt;em&gt;“How my post went viral and I got 20,000 new subscribers in a week!”&lt;/em&gt; I know they shouldn’t, but these posts really deflate me.&lt;/p&gt;

&lt;p&gt;I start to ask myself why my post didn’t do better. Why did theirs do so well and my post only got 1,000 visits? Was it a bad post? Am I bad writer? Is the UX of my blog not up to scratch?&lt;/p&gt;

&lt;h2&gt;
  
  
  The web analytics rabbit hole
&lt;/h2&gt;

&lt;p&gt;At this point I head straight to my web analytics tool of choice, &lt;a href="https://plausible.io" rel="noopener noreferrer"&gt;Plausible&lt;/a&gt;, and start diving into my traffic. Instead of focussing on my successful posts, I immediately focus in on the posts that I feel aren’t doing well.&lt;/p&gt;

&lt;p&gt;I then start searching for ways of improving engagement, improving my writing, just &lt;em&gt;improving.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P5mjnsDh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/plausible-stats-list-jan-2021.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P5mjnsDh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/plausible-stats-list-jan-2021.png" alt="Web analytics page statistics" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fact of the matter is, 10,000 visits in a month would be a bad month for me. And those 1,000 visits to my post is a lot of people. &lt;strong&gt;That is successful!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I first started out, I wanted to get to 100 visits/month. Then it was 1,000. Then my approach flipped and I started looking at why my blog wasn’t performing as well as I wanted it to.&lt;/p&gt;

&lt;p&gt;But it was performing as well as I wanted it to!&lt;/p&gt;

&lt;p&gt;It’s the same story with &lt;a href="https://kevq.uk/newsletter/" rel="noopener noreferrer"&gt;my newsletter&lt;/a&gt;. It has around 700 subscribers and &lt;a href="https://kevq.uk/newsletter/meta-letter/meta-letter-13-unlucky-for-some/" rel="noopener noreferrer"&gt;the last issue&lt;/a&gt; had an open rate of approximately 37%. &lt;strong&gt;&lt;em&gt;That’s rubbish!&lt;/em&gt;&lt;/strong&gt; I thought. But the fact is, that’s really good, as the &lt;a href="https://mailchimp.com/resources/email-marketing-benchmarks/" rel="noopener noreferrer"&gt;average newsletter open rate is around 20%&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can I do?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kevq.uk/notes/why-i-have-a-blog/" rel="noopener noreferrer"&gt;I started this blog&lt;/a&gt; because I enjoy writing. If anyone reads my drivel, that’s a bonus. I need to remember that.&lt;/p&gt;

&lt;p&gt;So I’ve decided to go with the time tested mantra of &lt;em&gt;ignorance is bliss&lt;/em&gt;. My Plausible Analytics subscription was due to renew in July. I won’t be doing that, in fact, &lt;strong&gt;I’ve removed all analytics&lt;/strong&gt; from this site.&lt;/p&gt;

&lt;p&gt;My hope is that by doing this, I won’t have the data available to go down the web analytics rabbit hole, even if I want to.&lt;/p&gt;

&lt;p&gt;I must stress that I’m not unhappy with the service Plausible provides. They offer an amazing service that is a privacy respecting alternative to Google Analytics. The problem is me – I like numbers, but my compulsion with analytics isn’t healthy.&lt;/p&gt;

&lt;p&gt;I’m probably going to unsubscribe from the “grow your blog” blogs I read. Honestly, most of them are spammy and I use very little of the advice they produce.&lt;/p&gt;

&lt;p&gt;I’ll probably write an update at some point to let you folks know how I’m getting on without my precious analytics. My hope is that I’m more focussed on writing content and engaging with those people who &lt;a href="https://kevq.uk/contact/" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt; than worrying about whether I’m getting enough readers. I get more than enough readers!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you have web analytics on your site? Please do let me know your thoughts on the topic – I’d love to hear other people’s opinion on this one.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>blogging</category>
      <category>analytics</category>
      <category>web</category>
    </item>
    <item>
      <title>Building A Self-Hosted Journal</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Sat, 19 Jun 2021 15:45:56 +0000</pubDate>
      <link>https://dev.to/kevquirk/building-a-self-hosted-journal-1f0h</link>
      <guid>https://dev.to/kevquirk/building-a-self-hosted-journal-1f0h</guid>
      <description>&lt;p&gt;My wife keeps a journal, and I’ve been thinking about doing the same. Being the nerd that I am, I wanted something techie, so I built a self-hosted journal.&lt;/p&gt;

&lt;p&gt;The idea of keeping a journal interests me. My wife says she finds it cathartic to spend a few minutes at the end of each day reflecting and writing her thoughts down.&lt;/p&gt;

&lt;p&gt;But having my innermost thoughts in a book that anyone can pickup and read concerns me. It’s not that I have secrets at such (even though &lt;a href="https://kevq.uk/privacy-vs-i-have-nothing-to-hide/" rel="noopener noreferrer"&gt;we all have something to hide&lt;/a&gt;), but I feel that if it is trivial to pickup and read the book, I may subconsciously censor what I write.&lt;/p&gt;

&lt;p&gt;Goodness knows my grey matter needs some organisation, so I wanted to plough on start journaling, albeit without a book.&lt;/p&gt;

&lt;p&gt;I needed a technical solution…&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical journaling options
&lt;/h2&gt;

&lt;p&gt;I recently heard about Automattic (the company that owns WordPress among other things) &lt;a href="https://dayoneapp.com/blog/day-one-at-automattic" rel="noopener noreferrer"&gt;acquiring Day One&lt;/a&gt;. I didn’t know anything about Day One, but assumed it would allow me to sync my journal anywhere.&lt;/p&gt;

&lt;p&gt;Unfortunately that’s not the case. All I could have done with Day One was sync to their proprietary platform. If I’m not prepared to have a book in my home with my grey matter drivel inside it, there’s zero chance I’m going to store it on a random server somewhere.&lt;/p&gt;

&lt;p&gt;There were other options, but they were all similar to Day One in terms of storing my journal. They were a non-starter too.&lt;/p&gt;

&lt;p&gt;I needed a self-hosted journal…&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosted journal options
&lt;/h2&gt;

&lt;p&gt;A quick search showed some reasonable options for my journal, &lt;a href="https://github.com/inoda/journal" rel="noopener noreferrer"&gt;this one&lt;/a&gt; being the most promising. Problem is, I would have needed to faff around with infrastructure to run my journal on.&lt;/p&gt;

&lt;p&gt;I didn’t want to spin a dedicated server just for my journal, and even though I can use Docker on my Synology, &lt;a href="https://kevq.uk/how-to-setup-pi-hole-on-a-synology-nas/" rel="noopener noreferrer"&gt;like I did with Pi-Hole&lt;/a&gt;, I’m not familiar enough with it to host something like a journal.&lt;/p&gt;

&lt;p&gt;So I went with what I know best… &lt;strong&gt;WordPress!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I can easily run WordPress on my Synology and with the WordPress app on my phone/tablet, it would be trivial to add posts every day. Originally I wasn’t going to expose my journal to the Internet, but if I wanted to use the WordPress app, I needed to. Plus, being able to add entries to my journal from anywhere is really helpful.&lt;/p&gt;

&lt;p&gt;Instead of exposing the entire thing to the Internet, I installed a couple of plugins that lock down my self-hosted journal and make it work how I needed it to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Protecting my journal
&lt;/h3&gt;

&lt;p&gt;First thing I needed was to password protect my journal. That’s easy, I installed and activated the &lt;a href="https://en-gb.wordpress.org/plugins/wp-force-login/" rel="noopener noreferrer"&gt;Force Login plugin&lt;/a&gt; and &lt;em&gt;hey presto!&lt;/em&gt; My journal required a login to see any of the site. To add an extra layer of security, I added the &lt;a href="https://en-gb.wordpress.org/plugins/two-factor-authentication/" rel="noopener noreferrer"&gt;Two Factor Authentication plugin&lt;/a&gt; to, you know, add multi-factor auth to my journal (&lt;a href="https://kevq.uk/what-is-two-factor-authentication/" rel="noopener noreferrer"&gt;that’s very important&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I also wanted to change the login screen slightly, so I installed the &lt;a href="https://en-gb.wordpress.org/plugins/colorlib-login-customizer/" rel="noopener noreferrer"&gt;ColorLib Login Customiser&lt;/a&gt; so I could make some tweaks to the login page. After 5 minutes playing around, here’s what the homepage (or any page if you’re not logged in) looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---0Xox-Z---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-login.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---0Xox-Z---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-login.png" alt="My journal login screen" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My self-hosted journal theme
&lt;/h2&gt;

&lt;p&gt;I wanted something really sparse for the actual theme of the site. My journal doesn’t need pages, contact forms, comments or any of that jazz. I just need a list of journal entries and a simple way of adding more, should I want to do so via my browser.&lt;/p&gt;

&lt;p&gt;I have a &lt;a href="https://generatepress.com/" rel="noopener noreferrer"&gt;GeneratePress Pro&lt;/a&gt; lifetime license, so I went with the GeneratePress theme. That’s what the theme on this site uses, so I know it’s lightweight and easy to customise. Lucky for me this simple, self-hosted journal didn’t need much customising.&lt;/p&gt;

&lt;p&gt;After 30 minutes or so, I had something I was relatively happy with. It’s just a simple white site with grey &lt;code&gt;serif&lt;/code&gt; text. All nice and simple:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ibRpo_F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-homepage-1220x659.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ibRpo_F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-homepage-1220x659.png" alt="My self-hosted journal's theme" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SoP_1nyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-homepage-dark.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SoP_1nyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/journal-homepage-dark.png" alt="Dark version of my journal theme" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The navigation menu has a link to the home page, and a button to add a new entry. I also installed the &lt;a href="https://en-gb.wordpress.org/plugins/hide-admin-bar/" rel="noopener noreferrer"&gt;Hide Admin Bar plugin&lt;/a&gt; as I don’t need the WP admin bar on the front end.&lt;/p&gt;

&lt;p&gt;That’s it, I was done. In total it took me around 40 minutes to go from absolutely nothing to a site that was ready to accept my brain farts.&lt;/p&gt;

&lt;h2&gt;
  
  
  A week in…
&lt;/h2&gt;

&lt;p&gt;I’ve been writing my journal for around a week now and the process is working well. I’ve mostly written entries using the WordPress app on my iPad during the evening, but there have been a couple of occasions where I’ve written entries from my web browser. So it’s working well.&lt;/p&gt;

&lt;p&gt;I don’t think I will need to fiddle with the theme as my journal won’t have any visitors, except me. It’s more a way to accept content, rather than consuming it. As long as the reading experience is pretty good and content-focussed, that’s all I need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;Now you may think I’m mad putting my journal online, when I was concerned about it being in a book in my house. What if my site gets hacked? Honestly, I don’t think it will get hacked. WordPress is very secure if you keep it updated and take some simple precautions. The case for WordPress is very compelling &lt;a href="https://kevq.uk/the-case-for-wordpress/" rel="noopener noreferrer"&gt;in my opinion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I could have gone with markdown files, or a note taking app like the brilliant &lt;a href="https://standardnotes.org/" rel="noopener noreferrer"&gt;Standard Notes&lt;/a&gt;. But I wanted something that was dedicated to the job of taking my journal entries and displaying them. Shoehorning them into a note taking app didn’t feel right.&lt;/p&gt;

&lt;p&gt;Markdown files would have probably worked, but adding images to journal entries would have proven difficult from a mobile device. I needed the process to be really simple, or I know I would be less likely to stick to the habit of writing my journal.&lt;/p&gt;

&lt;p&gt;All in all, I’m really happy with my little self-hosted journal. I think I can call this little project a success.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you write a journal? If so, I’d love to hear about what platform you use for writing yours.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kevq.uk/building-a-self-hosted-journal/" rel="noopener noreferrer"&gt;Building A Self-Hosted Journal&lt;/a&gt; is original content by &lt;a href="https://kevq.uk" rel="noopener noreferrer"&gt;Kev Quirk&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>thoughts</category>
      <category>web</category>
    </item>
    <item>
      <title>Internet Cold Callers &amp; Their Link Sharing Emails</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Wed, 16 Jun 2021 13:54:22 +0000</pubDate>
      <link>https://dev.to/kevquirk/internet-cold-callers-their-link-sharing-emails-2m5b</link>
      <guid>https://dev.to/kevquirk/internet-cold-callers-their-link-sharing-emails-2m5b</guid>
      <description>&lt;p&gt;I regularly get emails from site owners asking me to link share with a post on their site. But one link sharing request I got recently was a doozey…&lt;/p&gt;

&lt;p&gt;I received an email from the “Chief Editor” at WPCity (wpcity[.]com) asking me if I’d be interested in sharing a link to a post on their site within my &lt;a href="https://kevq.uk/how-to-add-a-custom-colour-palette-to-the-gutenberg-editor/" rel="noopener noreferrer"&gt;Gutenberg custom colour palette post&lt;/a&gt;. The email said the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4RlFmXzO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/link-share-email-from-jarrod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4RlFmXzO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/link-share-email-from-jarrod.png" alt="Link share email from Jarrod" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My link sharing reply
&lt;/h2&gt;

&lt;p&gt;Now, this kind of email grinds my gears at the best of times, but this one took the biscuit. Mainly because the author has not only bothered to put the most basic of info in there, but also tried to fob me off with adding a link to my site in some random URL as a thank you.&lt;/p&gt;

&lt;p&gt;I’m mean, c’mon! I don’t expect him to have researched my life story, &lt;strong&gt;but at least use my bloody name!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most of the time I ignore these emails and move on, but this time around was different. I click on the reply button as fast as my index finger will allow, and hit our mate Jarrod up with a response to his “kind” request. Here’s what I said:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wubAfb4c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/my-reply-to-jarrod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wubAfb4c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/06/my-reply-to-jarrod.png" alt="My reply to Jarrod" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It’s a one-way street
&lt;/h2&gt;

&lt;p&gt;A couple of weeks ago I asked a question on the &lt;a href="https://bloggingfordevs.com/" rel="noopener noreferrer"&gt;Blogging for Devs Community&lt;/a&gt; about responding to these kind of queries. There was some good discussion on there (sorry it’s a private community, so I can’t share the link – &lt;strong&gt;you should join though&lt;/strong&gt; ) which centred around this all being a one-way street.&lt;/p&gt;

&lt;p&gt;You see, it kinda goes like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Person A (in this case our pal Jarrod) reaches out to the site owner of a site that usually has more presence than theirs, asking for a link to be added to their site.&lt;/li&gt;
&lt;li&gt;As a thank you, Person A will share your link on their social media channels which usually adds little value.&lt;/li&gt;
&lt;li&gt;Person A gets a link on a site that has more impact, thus improving the reputation of their site in Google’s eyes.&lt;/li&gt;
&lt;li&gt;Person B gets absolutely nothing from the transaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now this isn’t always the case, of course. There are times where sharing links with Internet compadres makes sense. These can be mutually beneficial; but like I said at the top of this post, I receive multiple emails similar to Jarrod’s &lt;strong&gt;every day&lt;/strong&gt;. Of all those emails, there have only been a couple of occasions that I’ve felt there would be anything in it for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;So my amigo Jarrod hasn’t bothered to respond to my email (shock horror). I think I’ll continue to go about my business and not worry too much about him.&lt;/p&gt;

&lt;p&gt;If you’re an internet compadre and feel the need to reach out to other site owners requesting a backlink, here’s some &lt;strong&gt;Quirky Top Tips™&lt;/strong&gt; :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do some research on the site owner and, you know, &lt;strong&gt;use their name.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Make sure your link is in the same field as they are, and that you can actually add value to them in some way too.&lt;/li&gt;
&lt;li&gt;Don’t try and scam them out of a backlink by offering up an obvious spammy domain. 🤣&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you’re on the flip side of that coin, or are relatively new to blogging, you’re likely to start seeing these kind of emails hit your inbox at some point. So as word from the &lt;del&gt;not so&lt;/del&gt; wise – just be careful as they’re unlikely to benefit you all that much. Plus, if you get it wrong it can seriously hurt your search rankings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have ever had a good experience after receiving one of these emails, I’d love to hear about it&lt;/strong&gt;. &lt;strong&gt;Use the button below to get in touch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kevq.uk/internet-cold-callers-their-link-sharing-emails/" rel="noopener noreferrer"&gt;Internet Cold Callers &amp;amp; Their Link Sharing Emails&lt;/a&gt; is original content by &lt;a href="https://kevq.uk" rel="noopener noreferrer"&gt;Kev Quirk&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blogging</category>
      <category>opinion</category>
      <category>web</category>
    </item>
    <item>
      <title>Is Windows Unstable? Here Are My Thoughts</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Thu, 20 May 2021 15:15:20 +0000</pubDate>
      <link>https://dev.to/kevquirk/is-windows-unstable-here-are-my-thoughts-1aem</link>
      <guid>https://dev.to/kevquirk/is-windows-unstable-here-are-my-thoughts-1aem</guid>
      <description>&lt;p&gt;I hear lots of people in the Linux community say that Windows is really unstable, but how unstable is it really? Here’s my opinion on the matter…&lt;/p&gt;

&lt;p&gt;I asked the community over on &lt;a href="https://fosstodon.org" rel="noopener noreferrer"&gt;Fosstodon&lt;/a&gt; what they thought about the stability of Windows. I was expecting a lot of responses, but goodness me, there were LOADS of them! You can &lt;a href="https://fosstodon.org/@kev/106230198389675398" rel="noopener noreferrer"&gt;read the entire thread here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OTTiwqIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/windows-stability-toot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OTTiwqIT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/windows-stability-toot.png" alt="Windows stability toot" width="578" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though there were a tonne of responses, &lt;strong&gt;most&lt;/strong&gt; of them fell into one of the following issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Blue screen of death (BSOD)&lt;/li&gt;
&lt;li&gt;Updates randomly rebooting the machine&lt;/li&gt;
&lt;li&gt;Poor performance&lt;/li&gt;
&lt;li&gt;Bad &lt;a href="https://kevq.uk/category/privacy" rel="noopener noreferrer"&gt;privacy&lt;/a&gt; practices&lt;/li&gt;
&lt;li&gt;Bundled software&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some of these I agree with, but not all of them. A few of them don’t actually relate to the stability of Windows at all. So I wanted to spend a bit of time writing out my thoughts on whether Windows is actually stable or not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Windows &lt;em&gt;actually&lt;/em&gt; unstable?
&lt;/h2&gt;

&lt;p&gt;So looking at those 5 buckets again, it’s only really BSOD and the updates that pertain to the stability of Windows, &lt;strong&gt;in my opinion&lt;/strong&gt;. Yes, the others are problems, but they don’t affect the stability of the OS.&lt;/p&gt;

&lt;p&gt;Personally, I think the feedback around updates rebooting the machine automatically and BSOD is quite outdated. Probably as a result of many of the people providing feedback being Linux users for a long time. Or, dare I say it, a certain level of bandwagonsim maybe?&lt;/p&gt;

&lt;h3&gt;
  
  
  Blue screen of death
&lt;/h3&gt;

&lt;p&gt;This is purely anecdotal, as I can only draw on my own experience, &lt;strong&gt;but I don’t remember the last time I saw a Windows 10 BSOD.&lt;/strong&gt; I have a Windows 10 installation on my desktop computer, and my Wife’s laptop runs Windows 10 too. I’ve never seen either of them BSOD. &lt;strong&gt;Not a single time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Further, I also have Windows 10 on my work laptop, and my work virtual desktop. Plus, all of the machines in work run Windows 10 too. There’s hundreds of them in my office and I have &lt;strong&gt;never&lt;/strong&gt; seen a BSOD on anyone’s machine. I’ve never even heard someone complain about it.&lt;/p&gt;

&lt;p&gt;Surely if the BSOD was as prevalent as the Linux community makes out, we would hear Windows users shouting about it at least some of the time?&lt;/p&gt;

&lt;h3&gt;
  
  
  Updates causing a reboot
&lt;/h3&gt;

&lt;p&gt;Again, I’ve simply not experienced this. Now, back in the Windows 2000/XP days, yeah I think we all experienced this. However, for &lt;strong&gt;many&lt;/strong&gt; years now, I’ve not seen this happen.&lt;/p&gt;

&lt;p&gt;The user experience I’ve had is a notification to say that there are updates pending, then a little orange bubble on the shut down icon to remind me that I need to reboot to install updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nucCGawA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/windows-update-notification.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nucCGawA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/windows-update-notification.jpg" alt="Windows update notification" width="650" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, if this was a common as the Linux community makes out, how would anyone on Windows get any work done?&lt;/p&gt;

&lt;h3&gt;
  
  
  Poor performance
&lt;/h3&gt;

&lt;p&gt;Let me say this first – poor performance doesn’t mean that Windows is unstable. That aside, I don’t think Windows 10 actually performs poorly.&lt;/p&gt;

&lt;p&gt;I’m in the privileged position to have a &lt;a href="https://kevq.uk/upgrading-my-desktop-pc/" rel="noopener noreferrer"&gt;relatively powerful desktop&lt;/a&gt;, but I have to say I don’t notice any performance difference between Linux (I’m currently running Kubuntu 20.04) and Windows 10.&lt;/p&gt;

&lt;p&gt;Windows 10 is certainly more RAM hungry than Linux though. For example, I’m currently running at around 8GB RAM used, whereas on Linux, running similar applications is around 6GB RAM.&lt;/p&gt;

&lt;p&gt;But using more RAM doesn’t equate to poor performance unless you’re actually running out of RAM. I have 32GB RAM on my desktop, so I’m good with 8GB RAM being used. Overall, Windows performs just as well as Linux for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bad privacy &amp;amp; bundled software
&lt;/h3&gt;

&lt;p&gt;While I agree with this wholeheartedly, once again it doesn’t equate to instability in Windows. There are &lt;a href="https://pixelprivacy.com/resources/windows-privacy-settings/" rel="noopener noreferrer"&gt;things you can do to make Windows 10 more private&lt;/a&gt;, and I &lt;strong&gt;strongly&lt;/strong&gt; recommend you do them if you’re running Windows 10.&lt;/p&gt;

&lt;p&gt;Unfortunately, there’s no way I’ve found to get rid of all the rubbish software that Microsoft bundle in, other than perusing the add/remove programs screen after the OS has been installed.&lt;/p&gt;

&lt;p&gt;Very annoying.&lt;/p&gt;

&lt;p&gt;Linux isn’t innocent of this though either. A lot of distributions bundle a number of software applications that I don’t use. Luckily for me though, the Ubuntu devs have solved this for me by offering a minimal install option.&lt;/p&gt;

&lt;p&gt;If only Microsoft did the same…&lt;/p&gt;

&lt;h2&gt;
  
  
  I don’t think Windows is unstable
&lt;/h2&gt;

&lt;p&gt;Yes, Windows has its problems. But in my experience (and I must stress again – this is all based on just my own experience) Windows 10 is &lt;strong&gt;not&lt;/strong&gt; unstable.&lt;/p&gt;

&lt;p&gt;In fact, I would go one further and say that Windows 10 is actually a really good operating system. Once you’ve sorted the privacy concerns and uninstalled all the junk.&lt;/p&gt;

&lt;p&gt;I use Windows 10 on my desktop 90% of the time now, mainly because I can’t connect to my corporate network in Linux. Because of this, I’ve built a pretty solid workflow in Windows 10 and, much like Linux, it just gets out of my way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kDmDOpmV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/my-windows-10-desktop-1220x687.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kDmDOpmV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/05/my-windows-10-desktop-1220x687.png" alt="My Windows 10 desktop" width="800" height="450"&gt;&lt;/a&gt;My Windows 10 desktop&lt;/p&gt;

&lt;p&gt;Also, Windows 10 is &lt;a href="https://www.theverge.com/2015/5/7/8568473/windows-10-last-version-of-windows" rel="noopener noreferrer"&gt;pretty much a rolling release&lt;/a&gt;, so I’m unlikely to need to reinstall any time soon. Bearing all this in mind, I’m seriously thinking about ditching the Kubuntu 20.04 installation from my desktop and just having Windows 10. I will continue to use Linux on my trusty ThinkPad, however.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you ditched Linux in favour of Windows? Do you think Windows is unstable? I’d love to hear your thoughts&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>opinion</category>
      <category>windows</category>
    </item>
    <item>
      <title>What’s The Difference Between Padding And Margin?</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Wed, 07 Apr 2021 15:19:12 +0000</pubDate>
      <link>https://dev.to/kevquirk/what-s-the-difference-between-padding-and-margin-ie1</link>
      <guid>https://dev.to/kevquirk/what-s-the-difference-between-padding-and-margin-ie1</guid>
      <description>&lt;p&gt;The difference between padding and margin is a bit of a quandary for CSS newcomers. This post explains the difference between them.&lt;/p&gt;

&lt;p&gt;If you’re into web design, &lt;a href="https://kev.uk/category/web" rel="noopener noreferrer"&gt;like me&lt;/a&gt;, then you will have likely wanted to increase or decrease the spacing between elements on a page. But should you use &lt;code&gt;padding&lt;/code&gt; or &lt;code&gt;margin&lt;/code&gt;? Actually, what’s the difference between them?&lt;/p&gt;

&lt;p&gt;I’ve had this post in my list of drafts for some time now, because I struggled with this too when I first started out. Someone asked this very question on &lt;a href="https://fosstodon.org" rel="noopener noreferrer"&gt;Fosstodon&lt;/a&gt; recently, so I thought it was a good time to finally write this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difference between padding and margin
&lt;/h2&gt;

&lt;p&gt;To best explain the differences between padding and margin, I’m going to use a fake navigation menu. I’m using a nav menu as they tent to need both padding and margin, especially if you want to make the menu items look like buttons.&lt;/p&gt;

&lt;p&gt;So here’s what the menu looks like by default. Not much of an actual menu, but rather an ugly string of text instead, right? That’s where our padding and margin comes in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pdsRBaXs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/no-padding-no-margin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pdsRBaXs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/no-padding-no-margin.png" alt="Menu with no padding or margin" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is padding?
&lt;/h3&gt;

&lt;p&gt;To demonstrate padding, let’s start by adding a red dotted border around each menu item, and a yellow background:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gRItqH44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/no-padding-no-margin-with-bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gRItqH44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/no-padding-no-margin-with-bg.png" alt="Menu with no padding or margin, but with a background" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next we’re going to add some padding to each menu item. If we look at each item, padding would be the space &lt;strong&gt;inside&lt;/strong&gt; the red dotted border. So by adding padding, we’re basically making the inside of the box bigger.&lt;/p&gt;

&lt;p&gt;Because padding is applied inside the box and the box has a yellow background, the addition of padding makes the yellow background larger. Here’s what our menu looks like with some padding added:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VOL3ZKcO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/with-padding.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VOL3ZKcO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/with-padding.png" alt="Menu with padding added" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is margin?
&lt;/h3&gt;

&lt;p&gt;We’ve added padding and our yellow boxes have increase in size, but the space between our boxes is still tiny and it looks weird. That’s where margin comes in.&lt;/p&gt;

&lt;p&gt;So if padding is the space &lt;strong&gt;inside&lt;/strong&gt; our box, margin is the space &lt;strong&gt;outside&lt;/strong&gt; of it. Our menu items look a bit like buttons now, so let’s add some margin to increase the spacing between each of the “buttons”:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JZbydIMH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/with-margin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JZbydIMH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/04/with-margin.png" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we’ve added both padding and margins, things look a lot more like a traditional navigation menu. It’s a really ugly menu, but it’s looks like a menu nonetheless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where can padding and margins be applied?
&lt;/h2&gt;

&lt;p&gt;Both padding and margin can be added to the top, bottom, left and right of an element and they can be expressed using a number of units of measure. Some people like &lt;code&gt;px&lt;/code&gt;, others like &lt;code&gt;em&lt;/code&gt;. I personally like &lt;code&gt;rem&lt;/code&gt; as it’s a dynamic measurement that is based off of the font in use. Here’s some examples of margin and padding in use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nav a {
  padding-top: .5rem;
  padding-bottom: .5rem;
  padding-left: 1rem;
  padding-right: 1rem;
}

nav a {
  margin-right: 1rem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take a look at the &lt;code&gt;padding&lt;/code&gt; in CSS above. Four lines of CSS to add padding to all 4 sides of an element is pretty inefficient, right? Lucky for us there’s a short hand way of doing it, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nav a {
  padding: 1rem .5rem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet of shorthand CSS tells your browser to apply &lt;code&gt;1rem&lt;/code&gt; of padding to the top &lt;strong&gt;and&lt;/strong&gt; bottom of the element, as well as &lt;code&gt;.5rem&lt;/code&gt; of padding on the left &lt;strong&gt;and&lt;/strong&gt; right. If you want to use a single line, but set different padding on every side, you can do so like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nav a {
  padding: 1rem .5rem 0 2rem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The padding declarations start at the top side of the element and work their way around clockwise. So the code above is adding &lt;code&gt;1rem&lt;/code&gt; to the top, &lt;code&gt;.5rem&lt;/code&gt; on the right, nothing on the bottom and &lt;code&gt;2rem&lt;/code&gt; on the left. You can use the same methods with margin too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it into practice
&lt;/h2&gt;

&lt;p&gt;If you want to have a play around with padding and margin on my fake navigation menu, feel free to play around with a CodePen I created. You can &lt;a href="https://codepen.io/kevquirk/pen/eYgGgzL" rel="noopener noreferrer"&gt;edit it here&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Hopefully this post has helped you to not only identify the differences between padding and margin, but also given you some practical tips on how to implement it into your own CSS stylesheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you did find this post useful, please do &lt;a href="https://kevq.uk/contact/" rel="noopener noreferrer"&gt;let me know&lt;/a&gt; and I’ll start doing more little snippets like this.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to see more content like this, give me a nudge &lt;a href="https://twitter.com/kevquirk" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How To Speed Up WordPress</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Wed, 17 Mar 2021 15:40:00 +0000</pubDate>
      <link>https://dev.to/kevquirk/how-to-speed-up-wordpress-28p3</link>
      <guid>https://dev.to/kevquirk/how-to-speed-up-wordpress-28p3</guid>
      <description>&lt;p&gt;WordPress has a reputation for being really slow, but that isn’t true. This post talks about how I speed up my WordPress site to get a perfect 100 on Google’s &lt;a href="https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fkevq.uk&amp;amp;tab=mobile" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt; &amp;amp; &lt;a href="https://lighthouse-dot-webdotdevsite.appspot.com//lh/html?url=https%3A%2F%2Fkevq.uk" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; speed metrics.&lt;/p&gt;

&lt;p&gt;Honestly, there no magic involved here. Speeding up a WordPress site is &lt;strong&gt;really&lt;/strong&gt; simple, it just requires a little bit of forethought and a few quid invested from your wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is WordPress slow?
&lt;/h2&gt;

&lt;p&gt;Before we look at ways to speed up WordPress, it’s important to understand the problem we’re trying to fix. The fact of the matter is, &lt;strong&gt;WordPress is not inherently slow&lt;/strong&gt; ; while slowness can come from multiple sources, it’s usually caused by one (or both) of the following issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rubbish hosting.&lt;/li&gt;
&lt;li&gt;Bad code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s really all it boils down to, folks. If you’re hosting your site with a shitty shared host, like BlueHost or HostGator, then you’re going to have problems.&lt;/p&gt;

&lt;p&gt;Conversely, if you have bundled 20+ plugins into your WordPress site so that it does everything except cook your breakfast, then again, you’re going to have performance problems.&lt;/p&gt;

&lt;p&gt;Same goes for themes. If you have a theme that tries to cater for every possible design permutation possible, there’s going to be a tonne of wasted code you’re not using.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HTo6v3gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/be-wp-theme-variations-1220x602.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HTo6v3gx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/be-wp-theme-variations-1220x602.png" alt="A typical " width="800" height="395"&gt;&lt;/a&gt;A typical “multi-purpose” WordPress theme&lt;/p&gt;

&lt;h2&gt;
  
  
  How fast should a site be?
&lt;/h2&gt;

&lt;p&gt;It’s all well and good talking about speeding up WordPress, but what constitutes a fast site? Is a 10 second load time ok? What about 5 seconds? That’s pretty quick, right? 3 seconds? Now we’re talking, surely?&lt;/p&gt;

&lt;p&gt;Well, some clever boffins did some research and established that &lt;strong&gt;if your site takes more than 3 seconds to load, 57% of visitors will leave&lt;/strong&gt; before it’s done loading (&lt;a href="https://www.hostingmanual.net/3-seconds-how-website-speed-impacts-visitors-sales/" rel="noopener noreferrer"&gt;source&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So the answer is &lt;strong&gt;a MAXIMUM of 3 seconds&lt;/strong&gt; , but make it as quick as possible. For example, &lt;a href="https://kevq.uk/the-wonderful-world-of-wordpress-wizardry-for-working-with-websites/" rel="noopener noreferrer"&gt;this site is running WordPress&lt;/a&gt; and &lt;a href="https://gtmetrix.com/reports/kevq.uk/R6G9CMSB/" rel="noopener noreferrer"&gt;according to GTMetrix&lt;/a&gt; it loads in 0.6 seconds. I’m happy with that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speeding up WordPress
&lt;/h2&gt;

&lt;p&gt;So now we have an idea of what causes WordPress to be slow, let’s look at some solutions, shall we? My recommendations for speeding up a WordPress site are 7 fold:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose a high quality host.&lt;/li&gt;
&lt;li&gt;Pick a theme that doesn’t try to do everything.&lt;/li&gt;
&lt;li&gt;Be picky with the plugins you install.&lt;/li&gt;
&lt;li&gt;Cache all the things.&lt;/li&gt;
&lt;li&gt;Use a Content Delivery Network (CDN).&lt;/li&gt;
&lt;li&gt;Forget web fonts.&lt;/li&gt;
&lt;li&gt;Optimise your images.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. High quality hosting
&lt;/h3&gt;

&lt;p&gt;As I mentioned earlier, $5/month shared hosting providers are utterly useless. I can’t stress this enough, folks. &lt;strong&gt;DO NOT&lt;/strong&gt;  &lt;strong&gt;USE SHARED HOSTING&lt;/strong&gt;. They’re generally over-subscribed – meaning too many customers share a single server – which directly impacts the performance of all sites using that server.&lt;/p&gt;

&lt;p&gt;Instead, get a Virtual Private Server (VPS). These are servers that are much more powerful than shared hosting because they have a minimum guaranteed amount of resources that no-one else can hog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ionos.co.uk/servers/vps?ac=OM.UK.UKf11K357003T7073a&amp;amp;kwk=634887631" rel="noopener noreferrer"&gt;I personally recommend Ionos&lt;/a&gt; which is who I use to host this website. What I love about Ionos is that they offer a free &lt;a href="https://www.plesk.com/" rel="noopener noreferrer"&gt;Plesk&lt;/a&gt; license with all their VPS packages, so it’s just as easy to manage as one of those shitty shared hosts running cPanel.&lt;/p&gt;

&lt;p&gt;I’m using the Medium VPS package from Ionos, which costs just £6/month (~$8.50/month). Considering that BlueHosts basic shared hosting package is £6.44/month ($9/month), the Ionos VPS is actually a lot more power for less money.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Consider your theme
&lt;/h3&gt;

&lt;p&gt;I’m going to keep this high level as there are literally thousands of themes out there that you can use. If you’re running a simple blog like me, you probably don’t need a great deal of functionality, so is it worth buying an all-singing, all-dancing theme? Probably not.&lt;/p&gt;

&lt;p&gt;I run a slightly customised version of WordPress’ default &lt;a href="https://kevq.uk/a-child-of-twenty-twenty-one/" rel="noopener noreferrer"&gt;Twenty Twenty-One theme&lt;/a&gt;. It’s simple, looks good and doesn’t have any extra functionality that I don’t need.&lt;/p&gt;

&lt;p&gt;The best advice I can give you is to stay away from page builders and “multi-purpose” themes. They try to cater for too many uses and end up being incredibly bloated as a result.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Be picky with plugins
&lt;/h3&gt;

&lt;p&gt;I have 11 plugins on this site, all of which add something that I need for this site to function. For example, my plugins add functionality like &lt;a href="https://kevq.uk/what-is-two-factor-authentication/" rel="noopener noreferrer"&gt;2 factor authentication&lt;/a&gt;, backups and advanced SEO features.&lt;/p&gt;

&lt;p&gt;I &lt;strong&gt;do not&lt;/strong&gt; have plugins that add front-end “features” like lightbox on images, or social sharing buttons. It’s all just extra code that isn’t really needed and is unlikely to be used by most visitors.&lt;/p&gt;

&lt;p&gt;By reducing the amount of plugins you have installed, you’re literally reducing the number of lines of code your site needs to run. Therefore your site is smaller and quicker to load. Poorly coded plugins can also introduce security vulnerabilities, so please be really picky about which plugins you install.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Cache all the things
&lt;/h3&gt;

&lt;p&gt;The single biggest impact you can have on speeding up a WordPress site, aside from hosting, is caching. It’s massively important.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kevq.uk/which-is-the-best-wordpress-caching-plugin/" rel="noopener noreferrer"&gt;I compared a number of common caching plugins&lt;/a&gt; recently and while they all had a positive impact on my website’s performance, I chose to go with &lt;a href="https://shareasale.com/r.cfm?b=1075949&amp;amp;u=2420767&amp;amp;m=74778&amp;amp;urllink=&amp;amp;afftrack=" rel="noopener noreferrer"&gt;WP Rocket&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--np5QH1Mo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/wp-rocket-dashboard-1220x661.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--np5QH1Mo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/wp-rocket-dashboard-1220x661.png" alt="WP Rocket dashboard" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WP Rocket is superb. I’ve been using it for a little over a year and a half now and I’m very happy with it. There are other caching plugins available, obviously. If you don’t want to pay for WP Rocket, I’d recommend taking a look at &lt;a href="https://kevq.uk/which-is-the-best-wordpress-caching-plugin/" rel="noopener noreferrer"&gt;my comparison post&lt;/a&gt; and picking a free alternative.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Use a CDN
&lt;/h3&gt;

&lt;p&gt;A Content Delivery Network (CDN) basically copies the static parts of your site to servers located all over the world. So if your server is in London, and someone visits from New Zealand, that data needs to be transmitted right around the globe.&lt;/p&gt;

&lt;p&gt;With a CDN, there would be a local server, in Australia for example, where your static content will be served from. This means your site would load &lt;strong&gt;much&lt;/strong&gt; quicker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4m_ctwDH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/cdn-traffic-map.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4m_ctwDH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/cdn-traffic-map.png" alt="My CDN traffic plotted on a map" width="800" height="403"&gt;&lt;/a&gt;My CDN traffic plotted on a map&lt;/p&gt;

&lt;p&gt;I personally use and recommend &lt;a href="https://bunnycdn.com/?ref=gnn7bkvipc" rel="noopener noreferrer"&gt;BunnyCDN&lt;/a&gt;. Their service is excellent and they’re really cheap. For example, the CDN charges for this site cost me around $1/month.&lt;/p&gt;

&lt;p&gt;WP Rocket makes using a CDN very simple, as do many other caching plugins. So teaming up WP Rocket and BunnyCDN will have a dramatic impact on your site’s performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Don’t use web fonts
&lt;/h3&gt;

&lt;p&gt;Web fonts can be used to give your site a unique look. They are served from your server, or a service like Google Fonts. However, font files are &lt;strong&gt;really&lt;/strong&gt; big, so they add a lot of size (and therefore load time) to your site.&lt;/p&gt;

&lt;p&gt;Instead, think about using a &lt;a href="https://kevq.uk/how-local-fonts-can-save-the-environment/" rel="noopener noreferrer"&gt;local font stack&lt;/a&gt;, which is a list of system fonts that most operating systems have installed, so they’re loaded immediately from the local computer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But Kev, I don’t want my site to use ugly local fonts. People hate them and it will make my site look rubbish!&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;— Website owners everywhere&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, I hate to burst your bubble, dear website owner, but &lt;strong&gt;the only person who cares about your custom fonts is you&lt;/strong&gt;. Question – do the fonts on this site look rubbish? What about on &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or on &lt;a href="https://google.com" rel="noopener noreferrer"&gt;Google&lt;/a&gt;? How about &lt;a href="https://twitter.com" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;All of the fonts on the sites listed above look fine, right? You may not think &lt;em&gt;“Gosh, these fonts look amazing!”&lt;/em&gt; But you don’t give it a second thought either, I bet.&lt;/p&gt;

&lt;p&gt;Well, all of the sites above use local font stacks!&lt;/p&gt;

&lt;p&gt;So stop using services like Google Fonts, and serve up a local font stack instead. Here are some example font stacks you could use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Sans-Serif font stack
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif

# Serif font stack
font-family: Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", Georgia, serif;

# Monospace font stack
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Optimise your images
&lt;/h3&gt;

&lt;p&gt;Images are generally the single largest element on a web page. So it’s really important to optimise them. For this, I would recommend the &lt;a href="https://shortpixel.com/otp/af/DPJPTHN1231799" rel="noopener noreferrer"&gt;ShortPixel image optimiser&lt;/a&gt; service.&lt;/p&gt;

&lt;p&gt;The ShortPixel plugin will take your images as you upload them to WordPress, and optimise them to reduce their size dramatically.&lt;/p&gt;

&lt;p&gt;With ShortPixel you get 100 free optimised images per month, which is fine for most people’s usage. If that’s not enough though, they also have the option to upgrade to paid plans that are relatively cheap.&lt;/p&gt;

&lt;p&gt;They also have the option of buying one-off bulk image credits, which are useful for going back and optimising all the images on your site.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0Th3Sv31--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/shortpixel-stats-1220x666.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0Th3Sv31--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/shortpixel-stats-1220x666.png" alt="ShortPixel stats" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see from the image above, I my image sizes are reduced by an average of 62% using ShortPixel. This has equated to a huge 1.25TB of bandwidth that’s been saved!&lt;/p&gt;

&lt;p&gt;Optimisating your images is a crucial part of speeding up a WordPress site.&lt;/p&gt;

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

&lt;p&gt;All of my recommendations above are relatively simple to implement and don’t require you to be some kind of web dev genius. By implementing some, or all, of the recommendations above, you &lt;strong&gt;will&lt;/strong&gt; speed up your WordPress site significantly.&lt;/p&gt;

&lt;p&gt;Now, there’s always more you can do and if you’re that way inclined, this post probably doesn’t cut the mustard for you. But if you’re a &lt;em&gt;set it and forget it&lt;/em&gt; kind of person that just wants a fast WordPress site that you don’t need to worry about, this post should leave you in relatively good shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you think I’ve missed something? If so, please &lt;a href="https://kevq.uk/contact/" rel="noopener noreferrer"&gt;let me know&lt;/a&gt; and I’ll be happy to add it.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Getting started With Git – A Simple Beginner’s Guide</title>
      <dc:creator>Kev Quirk</dc:creator>
      <pubDate>Sun, 14 Mar 2021 11:14:40 +0000</pubDate>
      <link>https://dev.to/kevquirk/getting-started-with-git-a-simple-beginner-s-guide-1i5m</link>
      <guid>https://dev.to/kevquirk/getting-started-with-git-a-simple-beginner-s-guide-1i5m</guid>
      <description>&lt;p&gt;&lt;a href="https://kevq.uk/i-now-know-how-to-use-git/" rel="noopener noreferrer"&gt;I’ve been using Git for around a year now&lt;/a&gt; and over the course of that year, it has become a crucial part of my workflow. But getting started with Git is difficult – there are lots of getting started guides out there, but I’ve found many of them to be too verbose for a beginner.&lt;/p&gt;

&lt;p&gt;So I decided to write a simple &lt;em&gt;getting started with Git&lt;/em&gt; guide that covers just enough for you to get started and no more. Let’s get going, shall we?&lt;/p&gt;

&lt;p&gt;I’m not going to mess around with pre-waffle here, like &lt;em&gt;&lt;a href="https://en.wikipedia.org/wiki/Git" rel="noopener noreferrer"&gt;what is Git?&lt;/a&gt;&lt;/em&gt; and all that jazz. Fact of the matter is, if you’re on this page I’m confident that you probably know what Git is already.&lt;/p&gt;

&lt;p&gt;The aim of this post is to give you enough to do &lt;strong&gt;the basics&lt;/strong&gt; with Git and get going. From there you can continue to learn more if you need it.&lt;/p&gt;

&lt;p&gt;The rest of this post will assume you’re using &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for your remote repositories, but all of the Git commands are the same no matter which service you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git clone&lt;/li&gt;
&lt;li&gt;
Working locally with Git

&lt;ul&gt;
&lt;li&gt;Adding files to Git&lt;/li&gt;
&lt;li&gt;Committing changes&lt;/li&gt;
&lt;li&gt;Pushing changes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Pulling updates with Git&lt;/li&gt;

&lt;li&gt;

Working with branches

&lt;ul&gt;
&lt;li&gt;Changing branches&lt;/li&gt;
&lt;li&gt;Merging branches&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Reverting a change&lt;/li&gt;

&lt;li&gt;You can now get started with Git&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Git clone
&lt;/h2&gt;

&lt;p&gt;This first thing you need in order to get started with Git, is to clone a repository locally. This will be a local working copy of your data, which you will manage.&lt;/p&gt;

&lt;p&gt;So let’s say we have a repository on GitHub called &lt;code&gt;example&lt;/code&gt; (inventive name, I know), log into your GitHub account and navigate to your &lt;code&gt;example&lt;/code&gt; repository so we can clone it.&lt;/p&gt;

&lt;p&gt;To clone the repository, click on the green &lt;strong&gt;Code&lt;/strong&gt; button and copy the link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; in the example below I’m using SSH to clone my repository. By default GitHub uses HTTPS. I personally prefer SSH as it’s generally regarded as more secure. If you want to do the same, &lt;a href="https://docs.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account" rel="noopener noreferrer"&gt;follow this guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TllfhogB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/github-example-repo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TllfhogB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/github-example-repo.png" alt="GitHub example repository" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the clone link for your repository and head over to a terminal window. First, &lt;code&gt;cd&lt;/code&gt; into the directory that you wish to store your local copy of the repository, then run the &lt;code&gt;git clone&lt;/code&gt; command followed by the link you copied:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/GitHub
git clone git@github.com:kevquirk/example.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will then clone the repository to your local machine. The output should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~$ cd GitHub/
kev@thinkpad:~/GitHub$ git clone git@github.com:kevquirk/example.git
Cloning into 'example'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Working locally with Git
&lt;/h2&gt;

&lt;p&gt;Fantastic! We now have our example repository cloned locally and we can start working on it. From here you can do pretty much anything you like – you can add, change or delete the contents of the repository and nothing will be changed at GitHub until you do a &lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So let’s fire up a text editor (I personally use &lt;a href="https://atom.io" rel="noopener noreferrer"&gt;Atom&lt;/a&gt;) and start working with the example repository. At the moment, the repository is looking pretty sparse, as it only contains a &lt;code&gt;README.md&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G7m0su0r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-atom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G7m0su0r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-atom.png" alt="Example repo Atom" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding files to Git
&lt;/h3&gt;

&lt;p&gt;Next thing we’re going to do is add a file to our example repository. Create new file called &lt;code&gt;about.md&lt;/code&gt; and populate it with some text. Once you’re happy, save the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5lmsZxsT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/about-file-atom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5lmsZxsT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/about-file-atom.png" alt="About.md file example Git repo." width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you now go back to your terminal window and run a &lt;code&gt;git status&lt;/code&gt; on the example repo, you should see something that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git status
On branch main
Your branch is up-to-date with 'origin/main'.

Untracked files:
  (use "git add &amp;lt;file&amp;gt;..." to include in what will be committed)
    about.md

nothing added to commit but untracked files present (use "git add" to track)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git is telling us here that we have added the &lt;code&gt;about.md&lt;/code&gt; file, but it is untracked. This means that our new file hasn’t been staged, so isn’t tracked by Git. Let’s stage &lt;code&gt;about.md&lt;/code&gt; so that it’s tracked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add about.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we run another &lt;code&gt;git status&lt;/code&gt; the output should now have changed to something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git status
On branch main
Your branch is up-to-date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged &amp;lt;file&amp;gt;..." to unstage)
    new file: about.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;about.md&lt;/code&gt; is no longer listed as untracked, but Git is now telling us that we need to commit the changes that we have staged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; if you have multiple files to add to your Git repo, use &lt;code&gt;git add *&lt;/code&gt; instead. This will add all untracked files within your repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Committing changes
&lt;/h3&gt;

&lt;p&gt;We’re really getting started with Git now, aren’t we! The next thing we need to do is commit our changes to Git.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But what does ‘committing changes’ mean, Kev?&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;— Pretty much everyone&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah, I get it. The technical verbiage that Git uses can be confusing. But the process basically goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new file that is untracked.&lt;/li&gt;
&lt;li&gt;You &lt;code&gt;add&lt;/code&gt; the file to the repo so it’s now tracked. This is called “staging”.&lt;/li&gt;
&lt;li&gt;The staged file is &lt;code&gt;committed&lt;/code&gt; to the local repository, which effectively writes that change into the history of the repository.&lt;/li&gt;
&lt;li&gt;Finally, changes are &lt;code&gt;pushed&lt;/code&gt; to the remote repository. In our case that’s GitHub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ok, with that digression out of the way, let’s get back to getting started with Git. We now need to &lt;code&gt;commit&lt;/code&gt; the &lt;code&gt;about.md&lt;/code&gt; file to our repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Added about.md file"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-m&lt;/code&gt; flag allows us to add a commit message. This is &lt;strong&gt;very&lt;/strong&gt; important as it allows us to look back over the history of changes (if needed) so we can make sense of what they were.&lt;/p&gt;

&lt;p&gt;The output of the &lt;code&gt;git commit&lt;/code&gt; should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git commit -m "Added about.md file"
[main e5fc6eb] Added about.md file
 1 file changed, 5 insertions(+)
 create mode 100644 about.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pushing changes
&lt;/h3&gt;

&lt;p&gt;The only thing left to do now is &lt;code&gt;push&lt;/code&gt; the changes to GitHub so they are available not only as a kind of backup, but also for anyone else who may be working on this repository.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Once again, the output of your &lt;code&gt;git push&lt;/code&gt; command should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 898 bytes | 898.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:kevquirk/example.git
   53837c4..e5fc6eb main -&amp;gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we now flip back to GitHub and take a look at the example repository, we should see that the &lt;code&gt;about.md&lt;/code&gt; file has been added:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--12dzz3Xx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-with-about-added.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--12dzz3Xx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-with-about-added.png" alt="Example repo with about.md added" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will also notice that we can see the commit message next to &lt;code&gt;about.md&lt;/code&gt; too. This helps when reviewing files as it will allow you to see which files where pushed with which commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pulling updates with Git
&lt;/h2&gt;

&lt;p&gt;Let’s say that someone else has contributed a new file to our example repository and you want to pull down that contribution.&lt;/p&gt;

&lt;p&gt;If we look on our GitHub page, &lt;code&gt;new-file.md&lt;/code&gt; has been added, but we don’t have that in our local repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bxN_GPBs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-new-file.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bxN_GPBs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-new-file.png" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get the latest changes from GitHub, we simply run the following command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will pull down the latest changes from the example repository on GitHub and the output will look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 749 bytes | 749.00 KiB/s, done.
From github.com:kevquirk/example
   e5fc6eb..7a042b1 main -&amp;gt; origin/main
Updating e5fc6eb..7a042b1
Fast-forward
 new-file.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 new-file.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we take a look at Atom again, we should now be able to see the new file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4TJNYWKb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-new-file-atom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4TJNYWKb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-repo-new-file-atom.png" alt="Example repo new file" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we then wanted to work on this file ourselves, we simply make changes then run the &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt; &amp;amp; &lt;code&gt;git push&lt;/code&gt; commands again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add *
git commit -m "Updated new-file.md with new info"
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Working with branches
&lt;/h2&gt;

&lt;p&gt;The info above is enough to get started with Git, but now we’re going to take our use of Git to the next level by introducing branches.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How the hell do trees come into this??&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;— All the people&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Branches allow you to work on a copy of your main code in a safe environment. For example, I use Git to manage the theme for this website and I have 2 branches; &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt;. The &lt;code&gt;main&lt;/code&gt; branch is the production branch that is used on the live site.&lt;/p&gt;

&lt;p&gt;I use the &lt;code&gt;dev&lt;/code&gt; branch for making changes to my theme on my staging site. So I play around and make changes to my staging site on the &lt;code&gt;dev&lt;/code&gt; branch, then once I’m happy for them to go live on the production site, I merge those changes into &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OMjauj_M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/git-branches-diagram.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OMjauj_M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/git-branches-diagram.png" alt="Example of how branches work" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the example above you will see that I have added &lt;code&gt;home.md&lt;/code&gt; on the &lt;code&gt;dev&lt;/code&gt; branch, then merged it into &lt;code&gt;main&lt;/code&gt;. Let’s head back to our terminal and do that shall we?&lt;/p&gt;

&lt;h3&gt;
  
  
  Changing branches
&lt;/h3&gt;

&lt;p&gt;The first thing we need to do is change to the &lt;code&gt;dev&lt;/code&gt; branch. You do that with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-b&lt;/code&gt; flag here will create a new branch called &lt;code&gt;dev&lt;/code&gt; and switch to it. The output on your terminal should be something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git checkout -b dev
Switched to a new branch 'dev'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From here we can make changes, additions and deletions as normal, but all this work will be done in &lt;code&gt;dev&lt;/code&gt;, not &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I’ve created a file called &lt;code&gt;home.md&lt;/code&gt; so lets stage, commit and push that change to &lt;code&gt;dev&lt;/code&gt;. This time though, our &lt;code&gt;push&lt;/code&gt; command will be a little different as we want to tell GitHub we’re pushing to &lt;code&gt;dev&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;git add *
git commit -m "Added home.md"
git push --set-upstream origin dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output of the new &lt;code&gt;dev&lt;/code&gt; &lt;code&gt;push&lt;/code&gt; command should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@thinkpad:~/GitHub/example$ git push --set-upstream origin dev

Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 404 bytes | 404.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: 
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/kevquirk/example/pull/new/dev
remote: 
To github.com:kevquirk/example.git
 * [new branch] dev -&amp;gt; dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we’re working in the &lt;code&gt;dev&lt;/code&gt; branch on GitHub too. So if you want to push additional changes, you only need to use the standard &lt;code&gt;git push&lt;/code&gt; command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Merging branches
&lt;/h3&gt;

&lt;p&gt;So we’ve been doing lots of work on the &lt;code&gt;home.md&lt;/code&gt; file and we now want to merge it into &lt;code&gt;main&lt;/code&gt;. There’s a couple of ways of doing this, but the easiest is to do it from a terminal.&lt;/p&gt;

&lt;p&gt;All you need to do is flip back to the &lt;code&gt;main&lt;/code&gt; branch, then run the &lt;code&gt;merge&lt;/code&gt; command to merge changes from &lt;code&gt;dev&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;. Finally we push the changes to GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Switch back to main branch
git checkout main

# Merge changes from dev
git merge dev

# Push changes
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how we didn’t use the &lt;code&gt;-b&lt;/code&gt; flag to switch back to the &lt;code&gt;main&lt;/code&gt; branch here? That’s because the &lt;code&gt;main&lt;/code&gt; branch already exists. We only need &lt;code&gt;-b&lt;/code&gt; when flipping to a new branch. If we want to flip back to &lt;code&gt;dev&lt;/code&gt; at this point, all we need to do is run &lt;code&gt;git checkout dev&lt;/code&gt; as we have already created this branch previously.&lt;/p&gt;

&lt;p&gt;If we now take a look at our &lt;code&gt;main&lt;/code&gt; branch on GitHub, we should see our new &lt;code&gt;home.md&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZHLpNhmN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/git-merged-into-main.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZHLpNhmN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/git-merged-into-main.png" alt="Git merged into main" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reverting a change
&lt;/h2&gt;

&lt;p&gt;So let’s say you’ve been working away on your Git repository and you commit a change that adds some text to &lt;code&gt;about.md&lt;/code&gt;. Problem is, you’ve now decided you no longer want that text to be on the page.&lt;/p&gt;

&lt;p&gt;Now you &lt;em&gt;could&lt;/em&gt; just delete the text do another &lt;code&gt;git push&lt;/code&gt;, but if you’re working with code and there are multiple changes, reverting an entire commit may be a better solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yC3EeFKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/about-example-commit-1220x690.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yC3EeFKz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/about-example-commit-1220x690.png" alt="About.md example commit" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the image above I’ve added a string of bold text below the title and committed it to my example repository with a commit message of &lt;code&gt;Added new text&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In order to revert this change, we need to find the hash of the commit. To do that, we head to a terminal window and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log --pretty=oneline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output of the &lt;code&gt;git log&lt;/code&gt; command will look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@desktop:~/GitHub/example$ git log --pretty=oneline
371015469f5303244fd4096f7189898e60547f1a (HEAD -&amp;gt; main, origin/main, origin/HEAD) Added new text
afbbee514a4e9148fd12644c3f24e7fcf92d2488 (origin/dev) changed home.md
0cdee70d3457e4d07ef549e9fd1ead94eb09f8bd Added home.md
7a042b1bfad0db6050732992255c7a08c595c4a0 Create new-file.md
e5fc6ebc43c4984cb735df824e42a6cfbac46b84 Added about.md file
53837c4f72d32b56bedbdf2b492c28465c4f0811 Update README.md
e6db6b162289487d31becdbd11688305d8df97f0 Initial commit

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

&lt;/div&gt;



&lt;p&gt;The last commit we did is at the top of the list and is shown by the commit message &lt;code&gt;Added new text&lt;/code&gt;. This commit has a hash of &lt;code&gt;371015469f5303244fd4096f7189898e60547f1a&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To revert the commit, take the &lt;strong&gt;first 5 characters&lt;/strong&gt; of the hash and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git revert &amp;lt;first 5 characters&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the correct command will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git revert 37101
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run this command you will be asked to provide a new commit message. Git defaults to “Revert [previous commit message]” which is usually fine. Once you’re happy with the new commit message your output should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kev@desktop:~/GitHub/example$ git revert 37101
[main d02c55c] Revert "Added new text"
 1 file changed, 2 deletions(-)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to &lt;code&gt;git push&lt;/code&gt; the change back to GitHub and if we check the &lt;code&gt;about.md&lt;/code&gt; file, we should see that the additional string of text is gone:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5P0y_OvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-commit-reverted-1220x690.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5P0y_OvU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kevq.uk/wp-content/uploads/2021/03/example-commit-reverted-1220x690.png" alt="About.md example commit reverted" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ta da! We just reverted a commit. Good job!&lt;/p&gt;

&lt;h2&gt;
  
  
  You can now get started with Git
&lt;/h2&gt;

&lt;p&gt;This should be enough to get you started with Git and give you an understanding of what the &lt;strong&gt;basics&lt;/strong&gt; of using it are.&lt;/p&gt;

&lt;p&gt;From here there are a tonne of other things you can learn to do in Git, like using GitHub Actions to add additional integrations. I’d strongly recommend taking a look at the &lt;a href="https://git-scm.com/docs" rel="noopener noreferrer"&gt;official Git documentation&lt;/a&gt; if you want to learn more.&lt;/p&gt;

&lt;p&gt;Hopefully this post will help some of you get started with Git. Please remember, this is just the bare basics – there’s a tonne more to learn!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now go forth and become a Git experts, my intrepid explorers!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you liked this post, please consider following me on &lt;a href="https://twitter.com/kevquirk" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; for more.&lt;/p&gt;

</description>
      <category>git</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
