<?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>Portable air con units: All sold out</title>
      <link>https://cybrkyd.com/post/portable-air-con-units-all-sold-out/</link>
      <guid>https://cybrkyd.com/post/portable-air-con-units-all-sold-out/</guid>
      <pubDate>Sun, 28 Jun 2026 10:34:55 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;m in the market for an air conditioning unit. With temperatures currently hitting heatwave conditions in the UK and much of Western Europe, I think &lt;em&gt;everyone&lt;/em&gt; is in the market for an air conditioning unit.&lt;/p&gt;
&lt;p&gt;The suppliers of domestic air con are not really plentiful in my neck of the woods. Why would they be? This is England. There is (was) not much of a market here. Looking around for a unit with installation to supply two floors is just plain stupidly expensive. Everything in England is stupidly expensive. What &lt;em&gt;should&lt;/em&gt; cost a couple of grand at most is closer to £6,000.&lt;/p&gt;
&lt;p&gt;So what does everyone do? They go for portable air con units. They are as cheap as chips. Lidl, a discount supermarket chain, was selling units for £149 and &lt;a href="https://www.thesun.co.uk/money/39539193/customers-queue-lidl-air-con-unit-sells-out/" target="&amp;#95;blank" rel="noopener"&gt;they sold out in a few hours&lt;/a&gt;. Yes, I would rather queue up too if I could pick one up for £149 instead of £6,000.&lt;/p&gt;
&lt;p&gt;Naturally, one then ventures online to secure a bargain, except no one has them in stock. Amazon to the rescue! I found one which clearly said &amp;ldquo;in stock&amp;rdquo; and also said &amp;ldquo;2.1k sold in the past month&amp;rdquo; or something like that. Well, it must be &amp;ldquo;OK&amp;rdquo; if 2,000 people bought this in the past month alone and left 5-star reviews. They were likely just grateful for a cool breeze hitting their face at a reasonable price, and were in such a good mood that they thought to leave a rave review.&lt;/p&gt;
&lt;p&gt;Great, let&amp;rsquo;s add it to the basket and buy it, even though it is more than double the price of the bargain Lidl one.&lt;/p&gt;
&lt;p&gt;Checkout time. All goes well until&amp;hellip; &amp;ldquo;Sorry, we cannot ship this to the specified address&amp;rdquo;. Why the eff not? I switched the address to the office one and I&amp;rsquo;m stopped by the same message. And, choosing a click-and-collect option is exactly the same. Well, that&amp;rsquo;s not much of a Prime benefit, is it? Damn you, then, if you can&amp;rsquo;t be there for me when I need you the most. And, I suppose, the 2,000-plus people who bought this in the past month were&amp;hellip;what? All from outside my general region? Tell me another!&lt;/p&gt;
&lt;p&gt;There were other units available at varying prices but delivery between 1st of August and 16th of November! I mean&amp;hellip;Yar. That is just pointless then, is it not? Isn&amp;rsquo;t the Strait of Hormuz open again? There are a few other portable units in stock with reasonable delivery dates, but alas. The profiteering is definitely in full swing. £900 for a 6,000 BTU unit by some no-name brand? No thanks, mate.&lt;/p&gt;
&lt;p&gt;All well-known retailers that I checked have that &amp;ldquo;Out of stock&amp;rdquo; label slapped all over their products. Argos, Currys, John Lewis, Screwfix, B&amp;amp;Q, etc. Even the smaller retailers have sold out. Going directly to manufacturer&amp;rsquo;s websites is no help either, as one is immediately greeted with the now-familiar &amp;ldquo;Sold out&amp;rdquo; and &amp;ldquo;Out of stock&amp;rdquo; stickers on everything.&lt;/p&gt;
&lt;p&gt;I finally found one specialist retailer who swears they have units in stock and can deliver by Wednesday. They do tend to sell only the premium brands and that obviously comes along with a premium price tag. At least they &lt;em&gt;have&lt;/em&gt; the stock and at least I &lt;em&gt;can&lt;/em&gt; (hopefully) get it delivered before the next heatwave. I will then be able to console myself about the price in a cool room.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trolls will troll</title>
      <link>https://cybrkyd.com/post/trolls-will-troll/</link>
      <guid>https://cybrkyd.com/post/trolls-will-troll/</guid>
      <pubDate>Thu, 25 Jun 2026 08:51:28 +0000</pubDate>
      <description>&lt;p&gt;Things like this don&amp;rsquo;t bother me much; not any more. I&amp;rsquo;m past the stage where I care. Trolls will always troll, and some people on the Internet will always be as nasty as they can possibly be, safe in the knowledge that their words can extend to insults without repercussion.&lt;/p&gt;
