<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Cybrkyd</title>
    <link>https://cybrkyd.com</link>
    <description>Cybrkyd's blog. Welcome to my playpen.</description>
    <atom:link href="https://cybrkyd.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>UK Local Elections 2026</title>
      <link>https://cybrkyd.com/post/uk-local-elections-2026/</link>
      <guid>https://cybrkyd.com/post/uk-local-elections-2026/</guid>
      <pubDate>Fri, 08 May 2026 17:48:03 +0000</pubDate>
      <description>&lt;p&gt;I don&amp;rsquo;t do politics much, but I woke up yesterday, fully intending to cast my vote in the UK Local Elections. The day, however, had other plans for me and voting was not factored in. I had a crazy day at work and by the time I finally wrapped up, it was so close to poll closing at 10pm that I just could not be bothered to make the 5-minute dash to the booth.&lt;/p&gt;
&lt;p&gt;Today, I&amp;rsquo;m glad that my local area did not vote for Reform. Phew! I can still safely look my neighbours in the eye. The Council however, &lt;em&gt;is&lt;/em&gt; Reform, which won the majority. Oh well, my missing vote would not have changed &lt;em&gt;that&lt;/em&gt; Council result, and it was not needed locally either. Small victories: I take them where I can.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to get into a rant here; I&amp;rsquo;m a guest in this country. A country undergoing a seismic political shift away from the traditional two political parties. And they&amp;rsquo;re doing it again, exactly 10 years after voting to exit the European Union. Led, I might add, by the same person who orchestrated that move.&lt;/p&gt;
&lt;p&gt;I wonder if Farage plays chess, because he is a master tactician. The General Election is about two years or so away, and I think that will be the &amp;ldquo;checkmate&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Game over.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recording streams with FFmpeg</title>
      <link>https://cybrkyd.com/post/recording-streams-with-ffmpeg/</link>
      <guid>https://cybrkyd.com/post/recording-streams-with-ffmpeg/</guid>
      <pubDate>Mon, 04 May 2026 08:42:17 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;m a fossil when it comes to FFmpeg. I have previously explored encoding using the onboard integrated AMD or Intel chips, but have always had sub-par results when comparing that result to the one output by &lt;code&gt;libx264&lt;/code&gt; or &lt;code&gt;libx265&lt;/code&gt;. That means I have always stuck to the high-CPU software encoding method.&lt;/p&gt;
&lt;p&gt;Recording from the Sky Stream puck with on-the-fly software encoding was a no-go on my laptop. The AMD Ryzen 5 CPU hits 75% immediately, and continues climbing. It takes literally less than two minutes before the fans kick in to cope with all that heat.&lt;/p&gt;
&lt;p&gt;So VAAPI was the only way forward.&lt;/p&gt;
&lt;p&gt;I tested at least 10-12 different FFmpeg commands, tweaking as I went and I have finally settled on this one:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -use_wallclock_as_timestamps 1 -fflags +genpts -f v4l2 -thread_queue_size 512 -input_format mjpeg -video_size 1920x1080 -i /dev/v4l/by-id/usb-Actions_Micro_UGREEN-25854_-1575465188-video-index0 -f pulse -thread_queue_size 512 -i default -vf &amp;quot;format=nv12,hwupload&amp;quot; -c:v hevc_vaapi -rc_mode VBR -b:v 5M -maxrate 5M -bufsize 8M -g 60 -bf 0 -c:a aac -b:a 128k output.mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I had initially enforced &lt;code&gt;framerate&lt;/code&gt; but this proved to be troublesome, sometimes resulting in very jerky scenes. I&amp;rsquo;ve noticed that the Sky Stream puck can output at 60fps, 50fps or 30fps, and this varies from channel to channel and from app to app. For example, HBO pushes 30fps as does Apple TV, and Sky itself varies between 50fps and 30fps when watching a non-linear stream. Because of these differences, I tried discarding the enforced &lt;code&gt;framerate&lt;/code&gt; and my results improved immediately.&lt;/p&gt;
&lt;p&gt;In general, random &amp;ldquo;choppiness&amp;rdquo; or scene jerkiness was the main issue I faced. Without the &lt;code&gt;framerate&lt;/code&gt; enforced, the situation improved but was still occurring. I have solidly put this down to a combination of hardware encoding (using the CPU) and the fact that the streams are, well, streams. They are not &amp;ldquo;clean&amp;rdquo; inputs in the way that, say, DVD or Blu-ray are. I&amp;rsquo;ve deduced that from the fact that when I encode with &lt;code&gt;libx264&lt;/code&gt; / &lt;code&gt;libx265&lt;/code&gt;, I have not once experienced a scene jerk, ever.&lt;/p&gt;
&lt;p&gt;Anyhow, with the above command, I have managed to severely limit the occurrence of those annoying jumps.&lt;/p&gt;
&lt;h2&gt;Recording&lt;/h2&gt;
&lt;p&gt;I recorded the entire series of &lt;em&gt;The Miniature Wife&lt;/em&gt;. You know, for educational purposes. This was recorded from the Sky Store, so not the live broadcast ones. The show started off well enough but Elizabeth Banks&amp;rsquo;s character was too screamy, whiney and sweary for my liking…no wonder she was shrunk.&lt;/p&gt;
&lt;p&gt;As I went through the recordings, that was where I learned which tweaks worked and which didn&amp;rsquo;t. By the time I got closer to episode #10, I was cooking with gas. The choppiness was right down &amp;ndash; the last few episodes were barely noticeable and I swear I&amp;rsquo;ve watched a couple of them with no jumps at all.&lt;/p&gt;
&lt;p&gt;Interestingly, I was watching something else which I downloaded. It was marked as &amp;ldquo;AMZN.WEB-DL&amp;rdquo; or &amp;ldquo;WEBRip&amp;rdquo; and what do you know? It had a couple of scene jumps! I just never noticed these before. It is nice to know that this issue is not unique to me.&lt;/p&gt;
&lt;p&gt;All that aside, I&amp;rsquo;m happy with the results I am now getting with this FFmpeg monstrosity. It is one huge command but it does the job. The recordings are not meant to be Hollywood quality or intended for torrent distribution; they are for my own personal consumption, so this works fabulously for my humble needs.&lt;/p&gt;
&lt;p&gt;The good thing with this way is that it is repeatable with regards to the stable USB connection to the laptop as well as the resulting output quality. I&amp;rsquo;ve recorded quite a few other episodes of other shows as well as a couple of movies and I&amp;rsquo;m now in that &amp;ldquo;consistent results&amp;rdquo; phase where I can start recording without worrying about what it will spit out the other side.&lt;/p&gt;
&lt;h2&gt;Sky Stream versus Formuler&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve noticed that the results are even cleaner with regards to &amp;ldquo;choppiness&amp;rdquo; when recording from my Formuler box. The frame rate is constant at 30fps, no matter what app I&amp;rsquo;m recording from &amp;ndash; HBO, Apple TV, Prime, Discovery+ and Disney+. The scene jumps are almost non-existent in all my tests, and so I have moved my splitter from the Sky Stream box to the Formuler, and there is shall remain. There is not much that I would want to record from linear or live broadcasts anyway.&lt;/p&gt;
&lt;p&gt;The only app I cannot get on my Formuler is Netflix, but I&amp;rsquo;m not going to stick with the Sky Stream puck for the sake of Netflix. I&amp;rsquo;m not really a fan and besides, that&amp;rsquo;s what torrents are for.&lt;/p&gt;
&lt;h2&gt;Cleaning ads&lt;/h2&gt;
&lt;p&gt;Avidemux is still the king. I remove the ads, making sure I&amp;rsquo;m on a key frame, and then save the edit without re-encoding. It&amp;rsquo;s quick and suitable for the rough cutting of my recordings. Because Avidemux is not capable of scene cuts, a few frames of the ads do tend to creep in once in a while, but this is not too much of a bother for me. It is a big improvement on fast-forwarding the VHS cassette, hoping to catch it before the program resumes!&lt;/p&gt;
&lt;p&gt;Yeah, I&amp;rsquo;m a fossil! :-)&lt;/p&gt;
&lt;p&gt;Now, wouldn&amp;rsquo;t it be cool if there was a way to have a tiny PVR club with friends and some strangers where we could all share our roughly-edited recordings?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures with OBS Studio and ffmpeg</title>
      <link>https://cybrkyd.com/post/adventures-with-obs-studio-and-ffmpeg/</link>
      <guid>https://cybrkyd.com/post/adventures-with-obs-studio-and-ffmpeg/</guid>
      <pubDate>Sat, 02 May 2026 09:16:04 +0000</pubDate>
      <description>&lt;p&gt;Here are some of the adventures I&amp;rsquo;ve had whilst trying to record from the Sky Stream puck using OBS Studio and &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I have split my Sky Stream box into two HDMI outs &amp;ndash; one goes to the main TV and the other is coupled with a Ugreen HDMI to USB converter or capture card.&lt;/p&gt;
&lt;h2&gt;What I&amp;rsquo;ve tried: OBS Studio&lt;/h2&gt;
&lt;p&gt;I began by testing OBS Studio. It works and it works very well…when it worked. The main issue with OBS is my input from the Ugreen capture card. It consistently fails to display the preview image, requiring a disconnect and reconnect of the Ugreen capture card, or a cycle of the EPID modes on the splitter. At other times, it needs the Sky Stream box to be restarted. This happens a lot and is a pain in the backside when one expects to simply plug-and-play.&lt;/p&gt;
&lt;p&gt;I initially thought that this was the Sky Stream box playing tough but the issue is the same from my Formuler box. The audio passes through immediately but the video does not display in the preview for some reason. And, of course, that translates through to the recording: if trying to record where no preview is shown, no image.&lt;/p&gt;
&lt;p&gt;The recording capability of OBS is fantastic, and I cannot fault it. The only issue for me is the lack of consistency when connecting my laptop to initiate a recording. OBS Studio therefore cannot be relied upon as my recording solution.&lt;/p&gt;
&lt;p&gt;I might add here that my initial OBS package was a Flatpak. However, this preview issue persisted even when using the official build from the Ubuntu repositories. OBS Studio is nice to work with, but it does not gel with me and my hardware, and we have now parted company.&lt;/p&gt;
&lt;h2&gt;What else I tried: ffmpeg&lt;/h2&gt;
&lt;p&gt;Connecting up directly with &lt;code&gt;ffmpeg&lt;/code&gt; works flawlessly. Because there is no preview, a quick check of the input stream (video) shows that &lt;code&gt;ffmpeg&lt;/code&gt; does not behave the same as OBS.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ffplay -f v4l2 /dev/v4l/by-id/usb-Actions_Micro_UGREEN-25854_-1575465188-video-index0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Before recording, I run that to check the input. Once I see an image, I&amp;rsquo;m good to go. &lt;code&gt;ffmpeg&lt;/code&gt; has not failed nearly as much as OBS to preview the image. When it does fail, it doesn&amp;rsquo;t require playing around with EPID modes; a simple off/on of the Sky Stream puck is enough to kick it into life. And that I can live with.&lt;/p&gt;
&lt;p&gt;One good thing that OBS studio showed me was that I can now record without using &lt;code&gt;libx264&lt;/code&gt;. OBS would happily record a 1080p stream with my CPU sitting on 3%.&lt;/p&gt;
&lt;p&gt;My first attempt with &lt;code&gt;ffmpeg&lt;/code&gt; led me down my familiar path of encoding with &lt;code&gt;libx264&lt;/code&gt;. CPU was at 75% and the fans were screaming blue murder after 3 minutes. So, VAAPI it has to be, using AMD&amp;rsquo;s onboard GPU.&lt;/p&gt;
&lt;p&gt;See, I&amp;rsquo;ve long been used to using &lt;code&gt;libx264&lt;/code&gt; all my life due to the quirks of GPU encoding I experienced in the past with both AMD and Intel chips. That, however, was a very long time ago and it appears that things have improved drastically on that front. Also, I&amp;rsquo;ve never attempted recording streams before; my usage was always on a re-encode basis. Intel of old was always superior but I have AMD now and it is just fine for my needs.&lt;/p&gt;
&lt;p&gt;My initial recordings experienced a bit of &amp;ldquo;choppiness&amp;rdquo; in some scenes. I&amp;rsquo;ve put that down to CPU encoding or frame rate and have made many, many tweaks to the massive &lt;code&gt;ffmpeg&lt;/code&gt; command I have settled on.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll get to that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ugreen HDMI to USB capture card</title>
      <link>https://cybrkyd.com/post/ugreen-hdmi-to-usb-capture-card/</link>
      <guid>https://cybrkyd.com/post/ugreen-hdmi-to-usb-capture-card/</guid>
      <pubDate>Tue, 21 Apr 2026 14:50:29 +0000</pubDate>
      <description>&lt;p&gt;&amp;lt;-- &lt;a href="/post/splitting-a-set-top-box-hdmi-output/"&gt;Splitting a set top box HDMI output&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To convert my HDMI output to USB, I am using a Ugreen HDMI to USB capture card.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="Ugreen HDMI to USB" src="/pimg/rgB5fOWcnQqxWTXt.avif" title="Ugreen HDMI to USB" /&gt;&lt;/p&gt;
&lt;p&gt;This little device will allow me to connect the output from the Sky Stream box to my laptop.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="Ugreen HDMI to USB" src="/pimg/rgBeWhwhSngAc4xd.avif" title="Ugreen HDMI to USB" /&gt;&lt;/p&gt;
&lt;p&gt;The Ugreen version I have is the 4k to 1080p@60 FPS on a USB-C with a USB-A converter.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="Ugreen HDMI to USB" src="/pimg/rgBuJmMjAZqoZppz.avif" title="Ugreen HDMI to USB" /&gt;&lt;/p&gt;
&lt;p&gt;This device on its own &lt;em&gt;does not&lt;/em&gt; bypass HDCP; that is the job of the &lt;a href="/post/splitting-a-set-top-box-hdmi-output/"&gt;EZCOO splitter&lt;/a&gt; which sits between the Ugreen capture card and the Sky Stream box.&lt;/p&gt;
&lt;p&gt;Once connected up, I installed OBS Studio to take it for a test run. In OBS, I turned on the preview and was greeted by a feed with the word &amp;ldquo;UGREEN&amp;rdquo; in yellow. Good, I have a signal.&lt;/p&gt;
&lt;p&gt;It took a few attempts to get the actual video stream from the set top box to come through. I restarted the box, then the splitter. I removed and reconnected the UBS connector, and even rebooted my laptop. Nothing seemed to work until I switched the EZCOO to &amp;ldquo;copy&amp;rdquo;, and then everything sprang into life.&lt;/p&gt;
&lt;p&gt;This only happened the first time. Because I do not leave my laptop permanently connected to the Ugreen, I have to occasionally do a dance in OBS Studio itself, switching the input back and forth from my laptop&amp;rsquo;s webcam to Ugreen before I get the stream image. The audio almost always seems to pass through instantly, and so the issue is only with the video.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve experimented with recording using both OBS Studio and &lt;code&gt;ffmpeg&lt;/code&gt; directly, and the results are… let&amp;rsquo;s just say: mixed. But that&amp;rsquo;s a story for another time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Splitting a set top box HDMI output</title>
      <link>https://cybrkyd.com/post/splitting-a-set-top-box-hdmi-output/</link>
      <guid>https://cybrkyd.com/post/splitting-a-set-top-box-hdmi-output/</guid>
      <pubDate>Sun, 19 Apr 2026 19:41:29 +0000</pubDate>
      <description>&lt;p&gt;&amp;lt;-- &lt;a href="/post/building-a-pvr-for-a-hdmi-output/"&gt;Building a PVR for a HDMI output&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I settled on an EZCOO 1 x In, 2 x Out 4k 60Hz HDMI splitter.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="EZCOO HDMI splitter" src="/pimg/VsgDuN8rEtOwTmb9.avif" title="EZCOO HDMI splitter" /&gt;&lt;/p&gt;
