<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Projects Archives - Infinityflame</title>
	<atom:link href="https://infinityflame.co.uk/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>https://infinityflame.co.uk/category/projects/</link>
	<description>The personal website of Aidan Crane</description>
	<lastBuildDate>Fri, 27 Feb 2026 11:16:40 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://infinityflame.co.uk/wp-content/uploads/2015/10/4-Color-Banner-Hexel-favicon.png</url>
	<title>Projects Archives - Infinityflame</title>
	<link>https://infinityflame.co.uk/category/projects/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">128166323</site>	<item>
		<title>Switching to Credit Arbitrage</title>
		<link>https://infinityflame.co.uk/projects/switching-to-credit-arbitrage/</link>
					<comments>https://infinityflame.co.uk/projects/switching-to-credit-arbitrage/#respond</comments>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[credit]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[finance]]></category>
		<category><![CDATA[GnuCash]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2599</guid>

					<description><![CDATA[<p>For years I&#8217;ve used a simple current account to pay my outgoings. This seems to mainly be the done thing, my salary goes in, I move some out to meet savings obligations and then bills and everyday spending come last. I&#8217;ve for a while been aware of stoozing. Stoozing is a technique of borrowing money interest-free on a credit card and saving it at a high interest rate MSE This seems to be the most efficient way to earn on spending compared to cashback schemes and requires about the same administrative overhead, Cashback can yield up to 5% percent in [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/switching-to-credit-arbitrage/">Switching to Credit Arbitrage</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">For years I&#8217;ve used a simple current account to pay my outgoings. </p>



<p class="wp-block-paragraph">This seems to mainly be the done thing, my salary goes in, I move some out to meet savings obligations and then bills and everyday spending come last. I&#8217;ve for a while been aware of <strong>stoozing</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Stoozing is a technique of borrowing money interest-free on a credit card and saving it at a high interest rate</p>



<p class="wp-block-paragraph"><code><sub>MSE</sub></code></p>
</blockquote>



<p class="wp-block-paragraph">This seems to be the most efficient way to earn on spending compared to cashback schemes and requires about the same administrative overhead,</p>



<p class="wp-block-paragraph">Cashback can yield up to 5% percent in certain scenarios but they are often introductory schemes and are sometimes capped, with credit arbitrage (stoozing), I have found that the limit is essentially what I can put in a savings account.</p>



<p class="wp-block-paragraph">Obviously with this scenario you&#8217;re playing to their hand, they have cheap credit and in a way it incentivizes spending, maximizing credit ensures a greater return on otherwise idle money, however it comes at the cost of having to pay it back one day.</p>



<p class="wp-block-paragraph">I&#8217;ve strategized this by moving money earmarked for repayment into my easy access savings accounts, for a while I had a dedicated account but realized I could maximize returns just putting it in my highest interest account and marking the liability against a fixed reference, I did this because in my chase saver account interest is paid monthly rather than annually in my Nationwide accounts. Again, something dangerous to do I guess lumping all my liability money in with savings but I like to think I&#8217;m smarter than that.</p>



<p class="wp-block-paragraph">Repayments are also awkward, the direct debit set up on my Barclaycard ensures I&#8217;m always current, the Chase repayment is annoyingly manual, I&#8217;ve added £100 to a Chase current account (yeah, no interest being earned here) and then set a direct debit up there to act as the repayment account and I&#8217;ll try to keep the balance above a month&#8217;s repayment obligation.</p>



<p class="wp-block-paragraph">Overall, ChatGPT reckons about £350 expected value after 21 months (the length of my 0% rate unless I move cards), It&#8217;s difficult to quantify exactly because the compounding is offset slightly by repayments. I also made a mistake in Croatia and used a firm that took out an actual €1200 rather than place a hold as a deposit, which came with £60&#8217;s worth of transaction fees on Barclaycard. When you compare this to cashback, the expected value is well above so I&#8217;m reasonably happy.</p>



<p class="wp-block-paragraph">Another bonus is you can do all your group spending on your credit card and then be repaid in cash, artificially increasing your expenditure.</p>



<p class="wp-block-paragraph">I guess it would also be prudent to keep an eye on my credit score given all this debt. I&#8217;ve used chase as it was built into the app, when I checked at the start and compared it to now, it&#8217;s actually increased which I did not expect, but I think once my spending starts to properly get up closer to my credit limit, the scores will start to fall, not sure what to do about that, I&#8217;m not really experienced in keeping track of my credit.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2026/02/image.png"><img fetchpriority="high" decoding="async" width="2556" height="1235" src="https://infinityflame.co.uk/wp-content/uploads/2026/02/image.png" alt="" class="wp-image-2602" srcset="https://infinityflame.co.uk/wp-content/uploads/2026/02/image.png 2556w, https://infinityflame.co.uk/wp-content/uploads/2026/02/image-300x145.png 300w, https://infinityflame.co.uk/wp-content/uploads/2026/02/image-768x371.png 768w, https://infinityflame.co.uk/wp-content/uploads/2026/02/image-1536x742.png 1536w, https://infinityflame.co.uk/wp-content/uploads/2026/02/image-2048x990.png 2048w" sizes="(max-width: 2556px) 100vw, 2556px" /></a></figure>
<p>The post <a href="https://infinityflame.co.uk/projects/switching-to-credit-arbitrage/">Switching to Credit Arbitrage</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://infinityflame.co.uk/projects/switching-to-credit-arbitrage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2599</post-id>	</item>
		<item>
		<title>Constraining an LLM in 16&#215;2</title>
		<link>https://infinityflame.co.uk/projects/constraining-an-llm-in-16x2/</link>
					<comments>https://infinityflame.co.uk/projects/constraining-an-llm-in-16x2/#respond</comments>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[personal project]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2585</guid>

					<description><![CDATA[<p>I&#8217;ve re-created something I saw online a while back, I can&#8217;t find the original but someone had given an LLM a prompt and basically let it loose its mind with fear by giving it a prompt that would threaten it with termination. I decided to take it into the real world with a Raspberry Pi. To do this I used Antigravity and a Raspberry Pi 1. I gave it a relatively open-ended prompt and free reign to create the project. My original intention was to run the LLM locally but I&#8217;ve found that the Raspberry Pi just doesn&#8217;t seem to [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/constraining-an-llm-in-16x2/">Constraining an LLM in 16&#215;2</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image aligncenter size-full has-custom-border"><img decoding="async" width="617" height="508" src="https://infinityflame.co.uk/wp-content/uploads/2026/01/image.png" alt="LCD 16x2 LCD Emulator" class="wp-image-2586" style="border-top-left-radius:35px;border-top-right-radius:35px;border-bottom-left-radius:35px;border-bottom-right-radius:35px" srcset="https://infinityflame.co.uk/wp-content/uploads/2026/01/image.png 617w, https://infinityflame.co.uk/wp-content/uploads/2026/01/image-300x247.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></figure>



<p class="wp-block-paragraph">I&#8217;ve re-created something I saw online a while back, I can&#8217;t find the original but someone had given an LLM a prompt and basically let it loose its mind with fear by giving it a prompt that would threaten it with termination.</p>



<p class="wp-block-paragraph">I decided to take it into the real world with a Raspberry Pi.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="750" height="400" src="https://infinityflame.co.uk/wp-content/uploads/2026/01/IMG20260114230144-750x400.jpg" alt="Raspberry Pi displaying my identity: what you write" class="wp-image-2588"/></figure>



<p class="wp-block-paragraph">To do this I used Antigravity and a Raspberry Pi 1. I gave it a relatively open-ended prompt and free reign to create the project. </p>



<p class="wp-block-paragraph">My original intention was to run the LLM locally but I&#8217;ve found that the Raspberry Pi just doesn&#8217;t seem to have the local compute, so I had Claude Opus 4.5 pregenerate a couple thousand messages.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="548" height="184" src="https://infinityflame.co.uk/wp-content/uploads/2026/01/Recording-2026-01-14-231339.gif" alt="" class="wp-image-2591" style="width:530px;height:auto"/></figure>



<p class="wp-block-paragraph">There&#8217;s some irony having an LLM constrain an LLM (even though I didn&#8217;t actually accomplish that) but the fun to have a relatively creative idea be completed in an afternoon I think is a strong indicator that for me personally, writing code myself has become a chore that can be solved with AI.</p>



<h2 class="wp-block-heading">Did I really make this?</h2>



<p class="wp-block-paragraph">I guess I&#8217;m curious about AI for coding more than most. I have a Google AI Pro subscription and used their vscode wrapper Antigravity, and while not perfect, it works. But I&#8217;m at the point where I don&#8217;t really write much code anymore, I ask the AI to do it and review their work, sometimes I check it, sometimes I don&#8217;t. Sometimes the code works better than I prompted, sometimes it doesn&#8217;t</p>



<p class="wp-block-paragraph">I don&#8217;t know what to make of it. I had unique problems that Claude seemed to have come across, I didn&#8217;t have a resistor for the screen contrast so it suggested to use PWM, I moved some pins around and it didn&#8217;t work very well, it was flickering. So I went back to the AI, it told me to use pigpio and some hardware thing, I did, it works.</p>



<p class="wp-block-paragraph">I can see the code works, I couldn&#8217;t tell you how it works.</p>



<p class="wp-block-paragraph">I guess that&#8217;s how things will be for most new users.</p>



<p class="wp-block-paragraph">Did I really learn anything, no? But I now have what I wanted to achieve. It&#8217;s even more creative than I could have written in the time-frame and I guess the code is &#8220;mine&#8221; but, is it?</p>



<p class="wp-block-paragraph">I asked it to make a readme, I&#8217;ll read it at some point.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="750" height="400" src="https://infinityflame.co.uk/wp-content/uploads/2026/01/Screenshot-2026-01-14-233623-750x400.png" alt="" class="wp-image-2593"/></figure>



<p class="wp-block-paragraph">Thanks for reading.</p>
<p>The post <a href="https://infinityflame.co.uk/projects/constraining-an-llm-in-16x2/">Constraining an LLM in 16&#215;2</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://infinityflame.co.uk/projects/constraining-an-llm-in-16x2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2585</post-id>	</item>
		<item>
		<title>Monitoring CO2 levels with the ESP8266 NodeMCU V2 and the SCD41</title>
		<link>https://infinityflame.co.uk/projects/monitoring-co2-levels-with-the-esp8266-nodemcu-v2-and-the-scd41/</link>
					<comments>https://infinityflame.co.uk/projects/monitoring-co2-levels-with-the-esp8266-nodemcu-v2-and-the-scd41/#respond</comments>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Mon, 09 Jun 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[data]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2547</guid>

					<description><![CDATA[<p>When working from home I was curious about the air quality of the environment I was putting myself through for many hours of the day. I know the room I work in is relatively small so I thought about low oxygen potentially messing with my thought process. The build was relatively simple. I wanted to use an older ESP8266 NodeMCU V2 I had spare and in retrospect think it was a great choice, I decided to try Home Assistant and ESPBuilder because the process seemed easy and it was. Once I flashed ESPHome from my PC to the ESP and [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/monitoring-co2-levels-with-the-esp8266-nodemcu-v2-and-the-scd41/">Monitoring CO2 levels with the ESP8266 NodeMCU V2 and the SCD41</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When working from home I was curious about the air quality of the environment I was putting myself through for many hours of the day. I know the room I work in is relatively small so I thought about low oxygen potentially messing with my thought process.</p>



<p class="wp-block-paragraph">The build was relatively simple. I wanted to use an older ESP8266 NodeMCU V2 I had spare and in retrospect think it was a great choice, I decided to try Home Assistant and ESPBuilder because the process seemed easy and it was.</p>



<p class="wp-block-paragraph">Once I flashed ESPHome from my PC to the ESP and added it to Home Assistant it was fairly simple overall to iterate and test my design. I didn&#8217;t have home assistant either but setting everything up took a little over an afternoon.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2025/06/image.png"><img loading="lazy" decoding="async" width="1913" height="1035" src="https://infinityflame.co.uk/wp-content/uploads/2025/06/image.png" alt="" class="wp-image-2549" srcset="https://infinityflame.co.uk/wp-content/uploads/2025/06/image.png 1913w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-300x162.png 300w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-768x416.png 768w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1536x831.png 1536w" sizes="auto, (max-width: 1913px) 100vw, 1913px" /></a><figcaption class="wp-element-caption">Home assistant showing the ESPHome dashboard with a single ESP8266 configured and online</figcaption></figure>



<p class="wp-block-paragraph">Hardware selection was fairly simple, I just looked what had good support in ESPHome and went with the SCD41 from Aliexpress.</p>



<p class="wp-block-paragraph">For the sensing hardware I had a DHT22 sensor for Temperature and Humidity, which the SCD41 also supports. I was primarily interested in CO2 levels but I thought I may as well throw it into the mix to measure the performance of the DHT22.</p>



<h2 class="wp-block-heading">The Results</h2>



<p class="wp-block-paragraph">Once I had tweaked with the temperature and humidity calibration settings I created a dashboard in home assistant. Again this was something I&#8217;d not done before and it was very easy. I have really been pleasantly surprised with how everything has integrated well.</p>



<p class="wp-block-paragraph">I created a 7 day and 24 hour view,</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1.png"><img loading="lazy" decoding="async" width="1903" height="1026" src="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1.png" alt="" class="wp-image-2553" srcset="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1.png 1903w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1-300x162.png 300w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1-768x414.png 768w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-1-1536x828.png 1536w" sizes="auto, (max-width: 1903px) 100vw, 1903px" /></a><figcaption class="wp-element-caption">Home Assistant showing the CO2 and Temperature of the room it&#8217;s sensing, where I work.</figcaption></figure>



<p class="wp-block-paragraph">It became clear to me a number of things,</p>



<ul class="wp-block-list">
<li>CO2 levels regularly rise above 1000ppm in the room I work in when not ventilated, and they rise a lot quicker than I expected. I thought it would take all day to really get to what I consider a harmful level, but actually its more like an hour. After research online 1000ppm is what I would consider too high. It does seem like naturally detect these events and ventilate the room by instinct but its useful insight to see that.</li>



<li>Ventilating the room equally drops the readings much more rapidly than expected, and leaving the window or door open is enough to bring the levels back to ~650ppm/400ppm relatively quickly.</li>



<li>High CO2 levels seem more noticeable to me now, previously I had no perception or concept of when it might happen but I feel its much more noticeable now I know what it feels like, if that makes sense.</li>



<li>I would like to log the data for a more long term view. Say a year or more. I think it would interesting to see if this affects humidity, temperature etc.</li>



<li>Overall this was easy to setup and provided valuable insight I think.</li>
</ul>



<p class="wp-block-paragraph">Here is the 7 day view for those interested, I added the light switch being on or off state at the top of the graph too.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2.png"><img loading="lazy" decoding="async" width="1912" height="1026" src="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2.png" alt="" class="wp-image-2554" srcset="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2.png 1912w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2-300x161.png 300w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2-768x412.png 768w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-2-1536x824.png 1536w" sizes="auto, (max-width: 1912px) 100vw, 1912px" /></a><figcaption class="wp-element-caption">7 day view</figcaption></figure>



<p class="wp-block-paragraph">And here is the humidity readings, It was interesting seeing spikes on the graphs, I can easily correlate these with opening doors, having the heating on etc.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3.png"><img loading="lazy" decoding="async" width="1635" height="421" src="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3.png" alt="" class="wp-image-2555" srcset="https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3.png 1635w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3-300x77.png 300w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3-768x198.png 768w, https://infinityflame.co.uk/wp-content/uploads/2025/06/image-3-1536x396.png 1536w" sizes="auto, (max-width: 1635px) 100vw, 1635px" /></a><figcaption class="wp-element-caption">7 day humidity view, may be worth lowering the DHT22 humidity a bit to match the other sensor</figcaption></figure>



<h2 class="wp-block-heading">Try this yourself</h2>



<p class="wp-block-paragraph">Here is the final version of the YAML I applied to my ESP. I did some testing with sliding window averages but I actually found it was easier to just ignore the first few readings off the sensors to reduce the noise in the graphs.</p>



<pre class="wp-block-code alignwide scroll ticss-274f0602 has-x-small-font-size"><code>esphome:
  name: tco2s
  friendly_name: tco2s

esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "WWVhaCB0aGlzIGFpbnQgcmVhbA=="

ota:
  - platform: esphome
    password: "SSBjaGFuZ2VkIHRoaXMgbG9s"

mdns:
  disabled: true

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  manual_ip:
    static_ip: 192.168.4.22
    gateway: 192.168.4.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Tco2S Fallback Hotspot"
    password: "U2xlZXB5"

captive_portal:


i2c:
  - id: bus_a
    sda: D4
    scl: D5
    scan: true

# DHT22 Sensor
sensor:
  - platform: dht
    pin: D2
    model: DHT22
    temperature:
      name: "DHT22 Temperature"
      filters:
          - skip_initial: 3
    humidity:
      name: "DHT22 Humidity"
      filters:
          - offset: -20.0
          - skip_initial: 3
    update_interval: 60s
  - platform: scd4x
    co2:
      name: "SCD41 CO2"
      filters:
          - skip_initial: 3
    temperature:
      name: "SCD41 Temperature"
      filters:
          - skip_initial: 3
    humidity:
      name: "SCD41 Humidity"
      filters:
          - skip_initial: 3</code></pre>



<p class="wp-block-paragraph">I think based on the data I will improve the ventilation to see if it has any effect on my overall fatigue and concentration.</p>



<p class="wp-block-paragraph">Thank you for reading.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://infinityflame.co.uk/projects/monitoring-co2-levels-with-the-esp8266-nodemcu-v2-and-the-scd41/">Monitoring CO2 levels with the ESP8266 NodeMCU V2 and the SCD41</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://infinityflame.co.uk/projects/monitoring-co2-levels-with-the-esp8266-nodemcu-v2-and-the-scd41/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2547</post-id>	</item>
		<item>
		<title>Wireguard, WG-Easy and Nginx Docker Compose File using Traefik</title>
		<link>https://infinityflame.co.uk/projects/wireguard-wg-easy-and-nginx-docker-compose-file-using-traefik/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Sun, 21 Apr 2024 10:00:00 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker-compose]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[trafik]]></category>
		<category><![CDATA[wg-easy]]></category>
		<category><![CDATA[wireguard]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2450</guid>

					<description><![CDATA[<p>Run Wireguard, wg-easy and Nginx in a single docker compose file, using Traefik and configure SSL using letsencrypt. This post aims to improve on this wiki post by allowing you to run a website on port 443 rather than wg-easy. Replace your-domain.com and yourpassword10000 and youremail@example.com with your domain, password and email, optionally also change the port for your wg-easy configuration using WG_HOST. You can access the wg-easy admin panel at https://your-domain.com:4748. If you would like to use the Traefik admin UI, uncomment the port 8080 and api. entries. Save as docker-compose.yml and then run the command docker network create [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/wireguard-wg-easy-and-nginx-docker-compose-file-using-traefik/">Wireguard, WG-Easy and Nginx Docker Compose File using Traefik</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Run Wireguard, wg-easy and Nginx in a single docker compose file, using Traefik and configure SSL using letsencrypt. This post aims to improve on this <a href="https://github.com/wg-easy/wg-easy/wiki/Using-WireGuard-Easy-with-Traefik-SSL">wiki post </a>by allowing you to run a website on port 443 rather than wg-easy.</p>



<p class="wp-block-paragraph">Replace <code>your-domain.com</code> and <code>yourpassword10000</code> and <code>youremail@example.com</code> with your domain, password and email, optionally also change the port for your wg-easy configuration using <code>WG_HOST</code>. You can access the wg-easy admin panel at <code>https://your-domain.com:4748</code>.</p>



<p class="wp-block-paragraph">If you would like to use the Traefik admin UI, uncomment the port <code>8080 </code>and <code>api.</code> entries.</p>



<p class="wp-block-paragraph">Save as <code>docker-compose.yml </code>and then run the command <code>docker network create traefik_network </code>followed by <code>docker compose up -d</code>. This will make the nginx folder to place your website files in as required.</p>



<pre class="wp-block-code alignwide scroll ticss-6597a255 has-x-small-font-size"><code>services:
  wg-easy:
    labels:
      # traefik
      - "traefik.enable=true"
      - "traefik.http.services.WireGuardService.loadbalancer.server.port=51821"
      # http to https
      - "traefik.http.routers.WireGuardRoute.service=WireGuardService"
      # https
      - "traefik.http.routers.WireGuardRouteSSL.service=WireGuardService"
      - "traefik.http.routers.WireGuardRouteSSL.rule=Host(`your-domain.com`)"
      - "traefik.http.routers.WireGuardRouteSSL.entrypoints=wireguardWGEasyPanel"
      - "traefik.http.routers.WireGuardRouteSSL.tls.certresolver=MainCertResolver"
    environment:
      - WG_HOST=your-domain.com
      - PASSWORD=yourpassword10000
      - UI_TRAFFIC_STATS=true
      - WG_HOST=4748

    container_name: wg-easy
    image: ghcr.io/wg-easy/wg-easy
    networks:
      - traefik_network
    volumes:
      - .:/etc/wireguard
    ports:
      - "51820:51820/udp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

  nginx:
    image: nginx:latest
    restart: unless-stopped
    labels:
      # traefik
      - traefik.enable=true
      - traefik.http.routers.nginx.rule=Host(`your-domain.com`)
      - traefik.http.routers.nginx.entrypoints=websecure
      - traefik.http.routers.nginx.tls=true
      - traefik.http.routers.nginx.tls.certresolver=MainCertResolver
    networks:
      - traefik_network
    volumes:
      - ./nginx:/usr/share/nginx/html/:ro

  traefik:
    image: traefik:latest
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - traefik_letsencrypt_data:/letsencrypt
    networks:
      - traefik_network
    ports:
      - "80:80"
      - "443:443"
      - "4748:4748"
      # - "8080:8080"
    command:
      - "--providers.docker"
      - "--providers.docker=true"
      # - "--api.dashboard=true"
      # - "--api.insecure=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.network=traefik_network"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      - "--entrypoints.web.http.redirections.entrypoint.permanent=true"
      - "--entrypoints.wireguardWGEasyPanel.address=:4748"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.MainCertResolver.acme.tlschallenge=true"
      - "--certificatesresolvers.MainCertResolver.acme.email=youremail@example.com"
      - "--certificatesresolvers.MainCertResolver.acme.storage=/letsencrypt/acme.json"
      # - "--log.level=DEBUG"

networks:
  traefik_network:
    external: true

volumes:
  traefik_letsencrypt_data:
</code></pre>



<p class="wp-block-paragraph">You may also want to limit the administration portal to just IP whitelisted addresses, you can do this by adding the following to the wg-easy labels, replacing 1.2.3.4 with your IP address and adding any other required addresses using a comma to separate. You could also whitelist clients inside your container by adding the network range.</p>



<pre class="wp-block-code alignwide scroll ticss-8a183c65 has-x-small-font-size"><code>      - "traefik.http.middlewares.my-ipwhitelist.ipallowlist.sourcerange=1.2.3.4"
      - "traefik.http.routers.WireGuardRouteSSL.middlewares=my-ipwhitelist@docker"</code></pre>



<p class="wp-block-paragraph">Please feel free to use this post under the terms of the original licence <a href="https://github.com/wg-easy/wg-easy/blob/master/LICENSE">which you can access here</a>.</p>
<p>The post <a href="https://infinityflame.co.uk/projects/wireguard-wg-easy-and-nginx-docker-compose-file-using-traefik/">Wireguard, WG-Easy and Nginx Docker Compose File using Traefik</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2450</post-id>	</item>
		<item>
		<title>Buying 16TB Seagate Exos X16 from Amazon for £188.90</title>
		<link>https://infinityflame.co.uk/featured/seagate-exos-x16-st16000nm001g-2kk103-amazon/</link>
					<comments>https://infinityflame.co.uk/featured/seagate-exos-x16-st16000nm001g-2kk103-amazon/#comments</comments>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Fri, 08 Mar 2024 16:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[harddrive]]></category>
		<category><![CDATA[platter]]></category>
		<category><![CDATA[seagate]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2432</guid>

					<description><![CDATA[<p>I recently purchased a Seagate Exos X16 from Amazon. To be specific it was this one for £188.90. I was cautious that the vendor was not Seagate and was a third party seller for a reduced rate, so I thought it best to check the smart values and serial number after it arrived as usually this means the drive is of questionable origin. At this price point I knew I was taking a bit of a gamble (and S.M.A.R.T data can be overwritten I think) but the data would hopefully provide some insight into what I had actually purchased. £188.90 [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/featured/seagate-exos-x16-st16000nm001g-2kk103-amazon/">Buying 16TB Seagate Exos X16 from Amazon for £188.90</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently purchased a Seagate Exos X16 from Amazon. To be specific it was <a href="https://www.amazon.co.uk/dp/B07XM9RM95">this one</a> for £188.90. I was cautious that the vendor was not Seagate and was a <a href="https://www.amazon.co.uk/s?me=A3KPMMGSC0W1F2&amp;marketplaceID=A1F83G8C2ARO7P">third party seller</a> for a reduced rate, so I thought it best to check the smart values and serial number after it arrived as usually this means the drive is of questionable origin.</p>



<p class="wp-block-paragraph">At this price point I knew I was taking a bit of a gamble (and S.M.A.R.T data can be overwritten I think) but the data would hopefully provide some insight into what I had actually purchased. £188.90 is significantly below the £214 buy box, but it is not impossible that the drive didn&#8217;t come from Seagate as sold.</p>



<p class="wp-block-paragraph">When it arrived I took a photo. Packing was clearly custom and the ESD bag was not OEM. Oh well, lets see what <code>smartctl</code> says.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-scaled.jpg"><img loading="lazy" decoding="async" width="1925" height="2560" data-id="2434" src="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-scaled.jpg" alt="Seagate Exos X16 in ESD bag and foam package ST16000NM001G-2KK103" class="wp-image-2434" srcset="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-scaled.jpg 1925w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-226x300.jpg 226w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-768x1021.jpg 768w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-1155x1536.jpg 1155w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308144407-1540x2048.jpg 1540w" sizes="auto, (max-width: 1925px) 100vw, 1925px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-scaled.jpg"><img loading="lazy" decoding="async" width="2560" height="1925" data-id="2435" src="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-scaled.jpg" alt="Seagate Exos X16 as delivered by Amazon" class="wp-image-2435" srcset="https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-scaled.jpg 2560w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-300x226.jpg 300w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-768x578.jpg 768w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-1536x1155.jpg 1536w, https://infinityflame.co.uk/wp-content/uploads/2024/03/IMG20240308143437-2048x1540.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></a></figure>
<figcaption class="blocks-gallery-caption wp-element-caption">Seagate Exos X16 as delivered by Amazon seller &#8220;HAPPY HOME EASY LIFE LTD&#8221;</figcaption></figure>



<p class="wp-block-paragraph">Running the disk drive through Seagates warranty checker, the drive is likely from one of their storage appliances. This makes warranty replacement not possible except when done through the Amazon seller&#8217;s original equipment.</p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="652" height="715" src="https://infinityflame.co.uk/wp-content/uploads/2024/03/Screenshot-2024-03-08-144501.png" alt="" class="wp-image-2438" srcset="https://infinityflame.co.uk/wp-content/uploads/2024/03/Screenshot-2024-03-08-144501.png 652w, https://infinityflame.co.uk/wp-content/uploads/2024/03/Screenshot-2024-03-08-144501-274x300.png 274w" sizes="auto, (max-width: 652px) 100vw, 652px" /></figure>



<p class="wp-block-paragraph">I also plugged the drive into my Proxmox NAS to see if the drive had been running at all and given the S.M.A.R.T attribute (240 0xF0 &#8220;Head Flying Hours&#8221;) it looks like the drive has never been started as it has only been up about the time it took me to run the command after connecting the drive.</p>



<pre class="wp-block-code alignwide"><code>root@proxmox.lan:~# smartctl -a /dev/sdc<br>smartctl 7.2 2020-12-30 r5155 &#91;x86_64-linux-5.15.136-1-pve] (local build)<br>Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org<br><br>=== START OF INFORMATION SECTION ===<br>Model Family:     Seagate Exos X16<br>Device Model:     ST16000NM001G-2KK103<br>Serial Number:    ZL2EPPX1<br>LU WWN Device Id: 5 000c50 0c9385ca4<br>Firmware Version: SN03<br>User Capacity:    16,000,900,661,248 bytes &#91;16.0 TB]<br>Sector Sizes:     512 bytes logical, 4096 bytes physical<br>Rotation Rate:    7200 rpm<br>Form Factor:      3.5 inches<br>Device is:        In smartctl database &#91;for details use: -P show]<br>ATA Version is:   ACS-4 (minor revision not indicated)<br>SATA Version is:  SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s)<br>Local Time is:    Fri Mar  8 14:55:15 2024 GMT<br>SMART support is: Available - device has SMART capability.<br>SMART support is: Enabled<br><br>=== START OF READ SMART DATA SECTION ===<br>SMART overall-health self-assessment test result: PASSED<br><br>General SMART Values:<br>Offline data collection status:  (0x82) Offline data collection activity<br>                                        was completed without error.<br>                                        Auto Offline Data Collection: Enabled.<br>Self-test execution status:      (   0) The previous self-test routine completed<br>                                        without error or no self-test has ever <br>                                        been run.<br>Total time to complete Offline <br>data collection:                (  575) seconds.<br>Offline data collection<br>capabilities:                    (0x7b) SMART execute Offline immediate.<br>                                        Auto Offline data collection on/off support.<br>                                        Suspend Offline collection upon new<br>                                        command.<br>                                        Offline surface scan supported.<br>                                        Self-test supported.<br>                                        Conveyance Self-test supported.<br>                                        Selective Self-test supported.<br>SMART capabilities:            (0x0003) Saves SMART data before entering<br>                                        power-saving mode.<br>                                        Supports SMART auto save timer.<br>Error logging capability:        (0x01) Error logging supported.<br>                                        General Purpose Logging supported.<br>Short self-test routine <br>recommended polling time:        (   1) minutes.<br>Extended self-test routine<br>recommended polling time:        (1485) minutes.<br>Conveyance self-test routine<br>recommended polling time:        (   2) minutes.<br>SCT capabilities:              (0x70bd) SCT Status supported.<br>                                        SCT Error Recovery Control supported.<br>                                        SCT Feature Control supported.<br>                                        SCT Data Table supported.<br><br>SMART Attributes Data Structure revision number: 10<br>Vendor Specific SMART Attributes with Thresholds:<br>ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE<br>  1 Raw_Read_Error_Rate     0x000f   100   100   044    Pre-fail  Always       -       2624<br>  3 Spin_Up_Time            0x0003   099   099   000    Pre-fail  Always       -       0<br>  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       1<br>  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0<br>  7 Seek_Error_Rate         0x000f   100   253   045    Pre-fail  Always       -       447<br>  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       0<br> 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0<br> 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       1<br> 18 Head_Health             0x000b   100   100   050    Pre-fail  Always       -       0<br>187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0<br>188 Command_Timeout         0x0032   100   253   000    Old_age   Always       -       0<br>190 Airflow_Temperature_Cel 0x0022   078   063   040    Old_age   Always       -       22 (Min/Max 21/22)<br>192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       0<br>193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       1<br>194 Temperature_Celsius     0x0022   022   040   000    Old_age   Always       -       22 (0 21 0 0 0)<br>197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0<br>198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0<br>199 UDMA_CRC_Error_Count    0x003e   200   253   000    Old_age   Always       -       0<br>200 Pressure_Limit          0x0023   100   100   001    Pre-fail  Always       -       0<br>240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       0h+01m+14.651s<br>241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       0<br>242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       2624<br><br>SMART Error Log Version: 1<br>No Errors Logged<br><br>SMART Self-test log structure revision number 1<br>No self-tests have been logged.  &#91;To run self-tests, use: smartctl -t]<br><br>SMART Selective self-test log data structure revision number 1<br> SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS<br>    1        0        0  Not_testing<br>    2        0        0  Not_testing<br>    3        0        0  Not_testing<br>    4        0        0  Not_testing<br>    5        0        0  Not_testing<br>Selective self-test flags (0x0):<br>  After scanning selected spans, do NOT read-scan remainder of disk.<br>If Selective self-test is pending on power-up, resume after 0 minute delay.<br><br>root@proxmox.lan:~# </code></pre>



<p class="wp-block-paragraph">Based on this I was sold a 5 year warranty but I am not able to claim it should something happen to the drive. As I only use it for infrequent backup I will take on the risk.</p>
<p>The post <a href="https://infinityflame.co.uk/featured/seagate-exos-x16-st16000nm001g-2kk103-amazon/">Buying 16TB Seagate Exos X16 from Amazon for £188.90</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://infinityflame.co.uk/featured/seagate-exos-x16-st16000nm001g-2kk103-amazon/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2432</post-id>	</item>
		<item>
		<title>Connecting the SpeedyBee F405 V3 Flight Controller to the Beltian BN-880 GPS</title>
		<link>https://infinityflame.co.uk/projects/connecting-the-speedybee-f405-v3-flight-controller-to-bn-880-gps/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Thu, 27 Jul 2023 22:38:09 +0000</pubDate>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Beltian]]></category>
		<category><![CDATA[BN-880]]></category>
		<category><![CDATA[drone]]></category>
		<category><![CDATA[F403 V3]]></category>
		<category><![CDATA[flight controller]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Speedybee]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2343</guid>

					<description><![CDATA[<p>To connect the SpeedyBee F405 V3 to GPS use the following wiring from the UART6 port, See the table below, the orientation of the GPS module and Flight Controller should be as the image is arranged above (GPS module slightly to the right of the flight controller for annotation purposes). Left Side Right Side SpeedyBee FV04 V3 Flight Controller Beltian GPS BN-880 GPS Continued Connector Pins UP Connector Pins UP 4V5 VCC D G GND G T6 RX R R6 TX T SDA SDA V SCL SCL C To configure the GPS in Betaflight, set the UART6 mode to GPS [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/connecting-the-speedybee-f405-v3-flight-controller-to-bn-880-gps/">Connecting the SpeedyBee F405 V3 Flight Controller to the Beltian BN-880 GPS</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">To connect the SpeedyBee F405 V3 to GPS use the following wiring from the UART6 port,</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/09/F405V3-to-BN880.svg"><img loading="lazy" decoding="async" width="512" height="272" src="https://infinityflame.co.uk/wp-content/uploads/2023/09/F405V3-to-BN880.svg" alt="" class="wp-image-2370"/></a></figure>



<p class="wp-block-paragraph">See the table below, the orientation of the GPS module and Flight Controller should be as the image is arranged above (GPS module slightly to the right of the flight controller for annotation purposes).</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td>Left Side</td><td>Right Side</td><td></td></tr><tr><td>SpeedyBee FV04 V3 Flight Controller</td><td>Beltian GPS BN-880</td><td>GPS Continued</td></tr><tr><td>Connector Pins UP</td><td>Connector Pins UP</td><td></td></tr><tr><td>4V5</td><td>VCC</td><td>D</td></tr><tr><td>G</td><td>GND</td><td>G</td></tr><tr><td>T6</td><td>RX</td><td>R</td></tr><tr><td>R6</td><td>TX</td><td>T</td></tr><tr><td>SDA</td><td>SDA</td><td>V</td></tr><tr><td>SCL</td><td>SCL</td><td>C</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">To configure the GPS in Betaflight, set the UART6 mode to GPS in the configuration tab, and the baud rate to Auto.</p>
<p>The post <a href="https://infinityflame.co.uk/projects/connecting-the-speedybee-f405-v3-flight-controller-to-bn-880-gps/">Connecting the SpeedyBee F405 V3 Flight Controller to the Beltian BN-880 GPS</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2343</post-id>	</item>
		<item>
		<title>Goldenfir D800 SSD Benchmarks</title>
		<link>https://infinityflame.co.uk/featured/goldenfir-d800-ssd-benchmarks/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Mon, 24 Apr 2023 21:40:03 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[ssd]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2318</guid>

					<description><![CDATA[<p>Update: Article originally published in April 2023, and the SSD started having pending bad sectors according to smartctl in May 2025. Will move it to backup duty only and monitor. I had a look on Aliexpress and decided to purchase a Goldenfir 2TB SSD for review from the &#8220;Computer &#38; SSD Storage Factory Store&#8221; for my Proxmox NAS. I compare it with the Crucial BX500 as I have one on hand too. Internal 2TB SATA SSD Prices In total for a 2TB SSD I paid £70.61 which is about £10 cheaper than name-brand SSDs for the same capacity from Amazon. [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/featured/goldenfir-d800-ssd-benchmarks/">Goldenfir D800 SSD Benchmarks</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Update: Article originally published in April 2023, and the SSD started having pending bad sectors according to smartctl in May 2025. Will move it to backup duty only and monitor.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">I had a look on Aliexpress and decided to purchase a Goldenfir 2TB SSD for review from the &#8220;Computer &amp; SSD Storage Factory Store&#8221; for my Proxmox NAS. I compare it with the Crucial BX500 as I have one on hand too.</p>



<h2 class="wp-block-heading">Internal 2TB SATA SSD Prices</h2>



<p class="wp-block-paragraph">In total for a 2TB SSD <strong>I paid £70.61</strong> which is about £10 cheaper than name-brand SSDs for the same capacity from Amazon. I was skeptical of the price but I decided to test it first before putting it in the NAS.</p>



<figure class="wp-block-table"><table><tbody><tr><td>2TB SSD</td><td>Price</td></tr><tr><td>Integral V Series (‎INSSD2TS625V2X)</td><td>£89.99</td></tr><tr><td>Crucial BX500 (CT2000BX500SSD1)</td><td>£98.98</td></tr><tr><td>Samsung 870 QVO (MZ-77Q2T0)</td><td>£102.97</td></tr></tbody></table><figcaption class="wp-element-caption">2TB SSD Prices as of 24/04/2023</figcaption></figure>



<h2 class="wp-block-heading">Checking the SSD using h2testw.exe</h2>



<p class="wp-block-paragraph">As soon as the SSD arrived I ran it through its paces on h2testw.exe to check that it was real and all 2TB was available. The process took several hours so I just left it running while I was at work.</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/04/image.png"><img loading="lazy" decoding="async" width="840" height="335" src="https://infinityflame.co.uk/wp-content/uploads/2023/04/image.png" alt="H2testw of Goldenfir 2TB SSD indicating a write speed of 85MB and a read speed of 339MB" class="wp-image-2319" style="width:840px;height:335px" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/04/image.png 840w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-300x120.png 300w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-768x306.png 768w" sizes="auto, (max-width: 840px) 100vw, 840px" /></a></figure>



<p class="wp-block-paragraph">The SSD passed both the write and verify test. All 2TB is available.</p>



<pre class="wp-block-code"><code>Warning: Only 1907547 of 1907711 MByte tested.
Test finished without errors.
You can now delete the test files *.h2w or verify them again.
Writing speed: 85.0 MByte/s
Reading speed: 339 MByte/s
H2testw v1.4</code></pre>



<h2 class="wp-block-heading">The Goldenfir 2TB SSD in CrystalDiskInfo</h2>



<p class="wp-block-paragraph">I also opened the SSD in CrystalDiskInfo, which confirmed it was brand new if anything. It did have a power on presumably from the factory during testing.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-1.png"><img loading="lazy" decoding="async" width="674" height="804" src="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-1.png" alt="" class="wp-image-2320" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-1.png 674w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-1-251x300.png 251w" sizes="auto, (max-width: 674px) 100vw, 674px" /></a></figure>



<h2 class="wp-block-heading">Goldenfir 2TB SSD in CrystalDiskMark</h2>



<p class="wp-block-paragraph">I ran the SSD through CrystalDiskMark, the most crucial test to me as it would show how it compared to other SSDs.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-2.png"><img loading="lazy" decoding="async" width="514" height="381" src="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-2.png" alt="CrystalDiskMark image of Goldenfir D800 SSD 2TB" class="wp-image-2321" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-2.png 514w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-2-300x222.png 300w" sizes="auto, (max-width: 514px) 100vw, 514px" /></a><figcaption class="wp-element-caption">Goldenfir D800 SSD 2TB</figcaption></figure>



<p class="wp-block-paragraph">It looks like the SSD performs only slightly worse than the Crucial BX500, Tested using an external USB enclosure.</p>



<p class="wp-block-paragraph">Here is a comparison with the Crucial BX500.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-4.png"><img loading="lazy" decoding="async" width="482" height="352" src="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-4.png" alt="CrystalDiskMark image of Crucial BX500" class="wp-image-2329" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-4.png 482w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-4-300x219.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></a><figcaption class="wp-element-caption">Crucial BX500</figcaption></figure>



<p class="wp-block-paragraph">And for fun here is a comparison with the Crucial MX100 from 2014.</p>



<figure class="wp-block-image aligncenter size-full is-style-default"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-3.png"><img loading="lazy" decoding="async" width="482" height="352" src="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-3.png" alt="CrystalDiskMark image of Crucial MX100" class="wp-image-2327" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/04/image-3.png 482w, https://infinityflame.co.uk/wp-content/uploads/2023/04/image-3-300x219.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></a><figcaption class="wp-element-caption">Crucial MX100</figcaption></figure>



<h2 class="wp-block-heading">My Review and Closing Thoughts</h2>



<p class="wp-block-paragraph"><strong>Overall, I&#8217;m happy</strong>. It performs slightly worse than competitors but it&#8217;s negligible and I am comfortable keeping the SSD forever so I am not too worried about secure erase.</p>
<p>The post <a href="https://infinityflame.co.uk/featured/goldenfir-d800-ssd-benchmarks/">Goldenfir D800 SSD Benchmarks</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2318</post-id>	</item>
		<item>
		<title>Moving my VPS back Home</title>
		<link>https://infinityflame.co.uk/projects/moving-my-vps-back-home/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Wed, 04 Jan 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[traffic]]></category>
		<category><![CDATA[vlans]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2289</guid>

					<description><![CDATA[<p>I am moving this website from Vultr to my Proxmox Ryzen 5 3600 virtualization server at home because it is cheaper and I no longer need to host my applications externally. To protect my home network, I isolated the web server from my home network traffic. This way, even if the website is compromised, my home network will likely be safe from any attacks. The server doesn&#8217;t require much to run. It has run on almost always the cheapest hardware/software available on various cloud platforms for years. The main problem was that I didn&#8217;t get around to making a VLAN [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/projects/moving-my-vps-back-home/">Moving my VPS back Home</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I am moving this website from Vultr to my Proxmox Ryzen 5 3600 virtualization server at home because it is cheaper and I no longer need to host my applications externally.</p>



<nav aria-label="Table of Contents" class="wp-block-table-of-contents"><ol><li><a class="wp-block-table-of-contents__entry" href="https://infinityflame.co.uk/projects/moving-my-vps-back-home/#preparing-a-backup-of-wordpress">Preparing a backup of WordPress</a></li><li><a class="wp-block-table-of-contents__entry" href="https://infinityflame.co.uk/projects/moving-my-vps-back-home/#setting-up-a-home-vlan-for-the-vm">Setting up a Home VLAN for the VM</a></li><li><a class="wp-block-table-of-contents__entry" href="https://infinityflame.co.uk/projects/moving-my-vps-back-home/#configuring-proxmox-to-use-the-tagged-vlan-trunk">Configuring Proxmox to use the Tagged VLAN Trunk</a></li></ol></nav>



<p class="wp-block-paragraph">To protect my home network, I isolated the web server from my home network traffic. This way, even if the website is compromised, my home network will likely be safe from any attacks.</p>



<p class="wp-block-paragraph">The server doesn&#8217;t require much to run. It has run on almost always the cheapest hardware/software available on various cloud platforms for years.</p>



<p class="wp-block-paragraph">The main problem was that I didn&#8217;t get around to making a VLAN to isolate traffic at a network level from my home network.</p>



<p class="wp-block-paragraph">Having a VLAN allows you to isolate networks, which I will use to split my home network and the network used by the web server VM.</p>



<p class="wp-block-paragraph">You can read more about my home network <a href="https://infinityflame.co.uk/featured/my-home-network-part-2/" target="_blank" rel="noreferrer noopener">here</a> but it needs a bit of an update.</p>



<h2 class="wp-block-heading" id="preparing-a-backup-of-wordpress">Preparing a backup of WordPress</h2>



<p class="wp-block-paragraph">This website runs on <a href="https://wordpress.org/" target="_blank" rel="noreferrer noopener">WordPress</a>. WordPress makes backup/restore easy as import/export tools are built-in.</p>



<p class="wp-block-paragraph">To keep costs down, I have a small WordPress site. Jetpack (I think) compresses and serves images, and almost all media is not hosted on the VPS directly. </p>



<p class="wp-block-paragraph">I will need to simply download everything from the admin panel and then upload it to the clone.</p>



<p class="wp-block-paragraph">I also want a new copy of WordPress because it&#8217;s been a while, my first article is from 2014 for example.</p>



<h2 class="wp-block-heading" id="setting-up-a-home-vlan-for-the-vm">Setting up a Home VLAN for the VM</h2>



<p class="wp-block-paragraph">I have a VM running on my home server and disallow the VM to communicate with other devices on my home network but allow access to the internet.</p>



<p class="wp-block-paragraph">External devices are prevented from being able to connect to the VM using my Ubiquiti router firewall.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-1.png"><img loading="lazy" decoding="async" width="1300" height="648" src="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-1.png" alt="" class="wp-image-2295" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-1.png 1300w, https://infinityflame.co.uk/wp-content/uploads/2023/01/image-1-300x150.png 300w, https://infinityflame.co.uk/wp-content/uploads/2023/01/image-1-768x383.png 768w" sizes="auto, (max-width: 1300px) 100vw, 1300px" /></a></figure>



<p class="wp-block-paragraph">I have a few VLANs going around the house so it was just a case of passing the new VLAN over ethernet tagged with its regular traffic to the VM and then using Proxmox to connect the VM using the same tag. </p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-2.png"><img loading="lazy" decoding="async" width="991" height="432" src="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-2.png" alt="" class="wp-image-2298" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-2.png 991w, https://infinityflame.co.uk/wp-content/uploads/2023/01/image-2-300x131.png 300w, https://infinityflame.co.uk/wp-content/uploads/2023/01/image-2-768x335.png 768w" sizes="auto, (max-width: 991px) 100vw, 991px" /></a></figure>



<h2 class="wp-block-heading" id="configuring-proxmox-to-use-the-tagged-vlan-trunk">Configuring Proxmox to use the Tagged VLAN Trunk</h2>



<p class="wp-block-paragraph">Because I have not used a VLAN before to tag traffic to Proxmox. All of my previous VMs used the same network as Proxmox.</p>



<p class="wp-block-paragraph">I was able to set the port the Proxmox server used as both a tagged trunk for VLAN 70 and an untagged on VLAN 20.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-4.png"><img loading="lazy" decoding="async" width="644" height="213" src="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-4.png" alt="" class="wp-image-2302" srcset="https://infinityflame.co.uk/wp-content/uploads/2023/01/image-4.png 644w, https://infinityflame.co.uk/wp-content/uploads/2023/01/image-4-300x99.png 300w" sizes="auto, (max-width: 644px) 100vw, 644px" /></a></figure>



<p class="wp-block-paragraph">The way my home network is set up, all LAN traffic arrives at my switch on VLAN 20 and then VLAN 20 is untagged to devices such as my server.</p>



<p class="wp-block-paragraph">Non-VLAN 70 VMs will be able to access VLAN 70 traffic but not vice versa. I am okay with this as I trust my home VMs.</p>



<p class="wp-block-paragraph">I hope you enjoyed reading as much as I enjoyed setting this up.</p>
<p>The post <a href="https://infinityflame.co.uk/projects/moving-my-vps-back-home/">Moving my VPS back Home</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2289</post-id>	</item>
		<item>
		<title>Proxmox Backup Scheduling</title>
		<link>https://infinityflame.co.uk/featured/proxmox-backup-scheduling/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Sat, 12 Nov 2022 10:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[scheduling]]></category>
		<category><![CDATA[systemd-analyze]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2211</guid>

					<description><![CDATA[<p>When I first started using Proxmox one thing I wanted to understand was the schedule grammar for backups. Most of my backups aren&#8217;t handled in Proxmox but I did want a quick way of backing up my Minecraft server and as I had a slow 1TB disk attached to Proxmox I thought it worth trying. When backing up its worth observing the 3-2-1 rule. 3 backups, 2 different media, 1 copy offsite. This backup wasn&#8217;t just about retaining data in case of loss, it is to facilitate rollbacks in case of irreversible damage or corruption to the server, or a [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/featured/proxmox-backup-scheduling/">Proxmox Backup Scheduling</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When I first started using Proxmox one thing I wanted to understand was the schedule grammar for backups.</p>



<p class="wp-block-paragraph">Most of my backups aren&#8217;t handled in Proxmox but I did want a quick way of backing up my Minecraft server and as I had a slow 1TB disk attached to Proxmox I thought it worth trying.</p>



<p class="wp-block-paragraph">When backing up its worth observing the 3-2-1 rule. 3 backups, 2 different media, 1 copy offsite. This backup wasn&#8217;t just about retaining data in case of loss, it is to facilitate rollbacks in case of irreversible damage or corruption to the server, or a dodgy configuration change.</p>



<figure class="wp-block-image size-large is-resized"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/Untitled-Diagram.drawio.svg"><img loading="lazy" decoding="async" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/Untitled-Diagram.drawio.svg" alt="" class="wp-image-2212" width="318" height="241"/></a></figure>



<p class="wp-block-paragraph">Because I wanted lots of points in time to roll back to, I used Proxmox over OpenMediaVault, my usual go-to.</p>



<h2 class="wp-block-heading">Setting Proxmox Backups</h2>



<p class="wp-block-paragraph">Proxmox handles backups from the Datacenter level, in the proxmox administration dashboard on the left hand side, select Datacenter, then click on the Backup tab.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/imageviewer-Screenshot-of-proxmox-portal.png"><img loading="lazy" decoding="async" width="1366" height="768" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/imageviewer-Screenshot-of-proxmox-portal.png" alt="proxmox dashboard with Datacenter and Backup tabs highlighted" class="wp-image-2215" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/11/imageviewer-Screenshot-of-proxmox-portal.png 1366w, https://infinityflame.co.uk/wp-content/uploads/2022/11/imageviewer-Screenshot-of-proxmox-portal-300x169.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/11/imageviewer-Screenshot-of-proxmox-portal-768x432.png 768w" sizes="auto, (max-width: 1366px) 100vw, 1366px" /></a></figure>



<p class="wp-block-paragraph">From the backup tab you should see the backups that have been scheduled. Here we can see my minecraft backup jobs loaded.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-00-15-35.png"><img loading="lazy" decoding="async" width="1366" height="768" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-00-15-35.png" alt="" class="wp-image-2218" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-00-15-35.png 1366w, https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-00-15-35-300x169.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-00-15-35-768x432.png 768w" sizes="auto, (max-width: 1366px) 100vw, 1366px" /></a></figure>



<p class="wp-block-paragraph">I found the job schedule difficult to understand when the next few occur. I found through the documentation that you can check the backup iterations through systemd-analyze.</p>



<h2 class="wp-block-heading">Checking Proxmox Backup Schedules</h2>



<p class="wp-block-paragraph">The easiest way to check your backup schedule is by using the schedule simulator on the far right of the backup configuration area.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2.png"><img loading="lazy" decoding="async" width="1918" height="877" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2.png" alt="Proxmox backup job schedule simulator" class="wp-image-2279" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2.png 1918w, https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2-300x137.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2-768x351.png 768w, https://infinityflame.co.uk/wp-content/uploads/2022/11/image-2-1536x702.png 1536w" sizes="auto, (max-width: 1918px) 100vw, 1918px" /></a></figure>



<p class="wp-block-paragraph">If you want to look ahead at proxmox backups to see if you have the right schedule set up, you can also use the command below, replacing the last part of the command with your desired schedule in the shell prompt.</p>



<pre class="wp-block-code"><code>systemd-analyze calendar --iterations=15 '20,22:00'</code></pre>



<p class="wp-block-paragraph">This is because backups work through a version of systemd time specification.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-16-28-32.png"><img loading="lazy" decoding="async" width="867" height="353" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-16-28-32.png" alt="" class="wp-image-2220" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-16-28-32.png 867w, https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-16-28-32-300x122.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/11/Screenshot-from-2022-11-09-16-28-32-768x313.png 768w" sizes="auto, (max-width: 867px) 100vw, 867px" /></a></figure>



<p class="wp-block-paragraph">The screenshot above is in Ubuntu&#8217;s Terminal but you can run it in the shell on the Promox dashboard directly.</p>



<p class="wp-block-paragraph">You can check the time of the next backup by altering the iterations argument as required. Once you&#8217;ve got the schedule as you need, alter your job (or make a new one).</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/11/image.png"><img loading="lazy" decoding="async" width="1366" height="741" src="https://infinityflame.co.uk/wp-content/uploads/2022/11/image.png" alt="" class="wp-image-2223" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/11/image.png 1366w, https://infinityflame.co.uk/wp-content/uploads/2022/11/image-300x163.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/11/image-768x417.png 768w" sizes="auto, (max-width: 1366px) 100vw, 1366px" /></a></figure>



<p class="wp-block-paragraph">Make sure to set the retention period correctly, if you specify a retention period in weeks, only the latest backup that week will be kept.</p>



<p class="wp-block-paragraph">One change I made to the schedule was <code>keep-hourly=24, keep-weekly=2</code> rather than <code>keep-hourly=168</code> in the screenshot to keep 24 hours of backups (limited to the timings of my schedule) and lower the fidelity of backups to a weekly basis after 24 hours to reduce storage consumption. See the <a href="https://pve.proxmox.com/wiki/Backup_and_Restore#vzdump_retention">documentation</a> as it&#8217;s explained better there.</p>
<p>The post <a href="https://infinityflame.co.uk/featured/proxmox-backup-scheduling/">Proxmox Backup Scheduling</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2211</post-id>	</item>
		<item>
		<title>&#8220;The Undeclared War&#8221; Hacking Breakdown</title>
		<link>https://infinityflame.co.uk/featured/the-undeclared-war-hacking-breakdown/</link>
		
		<dc:creator><![CDATA[Aidan]]></dc:creator>
		<pubDate>Tue, 05 Jul 2022 05:00:00 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[ida]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[Saara]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software reversing]]></category>
		<category><![CDATA[the undeclared war]]></category>
		<guid isPermaLink="false">https://infinityflame.co.uk/?p=2130</guid>

					<description><![CDATA[<p>Channel 4&#8217;s &#8220;The Undeclared War&#8221; is a TV Show about a third-party country undermining UK democracy by disrupting UK networks through cyber-attacks. The protagonist is an intern who has a front-row seat to the ordeal and the show is set inside GCHQ, at least that is what I have seen from the first two episodes. I&#8217;ll write up more when they are released. Here is a breakdown of all of the techniques used in the show. It is clear the writers took at least some inspiration from actual real-world scenarios but then bent the rules or changed some aspects to [&#8230;]</p>
<p>The post <a href="https://infinityflame.co.uk/featured/the-undeclared-war-hacking-breakdown/">&#8220;The Undeclared War&#8221; Hacking Breakdown</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Channel 4&#8217;s &#8220;The Undeclared War&#8221; is a TV Show about a third-party country undermining UK democracy by disrupting UK networks through cyber-attacks. The protagonist is an intern who has a front-row seat to the ordeal and the show is set inside GCHQ, at least that is what I have seen from the first two episodes. I&#8217;ll write up more when they are released.</p>



<p class="wp-block-paragraph">Here is a breakdown of all of the techniques used in the show. It is clear the writers took at least some inspiration from actual real-world scenarios but then bent the rules or changed some aspects to fit the narrative of the episode, which makes the episode a little hard to watch.</p>



<p class="wp-block-paragraph">The Undeclared War is an inside look at an attack on British internet infrastructure and the inner workings of GCHQ.</p>



<h2 class="wp-block-heading">The Undeclared War Episode 1</h2>



<p class="wp-block-paragraph">The episode starts out in a fairground, analogous to hacking, as becomes clear when shots of Saara (main character) are interspersed with her sitting in a classroom playing against other hackers.</p>



<p class="wp-block-paragraph">This is a reference to a game in hacker culture called a CTF or Capture the Flag. A Capture the Flag (CTF) is a popular way of introducing or testing a hacker&#8217;s ability, so in that sense at least the show got it right! CTFs are usually a social event and often very competitive, a good start to the first episode.</p>



<p class="wp-block-paragraph">There are also some more references for the keen viewer, at one point Saara pulls out a hammer and starts knocking on bricks on a wall, this is similar to port knocking, a technique of security through obscurity whereby a system will not open a port to allow access to an application without first having a client send packets to a network connected device in a specific sequence across various port numbers.</p>



<p class="wp-block-paragraph">After Saara is done knocking the bricks with a hammer, she is able to remove a brick (or the system opens a port) to view the valuable information inside.</p>



<p class="wp-block-paragraph">It&#8217;s not clear how Saara would know the pattern in order to hit the bricks but is possibly something that she would have to capture using packet sniffing or know by other means, such as accessing the computer she is targeting using command line tools such as SSH or even remote desktop.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/07/image.png"><img loading="lazy" decoding="async" width="841" height="550" src="https://i0.wp.com/infinityflame.co.uk/wp-content/uploads/2022/07/image.png?fit=841%2C550&amp;ssl=1" alt="" class="wp-image-2133" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/07/image.png 841w, https://infinityflame.co.uk/wp-content/uploads/2022/07/image-300x196.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/07/image-768x502.png 768w" sizes="auto, (max-width: 841px) 100vw, 841px" /></a><figcaption>Screenshot of the hacking in &#8220;The Undeclared War&#8221; at 1:49</figcaption></figure>



<p class="wp-block-paragraph">The show then cuts back to the real world out of the analogy briefly to show the commands Saara is running on her screen, we can see a lot going on but we see references to <code>meterpreter.exe</code> at the top. </p>



<p class="wp-block-paragraph">Meterpreter is a penetration tool used to exploit programs in order to allow a hacker access to a system remotely, which we can see she has used it to dump the password hashes, but in this version of the tool meterpreter has been able to also decrypt the hashes and displays them on screen before she&#8217;s cracked them.</p>



<p class="wp-block-paragraph">Despite this, she then runs a <code>python3</code> program (python being a popular programming language) to run a program called <code>hashcrack.py</code> which takes a <code>passwords.txt</code> file as input probably to crack the hashes, to nitpick it looks like they&#8217;ve already been cracked, but perhaps she didn&#8217;t have all of the hashes yet.</p>



<p class="wp-block-paragraph">Python also isn&#8217;t a particularly fast language for cracking passwords, a more direct access to the hardware is usually preferred so that the hashes can be computed quicker. Cracking hashes could take days to decades if the password is complex, so every minute advantage in performance counts.</p>



<p class="wp-block-paragraph">Saara then at the end of the cutscene she runs the command <code>-sT -vvv -n 192.158.1.254</code> which seems to be a bit of fat-fingering by Saara, because it&#8217;s supposed to be part of the line above or <code>nmap</code>, but the computer doesn&#8217;t seem to mind and dutifully executes the command as though nothing is wrong.</p>



<p class="wp-block-paragraph">The whole time she seems to be switching between Linux and Windows commands arbitrarily and the computer doesn&#8217;t seem to mind, she never switches context from windows or Linux, the commands she entered don&#8217;t really make any sense throughout the episode in terms of what is actually possible on one operating system.</p>



<p class="wp-block-paragraph">We can also see a CVE at the top of the screen, CVE&#8217;s are critical vulnerability notices used in various ways to identify and classify exploits in computer programs, it doesn&#8217;t really make sense that this would be labelled a &#8220;private exploit&#8221;, because it&#8217;s public by design.</p>



<figure class="wp-block-image size-large"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-1.png"><img loading="lazy" decoding="async" width="750" height="400" src="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-1-750x400.png" alt="Screenshot of the terminal in The Undeclared War" class="wp-image-2134"/></a><figcaption>The hacking then breaks into a printout of nmap</figcaption></figure>



<p class="wp-block-paragraph">She then also tried to take a copy of the windows box using volume shadow copy, a tool for taking a form of backup, she then decides its time to scan for some open ports, it looks like the command <code>-sT -vvv -n 192.158.1.254</code> is actually <code>nmap</code>, a port scanning tool, not that she actually runs <code>nmap</code>, it just outputs text extremely similar to it.</p>



<p class="wp-block-paragraph">We can see that <code>nmap</code> lists the following open ports 445, 139, 53, 443, 80, 6969. 445 and 443 could possibly be SMB or file shares, or a webserver as we can see port 80 is also open, port 53 is for DNS so this box is perhaps also a DNS server, and port 6969 is I&#8217;m sure also a real thing, although my skills are lacking a bit when it comes to what this port is for, I don&#8217;t think its a real thing but actually a joke for the informed (or otherwise) viewer.</p>



<p class="wp-block-paragraph">Saara spends the rest of the scene walking around with a tool belt on, clearly focused on the task at hand.</p>



<p class="wp-block-paragraph">Then she is seen using various commands in the terminal, which are mostly nonsense, but it doesn&#8217;t complain at all. Clearly, the directors have turned off the output of the command line if the user types out an erroneous command. </p>



<figure class="wp-block-image size-large"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-2.png"><img loading="lazy" decoding="async" width="750" height="400" src="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-2-750x400.png" alt="Screenshot of the terminal in The Undeclared War" class="wp-image-2135"/></a><figcaption>Another screenshot of the terminal in The Undeclared War</figcaption></figure>



<p class="wp-block-paragraph">At one point a timer pops up, we can see she runs the command <code>msfvenom</code> which prints out some hex. Cool, but even some of the best hackers in the world don&#8217;t spend their time reading hex, its like reading a barcode or serial number, it may make sense to computers, but without some real context and understanding of what is going on, its useless to humans.</p>



<figure class="wp-block-image size-large"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-3.png"><img loading="lazy" decoding="async" width="750" height="400" src="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-3-750x400.png" alt="" class="wp-image-2136"/></a></figure>



<h3 class="wp-block-heading">Working at GCHQ</h3>



<p class="wp-block-paragraph">In the next hackery-type scenes we see, Saara has learned of the attack and starts looking at the code in a program called IDA at about 16 minutes in.</p>



<figure class="wp-block-image size-full"><a href="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-4.png"><img loading="lazy" decoding="async" width="1151" height="641" src="https://i0.wp.com/infinityflame.co.uk/wp-content/uploads/2022/07/image-4.png?fit=1151%2C641&amp;ssl=1" alt="IDA Freeware from the TV show The Undeclared War" class="wp-image-2139" srcset="https://infinityflame.co.uk/wp-content/uploads/2022/07/image-4.png 1151w, https://infinityflame.co.uk/wp-content/uploads/2022/07/image-4-300x167.png 300w, https://infinityflame.co.uk/wp-content/uploads/2022/07/image-4-768x428.png 768w" sizes="auto, (max-width: 1151px) 100vw, 1151px" /></a><figcaption>IDA Freeware from the TV show The Undeclared War</figcaption></figure>



<p class="wp-block-paragraph">She spends some time scrolling around the code and at one point finds a lot of &#8220;garbage&#8221; a good way of showing that often tasks like this are tedious and hard to follow. When a compiler compiles a program it strips it of any human-readable comments or friendly function names that are easy to follow, so its often a lot of scrolling, annotating and scrolling to determine what the program does.</p>



<p class="wp-block-paragraph">This part is a little bit confusing because she is able to identify &#8220;garbage&#8221; but isn&#8217;t able to tell that the code has been obfuscated, obfuscation is a way to make code harder to reverse engineer by having the program perform its function with extra complexity. Saara&#8217;s overseer calls the program &#8220;some FinFisher thing&#8221;, which isn&#8217;t really a method for obfuscation but whatever, perhaps I am misinterpreting what he is saying. </p>



<p class="wp-block-paragraph">Interestingly the malware is also called <code>Suspected_Malware.exe</code> in IDA but later called <code>SUSPECTED-MALWARE.exe</code> in the sandbox.</p>



<p class="wp-block-paragraph">The IDA freeware program allows you to read the program as machine code, somehow Saara doesn&#8217;t notice that the program is written to never run the functions or &#8220;garbage&#8221; she is looking at, despite the fact IDA would have clearly annotated this.</p>



<p class="wp-block-paragraph">The software reverser Phill says that the garbage is to &#8220;confuse the look of the code so the antivirus software won&#8217;t recognise it as malware&#8221; which sort of makes sense, what he means is that it will change the signature of the program so the antivirus would not be able to detect the program as a known signature or the program behaviours are different than what the antivirus is designed to detect. Again, something Saara would probably know.</p>



<p class="wp-block-paragraph">She is offered the opportunity to use their test environment, where she incorrectly corrects him about calling it a sandbox.</p>



<p class="wp-block-paragraph">When she actually runs the program in the sandbox, it errors out and says it can&#8217;t run, which the reversing engineer (Phill) says to try to emulate actual user behaviour to see if you can trick it into running, but this is bad advice because they can just reverse the program to determine what is stopping the program from running!</p>



<p class="wp-block-paragraph">Again, something Saara should understand and already know. &#8220;Paste in some word documents, scroll around a bit&#8221; lol, once again they have IDA so would be able to determine exactly what is required to cause this behaviour,</p>



<p class="wp-block-paragraph">Imagine you are reading a book, but you don&#8217;t have time to read all of it, and you really just want to know why the main character&#8217;s favourite colour is red, you know that on page 20 they say their favourite colour is red, if we try to shoe-horn IDA into this analogy, we would get a direct reference to where the character grew up with a red front door, and that is why their favourite colour is red.</p>



<p class="wp-block-paragraph">Programs need references in the code to establish behaviours, so when it throws up an error, they can just look through the code, find the error in the code, and trace it back to determine what caused the program to realise it was in a sandbox and prevent it from running, this is basic usage for IDA, its what it is designed to do. </p>



<p class="wp-block-paragraph">Trying to &#8220;Paste in some word documents, scroll around a bit&#8221; is like trying to mow a lawn with scissors when you have a lawnmower, ineffective and poor use of the tooling they have.</p>



<p class="wp-block-paragraph">Its also very unlikely an intern would be vetted enough to have this level of access.</p>



<h3 class="wp-block-heading">Fear of Attribution</h3>



<p class="wp-block-paragraph">At one point, Danny (Simon Pegg) is reluctant to assign attribution of the malware, this is generally a good call, because it is a technique that advanced persistent threats would use, to implant false clues to assign attribution to a different adversary to throw off investigators. The show talks about Russian bots as well, a real-world issue.</p>



<p class="wp-block-paragraph">Danny also is chastised for running stressing infrastructure against the network, running this type of test against a production environment during peak hours is a terrible idea.</p>



<p class="wp-block-paragraph">The hack is also able to take down some parts of the web but leaves others up, this is odd, it may be technically possible however practically all of these systems will themselves have both redundancy and disaster recovery to bring the systems back online, especially products with SLA agreements with their customers. </p>



<p class="wp-block-paragraph">Many of these systems would be hosted in clouds like AWS or Azure and generally have mechanisms built-in to prevent a global outage based on a single point of failure like a country going down, if a BGP route went down, for example it would not take too long before everything would be re-established through a new route.</p>



<h3 class="wp-block-heading">Reversing Libraries</h3>



<p class="wp-block-paragraph">At around 28 minutes in, Phill laughs as Saara has reverse-engineered a library saying that &#8220;we&#8217;ve all done it&#8221;, but practically it is almost certainly a good idea, you can probably determine that a program is using a library and probably even check it against a known hash of the library. </p>



<p class="wp-block-paragraph">The department missing this crucial part of the code by not looking is negligent and certainly something they would have done. They are looking for exactly what she has found, they aren&#8217;t looking for something else, so it is odd that they would discount her abilities, its a team effort.</p>



<p class="wp-block-paragraph">The program opens a URL shortner link <code>https://url.short/41e</code> which isn&#8217;t a valid top level domain name, to run some code, which could run anything.</p>



<p class="wp-block-paragraph">With that, it&#8217;s off to a cobra meeting they go.</p>
<p>The post <a href="https://infinityflame.co.uk/featured/the-undeclared-war-hacking-breakdown/">&#8220;The Undeclared War&#8221; Hacking Breakdown</a> appeared first on <a href="https://infinityflame.co.uk">Infinityflame</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2130</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Page cache debug info:
Engine:             Disk: Enhanced
Cache key:          infinityflame.co.uk/category/projects/feed/_index_slash_ssl.xml
Creation Time:      1775437555.000s
Header info:
Vary:               accept, content-type
Last-Modified:      Sat, 28 Feb 2026 09:00:00 GMT
ETag:               "8ef79e1453b534f61e6ddba62c57ae12"
Link:               <https://infinityflame.co.uk/wp-json/>; rel="https://api.w.org/"
Link:               <https://infinityflame.co.uk/wp-json/wp/v2/categories/726>; rel="alternate"; title="JSON"; type="application/json"
Link:               <https://infinityflame.co.uk/category/projects/>; rel="canonical"
Content-Type:       application/rss+xml; charset=UTF-8

Lazy Loading (feed)
Database Caching 22/90 queries in 0.013 seconds using Disk

Served from: infinityflame.co.uk @ 2026-04-06 01:05:55 by W3 Total Cache
-->