&lt;p&gt;This person / these people would not dare say that to my face &amp;ndash; or anyone else&amp;rsquo;s for that matter. For face time with that sort of language, there will most certainly be repercussions. Maximum.&lt;/p&gt;
&lt;p&gt;It all began with this review comment by Neahahul: &lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/british-english-dictionary-gb/reviews/" target="&amp;#95;blank" rel="noopener"&gt;https://addons.mozilla.org/en-GB/firefox/addon/british-english-dictionary-gb/reviews/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My response was typed with a smile, thinking: OK. You found something that is not for you, so why the insults? Whatever, you think I&amp;rsquo;m a &amp;ldquo;jerk&amp;rdquo;, I don&amp;rsquo;t really care, dude! Go away.&lt;/p&gt;
&lt;p&gt;Then an email from Github arrived. Github? Oh, I still have an account on there for some of my archived repos… let&amp;rsquo;s see what this is about. I scanned the email which included this looooonnnng comment, didn&amp;rsquo;t get what it was about, so logged in to read it at source.&lt;/p&gt;
&lt;p&gt;Here it is: &lt;a href="https://github.com/kaubu/oxford-english-language-tools/issues/3" target="&amp;#95;blank" rel="noopener"&gt;https://github.com/kaubu/oxford-english-language-tools/issues/3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Still chuckling from yesterday (and immediately connecting the dots), this issue raised on someone else&amp;rsquo;s repo mentioned me. I am assuming the troll thinks that they found another repo of mine and would troll that one too, using the same &amp;ldquo;your extension name is misleading&amp;rdquo; argument before launching into personal insults. Maybe the troll is a bot? Who knows. Who cares?&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve commented enough on Github about this, and do not wish to expend any more time or energy dignifying the misdeeds of others with further response. I did, however, as an afterthought, think: this makes excellent fodder for a blog post AND I can keep typing into Jottings to find more bugs. So, do both? That, is better energy direction. Oh, and British Language Tools is in need of an update…shocking! The last update was in January. Thanks for the prompt, troll person/bad AI spammer bot.&lt;/p&gt;
&lt;p&gt;Kaubu issued a response, and an apology for dragging me into Part Two. No love lost there; I told them so, spellchecking my response in beautiful British English spelling. Kaubu, meanwhile, most likely spellchecked their comment using their wonderfully crafted Oxford English spelling dictionary.&lt;/p&gt;
&lt;p&gt;One love.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Just another Monday</title>
      <link>https://cybrkyd.com/post/just-another-monday/</link>
      <guid>https://cybrkyd.com/post/just-another-monday/</guid>
      <pubDate>Mon, 22 Jun 2026 19:53:30 +0000</pubDate>
      <description>&lt;p&gt;There is nothing like waking up on a Monday morning in the UK and finding out that there is to be yet another Prime Minister. It was no surprise, of course; the media knew all about it beforehand and so did DJT. Meh! The UK population has become as ungovernable as our French neighbours. Blame Brexit and let&amp;rsquo;s all move on.&lt;/p&gt;