&lt;p&gt;The Amazon reviews confirmed that this splitter was capable of splitting a Sky Q output. Therefore, it should also be capable of splitting the output from my Sky Stream box.&lt;/p&gt;
&lt;p&gt;This is what some of us do in the UK: split and extend instead of paying for so-called &amp;ldquo;multi-room subscriptions&amp;rdquo;. For the pleasure of watching two different channels at the same time in two different rooms, consumers must pay for a second set top box at a slightly discounted rate. Pah!&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="EZCOO HDMI splitter" src="/pimg/VsgrY5slPZZCysxb.avif" title="EZCOO HDMI splitter" /&gt;&lt;/p&gt;
&lt;p&gt;This splitter does not allow watching two channels at the same time. Instead, it mirrors the single input out to two separate monitors. In practical use, if one prefers to watch the rest of the movie from the comfort of the bedroom, this is the type of splitter which allows this, provided the living room set top box remains powered on and is broadcasting the desired channel. All very basic, yet fancy at the same time.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="EZCOO HDMI splitter" src="/pimg/VsgmEJMvx14UlfB5.avif" title="EZCOO HDMI splitter" /&gt;&lt;/p&gt;
&lt;p&gt;And that is exactly what I needed. I intend to connect my PVR to the second output and record from that.&lt;/p&gt;
&lt;p&gt;My only concern at this stage was whether the splitter was going to be able to decrypt the input stream and pass that to HDMI OUT2.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s find out.&lt;/p&gt;
&lt;p&gt;&lt;a href="/post/ugreen-hdmi-to-usb-capture-card/"&gt;Ugreen HDMI to USB capture card&lt;/a&gt; --&amp;gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a PVR for a HDMI output</title>
      <link>https://cybrkyd.com/post/building-a-pvr-for-a-hdmi-output/</link>
      <guid>https://cybrkyd.com/post/building-a-pvr-for-a-hdmi-output/</guid>
      <pubDate>Sun, 19 Apr 2026 09:16:12 +0000</pubDate>
      <description>&lt;p&gt;Back in the day, we had more freedom to do what we wanted with TV signals coming into the home. We could simply plug the antenna into the VCR, and run another cable from the VCR through to the back of the TV and record whatever we wanted, whenever we wanted. AND, we could fast forward through all the annoying adverts.&lt;/p&gt;
&lt;p&gt;Nowadays, it is apparently &amp;ldquo;illegal&amp;rdquo; to record from the TV; at least, that is my impression. They definitely make it very difficult to do so. In the UK, we can purchase Freeview and Freesat set top boxes with an actual hard drive to use as a PVR; Sky Q does the same and so does Virgin Media. The problem is that those recordings are encrypted and can only be stored and played back on that box. That means that they cannot be exported or viewed on any other machine.&lt;/p&gt;
&lt;p&gt;The reasons are valid enough; licensing and copyright rules and all that. Gone are the days when I could pass my video cassette recording of the Saturday night music video show to my neighbour because he missed it, and I could borrow his recording of The Fresh Prince of Bel-Air episode that I couldn&amp;rsquo;t watch.&lt;/p&gt;
&lt;p&gt;I miss those days. I&amp;rsquo;m going to bring those days back into this digital age.&lt;/p&gt;
&lt;p&gt;I have a Sky Stream subscription which comes along with its own cute little box called a &amp;ldquo;puck&amp;rdquo;. It&amp;rsquo;s horrible hardware (slow AF) but it does what it is supposed to do. Being a streaming-only box and service (like a Fire TV stick) it is not capable of recording. Instead, users have to add a show to a &amp;ldquo;playlist&amp;rdquo; and the box is smart enough to push the entire series into that playlist so that it can be binged-on later. The catch 22 here is that I have no idea how long those playlists last. So, if I save something in 2026, will it still be there in 2029? Probably not.&lt;/p&gt;
&lt;h2&gt;How can I record?&lt;/h2&gt;
&lt;p&gt;I intended to put everything into this one post, but the more words I type, the more I realise that there is a lot to cram in. I&amp;rsquo;m not in a mood to be concise and succinct about this! A lot of thought and trial and error went into the solution so I think I will flesh it out a bit.&lt;/p&gt;
&lt;p&gt;The set top box has one HDMI output which is intended to plug into the back of the TV. HDMI itself is encrypted and it looks for a &amp;ldquo;monitor&amp;rdquo; on the other side when it performs its handshake. Furthermore, no laptop or PC I know of has an HDMI input; those are all HDMI outputs as well.&lt;/p&gt;
&lt;p&gt;My first challenge was to see if I could somehow split the output from the set top box in two. One will go into the back of the TV and the other can go into the back of something else… let&amp;rsquo;s call it &amp;ldquo;Monitor 2&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The second challenge was then to figure out how to somehow capture the signal intended for Monitor 2. Will it be a decrypted signal feeding into there? It needs to be for this to work.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="/post/splitting-a-set-top-box-hdmi-output/"&gt;Splitting a set top box HDMI output&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="/post/ugreen-hdmi-to-usb-capture-card/"&gt;Ugreen HDMI to USB capture card&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>24 hours with Sky Stream: a review</title>
      <link>https://cybrkyd.com/post/24-hours-with-sky-stream-a-review/</link>
      <guid>https://cybrkyd.com/post/24-hours-with-sky-stream-a-review/</guid>
      <pubDate>Sun, 05 Apr 2026 19:28:07 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;ve recently subscribed to Sky Stream Ultimate. The &amp;ldquo;puck&amp;rdquo; arrived yesterday and I&amp;rsquo;ve spent just under 24 hours with it. My verdict is in: I do not like this.&lt;/p&gt;
&lt;p&gt;The channel offerings are good and so are the bundled apps which come along with my Ultimate package. I get Netflix with ads, HBO Max with ads, Discovery+ with ads, everything with ads. Lovely jubbly!&lt;/p&gt;
&lt;p&gt;I already have Netflix with ads as part of my Internet subscription (through Virgin Media) and I still have not signed in to watch anything. The kids and spouse are not too interested either. So, no one in the Cybrkyd household is exactly jumping and clapping hands at now having HBO Max or Discovery+ in addition to Netflix. All with ads.&lt;/p&gt;
&lt;p&gt;What I got this for was mainly to watch Sky Sports which is in a league of its own; it is the best thing UK TV has to offer, in my opinion. I now regret &amp;ndash; 24 hours later &amp;ndash; getting the Sky Stream &amp;ldquo;puck&amp;rdquo; as they call it. The puck is basically the name for their set top box. I should have just subscribed to NowTV with sports but the Sky Stream package with sports was much cheaper when compared to NowTV with sports. With NowTV, I could have at least used my own equipment, my Formuler Z11 Pro Max.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s the problem?&lt;/p&gt;
&lt;p&gt;The Sky Stream box is rubbish! It takes 7 remote button presses just to tune in and watch a live TV channel. SEVEN.&lt;/p&gt;
&lt;h2&gt;Watching a live channel on Sky Stream&lt;/h2&gt;
&lt;p&gt;This UI needs a BIG rework. This UI needs to believe in better. It looks nice but seems to be carefully crafted to resemble an app. So, think of trying to watch YouTube on a TV and how many remote button presses that takes before you start streaming the show. That many.&lt;/p&gt;
&lt;p&gt;At power on (at EVERY power on) the box defaults to the Home screen. To begin watching a TV channel, BBC 1 for example, the following is required, from the Home screen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Move down past the first rail which contains a bunch of recommendations.&lt;/li&gt;
&lt;li&gt;Move down past the second rail, the Playlists.&lt;/li&gt;
&lt;li&gt;Press Enter to access the TV guide.&lt;/li&gt;
&lt;li&gt;The TV guide opens, but presents the user with Categories, e.g. All Channels, Sports, Movies, etc. Select All Channels or your preferred category.&lt;/li&gt;
&lt;li&gt;You are on another rail, &amp;ldquo;Restart what&amp;rsquo;s on now&amp;rdquo;. Press down once. You are now on the first TV channel in the list.&lt;/li&gt;
&lt;li&gt;To watch it, press Enter. The channel starts streaming, but in a small pop-out screen on the bottom right.&lt;/li&gt;
&lt;li&gt;To watch the channel full screen, press Enter again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To recap, that is a total of seven &amp;ndash; yes, seven &amp;ndash; presses on the remote. Why? It would not be so bad if the box started and carried on where you left off, but no, it does not. The above procedure needs to be repeated each and every time you come out of standby.&lt;/p&gt;
&lt;p&gt;The same applies to all the other apps on the box; if you standby from YouTube, let&amp;rsquo;s say, you start up again on the Home screen.&lt;/p&gt;
&lt;h2&gt;The remote&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s backlit, which is nice. But it is too slippery and smooth, making it impossible (for me) to operate one-handed in certain situations. For example, when punching in a channel number, I need to hold it with one hand and use the other hand to punch in the numbers.&lt;/p&gt;
&lt;p&gt;The number pad is at the bottom &amp;ndash; normally this is at the top of a remote controller. See previous paragraph for description of how this leads to a two-handed remote.&lt;/p&gt;
&lt;p&gt;There is no dedicated &amp;ldquo;Guide&amp;rdquo; button on the remote. This has led to my thinking that this Sky Stream box has very much been designed to be like a glorified &amp;ldquo;app&amp;rdquo; box, something along the lines of a Fire TV stick, making a break away from Sky&amp;rsquo;s core business of satellite TV. I am guessing they want to make a clear distinction between their satellite TV offering and their streaming service. Or compete with the likes of Fire TV stick.&lt;/p&gt;
&lt;p&gt;All well and good. But (i) deliberately requiring a user to press 7 buttons just to watch live TV, and (ii) not having a dedicated &amp;ldquo;guide&amp;rdquo; button on the remote takes some getting used to.&lt;/p&gt;
&lt;p&gt;The voice navigation seems to be working well enough. I&amp;rsquo;m able to change channels via voice and it&amp;rsquo;s pretty responsive when it understands me. I still feel stupid talking to my TV but hey, I can always try getting used to it.&lt;/p&gt;
&lt;h2&gt;Overall performance&lt;/h2&gt;
&lt;p&gt;Once you are on a channel, the connection is stable and I have not had a single buffer as yet.&lt;/p&gt;
&lt;p&gt;The box does tend to be very slow to switch channels. It &lt;em&gt;is&lt;/em&gt; very slow. My Formuler Android box is instant; this Sky Stream box takes about 2-3 seconds to change channels.&lt;/p&gt;
&lt;p&gt;Pressing the Back button on the remote when watching a TV channel is supposed to take you back a step. So, if your previous screen was the TV Guide, that&amp;rsquo;s where you should go. Except, for this exact scenario, what has been happening for me is that it freezes up on the TV Guide, showing only the dynamic background (a wallpaper of the current show you are watching) and no data to go along with it. This has happened numerous times over the past 24 hours, which leads me to think that the dynamic refresh is the one causing the issue. Or, slow hardware which cannot keep up.&lt;/p&gt;
&lt;p&gt;Pressing Back again sends you further back… not exactly where you want to go, but at least it breaks the TV guide screen with no actual TV guide on it.&lt;/p&gt;
&lt;h2&gt;Verdict&lt;/h2&gt;
&lt;p&gt;A very pretty-looking interface and access to the coveted Sky Sports channels. However, the Sky Stream service seems designed to prevent you for as long as possible from actually &lt;em&gt;watching&lt;/em&gt; something. The hardware performance is horribly slow, the remote control is missing a dedicated &amp;ldquo;Guide&amp;rdquo; button, and the constant freezes between screen changes (from channel back to TV Guide) is already making me regret my decision to subscribe.&lt;/p&gt;
&lt;p&gt;I am used to an instant channel change; this box does not provide you with one. If that is where the &amp;ldquo;buffer&amp;rdquo; is happening, I can sort of start to accept that, provided the flawless buffer-less actual viewing continues as it has.&lt;/p&gt;
&lt;p&gt;To be honest, I expected much better from the likes of Sky. Their satellite service and set top boxes are world-leading. Sky Stream places them at the very bottom of the streamers pile for their terrible hardware and curious navigation design choices.&lt;/p&gt;
&lt;h2&gt;Final thoughts?&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m paying to stream, i.e. to actually watch something, not to view the pretty Home page of the Sky Stream interface. Sky Stream itself needs to (as their own company catchphrase suggests): Believe in better. I am no longer a believer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I declined a biometrics request from my employer</title>
      <link>https://cybrkyd.com/post/i-declined-a-biometrics-request-from-my-employer/</link>
      <guid>https://cybrkyd.com/post/i-declined-a-biometrics-request-from-my-employer/</guid>
      <pubDate>Sat, 04 Apr 2026 19:36:01 +0000</pubDate>
      <description>&lt;p&gt;Working in finance, I am subject to re-vetting every three years. 2026 is here, my turn is now, and lo and behold, my firm has switched to a new vetting agent. They have a shiny, bright website with lots of &amp;ldquo;LinkedIn speak&amp;rdquo;; you know: &amp;ldquo;we empower both employers and employees&amp;rdquo; and lots of &amp;ldquo;leveraging&amp;rdquo; and whatnot.&lt;/p&gt;
