From 9812cc3613ee0aef047bb767503b95a8d5ef7666 Mon Sep 17 00:00:00 2001 From: andrzej Date: Wed, 13 Nov 2024 22:20:45 +0100 Subject: [PATCH] import posts --- .hugo_build.lock | 0 content/posts | 1 - content/posts/hard-problem.md | 73 ++++++++++++++++ content/posts/permissions-strike-again.md | 37 ++++++++ public/categories/index.html | 47 ++++++++++ public/categories/index.xml | 11 +++ public/css/main.css | 22 +++++ public/favicon.ico | Bin 0 -> 15406 bytes public/index.html | 71 +++++++++++++++ public/index.xml | 47 ++++++++++ public/js/main.js | 4 + public/posts/hard-problem/index.html | 81 ++++++++++++++++++ public/posts/index.html | 69 +++++++++++++++ public/posts/index.xml | 47 ++++++++++ .../posts/permissions-strike-again/index.html | 71 +++++++++++++++ public/posts/post-1/index.html | 61 +++++++++++++ public/posts/post-2/index.html | 62 ++++++++++++++ public/posts/post-3/bryce-canyon.jpg | Bin 0 -> 19224 bytes public/posts/post-3/index.html | 64 ++++++++++++++ public/sitemap.xml | 40 +++++++++ public/tags/blue/index.html | 50 +++++++++++ public/tags/blue/index.xml | 19 ++++ public/tags/green/index.html | 54 ++++++++++++ public/tags/green/index.xml | 26 ++++++ public/tags/index.html | 56 ++++++++++++ public/tags/index.xml | 33 +++++++ public/tags/red/index.html | 58 +++++++++++++ public/tags/red/index.xml | 33 +++++++ 28 files changed, 1136 insertions(+), 1 deletion(-) create mode 100644 .hugo_build.lock delete mode 100644 content/posts create mode 100644 content/posts/hard-problem.md create mode 100644 content/posts/permissions-strike-again.md create mode 100644 public/categories/index.html create mode 100644 public/categories/index.xml create mode 100644 public/css/main.css create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/index.xml create mode 100644 public/js/main.js create mode 100644 public/posts/hard-problem/index.html create mode 100644 public/posts/index.html create mode 100644 public/posts/index.xml create mode 100644 public/posts/permissions-strike-again/index.html create mode 100644 public/posts/post-1/index.html create mode 100644 public/posts/post-2/index.html create mode 100644 public/posts/post-3/bryce-canyon.jpg create mode 100644 public/posts/post-3/index.html create mode 100644 public/sitemap.xml create mode 100644 public/tags/blue/index.html create mode 100644 public/tags/blue/index.xml create mode 100644 public/tags/green/index.html create mode 100644 public/tags/green/index.xml create mode 100644 public/tags/index.html create mode 100644 public/tags/index.xml create mode 100644 public/tags/red/index.html create mode 100644 public/tags/red/index.xml diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/content/posts b/content/posts deleted file mode 100644 index 8b13789..0000000 --- a/content/posts +++ /dev/null @@ -1 +0,0 @@ - diff --git a/content/posts/hard-problem.md b/content/posts/hard-problem.md new file mode 100644 index 0000000..8045109 --- /dev/null +++ b/content/posts/hard-problem.md @@ -0,0 +1,73 @@ ++++ +date = '2024-11-13T14:24:21+01:00' +draft = true +title = 'Hard Problem: Invalidating the browser cache' ++++ + +**I had a bit of an issue with my [website](https://demos.ajstepien.xyz) recently.** + +I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they *were* styled when I loaded the same page in Chrome. + +The experienced computer touchers amongst you will be saying "this is obviously a cache problem", and you're right, it is obviously a cache problem. Pressing `CTR + SHIFT + R` (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people's machines? + +## Invalidating cached HTML + +The best way to deal with this problem is to tell the browser not to cache our HTML in the first place. We can achieve this by adding the following meta tag to `index.html`, and any other HTML files we don't want cached. + +```html + +``` + +## Invalidating cached CSS + +A quick google search revealed that the best way to invalidate browser cache is by changing the url of the file you're telling it to load. So we would change this: + +```html + +``` + +to this: + +```html + +``` + +and the browser would recognize this as new file and load it from the server. Problem solved! Of course, you would have to change the file name too... + +```bash +mv css/defaults.css css/defaults-2.css +``` + +... and this would get tedious very quickly. Furthermore, it's going to make a mess of your version history if, as far as Git is concerned, you're deleting the CSS file and writing a new one with every deployment. Surely there's a better way? + +### Using a query + +Of course there is. Look at this: + +```html + +``` + +As we're requesting the file via http, we can append a query. Awesome. Not awesome enough though. I'm too lazy to do this every time I push a commit, and, being human, I'll probably forget at a critical moment. This can only mean one thing. It's time to bash (🤣) out a quick build script! + +```bash +#!/usr/bin/env bash +COMMIT="$(git rev-parse HEAD)" +sed -i "s/css?=\w*/css?v=${COMMIT}/g" index.html +``` + +Let's talk real quick about what's happening here: + +`COMMIT="$(git rev-parse HEAD)"` gets the commit id from Git and assigns it the variable `$COMMIT`. + +Then, `sed -i "s/css?=\w*/css?v=${COMMIT}/g" index.html` does a find and replace on `index.html`. The regular expression `css?=\w*` matches 'css?=' plus any number of contiguous alphanumeric characters (everything until the next quote mark, basically) before replacing these alphanumeric characters with the commit id. The flag `-i` tells sed to edit the file in place. The `g` tells it to perform the operation on the whole file. + +Now, whenever we push a new commit, any CSS imports in `index.html` will be changed to something like this: + +```html + +``` + +Pretty neat, huh? + +There's just one thing bugging me: surely I do actually want the CSS to be cached *sometimes*. Caching exists for a reason, and I don't want to sacrifice performance. Maybe I can modify the build script so that it only updates the CSS imports when the CSS files have changed... Sounds like a topic for another blogpost! diff --git a/content/posts/permissions-strike-again.md b/content/posts/permissions-strike-again.md new file mode 100644 index 0000000..cf04a05 --- /dev/null +++ b/content/posts/permissions-strike-again.md @@ -0,0 +1,37 @@ ++++ +date = '2024-11-13T11:53:13+01:00' +draft = false +title = 'Permissions Strike Again' ++++ + +# It's always permissions + +Configuring Apache really isn't rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it's one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes. + +**And it almost always has to do with permissions.** + +So, I'm writing this post both as a means of christening this devlog ([Hi! I'm Andrzej! Hire me!](https://demos.ajstepien.xyz)) and also as a reminder to myself that *the home folder is not executable by default.* + +Please, Andrzej. Please. The next time you're building a website, be it for a client or for yourself, and you find yourself scratching your head, wondering what error you may have made in the `.confs`, checking the permissions of your symlink again and again, ask yourself: is my symlink pointing to a directory in the home folder? Because Apache can't open the home folder until you change the permissions! + +## What? + +In Linux we open directories by 'executing' them. A directory is an executable that lists part of file-system for us, basically. Now, by default, the home directory is only executable by its owner. This makes sense when you think about it -- you don't want your sister, or co-worker, or (more likely) whatever barely-audited application you're installing today, to be able to open that directory. But you probably do want your webserver to be able to open it, especially if you are symlinking to it from `/var/www`. + +[Hugo](https://gohugo.io/) (the framework I'm using to build this blog) likes to deploy to the home directory by default. In fact there are lots of reasons why you'd want to deploy there. I do this exact same thing with [Jenkins](https://jenkins.io), and I wasted an hour troubleshooting this exact same problem when I set up that server too. + +So, Andrzej of the future (did anyone non-ghoulish win an election yet?), for future reference, let's say you're deploying to `/home/devlog/website`: + +1. Add Apache to the 'devlog' user group. +``` +sudo usermod -aG devlog www-data +``` +2. Change the permissions on /home/devlog to allow group members to open it. +``` +sudo chmod 710 /home/devlog +``` + +IT'S THAT EASY. + + + diff --git a/public/categories/index.html b/public/categories/index.html new file mode 100644 index 0000000..f754d5b --- /dev/null +++ b/public/categories/index.html @@ -0,0 +1,47 @@ + + + + + +Categories | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Categories

+ + + +
+ + + diff --git a/public/categories/index.xml b/public/categories/index.xml new file mode 100644 index 0000000..216aed4 --- /dev/null +++ b/public/categories/index.xml @@ -0,0 +1,11 @@ + + + + Categories on My New Hugo Site + http://localhost:1313/categories/ + Recent content in Categories on My New Hugo Site + Hugo + en-us + + + diff --git a/public/css/main.css b/public/css/main.css new file mode 100644 index 0000000..166ade9 --- /dev/null +++ b/public/css/main.css @@ -0,0 +1,22 @@ +body { + color: #222; + font-family: sans-serif; + line-height: 1.5; + margin: 1rem; + max-width: 768px; +} + +header { + border-bottom: 1px solid #222; + margin-bottom: 1rem; +} + +footer { + border-top: 1px solid #222; + margin-top: 1rem; +} + +a { + color: #00e; + text-decoration: none; +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..67f8b777851849527933b78b1f98bd564d8255d1 GIT binary patch literal 15406 zcmeI3%WEH16vro|f`O{FV5Nc>unpZA42Xe(zeP4Fn0Fu>#YKe(c41L;qszMJ-bXDi z>L1W57+rSdLS5OG#!V^IKxvbj6n@gC#QOREdT$vg^US^Tf(#t)%-r+%o^#KA&hHll zeL;V)Z(l$;7%c7yg4co|7#w``eB{|6_?CCW!=`>H2!44k2#&ym2ojIpQ{=j)r>9?; zot^z+et!PXxw*M}BHinq>XMXKboc`~d=&+uPNklCgSOc%pC zkdxhQd};55Lm1#0hSD%6>D`)|ni^JI((I(w8QJADo{YL>VsSr%Ckg*U$-2s8+X=sG z{FIYm*irl0d{!y{D{f@u4p-n@#^$z+5S`e?RJu8p?Lq>0x`@}vIu7kfT z8Od5bMN4D{&~ch_$NgBcM#n%A`@~N^|ABlif3x_ci!t%#JQ&cWarai1&Z6~TkWOa9 zw}_GQ!9UZ~o(wFidYcy6DoF0rq<yz2-5e zTyl`ty!pUE-U+vC*KNN6@vklal>5+`8rxs}uh#LW?(tW105Q;7(Wx&Lm6uJ~)`e`X z^RF;~r?T~jY{_Q$A_iJ-m%jcoHny$5gr&~)r;P=1C}sVP-puv4#i0EM{FfkKed1Em zy4%`}me{Us{}sjpj#~DgVGO#rYen+cu9FI~=yTd>3AzfcLA`SnbFXu|pT#pXGc&>2(2!(N+83v|%y-!B zH|JI#fb9Zw1NxWuxyA*n7Wlp875YYr(Gs{zKTE)l_AX1Q6wmo%>|9k+6aP<2dk>lant}U*_E8rG3D-5uK;;yPx-8W%=Kfda!;c%(fl0 ze&XHrrr^uM0oGf>Z1DFnHhqLl>1%^5TzTuk|3H|*ul4(0o-gE;Z3>^kyq|VB2&R>$ z;3|M)g|TQza{|6pwl*t(FLk^UW^(9F%1?ditXdD)PeI>TZP%AQuxqb<#h1RS^?+T! z8Ck2^t}lCF{~KLC_TZ^~%@^LN9`I|g*;@RHecST~{FkHc(w1kiUj^&=w&0Dy`6E8G zdj4Yla1TF#N4vKWh(zA3A5dm)G|O@NEjS_AkOu zAJA`duQdQy-kiND%)+h<+}gi?*&_V<{_uGJE+68oBmMcH-Rl|t`yCgB%e&5Zsqq=>yyS- z+H#S&ls3nqdmTC0`~O|AJhXPJKi1jW{{U!5hztM# literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..1262745 --- /dev/null +++ b/public/index.html @@ -0,0 +1,71 @@ + + + + + + +My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Laborum voluptate pariatur ex culpa magna nostrud est incididunt fugiat +pariatur do dolor ipsum enim. Consequat tempor do dolor eu. Non id id anim anim +excepteur excepteur pariatur nostrud qui irure ullamco.

+ + +

Hard Problem: Invalidating the browser cache

+

I had a bit of an issue with my website recently.

+

I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they were styled when I loaded the same page in Chrome.

+

The experienced computer touchers amongst you will be saying “this is obviously a cache problem”, and you’re right, it is obviously a cache problem. Pressing CTR + SHIFT + R (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people’s machines?

+ +

Permissions Strike Again

+

It’s always permissions

+

Configuring Apache really isn’t rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it’s one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes.

+

And it almost always has to do with permissions.

+ +

Post 3

+

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+ +

Post 2

+

Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.

+

Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

+ +

Post 1

+

Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.

+

Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.

+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..215d191 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,47 @@ + + + + Home on My New Hugo Site + http://localhost:1313/ + Recent content in Home on My New Hugo Site + Hugo + en-us + Wed, 13 Nov 2024 14:24:21 +0100 + + + Hard Problem: Invalidating the browser cache + http://localhost:1313/posts/hard-problem/ + Wed, 13 Nov 2024 14:24:21 +0100 + http://localhost:1313/posts/hard-problem/ + <p><strong>I had a bit of an issue with my <a href="https://demos.ajstepien.xyz">website</a> recently.</strong></p> <p>I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they <em>were</em> styled when I loaded the same page in Chrome.</p> <p>The experienced computer touchers amongst you will be saying &ldquo;this is obviously a cache problem&rdquo;, and you&rsquo;re right, it is obviously a cache problem. Pressing <code>CTR + SHIFT + R</code> (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people&rsquo;s machines?</p> + + + Permissions Strike Again + http://localhost:1313/posts/permissions-strike-again/ + Wed, 13 Nov 2024 11:53:13 +0100 + http://localhost:1313/posts/permissions-strike-again/ + <h1 id="its-always-permissions">It&rsquo;s always permissions</h1> <p>Configuring Apache really isn&rsquo;t rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it&rsquo;s one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes.</p> <p><strong>And it almost always has to do with permissions.</strong></p> + + + Post 3 + http://localhost:1313/posts/post-3/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/posts/post-3/ + <p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p> + + + Post 2 + http://localhost:1313/posts/post-2/ + Wed, 15 Feb 2023 10:00:00 -0700 + http://localhost:1313/posts/post-2/ + <p>Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.</p> <p>Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.</p> + + + Post 1 + http://localhost:1313/posts/post-1/ + Sun, 15 Jan 2023 09:00:00 -0700 + http://localhost:1313/posts/post-1/ + <p>Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.</p> <p>Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.</p> + + + diff --git a/public/js/main.js b/public/js/main.js new file mode 100644 index 0000000..dd7dc87 --- /dev/null +++ b/public/js/main.js @@ -0,0 +1,4 @@ +(() => { + // + console.log("This site was generated by Hugo."); +})(); diff --git a/public/posts/hard-problem/index.html b/public/posts/hard-problem/index.html new file mode 100644 index 0000000..c7626f3 --- /dev/null +++ b/public/posts/hard-problem/index.html @@ -0,0 +1,81 @@ + + + + + +Hard Problem: Invalidating the browser cache | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Hard Problem: Invalidating the browser cache

+ + + + + +

I had a bit of an issue with my website recently.

+

I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they were styled when I loaded the same page in Chrome.

+

The experienced computer touchers amongst you will be saying “this is obviously a cache problem”, and you’re right, it is obviously a cache problem. Pressing CTR + SHIFT + R (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people’s machines?

+

Invalidating cached HTML

+

The best way to deal with this problem is to tell the browser not to cache our HTML in the first place. We can achieve this by adding the following meta tag to index.html, and any other HTML files we don’t want cached.

+
  <meta http-equiv="pragma" content="no-cache" />
+

Invalidating cached CSS

+

A quick google search revealed that the best way to invalidate browser cache is by changing the url of the file you’re telling it to load. So we would change this:

+
<link rel="stylesheet" href="css/defaults.css" />
+

to this:

+
<link rel="stylesheet" href="css/defaults-2.css" />
+

and the browser would recognize this as new file and load it from the server. Problem solved! Of course, you would have to change the file name too…

+
mv css/defaults.css css/defaults-2.css
+

… and this would get tedious very quickly. Furthermore, it’s going to make a mess of your version history if, as far as Git is concerned, you’re deleting the CSS file and writing a new one with every deployment. Surely there’s a better way?

+

Using a query

+

Of course there is. Look at this:

+
<link rel="stylesheet" href="css/defaults.css?v=2"/>
+

As we’re requesting the file via http, we can append a query. Awesome. Not awesome enough though. I’m too lazy to do this every time I push a commit, and, being human, I’ll probably forget at a critical moment. This can only mean one thing. It’s time to bash (🤣) out a quick build script!

+
#!/usr/bin/env bash
+COMMIT="$(git rev-parse HEAD)"
+sed -i "s/css?=\w*/css?v=${COMMIT}/g" index.html
+

Let’s talk real quick about what’s happening here:

+

COMMIT="$(git rev-parse HEAD)" gets the commit id from Git and assigns it the variable $COMMIT.

+

Then, sed -i "s/css?=\w*/css?v=${COMMIT}/g" index.html does a find and replace on index.html. The regular expression css?=\w* matches ‘css?=’ plus any number of contiguous alphanumeric characters (everything until the next quote mark, basically) before replacing these alphanumeric characters with the commit id. The flag -i tells sed to edit the file in place. The g tells it to perform the operation on the whole file.

+

Now, whenever we push a new commit, any CSS imports in index.html will be changed to something like this:

+
<link rel="stylesheet" href="css/styles.css?v=ab10c24280844c10c10c1adfb8b85b03b316f72b" />
+

Pretty neat, huh?

+

There’s just one thing bugging me: surely I do actually want the CSS to be cached sometimes. Caching exists for a reason, and I don’t want to sacrifice performance. Maybe I can modify the build script so that it only updates the CSS imports when the CSS files have changed… Sounds like a topic for another blogpost!

+ + + + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/posts/index.html b/public/posts/index.html new file mode 100644 index 0000000..50d7c37 --- /dev/null +++ b/public/posts/index.html @@ -0,0 +1,69 @@ + + + + + +Posts | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Posts

+

Tempor est exercitation ad qui pariatur quis adipisicing aliquip nisi ea consequat ipsum occaecat. Nostrud consequat ullamco laboris fugiat esse esse adipisicing velit laborum ipsum incididunt ut enim. Dolor pariatur nulla quis fugiat dolore excepteur. Aliquip ad quis aliqua enim do consequat.

+ + +

Hard Problem: Invalidating the browser cache

+

I had a bit of an issue with my website recently.

+

I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they were styled when I loaded the same page in Chrome.

+

The experienced computer touchers amongst you will be saying “this is obviously a cache problem”, and you’re right, it is obviously a cache problem. Pressing CTR + SHIFT + R (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people’s machines?

+ +

Permissions Strike Again

+

It’s always permissions

+

Configuring Apache really isn’t rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it’s one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes.

+

And it almost always has to do with permissions.

+ +

Post 3

+

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+ +

Post 2

+

Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.

+

Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

+ +

Post 1

+

Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.

+

Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.

+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/posts/index.xml b/public/posts/index.xml new file mode 100644 index 0000000..7941845 --- /dev/null +++ b/public/posts/index.xml @@ -0,0 +1,47 @@ + + + + Posts on My New Hugo Site + http://localhost:1313/posts/ + Recent content in Posts on My New Hugo Site + Hugo + en-us + Wed, 13 Nov 2024 14:24:21 +0100 + + + Hard Problem: Invalidating the browser cache + http://localhost:1313/posts/hard-problem/ + Wed, 13 Nov 2024 14:24:21 +0100 + http://localhost:1313/posts/hard-problem/ + <p><strong>I had a bit of an issue with my <a href="https://demos.ajstepien.xyz">website</a> recently.</strong></p> <p>I pushed some changes incorporating images for the first time (I know, very swish), and everything seemed to be working just fine, but when I loaded the production site in Firefox, the images were not styled. Stranger still, they <em>were</em> styled when I loaded the same page in Chrome.</p> <p>The experienced computer touchers amongst you will be saying &ldquo;this is obviously a cache problem&rdquo;, and you&rsquo;re right, it is obviously a cache problem. Pressing <code>CTR + SHIFT + R</code> (which forces Firefox to clear the cache and do a full reload) proved this thesis, and solved the problem handily for me, on my machine. But what about other people&rsquo;s machines?</p> + + + Permissions Strike Again + http://localhost:1313/posts/permissions-strike-again/ + Wed, 13 Nov 2024 11:53:13 +0100 + http://localhost:1313/posts/permissions-strike-again/ + <h1 id="its-always-permissions">It&rsquo;s always permissions</h1> <p>Configuring Apache really isn&rsquo;t rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it&rsquo;s one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes.</p> <p><strong>And it almost always has to do with permissions.</strong></p> + + + Post 3 + http://localhost:1313/posts/post-3/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/posts/post-3/ + <p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p> + + + Post 2 + http://localhost:1313/posts/post-2/ + Wed, 15 Feb 2023 10:00:00 -0700 + http://localhost:1313/posts/post-2/ + <p>Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.</p> <p>Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.</p> + + + Post 1 + http://localhost:1313/posts/post-1/ + Sun, 15 Jan 2023 09:00:00 -0700 + http://localhost:1313/posts/post-1/ + <p>Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.</p> <p>Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.</p> + + + diff --git a/public/posts/permissions-strike-again/index.html b/public/posts/permissions-strike-again/index.html new file mode 100644 index 0000000..6c2d7bb --- /dev/null +++ b/public/posts/permissions-strike-again/index.html @@ -0,0 +1,71 @@ + + + + + +Permissions Strike Again | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Permissions Strike Again

+ + + + + +

It’s always permissions

+

Configuring Apache really isn’t rocket science. There are a wealth of great tutorials online, the documentation is very well documented, and the defaults work more or less out of the box. But it’s one of those jobs that I do just infrequently enough that I always forget things in the interim, and end up making the same old mistakes.

+

And it almost always has to do with permissions.

+

So, I’m writing this post both as a means of christening this devlog (Hi! I’m Andrzej! Hire me!) and also as a reminder to myself that the home folder is not executable by default.

+

Please, Andrzej. Please. The next time you’re building a website, be it for a client or for yourself, and you find yourself scratching your head, wondering what error you may have made in the .confs, checking the permissions of your symlink again and again, ask yourself: is my symlink pointing to a directory in the home folder? Because Apache can’t open the home folder until you change the permissions!

+

What?

+

In Linux we open directories by ’executing’ them. A directory is an executable that lists part of file-system for us, basically. Now, by default, the home directory is only executable by its owner. This makes sense when you think about it – you don’t want your sister, or co-worker, or (more likely) whatever barely-audited application you’re installing today, to be able to open that directory. But you probably do want your webserver to be able to open it, especially if you are symlinking to it from /var/www.

+

Hugo (the framework I’m using to build this blog) likes to deploy to the home directory by default. In fact there are lots of reasons why you’d want to deploy there. I do this exact same thing with Jenkins, and I wasted an hour troubleshooting this exact same problem when I set up that server too.

+

So, Andrzej of the future (did anyone non-ghoulish win an election yet?), for future reference, let’s say you’re deploying to /home/devlog/website:

+
    +
  1. Add Apache to the ‘devlog’ user group.
  2. +
+
sudo usermod -aG devlog www-data
+
    +
  1. Change the permissions on /home/devlog to allow group members to open it.
  2. +
+
sudo chmod 710 /home/devlog
+

IT’S THAT EASY.

+ + + + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/posts/post-1/index.html b/public/posts/post-1/index.html new file mode 100644 index 0000000..3530de5 --- /dev/null +++ b/public/posts/post-1/index.html @@ -0,0 +1,61 @@ + + + + + +Post 1 | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Post 1

+ + + + + +

Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.

+

Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.

+ + +
+
Tags:
+ +
+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/posts/post-2/index.html b/public/posts/post-2/index.html new file mode 100644 index 0000000..2e77b60 --- /dev/null +++ b/public/posts/post-2/index.html @@ -0,0 +1,62 @@ + + + + + +Post 2 | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Post 2

+ + + + + +

Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.

+

Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

+ + +
+
Tags:
+ +
+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/posts/post-3/bryce-canyon.jpg b/public/posts/post-3/bryce-canyon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a923bea0d182c65213ad3a105fa05f61c881976 GIT binary patch literal 19224 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 + + + + +Post 3 | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Post 3

+ + + + + +

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+

Bryce Canyon National Park

+

Sit excepteur do velit veniam mollit in nostrud laboris incididunt ea. Amet eu cillum ut reprehenderit culpa aliquip labore laborum amet sit sit duis. Laborum id proident nostrud dolore laborum reprehenderit quis mollit nulla amet veniam officia id id. Aliquip in deserunt qui magna duis qui pariatur officia sunt deserunt.

+ + +
+
Tags:
+ +
+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..8ae72b2 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,40 @@ + + + + http://localhost:1313/posts/hard-problem/ + 2024-11-13T14:24:21+01:00 + + http://localhost:1313/posts/permissions-strike-again/ + 2024-11-13T11:53:13+01:00 + + http://localhost:1313/tags/blue/ + 2023-03-15T11:00:00-07:00 + + http://localhost:1313/tags/green/ + 2023-03-15T11:00:00-07:00 + + http://localhost:1313/posts/post-3/ + 2023-03-15T11:00:00-07:00 + + http://localhost:1313/tags/red/ + 2023-03-15T11:00:00-07:00 + + http://localhost:1313/tags/ + 2023-03-15T11:00:00-07:00 + + http://localhost:1313/posts/post-2/ + 2023-02-15T10:00:00-07:00 + + http://localhost:1313/posts/post-1/ + 2023-01-15T09:00:00-07:00 + + http://localhost:1313/posts/ + 2023-01-01T08:30:00-07:00 + + http://localhost:1313/ + 2023-01-01T08:00:00-07:00 + + http://localhost:1313/categories/ + + diff --git a/public/tags/blue/index.html b/public/tags/blue/index.html new file mode 100644 index 0000000..83c8436 --- /dev/null +++ b/public/tags/blue/index.html @@ -0,0 +1,50 @@ + + + + + +Blue | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Blue

+ + +

Post 3

+

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/tags/blue/index.xml b/public/tags/blue/index.xml new file mode 100644 index 0000000..aee0e76 --- /dev/null +++ b/public/tags/blue/index.xml @@ -0,0 +1,19 @@ + + + + Blue on My New Hugo Site + http://localhost:1313/tags/blue/ + Recent content in Blue on My New Hugo Site + Hugo + en-us + Wed, 15 Mar 2023 11:00:00 -0700 + + + Post 3 + http://localhost:1313/posts/post-3/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/posts/post-3/ + <p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p> + + + diff --git a/public/tags/green/index.html b/public/tags/green/index.html new file mode 100644 index 0000000..6529e43 --- /dev/null +++ b/public/tags/green/index.html @@ -0,0 +1,54 @@ + + + + + +Green | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Green

+ + +

Post 3

+

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+ +

Post 2

+

Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.

+

Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/tags/green/index.xml b/public/tags/green/index.xml new file mode 100644 index 0000000..4d5f10b --- /dev/null +++ b/public/tags/green/index.xml @@ -0,0 +1,26 @@ + + + + Green on My New Hugo Site + http://localhost:1313/tags/green/ + Recent content in Green on My New Hugo Site + Hugo + en-us + Wed, 15 Mar 2023 11:00:00 -0700 + + + Post 3 + http://localhost:1313/posts/post-3/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/posts/post-3/ + <p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p> + + + Post 2 + http://localhost:1313/posts/post-2/ + Wed, 15 Feb 2023 10:00:00 -0700 + http://localhost:1313/posts/post-2/ + <p>Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.</p> <p>Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.</p> + + + diff --git a/public/tags/index.html b/public/tags/index.html new file mode 100644 index 0000000..1b4310f --- /dev/null +++ b/public/tags/index.html @@ -0,0 +1,56 @@ + + + + + +Tags | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Tags

+ + +

Blue

+ + +

Green

+ + +

Red

+ + + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/tags/index.xml b/public/tags/index.xml new file mode 100644 index 0000000..3058c6a --- /dev/null +++ b/public/tags/index.xml @@ -0,0 +1,33 @@ + + + + Tags on My New Hugo Site + http://localhost:1313/tags/ + Recent content in Tags on My New Hugo Site + Hugo + en-us + Wed, 15 Mar 2023 11:00:00 -0700 + + + Blue + http://localhost:1313/tags/blue/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/tags/blue/ + + + + Green + http://localhost:1313/tags/green/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/tags/green/ + + + + Red + http://localhost:1313/tags/red/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/tags/red/ + + + + diff --git a/public/tags/red/index.html b/public/tags/red/index.html new file mode 100644 index 0000000..4668bb7 --- /dev/null +++ b/public/tags/red/index.html @@ -0,0 +1,58 @@ + + + + + +Red | My New Hugo Site + + + + + + + + + +
+

My New Hugo Site

+ + + + +
+
+ +

Red

+ + +

Post 3

+

Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.

+ +

Post 2

+

Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.

+

Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.

+ +

Post 1

+

Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.

+

Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.

+ + +
+
+

Copyright 2024. All rights reserved.

+ +
+ + diff --git a/public/tags/red/index.xml b/public/tags/red/index.xml new file mode 100644 index 0000000..91982eb --- /dev/null +++ b/public/tags/red/index.xml @@ -0,0 +1,33 @@ + + + + Red on My New Hugo Site + http://localhost:1313/tags/red/ + Recent content in Red on My New Hugo Site + Hugo + en-us + Wed, 15 Mar 2023 11:00:00 -0700 + + + Post 3 + http://localhost:1313/posts/post-3/ + Wed, 15 Mar 2023 11:00:00 -0700 + http://localhost:1313/posts/post-3/ + <p>Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.</p> + + + Post 2 + http://localhost:1313/posts/post-2/ + Wed, 15 Feb 2023 10:00:00 -0700 + http://localhost:1313/posts/post-2/ + <p>Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.</p> <p>Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.</p> + + + Post 1 + http://localhost:1313/posts/post-1/ + Sun, 15 Jan 2023 09:00:00 -0700 + http://localhost:1313/posts/post-1/ + <p>Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.</p> <p>Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.</p> + + +