&lt;p&gt;Except, we are not moving on. Today, the FT has two articles where the authors &amp;ldquo;plant the seed&amp;rdquo; of a path back to Europe. As if Burnham is going to dare give that one a try if he ever sits in the hot seat. Still, the FT makes a good case. The UK &lt;em&gt;is&lt;/em&gt; worse off since leaving the bloc, I think everyone &lt;em&gt;can&lt;/em&gt; agree on that, even the extreme right-wing politicians.&lt;/p&gt;
&lt;p&gt;A big, fat &amp;ldquo;whatever&amp;rdquo; from me. There are more important things to worry and care about today.&lt;/p&gt;
&lt;p&gt;Sunday was mostly spent away from the PC (for once). The weather was wonderful (not too hot) so the afternoon was spent in the garden, tidying-up a bit. It was good thinking-time. It&amp;rsquo;s amazing how the mind drifts when the hands are busy.&lt;/p&gt;
&lt;p&gt;The Sunday gardening made me also think about my little budget app. Later, during the Belgium vs Iran game, I drafted another dashboard and started plugging it into the data whilst keeping one eye on the 0:0 game. It is taking shape slowly and it already looks much better than v0.1.&lt;/p&gt;
&lt;p&gt;My Monday started with a rush of ideas for Jottings, so a few pushes were made. I&amp;rsquo;m getting there, and it&amp;rsquo;s starting to become a more pleasant place to write in. There are still a few odd bugs crawling around, but slowly we must go.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve treated myself to a day off on Wednesday…we have temperatures expected to hit 34°C and I&amp;rsquo;m &lt;em&gt;not&lt;/em&gt; working in that! I will most likely still be sat at the desk, scripting something or other instead of being outside. I think I need to start planning now on how to avoid &amp;ldquo;inside&amp;rdquo; on that day. I suppose the more I keep repeating &amp;ldquo;avoid inside on Wednesday&amp;rdquo; in my head, the more likely I am to actually do so. Let&amp;rsquo;s see. Knowing this British weather, we might very well have rain or snow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stay curious</title>
      <link>https://cybrkyd.com/post/stay-curious/</link>
      <guid>https://cybrkyd.com/post/stay-curious/</guid>
      <pubDate>Fri, 19 Jun 2026 16:20:36 +0000</pubDate>
      <description>&lt;p&gt;It&amp;rsquo;s been a whirlwind. All these ideas in my head, all these desires and none of the skill to execute.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve always tried to stay curious. Learn. If someone else can do it, what is preventing me from doing the same, or better? Copy. Deconstruct. Question.&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;ve achieved over the past couple of months is &amp;ndash; by my own standards &amp;ndash; outstanding. I was fearful, in the company of that gnawing, terrible feeling that asks: what if you try and fail? What about all the time you&amp;rsquo;ve put into this? All wasted, and for nothing. You&amp;rsquo;ve achieved nothing.&lt;/p&gt;
&lt;p&gt;Well, mate! You&amp;rsquo;re wrong, again. You&amp;rsquo;re a herald of doubt and that&amp;rsquo;s about all you have going for you. Call that an achievement, do you?&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a fun way to deal with that guy whenever he shows up. He sows the seeds, sits back and watches you fail, even if the failure is only the failure to take that first step.&lt;/p&gt;
&lt;p&gt;Just begin.&lt;/p&gt;
&lt;p&gt;It literally happens with the first step.&lt;/p&gt;
&lt;p&gt;The sense of achievement is unparalleled. Whatever I achieve. It is that mountain climbed, that ocean swam, that learning to walk by simply placing one foot in front of the other. Often, no one is waiting at the finish line to cheer and say &amp;ldquo;well done&amp;rdquo;. But, is that the aim? No. It&amp;rsquo;s not a race, it is the baby steps, The Hare &amp;amp; the Tortoise. Everyone gets to the finish line eventually if they actually &lt;em&gt;start&lt;/em&gt; the race. No one congratulated the tortoise for winning, did they? But he won. Against the odds, he won.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Failure is never final unless it is the final time you try.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I read that somewhere, a long time ago. I don&amp;rsquo;t know who coined that phrase. But it makes a whole lot of sense.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don't look for me this summer</title>
      <link>https://cybrkyd.com/post/dont-look-for-me-this-summer/</link>
      <guid>https://cybrkyd.com/post/dont-look-for-me-this-summer/</guid>
      <pubDate>Thu, 18 Jun 2026 17:44:01 +0000</pubDate>
      <description>&lt;p&gt;Today is a rest day for me from watching the World Cup matches. There are &amp;ldquo;meh&amp;rdquo; teams playing today at a decent hour for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Czech Republic vs South Africa (Group A) – 5pm BST&lt;/li&gt;