&lt;p&gt;Anyway, they gave me a choice: verify your identity via biometrics or not. I chose not. Their website looped and I was eventually presented with a page: &amp;ldquo;We&amp;rsquo;re sorry but we cannot complete your verification. Please contact your HR partner&amp;rdquo;. So, I did.&lt;/p&gt;
&lt;p&gt;I had to do a face-to-face verification, which I&amp;rsquo;m comfortable with. I know my HR partner and I know they will not ship my biometric data off to a server in Texas somewhere. If they do, there is good old GDPR and other UK data laws. I can sue, get rich quick and retire, so they won&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;My HR partner did enquire why I was opposed to biometric verification. She&amp;rsquo;s new, the vetting agent is new too, so I assume she was genuinely interested in my reasons.&lt;/p&gt;
&lt;p&gt;I told her: no one who is able to do background checks requires any further data from me. They already have access to my credit history and can check on any criminal records. By me downloading an app, taking a selfie so that they can compare it to my passport and driving licence adds… what, exactly to their already complete data picture of me? Nothing! It achieves a tick in the box that they have performed a visual check that I&amp;rsquo;m still me. Now, to achieve that, they need to obtain (i) a recent photo (via the selfie), and (ii) a scanned copy of my passport and driving licence to compare the selfie against. What do they do with it all, I asked? How long do they keep my photo and scans for? Where do they keep them? And, importantly, I have no way of verifying the answers to all those questions. So, no, I don&amp;rsquo;t do biometrics because I don&amp;rsquo;t trust them to protect my data, so request denied.&lt;/p&gt;
&lt;p&gt;She smiled and nodded. I bet she thought that I&amp;rsquo;m full of bull and a bit &amp;ldquo;special&amp;rdquo;, but that&amp;rsquo;s cool. I&amp;rsquo;m not doing it.&lt;/p&gt;
&lt;p&gt;Bare in mind that this is my employer I&amp;rsquo;m talking to like that!&lt;/p&gt;
&lt;p&gt;So, if I can refuse to provide biometrics to my company when they need to perform my triennial background checks, why not do the same to all the service providers trying to conform to Ofcom&amp;rsquo;s rules on AV (age verification)?&lt;/p&gt;
&lt;p&gt;Bluesky requires AV to access direct messaging on their app, but don&amp;rsquo;t filter out any adult material in the timeline. X allows access to direct messages but filters out adult material without AV. Apple has just gone live with AV to access &amp;ldquo;certain service&amp;rdquo; &amp;ndash; what those are at this time are unknown. I don&amp;rsquo;t use anything Meta besides WhatsApp, so that one is still a wait-and-see.&lt;/p&gt;
&lt;p&gt;Here is the point: do I absolutely need any of the above services? Does my life and well-being depend on them? That is a firm &amp;ldquo;no&amp;rdquo;. My life and well-being, however, &lt;em&gt;do&lt;/em&gt; depend on staying employed but I have managed to decline sharing my data with my employer&amp;rsquo;s third party agent.&lt;/p&gt;
&lt;p&gt;For how long I can continue to refuse passing along my biometric data to my employer&amp;rsquo;s appointed agent is another wait-and-see. All it will take is a quick update to the employee handbook (which I will have to sign) and there we have it. But, I am fairly certain for the time being that common sense and the law shall prevail for a little while yet with regards to what employers can get away with. We have pretty solid employment law in the UK which has built in protections for employees against this sort of nonsense.&lt;/p&gt;
&lt;p&gt;Alas, the world around me is changing and it is moving fast. All my other rights are being stripped away.&lt;/p&gt;
&lt;p&gt;Wait-and-see.&lt;/p&gt;
&lt;p&gt;To be continued.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Age verification on Systemd and Flatpak</title>
      <link>https://cybrkyd.com/post/age-verification-on-systemd-and-flatpak/</link>
      <guid>https://cybrkyd.com/post/age-verification-on-systemd-and-flatpak/</guid>
      <pubDate>Fri, 03 Apr 2026 17:34:50 +0000</pubDate>
      <description>&lt;p&gt;Apple is rolling out &lt;a href="https://www.bbc.co.uk/news/articles/c20qwz9xzr9o" target="&amp;#95;blank" rel="noopener"&gt;age verification for iPhone and iPad in the UK&lt;/a&gt;. The idea is to get the device &amp;ldquo;owner&amp;rdquo; to verify their age so that they can access &amp;ldquo;certain services&amp;rdquo;. Apple has already removed encryption for UK users in 2025: &lt;a href="https://support.apple.com/en-gb/122234" target="&amp;#95;blank" rel="noopener"&gt;Apple can no longer offer Advanced Data Protection in the United Kingdom to new users&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;What is the end game here? If it was an ISP doing this, I don&amp;rsquo;t think I would bat an eyelid, but this is a device manufacturer who just so happens to make their own operating system. Why are they now rolling out age verification? The UK law does not compel operating systems or hardware manufacturers to verify a user&amp;rsquo;s age in the same way that it requires service providers to. Why the overreach? Why the &amp;ldquo;helpfulness&amp;rdquo; from Apple? What is this really about?&lt;/p&gt;
&lt;p&gt;Apple&amp;rsquo;s move sets the stage for others to follow. In &lt;a href="https://cybrkyd.com/post/apple-bricking-iphones-and-ipads-in-the-uk-to-protect-kids/" target="&amp;#95;blank" rel="noopener"&gt;my earlier rant about Apple&lt;/a&gt;, I am impatiently waiting for Android to go the same way. It will come, of that I am certain.&lt;/p&gt;
&lt;p&gt;Is this a precursor to what Apple soon needs to do in California by 2027? Their initial move in the UK market doesn&amp;rsquo;t make any sense. I&amp;rsquo;m trying to think about this from a purely business perspective &amp;ndash; is this their test bed for what they will soon have to do in their home town?&lt;/p&gt;
&lt;p&gt;When the UK High Court issues a directive to block a domain, ISPs are compelled by law to block it. We have seen this before in the UK, many times. It helps to combat Internet piracy. Sure, it is like chopping off one of Hydra&amp;rsquo;s heads but it will at least put in place an inconvenience and hopefully, eventually, reduce Internet piracy.&lt;/p&gt;
&lt;p&gt;This move by Apple, I can sort of see it in the same light. However, the key difference here is that this is a unilateral decision by Apple. In much the same way that they unilaterally opted to remove encryption for some of their iCloud data offerings. There was no High Court order; the UK law requires service providers &amp;ndash; not operating systems &amp;ndash; to block or unblock content. That is my understanding.&lt;/p&gt;
&lt;p&gt;From a purely business perspective, it might be the thinking at Apple that they need to get ahead of the game. They are not entirely wrong or alone. &lt;a href="https://www.theregister.com/2026/03/24/foss_age_verification/" target="&amp;#95;blank" rel="noopener"&gt;Systemd has had a pull request&lt;/a&gt; which adds age verification. &lt;a href="https://github.com/flatpak/xdg-desktop-portal/pull/1922" target="&amp;#95;blank" rel="noopener"&gt;Flatpak is discussing the technicals&lt;/a&gt; around how to implement age verification.&lt;/p&gt;
&lt;p&gt;This is all to do with that &lt;a href="https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=202520260AB1043" target="&amp;#95;blank" rel="noopener"&gt;Californian law&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What I wonder about though is, from a Linux OS point of view, how would I &amp;ldquo;prove&amp;rdquo; that I&amp;rsquo;m an adult? The Systemd check seems to be configured so that only root can make changes to the data, in much the same way that the Flatpak folks are looking at. So, what does that mean? I am my own system admin… can I simply input that my one user account (that again being me) was born on &lt;code&gt;01 January 1970&lt;/code&gt; and be done with it? Will my system believe me? And how about their system, whoever &amp;ldquo;they&amp;rdquo; are? If not, then what else will I need to do to prove my birth date and age? Who will check if root can&amp;rsquo;t be trusted? How will they check?&lt;/p&gt;
&lt;p&gt;Where is all this going? Who knows? The lawmakers seem to have it all figured out. My questions have no answers. Not yet. At least, none that I could find. Non-Systemd Linux distros are laughing right now, and pointing fingers, doing that &amp;ldquo;Ha ha&amp;rdquo; of Nelson Muntz, except, they are not the bullies. They are making fun of the bullied.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Apple bricking iPhones and iPads in the UK to protect kids</title>
      <link>https://cybrkyd.com/post/apple-bricking-iphones-and-ipads-in-the-uk-to-protect-kids/</link>
      <guid>https://cybrkyd.com/post/apple-bricking-iphones-and-ipads-in-the-uk-to-protect-kids/</guid>
      <pubDate>Fri, 03 Apr 2026 12:58:06 +0000</pubDate>
      <description>&lt;p&gt;The minute my Linux distro of choice introduces age verification, we part company. There is no way &amp;ndash; no way on Earth &amp;ndash; that I will ever be undergoing any sort of age verification for the privilege of using something I own. Or, for the privilege of using a service, because there is no service or product on Earth that is worth me verifying my age for.&lt;/p&gt;
&lt;p&gt;Apple has begun asking iPhone users in the UK to prove their age. Until then, users are basically stuck with a child&amp;rsquo;s phone in their hands; a very expensive child&amp;rsquo;s phone. With the iOS update 26.4, the checks begin.&lt;/p&gt;
&lt;p&gt;I use Android. When that nonsense begins &amp;ndash; and it will begin soon &amp;ndash; I&amp;rsquo;m out. Rooting my device has never sounded so good and sane as it does right now.&lt;/p&gt;
&lt;p&gt;I personally do not use my phone much for the Internet. I do, however, feel pity for adults who do. Adults. Grown-up humans who have the right to walk into a shop, buy a packet of cigarettes or alcohol or a porn mag if they&amp;rsquo;re into that. One could counter-argue that a sort of &amp;ldquo;soft&amp;rdquo; age verification does take place when the cashier looks at you and judges your age before allowing the purchase. Fine. The buyer still has a choice: don&amp;rsquo;t walk into the shop to buy those items. That is, stop using their service.&lt;/p&gt;
&lt;p&gt;The difference with iPhone is that the buyer &amp;ldquo;owns&amp;rdquo; the shopfront. It could be their only access to the Internet. They can&amp;rsquo;t just stop using their own device because the government and the tech overlords changed the rules. The rules are well-intentioned: protect the kids. But this needs to be done in a better way as opposed to the dragnet fashion we now see.&lt;/p&gt;
&lt;p&gt;This is thinly-veiled totalitarianism. In my opinion, it would be much better if the UK blocked or was blocked. Think Imgur, who simply flipped a switch, disabling access to their service from the UK. Or, why not have a firewall like China does? Oh, wait, China is also totalitarian!&lt;/p&gt;
&lt;p&gt;This is a rock and a hard place. We now own nothing, and when presented with the illusion of ownership, some tech king can simply issue an update to effectively cripple a device. What is weird is that the current UK law does not even compel them to do this. Apple does not peddle &lt;em&gt;that&lt;/em&gt; sort of porn. They just did what Apple has always done: lock down users because they can. Except that this time, the walled garden is the entire Internet.&lt;/p&gt;
&lt;p&gt;Android, listen up. The millisecond you pull this stunt, you&amp;rsquo;re out of here. I don&amp;rsquo;t strictly need a non-rooted device just because my banking app maker insists on it. I &lt;em&gt;can&lt;/em&gt; not use my phone to do a quick transaction or balance check. I&amp;rsquo;m lucky enough to have a PC where I can log on for that sort of thing. And, I can go back to using cash, like the good old days.&lt;/p&gt;
&lt;p&gt;This whole age verification is getting out of hand. Once I am personally impacted, it will make things just a tad bit inconvenient. I will need to change a few things (like how I bank online) but that is probably all. It is a minor, cheap problem to overcome when compared to having an expensive phone effectively bricked by Apple.&lt;/p&gt;</description>
    </item>
    <item>
      <title>God speed, Artemis II</title>
      <link>https://cybrkyd.com/post/god-speed-artemis-II/</link>
      <guid>https://cybrkyd.com/post/god-speed-artemis-II/</guid>
      <pubDate>Thu, 02 Apr 2026 11:16:28 +0000</pubDate>
      <description>&lt;p&gt;I fell asleep! To be fair, it was scheduled for around 23:30 BST on a school night and I was dog tired. My eyelids won the battle. I managed to watch the lift-off replays this morning, however.&lt;/p&gt;
&lt;p&gt;I missed the stop-clock event and slept through an issue with the toilet??&lt;/p&gt;
&lt;p&gt;So, I didn&amp;rsquo;t miss too much, and can observe the rest of mission live via Youtube or NASA&amp;rsquo;s live feeds.&lt;/p&gt;
&lt;p&gt;Still, I&amp;rsquo;m a little disappointed that I did not manage to keep it together long enough to witness this one as it happened. What a sight, good pitch, good roll! 4 gs of thrust, wow! Just wow.&lt;/p&gt;
&lt;p&gt;God speed, Artemis II. And, God speed, Orion.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="A view from the Orion spacecraft looking back at the Earth" src="/pimg/artemis.avif" title="A view from the Orion spacecraft looking back at the Earth" /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>BST, GitHub and Stockholm Syndrome</title>
      <link>https://cybrkyd.com/post/bst-github-and-stockholm-syndrome/</link>
      <guid>https://cybrkyd.com/post/bst-github-and-stockholm-syndrome/</guid>
      <pubDate>Sun, 29 Mar 2026 18:46:13 +0000</pubDate>
      <description>&lt;p&gt;We are back onto BST today and longer days are here. Rejoice! It&amp;rsquo;s that time of year again when tax returns become due and must be paid. No rejoice.&lt;/p&gt;
&lt;p&gt;On my first day of BST (bullsh*t summer time), I notice a lot of complaints again about dear GitHub. Everyone is up in arms, rage-baited once more by something or other GitHub-related. Oh, today they are upset by GitHub&amp;rsquo;s plans to train AI on data generated from users Copilot interactions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From April 24 onward, interaction data — specifically inputs, outputs, code snippets, and associated context — from Copilot Free, Pro, and Pro+ users will be used to train and improve our AI models unless they opt out.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://github.blog/news-insights/company-news/updates-to-github-copilot-interaction-data-usage-policy/" target="&amp;#95;blank" rel="noopener"&gt;updates-to-github-copilot-interaction-data-usage-policy&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I have no sympathy for you, dear user of GitHub and AI. No sympathy at all. You can stay getting mad at GitHub for (a) all their frequent outages, and (b) all their syphoning of your data. YOUR data. What do you expect? Seriously people? What is it going to take, what is it going to actually take to get people to open their eyes?&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not shocked, I&amp;rsquo;m only very slightly surprised that so many smarter minds than mine would rather spend their precious time writing stern rebuttals instead of making a move. Braying into the void (as if GitHub bosses give a toss) at GitHub&amp;rsquo;s lack of morals. And, once the stern words have been written? Nothing. Zilch. Nada. Those minds smarter than mine go right back to doing absolutely nothing differently. They go right back to sending their Git commits to GitHub.&lt;/p&gt;
&lt;p&gt;Outage after outage, theft after theft. And still they persist, still they stay put. They love it. Stockholm Syndrome if I ever saw it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>24 hours with Vim</title>
      <link>https://cybrkyd.com/post/24-hours-with-vim/</link>
      <guid>https://cybrkyd.com/post/24-hours-with-vim/</guid>
      <pubDate>Fri, 27 Mar 2026 19:52:00 +0000</pubDate>
      <description>&lt;p&gt;I finally knuckled down and started playing again with Vim. It has always been a huge turn-off, what with all those weird key combinations to learn and remember. The famous one is the noob cross-posting in a gazillion forums:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;HELP! How do I exit Vim?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah! At least I remembered &lt;code&gt;ESC :wq+Enter&lt;/code&gt;. I also learned that &lt;code&gt;ESC :x+Enter&lt;/code&gt; works the same and is much cooler.&lt;/p&gt;
