PageSourceSearch

https://andyyang.co.uk/

html andyyang.co.uk collected 2026-10-04 08:02:15 UTC 40,734 bytes, 710 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" class="dark-mode">
3<head>
4
5    <title>Andy Yang - Personal Blog</title>
6    <meta charset="utf-8" />
7    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
8    <meta name="HandheldFriendly" content="True" />
9    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10
11    <link rel="preload" as="style" href="/assets/built/screen.css?v=S0DSiw6jVHJaYsG0" />
12    <link rel="preload" as="script" href="/assets/built/casper.js?v=YtPhrez3GuGLVDYs" />
13
14    <link rel="stylesheet" type="text/css" href="/assets/built/screen.css?v=S0DSiw6jVHJaYsG0" />
15
16    <meta name="description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel">
17    <link rel="icon" href="https://andyyang.co.uk/content/images/size/w256h256/2020/11/ms-icon-310x310.png" type="image/png">
18    <link rel="canonical" href="https://andyyang.co.uk/">
19    <meta name="referrer" content="no-referrer-when-downgrade">
20    
21    <meta property="og:site_name" content="Andy Yang">
22    <meta property="og:type" content="website">
23    <meta property="og:title" content="Andy Yang">
24    <meta property="og:description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel">
25    <meta property="og:url" content="https://andyyang.co.uk/">
26    <meta property="og:image" content="https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg">
27    <meta name="twitter:card" content="summary_large_image">
28    <meta name="twitter:title" content="Andy Yang">
29    <meta name="twitter:description" content="Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel">
30    <meta name="twitter:url" content="https://andyyang.co.uk/">
31    <meta name="twitter:image" content="https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg">
32    <meta property="og:image:width" content="1200">
33    <meta property="og:image:height" content="850">
34    
35    
35<script type="application/ld+json">
36{
37    "@context": "https://schema.org",
38    "@type": "WebSite",
39    "publisher": {
40        "@type": "Organization",
41        "name": "Andy Yang",
42        "url": "https://andyyang.co.uk/",
43        "logo": {
44            "@type": "ImageObject",
45            "url": "https://andyyang.co.uk/content/images/size/w256h256/2020/11/ms-icon-310x310.png",
46            "width": 60,
47            "height": 60
48        }
49    },
50    "url": "https://andyyang.co.uk/",
51    "name": "Andy Yang",
52    "image": {
53        "@type": "ImageObject",
54        "url": "https://andyyang.co.uk/content/images/size/w1200/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg",
55        "width": 1200,
56        "height": 850
57    },
58    "mainEntityOfPage": "https://andyyang.co.uk/",
59    "description": "Technical howtos and random ramblings. Topics include: self-hosting, Docker, Python, automation, photography, travel"
60}
61    </script>
61
62
63    <meta name="generator" content="Ghost 6.64">
64    <link rel="alternate" type="application/rss+xml" title="Andy Yang" href="https://andyyang.co.uk/rss/">
65    
65<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://andyyang.co.uk/" data-key="e2fe6e0b952035fb57fa9ba5ab" data-api="https://andyyang.co.uk/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
65<style id="gh-members-styles">.gh-post-upgrade-cta-content,
66.gh-post-upgrade-cta {
67    display: flex;
68    flex-direction: column;
69    align-items: center;
70    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
71    text-align: center;
72    width: 100%;
73    color: #ffffff;
74    font-size: 16px;
75}
76
77.gh-post-upgrade-cta-content {
78    border-radius: 8px;
79    padding: 40px 4vw;
80}
81
82.gh-post-upgrade-cta h2 {
83    color: #ffffff;
84    font-size: 28px;
85    letter-spacing: -0.2px;
86    margin: 0;
87    padding: 0;
88}
89
90.gh-post-upgrade-cta p {
91    margin: 20px 0 0;
92    padding: 0;
93}
94
95.gh-post-upgrade-cta small {
96    font-size: 16px;
97    letter-spacing: -0.2px;
98}
99
100.gh-post-upgrade-cta a {
101    color: #ffffff;
102    cursor: pointer;
103    font-weight: 500;
104    box-shadow: none;
105    text-decoration: underline;
106}
107
108.gh-post-upgrade-cta a:hover {
109    color: #ffffff;
110    opacity: 0.8;
111    box-shadow: none;
112    text-decoration: underline;
113}
114
115.gh-post-upgrade-cta a.gh-btn {
116    display: block;
117    background: #ffffff;
118    text-decoration: none;
119    margin: 28px 0 0;
120    padding: 8px 18px;
121    border-radius: 4px;
122    font-size: 16px;
123    font-weight: 600;
124}
125
126.gh-post-upgrade-cta a.gh-btn:hover {
127    opacity: 0.92;
128}</style>
129    
129<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="e2fe6e0b952035fb57fa9ba5ab" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://andyyang.co.uk/" data-locale="en" crossorigin="anonymous"></script>
129
130    
131    <link href="https://andyyang.co.uk/webmentions/receive/" rel="webmention">
132    
132<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
132
133    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
134    
134<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
134<style>:root {--ghost-accent-color: #2f95b6;}</style>
135
136</head>
137<body class="home-template is-head-left-logo has-cover">
138<div class="viewport">
139
140    <header id="gh-head" class="gh-head outer">
141        <div class="gh-head-inner inner">
142            <div class="gh-head-brand">
143                <a class="gh-head-logo no-image" href="https://andyyang.co.uk">
144                        Andy Yang
145                </a>
146                <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
147                <button class="gh-burger" aria-label="Main Menu"></button>
148            </div>
149
150            <nav class="gh-head-menu">
151                <ul class="nav">
152    <li class="nav-home nav-current"><a href="https://andyyang.co.uk/">home</a></li>
153    <li class="nav-contact"><a href="https://andyyang.co.uk/contact/">contact</a></li>
154</ul>
155
156            </nav>
157
158            <div class="gh-head-actions">
159                    <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
160                    <div class="gh-head-members">
161                                <a class="gh-head-link" href="#/portal/signin" data-portal="signin">Sign in</a>
162                                <a class="gh-head-button" href="#/portal/signup" data-portal="signup">Subscribe</a>
163                    </div>
164            </div>
165        </div>
166    </header>
167
168    <div class="site-content">
169        
170<div class="site-header-content outer">
171
172            <img class="site-header-cover"
173                srcset="/content/images/size/w300/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 300w,
174                        /content/images/size/w600/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 600w,
175                        /content/images/size/w1000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 1000w,
176                        /content/images/size/w2000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg 2000w"
177                sizes="100vw"
178                src="/content/images/size/w2000/2021/09/ales-nesetril-Im7lZjxeLhg-unsplash-1.jpg"
179                alt="Andy Yang"
180                fetchpriority="high"
181                loading="eager"
182            />
183
184        <div class="site-header-inner inner">
185                    <h1 class="site-title">Andy Yang</h1>
186                <p class="site-description">technical howtos and random ramblings that no one asked for...</p>
187        </div>
188
189</div>
190
191<main id="site-main" class="site-main outer">
192<div class="inner posts">
193
194    <div class="post-feed">
195            
196<article class="post-card post tag-docker tag-tech tag-self-hosting post-card-large">
197
198    <a class="post-card-image-link" href="/ghost-with-sqlite-in-docker/">
199
200        <img class="post-card-image"
201            srcset="/content/images/size/w300/2023/05/changelog-1-1-.png 300w,
202                    /content/images/size/w600/2023/05/changelog-1-1-.png 600w,
203                    /content/images/size/w1000/2023/05/changelog-1-1-.png 1000w,
204                    /content/images/size/w2000/2023/05/changelog-1-1-.png 2000w"
205            sizes="(max-width: 1000px) 400px, 800px"
206            src="/content/images/size/w600/2023/05/changelog-1-1-.png"
207            alt="Upgrading Ghost (Docker) whilst keeping SQLite database"
208            loading="lazy"
209        />
210
211
212    </a>
213
214    <div class="post-card-content">
215
216        <a class="post-card-content-link" href="/ghost-with-sqlite-in-docker/">
217            <header class="post-card-header">
218                <div class="post-card-tags">
219                        <span class="post-card-primary-tag">Docker</span>
220                </div>
221                <h2 class="post-card-title">
222                    Upgrading Ghost (Docker) whilst keeping SQLite database
223                </h2>
224            </header>
225                <div class="post-card-excerpt">A quick guide to running a Ghost blog with an SQLite database in Docker.</div>
226        </a>
227
228        <footer class="post-card-meta">
229            <time class="post-card-meta-date" datetime="2023-05-05">05 May 2023</time>
230                <span class="post-card-meta-length">2 min read</span>
231        </footer>
232
233    </div>
234
235</article>
236            
237<article class="post-card post tag-linux tag-synology tag-tech featured dynamic">
238
239    <a class="post-card-image-link" href="/creating-an-ubuntu-vm/">
240
241        <img class="post-card-image"
242            srcset="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
243                    https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
244                    https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
245                    https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
246            sizes="(max-width: 1000px) 400px, 800px"
247            src="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDR8fHVidW50dXxlbnwwfHx8fDE2NjQxMDc3ODY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
248            alt="Creating an Ubuntu Server VM on Synology NAS"
249            loading="lazy"
250        />
251
252
253    </a>
254
255    <div class="post-card-content">
256
257        <a class="post-card-content-link" href="/creating-an-ubuntu-vm/">
258            <header class="post-card-header">
259                <div class="post-card-tags">
260                        <span class="post-card-primary-tag">Linux</span>
261                        <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
262    <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
263</svg> Featured</span>
264                </div>
265                <h2 class="post-card-title">
266                    Creating an Ubuntu Server VM on Synology NAS
267                </h2>
268            </header>
269                <div class="post-card-excerpt">A step by step guide to creating an Ubuntu Server virtual machine on a Synology NAS.</div>
270        </a>
271
272        <footer class="post-card-meta">
273            <time class="post-card-meta-date" datetime="2022-09-25">25 Sep 2022</time>
274                <span class="post-card-meta-length">4 min read</span>
275        </footer>
276
277    </div>
278
279</article>
280            
281<article class="post-card post tag-tech tag-linux dynamic">
282
283    <a class="post-card-image-link" href="/samsung-printer-drivers-on-linux-pop-_os/">
284
285        <img class="post-card-image"
286            srcset="https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
287                    https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
288                    https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
289                    https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
290            sizes="(max-width: 1000px) 400px, 800px"
291            src="https://images.unsplash.com/photo-1464820453369-31d2c0b651af?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fGNvbG91cnN8ZW58MHx8fHwxNjYzMDU5MzI5&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
292            alt="Installing Samsung Printer Drivers on Pop!_OS"
293            loading="lazy"
294        />
295
296
297    </a>
298
299    <div class="post-card-content">
300
301        <a class="post-card-content-link" href="/samsung-printer-drivers-on-linux-pop-_os/">
302            <header class="post-card-header">
303                <div class="post-card-tags">
304                        <span class="post-card-primary-tag">Tech</span>
305                </div>
306                <h2 class="post-card-title">
307                    Installing Samsung Printer Drivers on Pop!_OS
308                </h2>
309            </header>
310                <div class="post-card-excerpt">Quick guide on how to install Samsung printer drivers on Linux</div>
311        </a>
312
313        <footer class="post-card-meta">
314            <time class="post-card-meta-date" datetime="2022-02-02">02 Feb 2022</time>
315                <span class="post-card-meta-length">1 min read</span>
316        </footer>
317
318    </div>
319
320</article>
321            
322<article class="post-card post tag-tech tag-self-hosting">
323
324    <a class="post-card-image-link" href="/create-a-static-home-page-in-ghost-blog/">
325
326        <img class="post-card-image"
327            srcset="https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
328                    https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
329                    https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
330                    https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
331            sizes="(max-width: 1000px) 400px, 800px"
332            src="https://images.unsplash.com/photo-1611434132218-d687f8a5f378?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN0YXRpY3xlbnwwfHx8fDE2MzA1NzU0NTQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
333            alt="Create a static home page in Ghost"
334            loading="lazy"
335        />
336
337
338    </a>
339
340    <div class="post-card-content">
341
342        <a class="post-card-content-link" href="/create-a-static-home-page-in-ghost-blog/">
343            <header class="post-card-header">
344                <div class="post-card-tags">
345                        <span class="post-card-primary-tag">Tech</span>
346                </div>
347                <h2 class="post-card-title">
348                    Create a static home page in Ghost
349                </h2>
350            </header>
351                <div class="post-card-excerpt">Ghost is a great platform, but it lacks one little functionality that I&#39;m looking for... a static home page. So let&#39;s fix that.</div>
352        </a>
353
354        <footer class="post-card-meta">
355            <time class="post-card-meta-date" datetime="2021-09-05">05 Sep 2021</time>
356                <span class="post-card-meta-length">3 min read</span>
357        </footer>
358
359    </div>
360
361</article>
362            
363<article class="post-card post tag-tech tag-finance featured">
364
365    <a class="post-card-image-link" href="/how-to-import-gold-prices-in-google-sheets/">
366
367        <img class="post-card-image"
368            srcset="https://images.unsplash.com/photo-1623743587733-469438d17975?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
369                    https://images.unsplash.com/photo-1623743587733-469438d17975?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
370                    https://images.unsplash.com/photo-1623743587733-469438d17975?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
371                    https://images.unsplash.com/photo-1623743587733-469438d17975?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
372            sizes="(max-width: 1000px) 400px, 800px"
373            src="https://images.unsplash.com/photo-1623743587733-469438d17975?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGdvbGQlMjBjb2lufGVufDB8fHx8MTYzMDUzNDc0Nw&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
374            alt="How to import live Gold / Silver spot prices in Google Sheets"
375            loading="lazy"
376        />
377
378
379    </a>
380
381    <div class="post-card-content">
382
383        <a class="post-card-content-link" href="/how-to-import-gold-prices-in-google-sheets/">
384            <header class="post-card-header">
385                <div class="post-card-tags">
386                        <span class="post-card-primary-tag">Tech</span>
387                        <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
388    <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
389</svg> Featured</span>
390                </div>
391                <h2 class="post-card-title">
392                    How to import live Gold / Silver spot prices in Google Sheets
393                </h2>
394            </header>
395                <div class="post-card-excerpt">This method will let you import live prices for gold / silver from a site of your choice using a simple formula.</div>
396        </a>
397
398        <footer class="post-card-meta">
399            <time class="post-card-meta-date" datetime="2021-09-01">01 Sep 2021</time>
400                <span class="post-card-meta-length">4 min read</span>
401        </footer>
402
403    </div>
404
405</article>
406            
407<article class="post-card post tag-docker tag-self-hosting tag-synology tag-tech">
408
409    <a class="post-card-image-link" href="/replace-synology-nas-reverse-proxy/">
410
411        <img class="post-card-image"
412            srcset="https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
413                    https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
414                    https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
415                    https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
416            sizes="(max-width: 1000px) 400px, 800px"
417            src="https://images.unsplash.com/photo-1535745122259-f1e187953c4c?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDQwfHxkaXJlY3Rpb25zfGVufDB8fHx8MTYyNzkwNDU3OQ&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
418            alt="Post-Mortem: Replacing the default reverse proxy on Synology NAS"
419            loading="lazy"
420        />
421
422
423    </a>
424
425    <div class="post-card-content">
426
427        <a class="post-card-content-link" href="/replace-synology-nas-reverse-proxy/">
428            <header class="post-card-header">
429                <div class="post-card-tags">
430                        <span class="post-card-primary-tag">Docker</span>
431                </div>
432                <h2 class="post-card-title">
433                    Post-Mortem: Replacing the default reverse proxy on Synology NAS
434                </h2>
435            </header>
436                <div class="post-card-excerpt">The full process of replacing the default reverse proxy on a Synology NAS; the issues I encountered and how I resolved them.</div>
437        </a>
438
439        <footer class="post-card-meta">
440            <time class="post-card-meta-date" datetime="2021-08-02">02 Aug 2021</time>
441                <span class="post-card-meta-length">7 min read</span>
442        </footer>
443
444    </div>
445
446</article>
447            
448<article class="post-card post tag-docker tag-self-hosting tag-synology tag-tech featured">
449
450    <a class="post-card-image-link" href="/synology-nas-how-to-run-docker-commands-without-sudo/">
451
452        <img class="post-card-image"
453            srcset="https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
454                    https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
455                    https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
456                    https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
457            sizes="(max-width: 1000px) 400px, 800px"
458            src="https://images.unsplash.com/photo-1589652717521-10c0d092dea9?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDEwfHxjb21wdXRlcnxlbnwwfHx8fDE2Mjc5MDAyNjY&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
459            alt="How to run Docker commands without sudo on a Synology NAS"
460            loading="lazy"
461        />
462
463
464    </a>
465
466    <div class="post-card-content">
467
468        <a class="post-card-content-link" href="/synology-nas-how-to-run-docker-commands-without-sudo/">
469            <header class="post-card-header">
470                <div class="post-card-tags">
471                        <span class="post-card-primary-tag">Docker</span>
472                        <span class="post-card-featured"><svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
473    <path d="M4.49365 4.58752C3.53115 6.03752 2.74365 7.70002 2.74365 9.25002C2.74365 10.6424 3.29678 11.9778 4.28134 12.9623C5.26591 13.9469 6.60127 14.5 7.99365 14.5C9.38604 14.5 10.7214 13.9469 11.706 12.9623C12.6905 11.9778 13.2437 10.6424 13.2437 9.25002C13.2437 6.00002 10.9937 3.50002 9.16865 1.68127L6.99365 6.25002L4.49365 4.58752Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
474</svg> Featured</span>
475                </div>
476                <h2 class="post-card-title">
477                    How to run Docker commands without sudo on a Synology NAS
478                </h2>
479            </header>
480                <div class="post-card-excerpt">A quick guide to enable sudoless docker commands.</div>
481        </a>
482
483        <footer class="post-card-meta">
484            <time class="post-card-meta-date" datetime="2021-07-28">28 Jul 2021</time>
485                <span class="post-card-meta-length">1 min read</span>
486        </footer>
487
488    </div>
489
490</article>
491            
492<article class="post-card post tag-synology tag-tech">
493
494    <a class="post-card-image-link" href="/how-to-install-nano-on-synology-nas/">
495
496        <img class="post-card-image"
497            srcset="https://images.unsplash.com/photo-1517819655378-25fe37197692?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
498                    https://images.unsplash.com/photo-1517819655378-25fe37197692?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
499                    https://images.unsplash.com/photo-1517819655378-25fe37197692?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
500                    https://images.unsplash.com/photo-1517819655378-25fe37197692?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
501            sizes="(max-width: 1000px) 400px, 800px"
502            src="https://images.unsplash.com/photo-1517819655378-25fe37197692?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHN5bm9sb2d5fGVufDB8fHx8MTYxNTcyMzgyNg&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
503            alt="How to install nano on a Synology NAS"
504            loading="lazy"
505        />
506
507
508    </a>
509
510    <div class="post-card-content">
511
512        <a class="post-card-content-link" href="/how-to-install-nano-on-synology-nas/">
513            <header class="post-card-header">
514                <div class="post-card-tags">
515                        <span class="post-card-primary-tag">Synology</span>
516                </div>
517                <h2 class="post-card-title">
518                    How to install nano on a Synology NAS
519                </h2>
520            </header>
521                <div class="post-card-excerpt">This article will walk you through how to install the nano editor on your Synology NAS for editing files within the SSH terminal.</div>
522        </a>
523
524        <footer class="post-card-meta">
525            <time class="post-card-meta-date" datetime="2021-03-14">14 Mar 2021</time>
526                <span class="post-card-meta-length">2 min read</span>
527        </footer>
528
529    </div>
530
531</article>
532            
533<article class="post-card post tag-docker tag-tech tag-self-hosting">
534
535    <a class="post-card-image-link" href="/how-to-install-upgrade-portainer/">
536
537        <img class="post-card-image"
538            srcset="/content/images/size/w300/2021/08/portainer-logo-1-.png 300w,
539                    /content/images/size/w600/2021/08/portainer-logo-1-.png 600w,
540                    /content/images/size/w1000/2021/08/portainer-logo-1-.png 1000w,
541                    /content/images/size/w2000/2021/08/portainer-logo-1-.png 2000w"
542            sizes="(max-width: 1000px) 400px, 800px"
543            src="/content/images/size/w600/2021/08/portainer-logo-1-.png"
544            alt="How to install or upgrade Portainer"
545            loading="lazy"
546        />
547
548
549    </a>
550
551    <div class="post-card-content">
552
553        <a class="post-card-content-link" href="/how-to-install-upgrade-portainer/">
554            <header class="post-card-header">
555                <div class="post-card-tags">
556                        <span class="post-card-primary-tag">Docker</span>
557                </div>
558                <h2 class="post-card-title">
559                    How to install or upgrade Portainer
560                </h2>
561            </header>
562                <div class="post-card-excerpt">Straight to the point: the commands you&#39;ll need for installing or upgrading Portainer to the latest version.</div>
563        </a>
564
565        <footer class="post-card-meta">
566            <time class="post-card-meta-date" datetime="2021-02-04">04 Feb 2021</time>
567        </footer>
568
569    </div>
570
571</article>
572            
573<article class="post-card post tag-tech tag-self-hosting">
574
575    <a class="post-card-image-link" href="/using-github-to-manage-your-ssh-keys-across-devices/">
576
577        <img class="post-card-image"
578            srcset="https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;300 300w,
579                    https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600 600w,
580                    https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;1000 1000w,
581                    https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;2000 2000w"
582            sizes="(max-width: 1000px) 400px, 800px"
583            src="https://images.unsplash.com/photo-1512309739986-032cbacdb618?crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;fm&#x3D;jpg&amp;ixid&#x3D;MnwxMTc3M3wwfDF8c2VhcmNofDd8fGtleXN8ZW58MHx8fHwxNjE1NzIzOTc0&amp;ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;w&#x3D;600"
584            alt="Using GitHub to manage multiple SSH keys across various devices"
585            loading="lazy"
586        />
587
588
589    </a>
590
591    <div class="post-card-content">
592
593        <a class="post-card-content-link" href="/using-github-to-manage-your-ssh-keys-across-devices/">
594            <header class="post-card-header">
595                <div class="post-card-tags">
596                        <span class="post-card-primary-tag">Tech</span>
597                </div>
598                <h2 class="post-card-title">
599                    Using GitHub to manage multiple SSH keys across various devices
600                </h2>
601            </header>
602                <div class="post-card-excerpt">A little tip to take away some of the manual pain with having to add or update SSH keys across your servers.</div>
603        </a>
604
605        <footer class="post-card-meta">
606            <time class="post-card-meta-date" datetime="2020-11-22">22 Nov 2020</time>
607                <span class="post-card-meta-length">1 min read</span>
608        </footer>
609
610    </div>
611
612</article>
613            
614<article class="post-card post tag-tech tag-self-hosting tag-docker tag-synology">
615
616    <a class="post-card-image-link" href="/backup-your-docker-containers-as-docker-compose-files/">
617
618        <img class="post-card-image"
619            srcset="https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;fm&#x3D;jpg&amp;crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;ixid&#x3D;eyJhcHBfaWQiOjExNzczfQ&amp;w&#x3D;300 300w,
620                    https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;fm&#x3D;jpg&amp;crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;ixid&#x3D;eyJhcHBfaWQiOjExNzczfQ&amp;w&#x3D;600 600w,
621                    https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;fm&#x3D;jpg&amp;crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;ixid&#x3D;eyJhcHBfaWQiOjExNzczfQ&amp;w&#x3D;1000 1000w,
622                    https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;fm&#x3D;jpg&amp;crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;ixid&#x3D;eyJhcHBfaWQiOjExNzczfQ&amp;w&#x3D;2000 2000w"
623            sizes="(max-width: 1000px) 400px, 800px"
624            src="https://images.unsplash.com/photo-1593968962032-f0e9a88dd09e?ixlib&#x3D;rb-1.2.1&amp;q&#x3D;80&amp;fm&#x3D;jpg&amp;crop&#x3D;entropy&amp;cs&#x3D;tinysrgb&amp;fit&#x3D;max&amp;ixid&#x3D;eyJhcHBfaWQiOjExNzczfQ&amp;w&#x3D;600"
625            alt="Create Docker-Compose files from your Docker containers"
626            loading="lazy"
627        />
628
629
630    </a>
631
632    <div class="post-card-content">
633
634        <a class="post-card-content-link" href="/backup-your-docker-containers-as-docker-compose-files/">
635            <header class="post-card-header">
636                <div class="post-card-tags">
637                        <span class="post-card-primary-tag">Tech</span>
638                </div>
639                <h2 class="post-card-title">
640                    Create Docker-Compose files from your Docker containers
641                </h2>
642            </header>
643                <div class="post-card-excerpt">A simple script that will create Docker-Compose files of your active containers so that you can back them up or use them on another server to re-create your containers.</div>
644        </a>
645
646        <footer class="post-card-meta">
647            <time class="post-card-meta-date" datetime="2020-11-15">15 Nov 2020</time>
648                <span class="post-card-meta-length">2 min read</span>
649        </footer>
650
651    </div>
652
653</article>
654    </div>
655
656    <nav class="pagination">
657    <span class="page-number">Page 1 of 1</span>
658</nav>
659
660
661</div>
662</main>
663
664    </div>
665
666    <footer class="site-footer outer">
667        <div class="inner">
668            <section class="copyright"><a href="https://andyyang.co.uk">Andy Yang</a> &copy; 2026</section>
669            <div class="site-footer-center">
670                <div class="site-footer-social-links">
671                </div>
672                <nav class="site-footer-nav">
673                    <ul class="nav">
674    <li class="nav-linkedin"><a href="https://linkedin.com/in/andyyanguk">linkedin</a></li>
675    <li class="nav-github"><a href="https://github.com/andyyanguk">github</a></li>
676    <li class="nav-rss"><a href="https://andyyang.co.uk/rss/">rss</a></li>
677</ul>
678
679                </nav>
680            </div>
681            <div class="gh-powered-by"><a href="https://ghost.org/" target="_blank" rel="noopener">Powered by Ghost</a></div>
682        </div>
683    </footer>
684
685</div>
686
687
688<script src="/assets/built/casper.js?v=YtPhrez3GuGLVDYs" defer></script>
688
689
690<script src="https://swetrix.org/swetrix.js" defer></script>
vendor: 1 bytes, line 690
690
691<script>
692  document.addEventListener('DOMContentLoaded', function() {
693    swetrix.init('5umVNMuH6rU5', {
694      apiURL: 'https://swetrixapi-xww0oo408o8g8wcw488c08gk.gc.ytek.uk/log',
695    })
696    swetrix.trackViews()
697  })
698</script>
698
699
700<noscript>
701  <img
702    src="https://swetrixapi-xww0oo408o8g8wcw488c08gk.gc.ytek.uk/log/noscript?pid=5umVNMuH6rU5"
703    alt=""
704    referrerpolicy="no-referrer-when-downgrade"
705  />
706</noscript>
707
708<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"d60acbb022b941d6805f5e7030a6b166","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 708
708
709<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a452a9c7188310f7',t:'MTc5MTEwMDkzNA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
709</body>
710</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.