&lt;li&gt;Switzerland vs Bosnia-Herzegovina (Group B) – 8pm BST &lt;/li&gt;
&lt;li&gt;Canada vs Qatar (Group B) – 11pm BST&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ll catch the scores and move on, me thinks.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s Group Stage, so it&amp;rsquo;s a double &amp;ldquo;meh&amp;rdquo;; I can live with skipping these three. And, my country didn&amp;rsquo;t even qualify, so there is that.&lt;/p&gt;
&lt;p&gt;Nevertheless, I&amp;rsquo;m a solid, hardcore World Cup fan and have thoroughly enjoyed the matches that I&amp;rsquo;ve watched so far this competition. That ridiculously impossible Mbappe goal, Messi&amp;rsquo;s hat trick, the new-look England team that actually delivered, and the underdog African/Caribbean countries that gave their entitled opponents a good game and some food for thought.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s not to love? This is the greatest game in the world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Jottings: The desktop app</title>
      <link>https://cybrkyd.com/post/jottings-the-desktop-app/</link>
      <guid>https://cybrkyd.com/post/jottings-the-desktop-app/</guid>
      <pubDate>Thu, 18 Jun 2026 07:53:25 +0000</pubDate>
      <description>&lt;p&gt;That&amp;rsquo;s what I&amp;rsquo;m calling it. &lt;a href="https://git.cybrkyd.com/jottings/index.html" target="&amp;#95;blank" rel="noopener"&gt;Jottings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The story so far…&lt;/p&gt;