&lt;p&gt;I love Nano and I do prefer it. It is super easy to use and stays out of your way. Configuring Nano is also quick and easy, as there is not much there to configure. Vim, on the other hand is a bugger. Comparing the two, Vim has native spellchecking, which is a good thing. If I could only get it to behave less like Vim and more like Nano…&lt;/p&gt;
&lt;h2&gt;Permanent Insert mode&lt;/h2&gt;
&lt;p&gt;Why on earth would I want to open a file just to read it in Vim? Maybe that was all the rage in 1992, getting a document to open in the Terminal to have a cheeky read. Boats floated a bit differently back then, I guess. 99.99% of the time, I open a file in Terminal to edit it, so why not set Vim to do what Nano does by default?&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-config"&gt;autocmd VimEnter * startinsert
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That does the trick in &lt;code&gt;.vimrc&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Spellcheck&lt;/h2&gt;
&lt;p&gt;I like this a lot in Vim. It &lt;em&gt;is&lt;/em&gt; possible to do in Nano (albeit by installing Aspell or Hunspell) but spellchecking in Vim feels more natural to me. Plus, Vim&amp;rsquo;s spellcheck is built-in. With the cursor on the bad word, &lt;code&gt;ESC z=&lt;/code&gt; presents the suggested corrections and those are selected by number. Very 1990s but nice and straightforward. Nano, when I last tried, was a little more convoluted to check and correct bad spelling.&lt;/p&gt;
&lt;p&gt;Yes, I believe that this has turned into a comparison of Nano versus Vim.&lt;/p&gt;
&lt;p&gt;Hmm, I&amp;rsquo;m not so sure that I could ever get used to writing in either of these if I&amp;rsquo;m being totally honest with myself. I think I&amp;rsquo;m too much of a GUI-man. Should I have a play with EMACS next for another world of pain? Thanks, but no!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to try to stick with it for a little while — Vim that is — and see how this one develops. So far, it is staying out of my way (after a good deal of configuration in &lt;code&gt;.vimrc&lt;/code&gt;) and that makes me feel a bit better for considering using it more.&lt;/p&gt;
&lt;h2&gt;VS Code&lt;/h2&gt;
&lt;p&gt;Why am I even looking at Vim? In 2026? I&amp;rsquo;m perfectly happy in VS Code for all my coding and writing needs. I&amp;rsquo;ve configured it to my personal workflow and it is purring away like a content kitten.&lt;/p&gt;
&lt;p&gt;The AI creep, that&amp;rsquo;s why. Each and every update is something &amp;ldquo;agentic&amp;rdquo; or something AI-related. Yes, I&amp;rsquo;ve turned off everything &amp;ldquo;AI&amp;rdquo; in there, but have I? Have I really?&lt;/p&gt;
&lt;p&gt;Sadly, VS Code is going the same way that GitHub and Windows went; they share the same parent company: Microslop. In fact, VS Code is waaay ahead of its competitors when it comes to AI integration.&lt;/p&gt;
&lt;p&gt;And it&amp;rsquo;s starting to get old. I have absolutely nothing against AI. Like I have nothing against good food. But even gourmet cuisine starts to taste bad when you&amp;rsquo;re force-fed.&lt;/p&gt;
&lt;p&gt;So, perhaps another 24 hours with Vim is called for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Milk and potholes</title>
      <link>https://cybrkyd.com/post/milk-and-potholes/</link>
      <guid>https://cybrkyd.com/post/milk-and-potholes/</guid>
      <pubDate>Sun, 22 Mar 2026 11:33:19 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;m up today at the crack of dawn. Nice and fresh. I made coffee and threw my hands to head, like a football striker who should have scored in the wide-open goal but instead, kicked it over the bar.&lt;/p&gt;
&lt;p&gt;Milk.&lt;/p&gt;
&lt;p&gt;There was enough for me, enough for maybe about 3-4 cups of the black gold which I turn brown by adding the milk. No big deal. It&amp;rsquo;s 5am… by the time the family wakes up and the kids want their precious cereal, the smaller shops will be open.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s Sunday. The archaic UK Sunday trading laws say that no shops over a certain size (presumably someone took out a tape measure and then lobbied) are allowed to open their tills until 11am. Whatever. I can always drive to the local small Tesco Express or worst case, there is garage (petrol station, gas station) within a couple of miles from me. They sell milk in the fancy forecourt shop which is open like, always I think.&lt;/p&gt;
&lt;p&gt;The reason for the hands-to-head moment was that I was out yesterday and forgot the milk. Plus the Other Half went shopping yesterday but lost the list somewhere between home and the supermarket. Milk wasn&amp;rsquo;t on it. I know because she did ask what we needed before she left the residence and I assisted in compiling the list. Like her own little personal AI dude.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Hey, Cybrkyd! What do we need?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I rattled off a few items from the top of my head but milk wasn&amp;rsquo;t in my head and did not make it on to the list. Maybe she needs to work on her prompting skills. Add more specificity.&lt;/p&gt;
&lt;p&gt;Anyhow, today, Sunday. Short on milk. I need to get some pronto.&lt;/p&gt;
&lt;p&gt;I hop in the car at 7am sharp and drive. Tesco Express opens at 7am. On a Sunday. Imagine that!&lt;/p&gt;
&lt;p&gt;Maybe it was the light or the fact that at this silly hour on a Sunday, there is no one on the roads yet. Or maybe both. I noticed how many potholes there were. Everywhere.&lt;/p&gt;
&lt;p&gt;This picture is not right. I live in the UK, a barely-G7 nation, but still a G7. There. Should. Not. Be. Any. Potholes. In. The. Roads. This is not a third-world country. But here we are.&lt;/p&gt;
&lt;p&gt;The skinheads will blame the immigrants for causing this mess.&lt;/p&gt;
&lt;p&gt;The current government will blame the previous government. And then point out that the local governments are not repairing the roads.&lt;/p&gt;
&lt;p&gt;The local governments will claim there is no funding from central government.&lt;/p&gt;
&lt;p&gt;Screw &amp;lsquo;em. Screw &amp;lsquo;em all. This immigrant just wants milk. And he wants to drive in his tax-paid, lowered, souped-up German-engineered, autobahn-worthy vehicle on an actual pothole-free road. Which he paid for himself with no help from the generous benefits system in the UK. But no! Impossible.&lt;/p&gt;
&lt;p&gt;Funny thing, yesterday. Being Saturday, the roads around me are bumper-to-bumper. I took a few detours which led me through a road I&amp;rsquo;ve never been on before. It was a nice, wide, tree-lined road and there were literal mansions on both sides of a PERFECTLY SMOOTH POTHOLE-FREE road. Newly-paved and everything. The whole bloody road. It was such a good surface that the finely-engineered German driving machine actually seemed to drop an octave or two on the revs, like it was in heaven or something.&lt;/p&gt;
&lt;p&gt;So that&amp;rsquo;s what they&amp;rsquo;re doing. They&amp;rsquo;re re-paving the roads where the billionaires live first and will get to normal people&amp;rsquo;s roads in ohh…like, never?&lt;/p&gt;
&lt;p&gt;Screw &amp;lsquo;em. Screw &amp;lsquo;em all.&lt;/p&gt;
&lt;p&gt;I got my milk. At least Tesco Express had milk. The Tesco at the end of the road with potholes.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m proud of my milk. And I&amp;rsquo;m proud that I can openly advertise I happily obtained it at Tesco Express, the supermarket chain where the nation shops. There are no Tesco Expresses in close proximity to that Billionaire&amp;rsquo;s Road, one can be assured. And, I&amp;rsquo;m not quite sure why they need their neighbourhood&amp;rsquo;s roads paving anyway. Don&amp;rsquo;t they have their milk helicoptered in?&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;m no longer proud of is living in the UK. Not with these roads. The roads are the perfect reflection of the rest of this place, the image in a mirror of a nation falling to pieces.&lt;/p&gt;
&lt;p&gt;Except for where the billionaires live.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Man flu</title>
      <link>https://cybrkyd.com/post/man-flu/</link>
      <guid>https://cybrkyd.com/post/man-flu/</guid>
      <pubDate>Tue, 17 Mar 2026 10:26:50 +0000</pubDate>
      <description>&lt;p&gt;I have man flu. This is a semi-fatal disease which affects males only. If you&amp;rsquo;re not male, there is no chance of understanding the disease, and it is quite common for non-males to poke fun at those who contract the man flu.&lt;/p&gt;
&lt;p&gt;Semi-fatal? Yes, that is correct &amp;ndash; it almost ends your life or at the very least, it feels that way. Men cease to behave like men, and revert to being babies. For the tougher of the gender, they at least manage to behave like toddlers. I&amp;rsquo;m, erm, of the toddler variety myself.&lt;/p&gt;
&lt;p&gt;If you happen to live in the same four walls as a female of the species, man flu is known to also impact them. Whereas the male might be in agony (poor thing) from shivers, a runny nose, a sore throat, coughing fits, aches and pains (in all joints) and a headache, the effects of the male having man flu results in irrational and unfair behaviour on the part of the female in the household. It appears to give them maximum emotion damage, causing them to lash out and frequently utter the words &amp;ldquo;man up&amp;rdquo;. These utterances, heaped upon the poor soul already undergoing immense, untold suffering, cause more injury, and further weaken their already-fragile state. It&amp;rsquo;s an endless cycle, not to mention, cruel.&lt;/p&gt;
&lt;p&gt;As I lay here on my back under a blanket with a steaming hot cup of tea at my side, think of me, please. I have barely managed to find the strength to type this out. I had to make my own tea, for goodness&amp;rsquo; sake. You cannot imagine how difficult and strenuous that was. I had to stand up and walk to the kitchen, fill the kettle and wait for it to boil. Life is hard for me right now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing the cursor theme in Tor Browser on Linux Mint</title>
      <link>https://cybrkyd.com/post/fixing-the-cursor-theme-in-tor-browser-on-linux-mint/</link>
      <guid>https://cybrkyd.com/post/fixing-the-cursor-theme-in-tor-browser-on-linux-mint/</guid>
      <pubDate>Wed, 11 Mar 2026 12:35:41 +0000</pubDate>
      <description>&lt;p&gt;My Tor Browser installation is unusual. Rather than install it from my distribution&amp;rsquo;s repos, I grab the &lt;code&gt;tar.xz&lt;/code&gt; file from &lt;a href="https://www.torproject.org/download/" target="&amp;#95;blank" rel="noopener"&gt;torproject.org/download/&lt;/a&gt;, extract it and run it directly from there. I do the same with Firefox and Thunderbird, but that&amp;rsquo;s likely a story for another day.&lt;/p&gt;
&lt;p&gt;The system-wide cursor theme on Linux Mint is &lt;code&gt;Bibata-Modern-Classic&lt;/code&gt;. It is ugly, super ugly. In fact, the very first thing I do when installing a new Mint version is to switch my cursor theme to &lt;code&gt;DMZ Black&lt;/code&gt;. Every application respects my choice with the exception of Tor Browser. Instead, Tor Browser insists on using Bibata-Modern-Classic, the default Mint cursor. The usual fixes (checking permissions, verifying dconf settings, launching with environment variables) does nothing, perhaps because Tor is not properly integrated into my system per se, I dunno.&lt;/p&gt;
&lt;p&gt;The solution that worked for me turned out to be two simple steps.&lt;/p&gt;
&lt;h3&gt;1: Update the GTK Settings File for Tor Browser&lt;/h3&gt;
&lt;p&gt;Tor Browser looks for GTK configuration in its own profile directory. A &lt;code&gt;settings.ini&lt;/code&gt; file needs to be there.&lt;/p&gt;
&lt;p&gt;Navigate to the Tor Browser directory &lt;code&gt;.config&lt;/code&gt; directory. Mine is located in my home folder:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cd ~/tor-browser_en-US/Browser/.config/gtk-3.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Edit the settings file:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;nano settings.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add these lines:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-ini"&gt;[Settings]
gtk-cursor-theme-name=DMZ-Black
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There is usually already a &lt;code&gt;[Settings]&lt;/code&gt; block present, so that gtk line can safely fit in at the bottom of that.&lt;/p&gt;
&lt;p&gt;Save and exit.&lt;/p&gt;
&lt;h3&gt;2: Enable Legacy Cursors in Tor Browser&amp;rsquo;s Configuration&lt;/h3&gt;
&lt;p&gt;This step turned out to be the crucial one.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Tor Browser&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;about:config&lt;/code&gt; in the address bar and press Enter&lt;/li&gt;
&lt;li&gt;Accept the warning prompt&lt;/li&gt;
&lt;li&gt;Search for &lt;code&gt;widget.gtk.legacy-cursors.enabled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Double-click it to set the value to &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After completing both steps, a full restart of Tor Browser resulted in the DMZ Black cursor theme appearing correctly.&lt;/p&gt;
&lt;p&gt;It works on my machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Virgin Media site blocks</title>
      <link>https://cybrkyd.com/post/more-virgin-media-site-blocks/</link>
      <guid>https://cybrkyd.com/post/more-virgin-media-site-blocks/</guid>
      <pubDate>Tue, 10 Mar 2026 08:13:37 +0000</pubDate>
      <description>&lt;p&gt;Something interesting &amp;ndash; and perhaps concerning &amp;ndash; when comparing my current ISP to my previous provider is how many websites Virgin Media blocks by default. The blocks appear to be over and above court-mandated blocks in the UK.&lt;/p&gt;
&lt;p&gt;I understand Parental Controls are used to block things like adult websites, gambling, social media, etc. It turns out that &lt;a href="https://cybrkyd.com/post/my-isp-virgin-media-is-blocking-vpns-via-parental-controls/" target="&amp;#95;blank" rel="noopener"&gt;they are blocking VPNs&lt;/a&gt; as well under this group of blocks. All is fine now when it comes to updating my VPN and accessing VPN websites, now that I have disabled Parental Controls.&lt;/p&gt;
&lt;p&gt;The next issue that I discovered was that my EPG data was not updating on my set top box. I use &lt;a href="https://epgshare01.online" target="&amp;#95;blank" rel="noopener"&gt;epgshare01.online&lt;/a&gt; and it was inaccessible. Strange! I logged back into my Virgin Media account and saw that Virus Protection was still turned on, as I had left it. Surely EPG data is not a virus or malware? The more I look at this seemingly haphazard blocking by Virgin Media, the more I think that they must be under pressure by someone to kill access to these sort of &amp;ldquo;undesirable&amp;rdquo; websites.&lt;/p&gt;
&lt;p&gt;I do wonder… Virgin Media is essentially a reseller of TV content. Sure, they have a few of their own channels but they also mainly operate under licence from bigger fish like Sky. Sky is very powerful &amp;ndash; they control most of the sport broadcasts in the UK and they are &lt;em&gt;the&lt;/em&gt; major satellite provider, with essentially a monopoly on premium content. They have been known to obtain UK-wide blocks in record time for websites that dare to venture into any part of their territory - see TorrentFreak for how many times they have done this. It never dawned on me before that raw EPG data would also be targeted. And, that it would be blocked under Virus Protection.&lt;/p&gt;
&lt;p&gt;Well, it is. As soon as I turned off Virus Protection for my account, what do you know? My EPG immediately updated.&lt;/p&gt;
&lt;p&gt;This is getting weirder and weirder! :-) Hopefully, that is all I need to do now to at least have &lt;em&gt;some&lt;/em&gt; access to the wider Internet. I do accept that for everything else, there is my trusty VPN.&lt;/p&gt;
&lt;p&gt;What is even weirder is that my previous ISP was Sky. With my package, I had the entire Internet open. For example, The Pirate Bay is inaccessible on Virgin Media but through Sky, I could get to it without a VPN. And YTS.lt (and .mx when it still existed). And every other dodgy site I could think of - Anna&amp;rsquo;s Archive, Libgen, 1337x…you get the picture. And I never once had a single issue with the ultra-reliable epgshare01.online or any other EPG site. Logic dictates that Sky should have the same &amp;ndash; or more &amp;ndash; blocks than Virgin Media; more to lose and all that. But no, nothing was blocked.&lt;/p&gt;
&lt;p&gt;Who knows? I&amp;rsquo;m still trying to wrap my mind around how EPG data wound up being labelled as a virus or malware.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The fog of war</title>
      <link>https://cybrkyd.com/post/the-fog-of-war/</link>
      <guid>https://cybrkyd.com/post/the-fog-of-war/</guid>
      <pubDate>Mon, 09 Mar 2026 09:25:18 +0000</pubDate>
      <description>&lt;p&gt;Foggy days are here. For a few days over the past week or so, we have had some thick fog in the early mornings. It&amp;rsquo;s the sort of miserable fog which takes hours to lift. It dampens the mood, as the sun is not yet strong enough to burn through it quickly.&lt;/p&gt;