&lt;p&gt;Lately, I have been obsessed -- utterly obsessed -- with making a custom note-taking app. I&amp;rsquo;ve tried everything, and I mean EVERYTHING. I went as far as using VS Code, VIM, Nano even; my meagre attempt at the &lt;a href="https://git.cybrkyd.com/quiet-writer/index.html" target="&amp;#95;blank" rel="noopener"&gt;Quiet Writer&lt;/a&gt;. And &lt;a href="https://git.cybrkyd.com/notes/index.html" target="&amp;#95;blank" rel="noopener"&gt;Python Notes&lt;/a&gt;. Obsessed! I think I have a problem! :-)&lt;/p&gt;
&lt;p&gt;The issue is this: whilst the tools do exist and are plentiful, they all fall short somewhere along the line for me. They have too much or not enough. I have to hack, script, and tweak configs just to get existing tools to resemble something close to what I want. But, nothing is perfect. Hence, the obsession over the tool. I finally came to understand that perhaps others are developing tools for themselves, according to their own particular needs and wants and workflows.&lt;/p&gt;
&lt;p&gt;My latest adventure was a Python script which was basically Quiet Writer running on a Python server with some niceties on top. That, too, came from &lt;a href="https://git.cybrkyd.com/IndexedDB-notes/index.html" target="&amp;#95;blank" rel="noopener"&gt;IndexedDB Notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have a home server, a Debian machine on an old laptop and so, Python Notes has been sitting on there. It is easy to open a browser, connect up and start typing. But even that doesn&amp;rsquo;t seem to satisfy the itch. What if I&amp;rsquo;m on my laptop and away from home? I&amp;rsquo;m not opening up my home network to the wider Internet.&lt;/p&gt;
&lt;p&gt;See? Nothing is perfect.&lt;/p&gt;
&lt;h2&gt;Anyway, Jottings.&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve always been amazed -- and frankly, stumped -- by how apps get their GUIs. C++, Rust, Python even. Whilst the back-ends are simple enough for me to write, I know diddly-squat about building a UI using &lt;em&gt;any&lt;/em&gt; framework. It&amp;rsquo;s all squares and rectangles, mostly, like trying to construct a Minecraft world. Hence, we see a Python server pushing a HTML page with a SQLite database and I&amp;rsquo;m happy for a time.&lt;/p&gt;
&lt;p&gt;Well, I &lt;em&gt;was&lt;/em&gt; happy. Oh, it works and works exceedingly well for me. But, call the itch what you will. Frustration at not being able to break through my total lack of UI-coding skills, or just sheer laziness. Yeah, probably laziness. Fear? That too. I&amp;rsquo;m starting from scratch. There is always the fear of the unknown. But the itch came.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve detailed the start of the journey in an early post: &lt;a href="https://cybrkyd.com/post/logs-on-uis-llms-frameworks-and-such/" target="&amp;#95;blank" rel="noopener"&gt;Logs on UIs, LLMs, frameworks and such&lt;/a&gt;. I played around with Tauri, Rust, GTK and C++, and discovered that dependency hell does, in fact, exist. Even the much-hated Electron crossed my mind, tempting me to give it a try. I came &lt;em&gt;this&lt;/em&gt; close.&lt;/p&gt;
&lt;p&gt;Just as I was about to give up and stay put on my working-just-fine setup, I stumbled upon a little-known (to me) framework called &lt;a href="https://neutralino.js.org/" target="&amp;#95;blank" rel="noopener"&gt;Neutralinojs&lt;/a&gt;. Their selling point is: we are as convenient as Electron (browser as UI) but we don&amp;rsquo;t embed 70MB of Chrome nastiness to deliver that.&lt;/p&gt;
&lt;p&gt;Well, that sounds cool. Too good to be true?&lt;/p&gt;
&lt;p&gt;No, it&amp;rsquo;s true. Neutralinojs delivers what is says. Of course, there was the usual environment setup woes (i.e. dependency hell, but I&amp;rsquo;ll be kinder this time) : libwebkit2gtk 4.0 or 4.1? I don&amp;rsquo;t have 4.0 in my repos and Neutralinojs does not like 4.1. Fix fix fix, scramble, hammer. BANG! We have an app. A freaking native desktop app. When built, it gives you executables for Windows, Linux and Mac by default, no faffing around. Oh, wow!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a beginner; no, actually, I&amp;rsquo;m an &lt;em&gt;absolute&lt;/em&gt; beginner at this. But I managed to write what I know -- HTML, CSS and JavaScript -- and this thing just does what it does and…POOF! In a puff of smoke, you have a desktop app.&lt;/p&gt;
&lt;p&gt;Version something-or-other is &lt;a href="https://git.cybrkyd.com/jottings/index.html" target="&amp;#95;blank" rel="noopener"&gt;on my repos&lt;/a&gt; if anyone wants to take a peek. Yes, this post was written in there. Yes, this app was build by me. Yes, some AI helped me resolve dependency hell. No, this post was not written by AI, despite the multiple em-dashes which I&amp;rsquo;ve purposefully split into two separate dashes to avoid AI police. Why build an actual &amp;ldquo;writing app&amp;rdquo; if you ain&amp;rsquo;t gonna write your own stuff, you dumb cops? And, &amp;ndash; take that!&lt;/p&gt;
&lt;p&gt;Told you, I have a problem!&lt;/p&gt;
&lt;p&gt;Jottings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logs on UIs, LLMs, frameworks and such</title>
      <link>https://cybrkyd.com/post/logs-on-uis-llms-frameworks-and-such/</link>
      <guid>https://cybrkyd.com/post/logs-on-uis-llms-frameworks-and-such/</guid>
      <pubDate>Mon, 15 Jun 2026 13:36:31 +0000</pubDate>
      <description>&lt;p&gt;This is actually quite hard to do. I&amp;rsquo;m fairly proficient with the odd Python script and can cobble together a mean HTML/CSS/JS UI for a Python server, but making an actual desktop app? That&amp;rsquo;s another level. I&amp;rsquo;m just trying to turn my &lt;a href="https://git.cybrkyd.com/notes/index.html" target="&amp;#95;blank" rel="noopener"&gt;note-taking app&lt;/a&gt; which runs on a Python server into an actual, like, desktop app thingy.&lt;/p&gt;