&lt;p&gt;Spring was in the air for one or two days last week, and some of the lower level flowers have started springing up at the slight rise in daytime temperatures. We are forecast to brighten up a bit later today but looking out the window, I&amp;rsquo;m not holding my breath.&lt;/p&gt;
&lt;p&gt;Oil prices rose dramatically over night, as expected, thanks to the latest Israeli &amp;ldquo;special operation&amp;rdquo; in the Middle East, and the announcement from the Iranians that they have elected a new Supreme Leader. Things are about to ramp up (again) so we are in for a bumpy ride a little while longer yet.&lt;/p&gt;
&lt;p&gt;Meanwhile, in the UK, I can only imagine how many people are softly breathing a sigh of relief that Ofgem lowered the energy price cap by a whopping 7% a mere 3 days before the first bomb dropped. Selfishly, I count myself among them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Today, the birds don&amp;rsquo;t fly&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Except the metal ones in the sky&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;For this is the fog of war.&lt;/em&gt;  &lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="A gloomy scene showing back gardens in Greater London blanketed by thick fog" src="/pimg/5O50j6T59pXlfoiy.avif" title="A gloomy scene showing back gardens in Greater London blanketed by thick fog" /&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My ISP Virgin Media is blocking VPNs via Parental Controls</title>
      <link>https://cybrkyd.com/post/my-isp-virgin-media-is-blocking-vpns-via-parental-controls/</link>
      <guid>https://cybrkyd.com/post/my-isp-virgin-media-is-blocking-vpns-via-parental-controls/</guid>
      <pubDate>Fri, 06 Mar 2026 17:23:36 +0000</pubDate>
      <description>&lt;p&gt;The new internet provider has connected me up, and boy is it fast. I ordered 1GB and am currently getting ~800 Mbps down. I cannot complain too much about that, especially when our ISPs in the UK have a disclaimer in their small print which says something along the lines of: You are paying for 1GB but in reality, we can only guarantee you will get 350 Mbps on average. I&amp;rsquo;m very lucky to be getting that speed to be honest. My previous provider was also 1GB but I averaged about 400-500 Mbps on good days.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m still stabilising — they do say it takes a couple of days for it to &amp;ldquo;settle in&amp;rdquo;, something the engineer also reminded me of on install day. Naturally, I&amp;rsquo;ve been catching up and playing around, and&amp;hellip;failing miserably at updating my Proton VPN.&lt;/p&gt;
&lt;p&gt;Hmm! Very strange. I update my Linux system via the terminal and all other updates were downloading and installing without issue. Only Proton. It would timeout when trying to check for any updates on &lt;a href="https://repo.protonvpn.com/debian"&gt;https://repo.protonvpn.com/debian&lt;/a&gt;. Huh, I thought I would never see Proton unavailable! Man, the world really is going to pot! That was my initial thought, thinking Proton was going the way of GitHub and Cloudflare with all their recent outages.&lt;/p&gt;
&lt;p&gt;I then fired up their VPN and that worked, at least. With it still connected I thought to give the update another go. It immediately connected and updated at the first attempt. What on earth was happening here?&lt;/p&gt;
&lt;p&gt;My new ISP!&lt;/p&gt;
&lt;p&gt;They automatically enable Parental Controls and now it would seem that VPNs are bundled along with all the other block lists. Of course, no one can verify what exactly the block lists contain but that is highly annoying.&lt;/p&gt;
&lt;p&gt;Only in the UK, mate.&lt;/p&gt;
&lt;p&gt;Right-o! I logged-on to my account and disabled the entire Parental Controls option. I then made sure that the actual VPN was off, and attempted to ping the Proton repo. That worked straight away without any timeouts this time.&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m right. The world &lt;em&gt;really is&lt;/em&gt; going to pot. I&amp;rsquo;m not too sure who decided that VPNs are not for kids and whether this is Virgin Media-only thing or not. But it sets me off down the path of thinking that all those conspiracy theories doing the rounds in the UK are all true: the Government really does want to ban VPNs. I wish them luck.&lt;/p&gt;
&lt;p&gt;This could just be Virgin Media trying to be helpful, but it does make me go &amp;ldquo;Hmm&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Week 09, 2026</title>
      <link>https://cybrkyd.com/post/week-09-2026/</link>
      <guid>https://cybrkyd.com/post/week-09-2026/</guid>
      <pubDate>Sun, 01 Mar 2026 15:03:49 +0000</pubDate>
      <description>&lt;p&gt;What a blur. We moved house to get closer to schools. We lasted exactly 13 months in the previous place. It was in an out-of-the-way village which was a bit too far out of the way. A real one-horse village, quite literally. I could hear it neigh on the odd occasion in the early hours.&lt;/p&gt;
&lt;p&gt;The move was swift. Five guys, two Luton vans and we were done in less than three hours. They were rewarded with a nice tip! That was Thursday. Prior to that we were packing and stacking and since then, we&amp;rsquo;ve been unpacking and trying to settle in. Now it&amp;rsquo;s Sunday morning and I actually have time to sit down for 10 minutes and type something here.&lt;/p&gt;
&lt;p&gt;The new place is nice. The move was back into town with some hustle and bustle around. There are shops within walking distance. Imagine that! I was saddened by the fact that I couldn&amp;rsquo;t move my broadband provider with us. The speed they offer at the new place is nowhere near what I was getting. I was with Sky and on their 1GB package (in the village, imagine that!). In town, they could only go up to 65MB. I can&amp;rsquo;t explain that one and neither could they. As I was on a two-year contract, they kindly waived the early termination charges and shut me down for free. I love Sky broadband and have never had a single issue with them. Would I recommend them to a friend? Oh, yes!&lt;/p&gt;
&lt;p&gt;The new place is in a neighbourhood which &lt;em&gt;does&lt;/em&gt; get Virgin Media 1GB broadband, and we have signed up with them. I have used Virgin before and when they work, they work very well. Heck, they got me through the Covid years, albeit with numerous outages because their infrastructure was not prepared at the time to deal with the entire country working from home. From what I&amp;rsquo;ve heard though, they&amp;rsquo;ve upped their game, so fingers crossed. The cable guy comes on Wednesday to connect us up and until then, it&amp;rsquo;s 5G phone tethering for me. Thankfully the 5G signal is 4 out of 5 bars which makes the next few days survivable.&lt;/p&gt;
&lt;p&gt;Moving house allowed me time to think. I wasn&amp;rsquo;t tethered to my desktop or laptop much over the past week. Perspectives change when one has time to &amp;ldquo;weigh up&amp;rdquo; every thought, every intention, without a technological distraction to pull your mind off things. A switch-off and a reset was much needed. I would recommend that too to a friend.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My self-hosted Git workflow with GitGen</title>
      <link>https://cybrkyd.com/post/my-self-hosted-git-workflow-with-gitgen/</link>
      <guid>https://cybrkyd.com/post/my-self-hosted-git-workflow-with-gitgen/</guid>
      <pubDate>Mon, 23 Feb 2026 19:17:03 +0000</pubDate>
      <description>&lt;p&gt;Here is my workflow for self-hosting Git repositories on a shared hosting service with GitGen.&lt;/p&gt;
&lt;p&gt;The assumption is that I already have a Git repository on my local machine. My repositories are created with SHA256 by default because that future is coming. Therefore, the further assumption is that SHA256 is what will also live on the remote bare repo.&lt;/p&gt;
&lt;h2&gt;Why bare on remote?&lt;/h2&gt;
&lt;p&gt;GitHub et al &lt;a href="https://coderefinery.github.io/git-collaborative/bare-repos/" target="&amp;#95;blank" rel="noopener"&gt;are bare repositories&lt;/a&gt; and I follow the same principle. The working directory lives on my local machine and any other remote &amp;lsquo;clones&amp;rsquo;. Since I do not perform any actual work on the repo which lives on my remote server, there is no need to have that as a full working directory.&lt;/p&gt;
&lt;h2&gt;Create the remote bare repo&lt;/h2&gt;
&lt;p&gt;My publishing workflow begins by creating a bare repository on the remote server.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git init --bare NEWREPO -b main --object-format=sha256
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I then create a hook:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd NEWREPO/hooks

touch post-receive &amp;amp;&amp;amp; chmod 750 post-receive
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, I add the instruction to update the bare repo when a new push comes in.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano post-receive
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I add the following to post-receive:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

git update-server-info
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save it and exit.&lt;/p&gt;
&lt;p&gt;To allow the cloning of my repositories, the &lt;code&gt;post-receive&lt;/code&gt; hook exposes them over &amp;ldquo;dumb&amp;rdquo; HTTP. This is because no smart HTTP is permitted by my host and SSH cloning is only allowed if access is explicitly granted.&lt;/p&gt;
&lt;h2&gt;The local workflow with GitGen&lt;/h2&gt;
&lt;p&gt;For each new repo, I cheat by manually editing its config file to add the remote and branch details.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[remote &amp;quot;origin&amp;quot;]
    url = https://git.cybrkyd.com/repository/NEWNAME
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = ssh://blah.blah/git.cybrkyd.com/repository/NEWNAME
[branch &amp;quot;main&amp;quot;]
    remote = origin
    merge = refs/heads/main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I then make sure to add something meaningful to the &lt;code&gt;description&lt;/code&gt; file since GitGen makes use of that.&lt;/p&gt;
&lt;p&gt;At this point, a simple &lt;code&gt;git push&lt;/code&gt; works to update the remote with any local commits. As I do not particularly want to run GitGen manually after each commit, I have created an alias to take care of this for me. I could have used a pre-push hook but that would mean adding the hook to each and every local repo. There are also global hooks but that is not for me.&lt;/p&gt;
&lt;p&gt;A simple alias does the job really well.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias gpush='git push &amp;amp;&amp;amp; cd /home/cybr/Work/git-gen &amp;amp;&amp;amp; bash run.sh'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My &lt;code&gt;run.sh&lt;/code&gt; contains the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

python3 gitgen.py

rsync -avP -e 'ssh' &amp;quot;/home/cybr/Work/git-gen/git-website/&amp;quot; &amp;quot;my_host:~/git.cybrkyd.com&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I commit to any of my repos, I run the alias &lt;code&gt;gpush&lt;/code&gt; and this happens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;li&gt;GitGen runs to generate the static site&lt;/li&gt;
&lt;li&gt;The files are sent to my server via Rsync.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;m currently experimenting with caching the GitGen build so as to not generate all repos each and every time I run it. That, and sending the entire site with Rsync after each generation as well. Soon, very soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vorsprung durch Technik</title>
      <link>https://cybrkyd.com/post/vorsprung-durch-technik/</link>
      <guid>https://cybrkyd.com/post/vorsprung-durch-technik/</guid>
      <pubDate>Sun, 15 Feb 2026 21:41:42 +0000</pubDate>
      <description>&lt;p&gt;I drive German, but not an Audi. Mine is another finely engineered German make. You can&amp;rsquo;t beat German technology. They engineer everything to perfection, like the Japanese. If it&amp;rsquo;s German, it&amp;rsquo;s not just good, it is excellent. It&amp;rsquo;s in their DNA, I think.&lt;/p&gt;
&lt;p&gt;Today&amp;rsquo;s task required some of that precision engineering. The outside drain which takes water from the kitchen developed a blockage somewhere. It started flowing away slowly about a week ago and I put it down to all the rain we&amp;rsquo;ve seen over the past few weeks. And then on Friday, it just choked up and stopped almost completely, taking about 14 hours to recede. Not good.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve always been wary of those extendable flexible pipes plumbers use to unclog drains. All the plumbers I&amp;rsquo;ve met have all chuckled about how many they&amp;rsquo;ve lost down the drain because the joints snap, etc. Apparently, proper plumbers use a single long pipe with no joints but those are expensive and hard to come by, again, apparently.&lt;/p&gt;
&lt;p&gt;Anyway, on Saturday I tried a little hack which failed miserably. I have some thin copper tubing (quite long) and thought to give it go with the old jab-and-prod technique, like the plumbers do. Copper is nice and flexible at that thickness so it sort-of worked up to a point; the water started moving again but not by very much. When I woke up this morning, the water was still standing, having barely dropped more than a few centimetres.&lt;/p&gt;
&lt;p&gt;Time for some German tech. Off to Screwfix I went, and picked up a Karcher Pipe Cleaning Kit, the flexible hose one. It is expensive AF, but it&amp;rsquo;s German! 15 metres set me back almost £80. A bargain?? Let&amp;rsquo;s see, I thought. [Aside] Screwfix&amp;rsquo;s price is much cheaper than Amazon&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;&lt;img class="curved" alt="Karcher Pipe Cleaning Kit packaging" src="/pimg/kFtY1TONuQ879vHT.avif" title="Karcher Pipe Cleaning Kit packaging" /&gt;&lt;/p&gt;
&lt;p&gt;I got back home, waited for the (more) rain to stop, connected it up, took a deep breath and wondered how long this was going to take. There goes my restful Sunday…&lt;/p&gt;
&lt;p&gt;I fed the line into the drain as far as it could go and gave it a burst for about 5 seconds. Stopped. Bubbles, lots of bubbles. I pulled it out a bit and this time when I fed the line, it went deeper. Cool. I pumped for about another 5-10 seconds, pull / push / pump. Whooooossshhhh! Gurgle! Gone!&lt;/p&gt;
&lt;p&gt;Less than 60 seconds. I almost felt ripped-off given the price I paid for this thing!&lt;/p&gt;
&lt;p&gt;Wow! That was fast and efficient, and so much cheaper than calling out a plumber.&lt;/p&gt;
&lt;p&gt;&lt;span style="color:red"&gt;Vorsprung durch &lt;em&gt;Deutsche&lt;/em&gt; Technik!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;[Another aside] Don&amp;rsquo;t know if that&amp;rsquo;s correct German but it sounds good to me!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Week 07, 2026</title>
      <link>https://cybrkyd.com/post/week-07-2026/</link>
      <guid>https://cybrkyd.com/post/week-07-2026/</guid>
      <pubDate>Sat, 14 Feb 2026 08:57:35 +0000</pubDate>
      <description>&lt;p&gt;This one was a challenge to get through. Firstly, the firm had many, many technical issues which kept quite a few of us up until the wee hours. We do need to simplify; complexity brings with it a multitude of break points. Secondly, there was hardly any time to myself with all that mess going on.&lt;/p&gt;