&lt;p&gt;LLMs and vibe coding don&amp;rsquo;t work on this. They are awesome at the functionality on the backend but absolutely mess up the UI time and time again. Then, there is the front-end frameworks quirks to contend with. What I actually need to do is to find something -- anything -- that is reasonably easy to work with for the front-end. For an absolute beginner, that is.&lt;/p&gt;
&lt;h2&gt;What I&amp;rsquo;ve tried&lt;/h2&gt;
&lt;p&gt;Nothing gets close to the original. There is always some sort of dependency hell. Take Tauri for example. All went well with the code migration until compile time. It couldn&amp;rsquo;t resolve a &lt;code&gt;cookie&lt;/code&gt; dependency despite the fact that there was not a single cookie-anything mentioned anywhere in the code. That&amp;rsquo;s what my Terminal said: cookie. What the? The best of the best, Claude, could not resolve and recommended trying something else!&lt;/p&gt;
&lt;p&gt;Pure Rust is also another story. Does not compile due to a mismatch on two crates needed for this. Again, all LLM&amp;rsquo;s could not figure out how to resolve this and most recommended trying Tauri. Well, OK then! Been there, done that, mate.&lt;/p&gt;
&lt;p&gt;GTK actually worked out pretty nicely. I managed to get the UI looking almost exactly like the original, but there are some weird happenings in there. One such thing is an annoying thin black vertical bar which appears intermittently on the left side of the editor box. It comes and goes and is an eye sore. Once again, no LLM can help. &amp;ldquo;Try Tauri&amp;rdquo; they say! Listen, you walnuts! I have and the bloody thing seems hungry or something, complaining about cookies and such. FFS!&lt;/p&gt;
&lt;h2&gt;What I need&lt;/h2&gt;
&lt;p&gt;I tell you, Electron has never sounded so good right now. Why I&amp;rsquo;ve avoided it thus far is because of the size of its end product&amp;hellip;the whole package is huge. I mean, this is a note-taking app, for Pete&amp;rsquo;s sake. A very, very simple, basic note-taking app. There is no need for the AppImage or the Flatpak or the .deb to be 200MB for this, right? All for the pleasure of using Chrome as the front-end because I know jack-all about coding proper UIs.&lt;/p&gt;
&lt;p&gt;Then there is the battle-tested C++. This will work, 100%. Won&amp;rsquo;t it? No dependency hell, guaranteed. At least not like these newcomers. And, at least I know a tiny bit of the syntax. Do I, now? This will work now, right?&lt;/p&gt;
&lt;p&gt;Nah!&lt;/p&gt;
&lt;p&gt;Back to the drawing board in the quest to find something that accepts vanilla HTML/CSS/JS as a UI…&lt;/p&gt;</description>
    </item>
    <item>
      <title>IndexedDB Notes</title>
      <link>https://cybrkyd.com/post/indexeddb-notes/</link>
      <guid>https://cybrkyd.com/post/indexeddb-notes/</guid>
      <pubDate>Fri, 05 Jun 2026 10:03:29 +0000</pubDate>
      <description>&lt;p&gt;I&amp;rsquo;ve been playing with a few toys. IndexedDB notes… let&amp;rsquo;s start there.&lt;/p&gt;
&lt;p&gt;Ooh, I&amp;rsquo;ve just spotted something undesirable as I type this out! I wrote the first sentence, pressed &amp;lsquo;Save Note&amp;rsquo; and then wrote the second sentence. After that, I pressed &amp;lsquo;Save Note&amp;rsquo; again and it pushed a new document instead of overwriting the existing one. OK, that is not cool; I&amp;rsquo;ll fix that.&lt;/p&gt;
&lt;p&gt;Anyway, I digress. I started this note to write out an actual blog post.&lt;/p&gt;
&lt;p&gt;As I was saying, I&amp;rsquo;ve been playing. IndexedDB Notes (as the name implies) writes to the browser&amp;rsquo;s IndexedDB storage. It&amp;rsquo;s all self-contained in one .html file. Therefore, because of where it writes to, it does not require a server instance running.&lt;/p&gt;
&lt;p&gt;After a few weeks of playing around with it, I&amp;rsquo;m once again on the fence with this. The all-in-one browser operation is a massive convenience. Or is it? I mean, I just do not trust browsers — any browser, Firefox included — to keep my notes 100% private. Why would I? Can&amp;rsquo;t add-ons gain access to all storage? They certainly can.&lt;/p&gt;
&lt;p&gt;Ublock Origin, for example, has permission to &amp;ldquo;Access your data for all web sites&amp;rdquo;. It needs it. And I trust it so it is installed on my browser. I don&amp;rsquo;t have many add-ons; only two in total. But still, there is that voice at the back of my head which is nagging me.&lt;/p&gt;
&lt;p&gt;OK, let&amp;rsquo;s look at reality. My humble notes are… rubbish! Random thoughts and blog post drafts, some half-written and forgotten as the moment fades. But… this is like a diary. My sisters used to keep diaries and heaven help you if you got within 10 meters of it! They contain private thoughts, emotions and wishes, given life through words. Some things are written but shouldn&amp;rsquo;t be. Other things are written and can become a bestseller. But all those words are — should be — private until the writer decides otherwise.&lt;/p&gt;
&lt;p&gt;I quite like the idea of using a browser. I guess that is why I made it this way. There is less to faff about with: spellchecking, for one; compiling a full-blown app, for two. That said, I&amp;rsquo;m seriously considering throwing this into a server to write to an external database, local-only, of course. But still in a browser.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll be back.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Written in&lt;/strong&gt;: IndexedDB Notes &amp;ndash;&amp;gt; &lt;a href="https://git.cybrkyd.com/IndexedDB-notes/index.html" target="&amp;#95;blank" rel="noopener"&gt;https://git.cybrkyd.com/IndexedDB-notes/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bugs found&lt;/strong&gt;: [1] Save again on new active note creates a new note.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes considered&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Move writes to external database&lt;/li&gt;
&lt;li&gt;Add thousands separators to word and character count&lt;/li&gt;
&lt;li&gt;Maybe some feedback on save and exports?&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Hot days and the drama of Premier League</title>
      <link>https://cybrkyd.com/post/hot-days-and-the-drama-of-premier-league/</link>
      <guid>https://cybrkyd.com/post/hot-days-and-the-drama-of-premier-league/</guid>
      <pubDate>Sun, 24 May 2026 16:04:09 +0000</pubDate>
      <description>&lt;p&gt;It&amp;rsquo;s hot, sunny, and I&amp;rsquo;m melting. The sofa is a good place to be right now at the hottest time of the day. I should really be outside somewhere, doing something, being somewhere, doing something active or laying in the shade somewhere, under a tree or something. I should be enjoying this unusual May weather.&lt;/p&gt;