&lt;p&gt;I did, however, have time to read about what I&amp;rsquo;m interested in, and one thing which remains firmly fixed in my mind this week is how people have started reading online blog posts and articles, looking for so-called &amp;lsquo;AI tells&amp;rsquo;. I&amp;rsquo;m guilty of this behaviour as well. I use the Internet to search for something when I need it. For example, &lt;a href="https://cybrkyd.com/post/note-to-self-libreoffice-calc-web-tables/" target="&amp;#95;blank" rel="noopener"&gt;how to use LibreOffice to import a web table&lt;/a&gt;. It is inevitable that I land on a top-ranked page in my favourite search engine which is so full of waffle that I simply click away, cursing whoever published it and in my mind, accusing them of using AI to write that. I, of course, make that accusation without a shred of evidence. That accusation is made on the basis of me subconsciously reading material whilst actively looking for the &amp;lsquo;AI tell&amp;rsquo;. It&amp;rsquo;s not really fair, I think.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s 50/50. They may have, they may not have. But I judge, I curse and I leave in disgust, upset at having had my time wasted.&lt;/p&gt;
&lt;p&gt;This week, I stopped and thought about it. No, there was not a single em-dash in there, like this: — . I have probably written and typed-out a thousand times more em-dashes in my lifetime than that poor sod. There were just a lot of words for something so small. In a moment of weakness recently, I even considered replacing all the em-dashes on my blog with --.&lt;/p&gt;
&lt;p&gt;But, why? In case I&amp;rsquo;m suddenly accused of using AI to output my posts? Yeah, probably that — again -- subconsciously. That brought me to the real heart of this.&lt;/p&gt;
&lt;p&gt;I primarily write everything on here for myself. I also read and re-read it to death before I dare hit that &amp;lsquo;publish&amp;rsquo; button. This is my escape, my junk box, my messy, unordered, random thoughts and discoveries. I self-edit (who likes spelling mistakes and grammatical errors, not to mention, waffle?) in a meagre effort to create some semblance of organisation, balance and coherence. This weblog is not an engagement farm, looking for attention or clicks. Read, don&amp;rsquo;t read; fine. Accuse, don&amp;rsquo;t accuse; also fine. If others want to engage in spewing out AI garbage, cool with me; I just won&amp;rsquo;t read it. I also will not level accusations without evidence ever again. What&amp;rsquo;s next? Are we to expect all article-type content on the Internet to show a screen recording of the author typing-out the words? Yeah, that might work… hey! What if they have a second screen out of shot with AI generated content on it, and they&amp;rsquo;re simply copy-typing??&lt;/p&gt;
&lt;p&gt;This whole post and conversation is getting silly, like this past week. What would AI do?&lt;/p&gt;
&lt;p&gt;Fin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Note to self - LibreOffice Calc web tables</title>
      <link>https://cybrkyd.com/post/note-to-self-libreoffice-calc-web-tables/</link>
      <guid>https://cybrkyd.com/post/note-to-self-libreoffice-calc-web-tables/</guid>
      <pubDate>Fri, 13 Feb 2026 20:01:01 +0000</pubDate>
      <description>&lt;p&gt;There are always the small, one-time tasks where I need to figure out an easier, quicker way to accomplish something. This is one of those.&lt;/p&gt;
&lt;p&gt;The problem is simple enough: copy a table from Wikipedia. Grab it once, and move on.&lt;/p&gt;
&lt;p&gt;Copy and paste is usually my friend for browser-to-spreadsheet transfer, but some Wikipedia tables are massive and not to mention, very awkward. I have previously ended up with a messy file which needs a ton of cleaning before it is useable.&lt;/p&gt;
&lt;p&gt;LibreOffice Calc is just the ticket. From the menu, go to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sheet &amp;gt; External Links&lt;/li&gt;
&lt;li&gt;Add the URL and press Enter&lt;/li&gt;
&lt;li&gt;Keep default values on Import Options&lt;/li&gt;
&lt;li&gt;Select HTML_tables &amp;gt; OK&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Done. I have a nice, clean table. In a spreadsheet.&lt;/p&gt;
&lt;p&gt;If the page contains multiple tables, Calc allows choosing which one to import.&lt;/p&gt;
&lt;p&gt;I tend to forget this feature exists, so now it is noted for next time. Via &lt;a href="https://ecodiv.earth/post/calc-webscraping/" target="&amp;#95;blank" rel="noopener"&gt;ecodiv.earth&lt;/a&gt;.*&lt;/p&gt;
&lt;p&gt;* &lt;em&gt;In LibreOffice Calc v24, the old &lt;b&gt;Link to external data&lt;/b&gt; is now named &lt;b&gt;External Links&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitGen column graph</title>
      <link>https://cybrkyd.com/post/gitgen-column-graph/</link>
      <guid>https://cybrkyd.com/post/gitgen-column-graph/</guid>
      <pubDate>Tue, 10 Feb 2026 12:09:03 +0000</pubDate>
      <description>&lt;p&gt;Here is a pretty graph. The way my Git commits across my repositories currently stand, the graph sort-of looks like it&amp;rsquo;s giving two middle-fingers to the GitHub-style version I made. It probably is.&lt;/p&gt;
&lt;p&gt;&lt;img alt="A column graph showing monthly git commit statistics" src="/pimg/A4STSgLNcgZp0nqw.avif" title="A column graph showing monthly git commit statistics" /&gt;&lt;/p&gt;
&lt;p&gt;The GitHub-style graph was difficult to make. I eventually got it working and looking almost right, but having 365-days worth of data increased the page size by five times. There were a lot of &amp;lsquo;zeros&amp;rsquo; to track! We cannot have that, not on this; GitGen is meant to be light-weight and lean, and serving a 50KB index page for the sake of an exact replica of GitHub&amp;rsquo;s contributions calendar is not happening.&lt;/p&gt;
&lt;p&gt;I opted for a simple monthly overview column graph, with (much) less data and less fluff. I like this one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Another day another outage</title>
      <link>https://cybrkyd.com/post/another-day-another-outage/</link>
      <guid>https://cybrkyd.com/post/another-day-another-outage/</guid>
      <pubDate>Tue, 10 Feb 2026 09:56:37 +0000</pubDate>
      <description>&lt;p&gt;Another day and another GitHub outage, &lt;a href="https://news.ycombinator.com/item?id=46946827" target="&amp;#95;blank" rel="noopener"&gt;splashed on the front page&lt;/a&gt; of &lt;em&gt;Hacker News&lt;/em&gt;. Haven&amp;rsquo;t I seen another outage of the same service on the front page recently? Yes, I have.&lt;/p&gt;
&lt;p&gt;Why not simplify? Why do tech nerds love adding multiple layers of complexity, often unnecessarily? And then cry about it when it all comes crashing down. Whatever happened to the idea of &amp;ldquo;no single point of failure&amp;rdquo;? And, where is the back-up plan for when GitHub suffers its next outage?&lt;/p&gt;
&lt;p&gt;The comments attached to this latest episode make for grim reading -- some people&amp;rsquo;s lives literally depend on GitHub, and that is terribly sad. On the other hand, however, those same people chose to put all their eggs into one basket.&lt;/p&gt;
&lt;p&gt;To quote Pai Mei, &lt;em&gt;Kill Bill: Volume 2&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What if your enemy is three inches in front of you? What do you do then, curl into a ball, or put your FIST through him? Now begin.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Simplify. Manage your risks. Now begin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically rename Markdown files in VS Code using a trigger</title>
      <link>https://cybrkyd.com/post/automatically-rename-markdown-files-in-vs-code-using-a-trigger/</link>
      <guid>https://cybrkyd.com/post/automatically-rename-markdown-files-in-vs-code-using-a-trigger/</guid>
      <pubDate>Sun, 08 Feb 2026 12:32:47 +0000</pubDate>
      <description>&lt;p&gt;Inspired by how Obsidian names Markdown files by title, I put together a small Python script which couples with a VS Code workspace task to achieve the same. Because tasks need to be manually run, a key-binding can be used to quicken the flow.&lt;/p&gt;
&lt;p&gt;The assumption is that the file is a Markdown file with the trigger flag in line #2. For example, I always add YAML-type syntax to the top of my blog post drafts, like so:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;---
title: 
summary: 
date: 
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Therefore, my trigger is &lt;code&gt;title:&lt;/code&gt;, with a space after the colon.&lt;/p&gt;
&lt;p&gt;Any text added to the trigger (after the space) is converted to lowercase, and spaces are replaced with hyphens. The file is renamed, and the original, open file in the editor must be reopened: VS Code shows a line through the old name on the tab title to indicate that the original no longer exists. To put all that more succinctly, the file will be renamed on disc, and needs to be reopened to continue any work in it.&lt;/p&gt;
&lt;p&gt;As an example, in a file named &lt;code&gt;draft.md&lt;/code&gt; with this title:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;---
title: A brand new Blog post
summary: 
date: 
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After running the task, the new filename on disc will be: &lt;code&gt;a-brand-new-blog-post.md&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;The Python Script&lt;/h2&gt;
&lt;p&gt;Create a file &lt;code&gt;.vscode/rename-md.py&lt;/code&gt; in the workspace with the following content:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-python"&gt;#!/usr/bin/env python3
import sys, os