&lt;p&gt;My energy levels are low. No, not on account of the weather; some like it hot. I like it hot. I think it&amp;rsquo;s a combination of exhaustion &lt;em&gt;and&lt;/em&gt; the hot sun.&lt;/p&gt;
&lt;p&gt;4pm marks the start of the final games of the season in the Premier League. I don&amp;rsquo;t support any team in particular, although I was glued to the screen this past week, willing Arsenal to be crowned the champions. It&amp;rsquo;s been a while for them. Normally, I wouldn&amp;rsquo;t care who is relegated, but this season is different. It&amp;rsquo;s two big names in the game: Tottenham Hotspur and West Ham.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been like high-drama unfolding. The air is thick with tension, hanging over my head like a fog. I live in close proximity to armies of fans for both sides (London is not that big a place) and so, over the past week, any talk of the drama surrounding the fates of both these teams is difficult to avoid.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not really rooting for either of them. I simply cannot. The outcome is already known: one of them will fall and the other… they will live to fight another season in the most popular football league in the world.&lt;/p&gt;
&lt;p&gt;I admit, I&amp;rsquo;m watching the Tottenham vs Everton match right now, but I am also keeping a very close eye on what&amp;rsquo;s going on with West Ham vs Leeds. Both are playing for their very survival and when survival is at stake, it&amp;rsquo;s game on. It makes for excellent play, the very best entertainment and — not to mention — the climax to all the drama.&lt;/p&gt;
&lt;p&gt;All the world&amp;rsquo;s a stage today if you&amp;rsquo;re a football fan who follows the Premier League.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Having a go with Go</title>
      <link>https://cybrkyd.com/post/having-a-go-with-go/</link>
      <guid>https://cybrkyd.com/post/having-a-go-with-go/</guid>
      <pubDate>Sat, 23 May 2026 08:53:07 +0000</pubDate>
      <description>&lt;p&gt;With my &lt;a href="https://git.cybrkyd.com/flask-share/" target="&amp;#95;blank" rel="noopener"&gt;Flask Share app&lt;/a&gt;, it was time to consider re-working this into something more production-like. Flask serves the purpose for my needs but Flask is not really a production tool. There is the massive red warning:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are alternative prod-ready web frameworks for Python, but my thinking is that they are all dependencies, in a sense. I&amp;rsquo;m a huge fan of &lt;code&gt;stdlib&lt;/code&gt; and maybe because of this, Python is not really the right tool for the job here.&lt;/p&gt;
&lt;p&gt;It is quite possible to re-write the Flask Share app using only &lt;code&gt;stdlib&lt;/code&gt; but that will be&amp;hellip;wordy. Why do that? When Flask handles all the web stuff so elegantly?&lt;/p&gt;
&lt;p&gt;I was reading around on what else I can use in place of Flask and came across a lively discussion somewhere. The OP complained about the loss of &lt;code&gt;cgi&lt;/code&gt; in Python 3.13 and how they had to rewrite a chunk of their code when they upgraded. Someone chimed in that perhaps Python was not for them, given the history of the Python core team removing &lt;code&gt;stdlib&lt;/code&gt; packages which otherwise still work just fine. Things are removed all the time; maintainers come and go, packages are upgraded and replaced, etc. Perhaps that person should have instead said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python is awesome but it is not necessarily the right tool for every job.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Think sledgehammers and walnuts.&lt;/p&gt;
&lt;p&gt;As much as I love Python (can you tell?) I think my statement above is correct. It was time to think outside the box.&lt;/p&gt;
&lt;h2&gt;Trying Go&lt;/h2&gt;
&lt;p&gt;I have never touched Go. And by that I mean: I have never written a single line of it before this. I &lt;em&gt;have&lt;/em&gt; browsed through some code and did &lt;em&gt;sort-of&lt;/em&gt; understand the syntax. There are some similarities to Python but my, is it wordy! Sort of like me rewriting the Flask app to use pure &lt;code&gt;stdlib&lt;/code&gt;. But&amp;hellip;elegant for this use case, I&amp;rsquo;m forced to admit. It is the right tool.&lt;/p&gt;
&lt;p&gt;I knuckled down and learned a bit. The built-in &lt;code&gt;net/http&lt;/code&gt; is a God-send, meaning no more external dependencies; Go can do it all.&lt;/p&gt;
&lt;p&gt;So that&amp;rsquo;s what I did. I spent the past couple of weekends translating Python into Go and the results are in. It is bloody fast. Wordy, but fast!&lt;/p&gt;
&lt;p&gt;Enough talk, time to show the code.&lt;/p&gt;
&lt;p&gt;Here it is, in my repo: &lt;a href="https://git.cybrkyd.com/go-share/" target="&amp;#95;blank" rel="noopener"&gt;https://git.cybrkyd.com/go-share/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <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>
  </channel>
</rss>