file_path = sys.argv[1]
if not file_path.lower().endswith('.md'): sys.exit()
with open(file_path, 'r', encoding='utf-8') as f: lines = f.readlines()
if len(lines) &amp;lt; 2: sys.exit()
second_line = lines[1].strip()
if not second_line.lower().startswith('title: '): sys.exit()
new_name = second_line[len('title: '):].strip().lower().replace(' ', '-')
if not new_name.endswith('.md'): new_name += '.md'
os.rename(file_path, os.path.join(os.path.dirname(file_path), new_name))
print(f&amp;quot;Renamed file to: {new_name}&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Create a VS Code Task&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;.vscode/tasks.json&lt;/code&gt; in the workspace with the following content:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
  &amp;quot;version&amp;quot;: &amp;quot;2.0.0&amp;quot;,
  &amp;quot;tasks&amp;quot;: [
    {
      &amp;quot;label&amp;quot;: &amp;quot;Rename Markdown&amp;quot;,
      &amp;quot;type&amp;quot;: &amp;quot;shell&amp;quot;,
      &amp;quot;command&amp;quot;: &amp;quot;python3&amp;quot;,
      &amp;quot;args&amp;quot;: [&amp;quot;${workspaceFolder}/.vscode/rename-md.py&amp;quot;, &amp;quot;${file}&amp;quot;],
      &amp;quot;problemMatcher&amp;quot;: [],
      &amp;quot;presentation&amp;quot;: { &amp;quot;echo&amp;quot;: false, &amp;quot;reveal&amp;quot;: &amp;quot;never&amp;quot;, &amp;quot;focus&amp;quot;: false, &amp;quot;panel&amp;quot;: &amp;quot;shared&amp;quot; }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My preference is to never see the terminal window when the task runs, hence the &lt;code&gt;presentation&lt;/code&gt; property.&lt;/p&gt;
&lt;h2&gt;Key-bindings&lt;/h2&gt;
&lt;p&gt;Add to the global &lt;code&gt;User/keybindings.json&lt;/code&gt; to run the task with &lt;code&gt;ctrl+alt+2&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{ &amp;quot;key&amp;quot;: &amp;quot;ctrl+alt+2&amp;quot;, &amp;quot;command&amp;quot;: &amp;quot;workbench.action.tasks.runTask&amp;quot;, &amp;quot;args&amp;quot;: &amp;quot;Rename Markdown&amp;quot; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Without a key-binding, this task can be run via the usual &lt;code&gt;ctrl+shift+p&lt;/code&gt; &amp;ndash;&amp;gt; &lt;code&gt;Run Task&lt;/code&gt; &amp;ndash;&amp;gt; &lt;code&gt;Rename Markdown&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s too many steps…use the key-bindings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Week 06, 2026</title>
      <link>https://cybrkyd.com/post/week-06-2026/</link>
      <guid>https://cybrkyd.com/post/week-06-2026/</guid>
      <pubDate>Sat, 07 Feb 2026 11:53:44 +0000</pubDate>
      <description>&lt;p&gt;Why not? Writing a weekly post looks like so much fun…let&amp;rsquo;s see how long I can last! I thoroughly enjoy reading what others have been busy doing over their past seven days that I want in. Maybe I need this -- like a relaxing exhale after a long, deep breath -- now that it&amp;rsquo;s the weekend.&lt;/p&gt;
&lt;h2&gt;VS Code&lt;/h2&gt;
&lt;p&gt;It has been a fun, productive week. This is the one where I finally bit the bullet and installed VS Code on my Linux machines. It was a sad goodbye to Geany, which has served me well over the past 10 years. Geany, unfortunately, could not handle very large files without throwing a tantrum. Foolishly, I tried opening a raw data text file containing about 250k lines; it froze, then crashed and then did it again when I re-tried. It also pushed my memory and CPU right up to 100%, so yeah, I&amp;rsquo;m lucky I didn&amp;rsquo;t fry any chips.&lt;/p&gt;
&lt;p&gt;I learned that VS Code &lt;em&gt;does not&lt;/em&gt; try to load the entire file all at once; it does a lazy-load type thing where it memorises only what is in view, or something like that. That way of doing things, I like very much; it&amp;rsquo;s called &amp;ldquo;efficiency&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve completed customising it to my liking, and have been tinkering away with a whole bunch of code and large data sets all week. VS Code has managed to keep up and barely broke a sweat. Additionally, I&amp;rsquo;m typing this in it because, you know, why not?&lt;/p&gt;
&lt;h2&gt;GitGen&lt;/h2&gt;
&lt;p&gt;There is a lookalike GitHub contributions calendar in draft and I&amp;rsquo;m trying to fit it into the main index page. It is a slow burn, but at least I&amp;rsquo;ve taken the first few steps. I love statistics, so having this 365-day overview of past commits will be cool.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also cobbled together a Git repo file browser but it is not very good. It adds around 9 seconds to the site generation time because I&amp;rsquo;ve gone overboard, incorporating syntax highlighting via &lt;code&gt;Pygments&lt;/code&gt; and a page-per-file export for files smaller than 50KB. That adds up to a lot of calculations and I cannot justify the additional overhead to get…what? A pretty file browser? This one is back to the drawing board, I think.&lt;/p&gt;
&lt;p&gt;It might never happen, as I&amp;rsquo;m starting to accept that I don&amp;rsquo;t need to have a file browser; it has always been a nice-to-have as opposed to a necessity. Then again, during my tests, it did help me spot a few issues in my repos. I need to think on it some more. Next week.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing Google Calendar with KashCal</title>
      <link>https://cybrkyd.com/post/replacing-google-calendar-with-kashcal/</link>
      <guid>https://cybrkyd.com/post/replacing-google-calendar-with-kashcal/</guid>
      <pubDate>Thu, 05 Feb 2026 18:00:00 +0000</pubDate>
      <description>&lt;p&gt;There is one thing I miss terribly about the iPhone, and that is the seamless iCal integration. I&amp;rsquo;m on Android (Nokia X5), and subscribing to a remote iCal involves a few hoops, shuffles and dances. I have always made use of ICSx and it has worked flawlessly, enabling me to subscribe to remote iCals because Google Calendar cannot. But Google Calendar…there is a major issue with it somewhere.&lt;/p&gt;
&lt;p&gt;I have recently started noticed a lag in my event notifications. My phone is set up to play a sound and show a pop-up at the event&amp;rsquo;s notification time. Of late, the notifications are sometimes delayed by around 5 to 10 minutes. On other occasions, I swear that no notifications have been sent, because I end up having to scramble to get to where I&amp;rsquo;m supposed to be.&lt;/p&gt;
&lt;p&gt;Google Calendar has always been allowed to be outside of the battery optimisations, it never power-saves; it should, to quote their rival, &amp;ldquo;just work&amp;rdquo;. But it doesn&amp;rsquo;t, or rather, it chooses its moments and sometimes delays pinging the notification through. That simply will not do.&lt;/p&gt;
&lt;p&gt;Coincidentally, I opened F-droid today and right at the top was KashCal. The blurb read: &amp;ldquo;Modern Android calendar. iCloud &amp;amp; CalDAV finally done right. Private. Open.&amp;rdquo; &lt;/p&gt;
&lt;p&gt;Oh! Well, alright then! It is capable of directly subscribing to remote iCals, so ICSx can go as well.&lt;/p&gt;
&lt;p&gt;I know, I probably shouldn&amp;rsquo;t be boasting this early about replacing Google Calendar with something else, as I might eventually end up in the same boat as before with my delayed notifications. I think I&amp;rsquo;m just excited at how I have managed to (i) hide one useless app (because Google Calendar cannot be removed); (ii) get rid of another app (ICSx) which was originally installed as an iCal subscription workaround, and (iii) find an all-in-one app which seems to be working well so far.&lt;/p&gt;
&lt;p&gt;Touch wood!&lt;/p&gt;
&lt;p&gt;And, there goes a reminder from KashCal. ON TIME! It&amp;rsquo;s 6PM…time to do something or other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Flask multiple file upload web app</title>
      <link>https://cybrkyd.com/post/python-flask-multiple-file-upload-web-app/</link>
      <guid>https://cybrkyd.com/post/python-flask-multiple-file-upload-web-app/</guid>
      <pubDate>Wed, 28 Jan 2026 10:27:07 +0000</pubDate>
      <description>&lt;p&gt;What&amp;rsquo;s the saying? &amp;ldquo;Necessity is the mother of invention.&amp;rdquo; Maybe in this case, &amp;ldquo;necessity is the mother of DIY.&amp;rdquo; I invented absolutely nothing. I merely became so fed-up with (i) looking for my phone&amp;rsquo;s USB cable when I need it, or (ii) relying on sub-par file transfer applications, that I have finally fixed my problem. I only need to move files (usually photos) from my phone to my PC. How hard is this to do in the 21st century, for Pete&amp;rsquo;s sake!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve tried them all over the years: cloud storage, LocalSend, Warpinator…the list is long, much longer than just those three. And eventually, they all fail. Like my trusty USB cable, they are sometimes not found when I need them.&lt;/p&gt;
&lt;p&gt;LocalSend is loved by millions but I&amp;rsquo;ve always found it to be very sporadic and unreliable. It sometimes works, it sometimes doesn&amp;rsquo;t. The same goes for Warpinator, which has always just performed badly on my Android phone. When cloud storage was vogue, I used that but it&amp;rsquo;s not something I&amp;rsquo;m ever doing again. Besides, Phone &amp;gt; Cloud &amp;gt; PC is one hop too many; I want simple Point A to Point B transfers. Usually, it is from my phone to my PC, and very rarely the other way. When I do need to move files from the PC to the phone, I&amp;rsquo;m happy to dig out the USB cable, which is maybe once a year, if that.&lt;/p&gt;
&lt;h2&gt;Using Python&amp;rsquo;s Flask&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s really no place like 127.0.0.1. I spin up a Flask server web app on my PC and can transfer multiple files all at once from my phone to a specific directory on my PC. That is all this does. The interface is intentionally ugly. It has one job to do; there is absolutely no need to get dressed and look sharp. I will eventually get around to putting some makeup on this ugly duckling.&lt;/p&gt;
&lt;p&gt;With Firefox on my phone, I can pin a shortcut to the start page to use when it is transfer time.&lt;/p&gt;
&lt;p&gt;I do not require any cross-device synchronisation, nor do I need to hope that the photos I&amp;rsquo;ve just moved remain uncompressed or remain private. Or worry about them being used to train someone&amp;rsquo;s AI model.&lt;/p&gt;
&lt;p&gt;Once my transferred files have been sent, I verify all is well, then delete them from my phone to free up space.&lt;/p&gt;
&lt;p&gt;The script is available &lt;a href="https://git.cybrkyd.com/flask-share" target="&amp;#95;blank" rel="noopener"&gt;on my Git repos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This OP has marked the issue as &amp;ldquo;solved&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bob and Alice: a git patch love story</title>
      <link>https://cybrkyd.com/post/a-git-patch-love-story/</link>
      <guid>https://cybrkyd.com/post/a-git-patch-love-story/</guid>
      <pubDate>Sun, 25 Jan 2026 08:27:10 +0000</pubDate>
      <description>&lt;p&gt;Sometimes, I need a silly story to help me remember the obscure; things I do not use or do very often. Like git patching via e-mail. Here&amp;rsquo;s a little love story.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Bob loves Alice. And Bob loves Alice&amp;rsquo;s git repository.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bob clones it.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bob makes his changes and commits them normally.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bob generates patch file(s) from his commit(s). This produces one &lt;code&gt;.patch&lt;/code&gt; file per commit.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git format-patch origin/main
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bob sends the &lt;code&gt;.patch&lt;/code&gt; file(s) via email as attachments. The attachment must be sent as-is (no inline pasting).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is all that is required on Bob’s side.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Bob’s patch file is like a love letter…carefully crafted, full of intention, and best delivered intact. Signed, sealed, delivered, I&amp;rsquo;m yours!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;Alice receives Bob&amp;rsquo;s patch via e-mail.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;After careful consideration, she likes what she sees, and wants to take things forward.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Alice:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Saves Bob’s &lt;code&gt;.patch&lt;/code&gt; attachment(s) to disk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensures she&amp;rsquo;s on the target branch.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git checkout main
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Applies the patch(es) with Git, preserving metadata.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# For a single patch:
git am bob-change.patch

# For multiple patches:
git am *.patch
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Sometimes, love isn’t smooth sailing. If Alice’s repository has changed since Bob’s commit, Git might throw a conflict…like a misunderstanding in a relationship; a lover&amp;rsquo;s tiff, if you will.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Alice is kind, patient and understanding, so she checks the changes, resolves the conflicts, and commits to moving forward together.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If conflicts occur, she resolves them, then continues.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git status
git add &amp;lt;resolved files&amp;gt;
git am --continue
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If she decides to abort instead:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git am --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Hopefully Alice works things out with Bob.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After a successful &lt;code&gt;git am&lt;/code&gt;, the commit(s) are in Alice&amp;rsquo;s branch with Bob recorded as the author.&lt;/p&gt;
&lt;p&gt;A match made in heaven!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;With the patch(es) applied, Bob’s changes live happily ever after in Alice’s repository. Together forever.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Fin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Command line big data</title>
      <link>https://cybrkyd.com/post/command-line-big-data/</link>
      <guid>https://cybrkyd.com/post/command-line-big-data/</guid>
      <pubDate>Fri, 23 Jan 2026 17:13:08 +0000</pubDate>
      <description>&lt;p&gt;Big data is cool. What is not cool is trying to manipulate it outside of a database. What if, like me, you don&amp;rsquo;t like databases? What if the data is in text files or CSVs and you want to work in those?&lt;/p&gt;
&lt;p&gt;I have recently started a new project collecting human first names. I began with about 250,000 rows of data and needed to do some sanitisation before it was in a state that I needed. Having last performed this quite a while ago, I was out of practice but it soon came back after some trial and error.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m making notes this time around.&lt;/p&gt;
&lt;h2&gt;Splitting&lt;/h2&gt;
&lt;p&gt;Starting with my master data in a CSV, I initially split it by gender using LibreOffice Calc. A simple filter on the &amp;ldquo;gender&amp;rdquo; column shows me the relevant rows which can be copied &amp;gt; pasted to new documents, &lt;code&gt;male.txt&lt;/code&gt; and &lt;code&gt;female.txt&lt;/code&gt;, respectively.&lt;/p&gt;
&lt;p&gt;I then wanted to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Remove all rows containing hyphens (Peggy-Sue)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all rows containing single quotes (A&amp;rsquo;isha)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Strip any trailing spaces&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Order the data alphabetically&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check data integrity, e.g. search for any diacritics&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Remove all rows containing hyphens&lt;/h3&gt;
&lt;p&gt;I need the rows with hyphens for later, so extract them from the master data:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep &amp;quot;-&amp;quot; master.txt &amp;gt; hyphens.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To remove all rows containing hyphens:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;grep -v &amp;quot;-&amp;quot; master.txt &amp;gt; master-2.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Remove all rows containing single quotes&lt;/h3&gt;
&lt;p&gt;To remove all rows containing single quotes AND to extract the rows with single quotes, I do the same, this time working on my &lt;code&gt;master-2.txt&lt;/code&gt; document, which no longer contains the hyphens:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Extract
grep &amp;quot;'&amp;quot; master-2.txt &amp;gt; quotes.txt

# Subtract
grep -v &amp;quot;'&amp;quot; master-2.txt &amp;gt; master-3.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;master-3.txt&lt;/code&gt; is now without hyphens and single quotes. I also now have separate &lt;code&gt;hyphens.txt&lt;/code&gt; and &lt;code&gt;quotes.txt&lt;/code&gt; documents for later reference.&lt;/p&gt;
&lt;p&gt;As &lt;code&gt;master-2.txt&lt;/code&gt; is an interim file, it can be deleted.&lt;/p&gt;
&lt;h3&gt;Strip any trailing spaces&lt;/h3&gt;
&lt;p&gt;Next, I want to strip any trailing spaces in the file &lt;code&gt;master-3.txt&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sed -i 's/[[:space:]]*$//' master-3.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Stripping trailing spaces is best to do before any sorting, as any spaces can impact the order.&lt;/p&gt;
&lt;h3&gt;Order the data alphabetically&lt;/h3&gt;
&lt;p&gt;To sort alphabetically, I prefer byte-wise (ASCII) order, where &lt;strong&gt;Apple&lt;/strong&gt; comes before &lt;strong&gt;apple&lt;/strong&gt;. I also want to remove any duplicate lines:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LC_COLLATE=C sort -d master-3.txt | uniq -u &amp;gt; master-sorted.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Check data integrity&lt;/h3&gt;
&lt;p&gt;This is a nice one. It outputs the letter by frequency (left = more / right = less) and can be used to tell at a glance whether there are any words which contain letters with diacritical marks.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tr -d &amp;quot;\n&amp;quot; &amp;lt; master-sorted.txt | while read -n1 char; \
do echo $char; done | sort | uniq -c| sort -rn | sed &amp;quot;s/^.* //&amp;quot; |tr -d &amp;quot;\n&amp;quot;; echo &amp;quot;&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If there are any and this is not desired, the entire file can be &amp;ldquo;flattened&amp;rdquo;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iconv -f utf8 -t ascii//TRANSLIT master-sorted.txt &amp;gt; master-flat.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is usually a good idea to run another &lt;code&gt;LC_COLLATE=C sort&lt;/code&gt; as per above after this to remove any potential new duplicates.&lt;/p&gt;
&lt;p&gt;Working with data in the CLI is not without its challenges, but with a little know-how, the speed is unmatched by any GUI application I&amp;rsquo;ve used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From sendmail to mutt</title>
      <link>https://cybrkyd.com/post/from-sendmail-to-mutt/</link>
      <guid>https://cybrkyd.com/post/from-sendmail-to-mutt/</guid>
      <pubDate>Thu, 22 Jan 2026 19:58:36 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;ve experienced one-too-many &lt;code&gt;sendmail&lt;/code&gt; failures over the years, usually for no apparent reason. Maybe this happens after a server reboot, who knows? Rather than spending hours/days trying to figure this out (as I have done before, many times) I&amp;rsquo;ve finally had enough and given up.&lt;/p&gt;
&lt;p&gt;It all began with my e-mail reminder script. It has been chugging along very nicely since November when I installed it on my home server, and it has never missed a single day. I had to reboot the box this past weekend and then today, I suddenly clocked-on to the fact that I&amp;rsquo;ve not been receiving any e-mails since the weekend. The service is in a &amp;lsquo;stopped&amp;rsquo; state even though it was set to start at every reboot. OK then…let&amp;rsquo;s start the service. Oh? Still nothing? No e-mails sending? I just give up.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen this so many times before, when this script was on my VPS and on my shared host. Perhaps sendmail becomes stale and dies? Whatever, goodbye sendmail.&lt;/p&gt;
&lt;p&gt;I opted to try &lt;code&gt;mutt&lt;/code&gt; this time around. As mutt is a client and therefore not a background daemon, it eliminates the risk of these silent service failures. We trigger the script which calls mutt, then once the email has been sent, mutt can go back to sleep or whatever it does when it&amp;rsquo;s not in use, until it is triggered again.&lt;/p&gt;
&lt;p&gt;Sounds good to me.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://git.cybrkyd.com/reminder-bot/index.html" target="&amp;#95;blank" rel="noopener"&gt;Re-written&lt;/a&gt; and running. I&amp;rsquo;ll do another blog post on this when mutt fails. 😉️&lt;/p&gt;</description>
    </item>
    <item>
      <title>Showcasing my Git repositories on the web</title>
      <link>https://cybrkyd.com/post/showcasing-my-git-repositories-on-the-web/</link>
      <guid>https://cybrkyd.com/post/showcasing-my-git-repositories-on-the-web/</guid>
      <pubDate>Mon, 19 Jan 2026 09:18:26 +0000</pubDate>
      <description>&lt;p&gt;I took a fancy to the idea of hosting my own Git repositories. I did not want to simply mirror them elsewhere on someone else&amp;rsquo;s platform, but wanted them entirely under my control. I also wanted the repositories viewable in a way that feels familiar, like on GitHub or Codeberg. The problem is that most of the self-hosted solutions assume a certain level of server access and resources. On a shared host, that assumption falls down flat extremely quickly.&lt;/p&gt;
&lt;p&gt;Dynamic Git web front-ends are clever pieces of software, but they come with a cost. They expect CGI or PHP support, fast disk access, and enough CPU and memory to regenerate views on demand. Whilst that might be perfectly fine on a VPS, it&amp;rsquo;s not going to happen on a shared host, as I proved to myself recently with &lt;a href="https://git.cybrkyd.com/cgi-git/index.html" target="&amp;#95;blank" rel="noopener"&gt;CGI-git&lt;/a&gt;. After much playing around, it became obvious that the most viable solution was to have the Git web as a static site.&lt;/p&gt;
&lt;p&gt;Because everything is generated ahead of time, there is no pressure on the server when someone clicks around. All the heavy lifting happens during the site generation, and the output can then be uploaded in much the same way as say, a blog, via FTP, Rsync or whatever.&lt;/p&gt;
&lt;p&gt;There is also something quietly satisfying about this approach, as it strips Git web hosting back to the basics. My repositories are on my local disk, I have a generator script that understands them and which delivers static files out at the other end. There are no databases, no background daemons, no moving parts that can break because my shared hosting provider updated PHP or disabled a module overnight. Been there, done that! And, being non-dynamic on a shared host with limited resources, there should be no complaints from the neighbours.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve mulled over displaying the file contents in the browser, as is customary with Git web applications. Maybe one day soon I&amp;rsquo;ll implement this, but for now, if anyone is really curious, there is always &lt;code&gt;git clone&lt;/code&gt; to view the project files on your own machine.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://git.cybrkyd.com/GitGen/index.html" target="&amp;#95;blank" rel="noopener"&gt;GitGen&lt;/a&gt; came into existence to demonstrate (to myself) that self-hosting Git web repositories doesn&amp;rsquo;t have to mean running complex infrastructure. Even with very limited resources, it is very much possible to showcase one&amp;rsquo;s repositories in a lean, clean, navigable way that is pleasant to browse and easy to maintain.&lt;/p&gt;
&lt;p&gt;It is a reminder that there is always another way to do things: simpler, quieter, and entirely under my control. KISS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitGen: A static git repository website generator</title>
      <link>https://cybrkyd.com/post/gitgen-a-static-git-repository-website-generator/</link>
      <guid>https://cybrkyd.com/post/gitgen-a-static-git-repository-website-generator/</guid>
      <pubDate>Tue, 13 Jan 2026 19:29:42 +0000</pubDate>
      <description>&lt;p&gt;GitGen is the absolute final answer to my question: can I self-host my Git repositories on a shared host &lt;em&gt;and&lt;/em&gt; make them &amp;ldquo;browsable&amp;rdquo;? Yes, yes I can.&lt;/p&gt;
&lt;p&gt;I approached this solution back-to-front. Why does it need to be dynamic, like Cgit, gitweb, Gitea or even my very own &lt;a href="https://git.cybrkyd.com/cgi-git" target="&amp;#95;blank" rel="noopener"&gt;CGI-git&lt;/a&gt;? It does not. How about taking an offline approach? If I can make a website generator (&lt;a href="https://git.cybrkyd.com/page-with-py" target="&amp;#95;blank" rel="noopener"&gt;PaPy&lt;/a&gt;), surely I can try to make something similar for Git?&lt;/p&gt;
&lt;p&gt;I did.&lt;/p&gt;
&lt;p&gt;GitGen is a deliberately minimalist solution to what has been bugging me for so long. Similar to how a blog generator works, GitGen scans a directory of local Git repositories, extracts metadata and history using standard Git commands, and outputs a fully static website composed of plain HTML and CSS.&lt;/p&gt;
&lt;p&gt;It produces a list of all my repos, pages for each repo with file listings, commit histories, as well as diffs for individual commits. If there is a README present, it is converted into HTML for a pretty landing page, just like GitHub or GitLab.&lt;/p&gt;
&lt;p&gt;That is literally it. It&amp;rsquo;s minimalist and so is this blog post!&lt;/p&gt;
&lt;p&gt;The code for &lt;a href="https://git.cybrkyd.com/GitGen" target="&amp;#95;blank" rel="noopener"&gt;GitGen&lt;/a&gt; is available and running my personal repository.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s 2026&amp;hellip;let&amp;rsquo;s take this whole &amp;ldquo;self-hosting&amp;rdquo; thing to another level, shall we? And without a VPS in sight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Browser tab profiles</title>
      <link>https://cybrkyd.com/post/browser-tab-profiles/</link>
      <guid>https://cybrkyd.com/post/browser-tab-profiles/</guid>
      <pubDate>Wed, 31 Dec 2025 12:02:21 +0000</pubDate>
      <description>&lt;p&gt;I do not believe that any browser today is capable of allowing users to work on multiple profiles in one window or across multiple tabs. Instead, we have &amp;lsquo;containers&amp;rsquo; in Firefox but this is not complete profile isolation. We also have &amp;lsquo;private&amp;rsquo; or &amp;lsquo;incognito&amp;rsquo; functionality which comes close, but it is still not in the same window. I think that browsers are missing a trick here.&lt;/p&gt;
&lt;p&gt;I use two profiles with my Firefox setup; one which deletes cookies, history and site data at close and another which does not. My main daily profile is almost like the &amp;lsquo;private&amp;rsquo; Firefox window, where nothing is saved across sessions. My second profile is used for browsing sites where I want to remain signed-in and have cookies kept. That&amp;rsquo;s just my workflow and how I like it. With separate profiles, I enjoy true segregation; in my main profile I have full privacy between sessions with no cookie tracking, and this is my default.&lt;/p&gt;
&lt;p&gt;Using two different windows is a tiny bit inconvenient as I have to constantly switch between the two when I&amp;rsquo;m working on something. Trying to locate the other window on the task bar is sometimes fun, especially when I have too many things open, as one does. I really wish that a profile change was as simple as switching to a different tab in the same browser window.&lt;/p&gt;
&lt;h2&gt;Tab profiles&lt;/h2&gt;
&lt;p&gt;Why can&amp;rsquo;t we have tab profiles? I understand the underlying profile architecture, but surely it can’t be that difficult to implement? The main root application profile can still handle core settings such as themes and other general browser settings and preferences, but allow each tab to act like its own little mini-profile. Call them pseudo-profiles: a place where Personal, Work, and Shopping can be kept completely independent from each other. For anyone who likes a tidy separation between their online selves, that would be rather handy.&lt;/p&gt;
&lt;p&gt;Containerisation in its current form is not full separation. It still shares the same extensions, global settings, and everything else, so it is more of a cosmetic division than true isolation. If &amp;lsquo;private&amp;rsquo; and &amp;lsquo;incognito&amp;rsquo; windows can give us a taste of separation, why can’t we have something more flexible and integrated?&lt;/p&gt;
&lt;p&gt;Until someone builds it, I suppose that I will have to continue fumbling along with multiple windows and profiles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploring VirtualBox alternatives</title>
      <link>https://cybrkyd.com/post/exploring-virtualbox-alternatives/</link>
      <guid>https://cybrkyd.com/post/exploring-virtualbox-alternatives/</guid>
      <pubDate>Sat, 27 Dec 2025 09:56:08 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;ve been exploring alternatives to VirtualBox recently. I wanted to compare virtualisation applications to discover if there was anything better than VirtualBox for my needs. I have been using VirtualBox for about 10 years now and it is almost perfect - it does the job, offers the stability I need and just works. My only complaint is that it does not support dynamic RAM. When you run a virtual machine with 4GB of RAM, it grabs the entire allocation for the machine and holds on to it for the duration, depriving the host of the entire 4GB.&lt;/p&gt;
&lt;h2&gt;Boxes&lt;/h2&gt;
&lt;p&gt;I tested Gnome Boxes and that lasted about 20 minutes. As with most (all) Gnome software, there is not much to see there. It works but when it comes to wanting to make any tweaks, it has no options to configure. So, this is just a glorified front-end for QEMU/KVM and a bit of &lt;code&gt;libvirt&lt;/code&gt; mixed in there. It&amp;rsquo;s straight-forward to use — start and stop — and that&amp;rsquo;s it. What about if I want to change something? No can do. And that&amp;rsquo;s why my test lasted just 20 minutes. It is pretty to look at but there is not much substance to it. Next.&lt;/p&gt;
&lt;h2&gt;Virtual Machine Manager&lt;/h2&gt;
&lt;p&gt;This one is rocket science. I compare it to putting together bare metal but entirely in software, which can be challenging. It picked up my existing VirtualBox Windows machine straight from the VDI file and ran it without issue, albeit with a few complaints about permissions (it likes to keep everything in &lt;code&gt;/var/lib/libvirt/images/&lt;/code&gt; and with the correct user permissions). I installed Spice to get the graphics running smoothly and while it was mostly &amp;ldquo;OK&amp;rdquo;, the experience was not as seamless as using VirtualBox.&lt;/p&gt;
&lt;p&gt;The one good thing about &lt;code&gt;virt-manager&lt;/code&gt; is the ability to set a minimum amount of RAM at startup. If the machine&amp;rsquo;s cap is 4GB for example, it is easy to specify that you only want it to start with 1GB minimum. It will chug along and then use up the rest of its allocation when required, which I find amazing.&lt;/p&gt;
&lt;p&gt;I attempted to create a new machine and that went terribly. Like I mentioned, this is rocket science. There are so many considerations to make and additional installs just to get a decent-looking virtual machine which can load the installation ISO that the whole process kills the fun. Comparing my first attempt here to my first attempt in VirtualBox all those years ago, this was torturous. And oh, if one wants shared folders from the host, another add on is required (in addition to the one already added for smooth-ish graphics).&lt;/p&gt;
&lt;p&gt;I left, disappointed with my meagre efforts and uninstalled this monster.&lt;/p&gt;
&lt;h2&gt;VirtualBox&lt;/h2&gt;
&lt;p&gt;Despite lacking the ability to deploy dynamic RAM, VirtualBox is very easy to setup and use. All that is required on a new virtual machine is Guest Additions and that is enough to experience smooth graphics as well as the shared folder functionality. It&amp;rsquo;s an all-in-one, no mess, no fuss and it stays out of my way.&lt;/p&gt;
&lt;p&gt;Do I really need the magic of dynamic RAM? No, not really. While it is a &amp;ldquo;nice-to-have&amp;rdquo;, it is not essential for me. I can see dynamic RAM being useful for applications where a host is running several virtual machines which need to stay up constantly. For my needs though, I tend to spin up a virtual machines when I need to test something or when I need to use Photoshop in Windows. I&amp;rsquo;m generally in-and-out.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll stick here for now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chance and randomness</title>
      <link>https://cybrkyd.com/post/chance-and-randomness/</link>
      <guid>https://cybrkyd.com/post/chance-and-randomness/</guid>
      <pubDate>Thu, 25 Dec 2025 19:44:51 +0000</pubDate>
      <description>&lt;p&gt;I often marvel at the randomness of it all.&lt;/p&gt;
&lt;p&gt;If I had left one minute earlier, would I have missed all this traffic? Seeing the face of a random stranger and never seeing them ever again. Witnessing the sly look she gave him.&lt;br /&gt;
☉ ‿ ⚆&lt;/p&gt;
&lt;p&gt;And the one he gave someone else.&lt;br /&gt;
•͡˘㇁•͡˘&lt;/p&gt;
&lt;p&gt;That cool-looking cloud in the sky which is only there in that exact place for a minute before the wind, jealous of my admiration, blows.&lt;/p&gt;
&lt;p&gt;I wonder what she is thinking… or him; must it crease their faces so? Is it that bad?&lt;/p&gt;
&lt;p&gt;The cute kitten: I wonder what she would look like if she had longer fur or was not ginger. The yapping dog, the chirping birds, the riotous children, all answering the Second Command: &amp;ldquo;LET THERE BE SOUND!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The neighbour&amp;rsquo;s clever dog who is let out for his last cocking-of-the-leg for the day. Once his business is done, he trots back to the door and barks, exactly once, soft and low as if to say, &amp;ldquo;Open up, dude, it&amp;rsquo;s freezing out here!&amp;rdquo; Where did he learn that, exactly? Who&amp;rsquo;s a good boy?&lt;/p&gt;
&lt;p&gt;The random thoughts which cross my mind. Coincidences. Random threads of existences which intersect my own random twines, dissecting the mundane and piquing my interest. For I look, I notice; it is why I have eyes to see and ears to hear.&lt;/p&gt;
&lt;p&gt;The cough in a crowd. Is it terminal or merely seasonal? I can&amp;rsquo;t tell. Do I care? Why, yes I do. If it&amp;rsquo;s your end, am I the only one who will miss you? Search you out again in another sound in the crowd.&lt;/p&gt;
&lt;p&gt;The one who says hello. The other one who looks at you like you&amp;rsquo;re a ghost from their past.&lt;br /&gt;
•`_´•&lt;/p&gt;
&lt;p&gt;No, we have not met, not even in the Hall of Souls, of that I am not uncertain. Our paths have not and will never cross, apart from that brief mutual stare. You are as repulsive to me as I am to you; the difference is I don&amp;rsquo;t show it on mine.&lt;br /&gt;
(⌐■_■)&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s all over your face. North Pole repelling North Pole. We can never. Yet we are one, the same, all connected.&lt;/p&gt;
&lt;p&gt;Life is chaos. Random. But there is beauty in every single part of it. In everything.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why do Windows updates take so long</title>
      <link>https://cybrkyd.com/post/why-do-windows-updates-take-so-long/</link>
      <guid>https://cybrkyd.com/post/why-do-windows-updates-take-so-long/</guid>
      <pubDate>Sat, 20 Dec 2025 10:55:12 +0000</pubDate>
      <description>&lt;p&gt;I use Windows for work (I have a laptop which belongs to the firm). When it is update time, I often wonder how the world copes. It is utterly amazing how much time it takes to apply a Windows update when compared to, say, a Linux update.&lt;/p&gt;
&lt;p&gt;What exactly is going on behind the scenes during a Windows update? Is it taking time because it wants to show me that impressive &amp;lsquo;spinner&amp;rsquo; animation? No, it&amp;rsquo;s probably not that at all. So why is a Windows update so slow?&lt;/p&gt;
&lt;p&gt;On my Linux desktop, I enter the command &lt;code&gt;sudo apt update -qq &amp;amp;&amp;amp; apt list --upgradable&lt;/code&gt; and then &lt;code&gt;sudo apt upgrade&lt;/code&gt; and in about 120 seconds average, it&amp;rsquo;s over. And that&amp;rsquo;s kernel upgrades; the other stuff is much, much quicker than 2 minutes.&lt;/p&gt;
&lt;p&gt;I ventured a Google for this one. There are many theories, ranging from it&amp;rsquo;s an issue with your Internet speed to your hard drive is getting old and every other ridiculous explanation in between. There were some good plausible explanations such as the Windows updates are structured in such a way so they can roll back cleanly if the update process fails. OK, that one makes more sense.&lt;/p&gt;
&lt;p&gt;We do not have that roll-back luxury on Linux. We want to upgrade a package? Sure! It breaks something? It probably won&amp;rsquo;t but if it does, you&amp;rsquo;re on your own. You don&amp;rsquo;t know how to roll back a bad kernel? Oh, that&amp;rsquo;s a pity. Linux won&amp;rsquo;t do it for you… that&amp;rsquo;s what Internet forums are for, mate.&lt;/p&gt;
&lt;p&gt;Average Jills and Joes cannot be bothered with all that, I&amp;rsquo;m guessing. They just want to let the system update on its own and probably do not mind so much watching that beautiful spinner animation. I wonder how long it took to make that and how many meetings there were at Microsoft to discuss its design?&lt;/p&gt;
&lt;p&gt;Heaven knows they needed something really good to distract users while they wait for the OS to complete the update process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cheap Bluetooth keyboard with iPad</title>
      <link>https://cybrkyd.com/post/cheap-bluetooth-keyboard-with-ipad/</link>
      <guid>https://cybrkyd.com/post/cheap-bluetooth-keyboard-with-ipad/</guid>
      <pubDate>Fri, 19 Dec 2025 08:45:44 +0000</pubDate>
      <description>&lt;p&gt;I picked up this little bundle of cuteness which I can lug into the office with me and use with my iPad. I could not justify spending £50 on one of those fancy, flimsy official Apple iPad cover keyboards… I just wanted something that I could use to type.&lt;/p&gt;
&lt;p&gt;My iPad is getting on a bit but it still has exceptional battery life so why not carry that instead of my 1.5 kg laptop plus charger? It&amp;rsquo;s an HP, the battery drains faster than my bath plug hole and that charger is heavy as well. And no, I will never be buying another Apple-anything again, ever.&lt;/p&gt;
&lt;p&gt;So, £20 was well-spent on this solid-feeling tiny Bluetooth thing with decent enough keys. It does the job, my shoulder bag is lighter and I have a homemade laptop that&amp;rsquo;s an iPad, or &lt;em&gt;deskpad&lt;/em&gt; or &lt;em&gt;something&lt;/em&gt;. It&amp;rsquo;s a contraption that works and that&amp;rsquo;s all that matters.&lt;/p&gt;
&lt;p&gt;Next up was finding a decent note-taking app on the iPad. I tried a few but settled on Obsidian because, of all the ones I tried that were not Apple Notes, it was the ONLY one capable of zooming the font size. I can sit it underneath my work monitor and type away, and can actually see what I&amp;rsquo;m typing quite comfortably without having to lean forward or squint.&lt;/p&gt;
&lt;p&gt;Getting my notes off the iPad… here&amp;rsquo;s another joke! I knew all about Apple and how they just do not want you to leave like Hotel California. And, I&amp;rsquo;m Mr Free, so paying for Obsidian&amp;rsquo;s plan (for the privilege of syncing) is a firm no-no. I&amp;rsquo;m not paying simply to move a file from one location to another; in this case, from my iPad to my Linux machine. The punchline is: I&amp;rsquo;m very well-versed now in how to deal with Apple&amp;rsquo;s shenanigans and I was prepared for this. I created a new iCloud e-mail account and used Apple Mail to e-mail myself on another address and that completes the transfer process. Obsidian has a &amp;lsquo;Share&amp;rsquo; function which allows attaching the notes to e-mails, and that&amp;rsquo;s the workaround.&lt;/p&gt;
&lt;p&gt;No cables, no subscription fees and absolutely no jumping through Apple&amp;rsquo;s hoops to get my own stuff off my own stuff.&lt;/p&gt;
&lt;p&gt;Oh, and the keyboard is wonderful.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>