How to use Grub on a dual-boot system with Windows and BitLocker

I recently upgraded my gaming laptop from an MSI G75 Titan (Core i9 with a 1080 GTX) to an ROG Strix Scar 17 (Ryzen 9 with a 3080 RTX).

The Titan is still a great machine though, especially after the SSD and RAM upgrades I’ve given it (6TB and 64GB respectively), and so rather than sell it I decided to make it a dual-boot Windows/Linux desktop replacement laptop for productivity. I could even leave Steam installed on Windows, install it on Linux, and leave a couple of my favourite non-RTX games installed on a shared SSD for a couple of rounds after work.

Since Windows was already installed and, other than games, it was pretty much a clean install, I decided not to bother with a reinstall and instead to just install Linux on one of the other SSDs...

Read More

A day in the life of a software engineer

What follows is a summary of the kind of exchange I have on a daily basis as a software engineer. I’ve obfuscated some details for obvious reasons.

Client: Here’s a document that contains a list of events we’d like you to integrate into the app. We need every event that the document contains.

For illustration purposes, let’s say it’s a document with a list of numbers from 1 to 10.

Me: Thanks. I’ll add those right away.

Some time later…

Me: Hi. I’ve added those events: 1-10 are all in there and verified as working.

Client: Events 11 and 12 are not coming through. Here is the document again. Please ensure that all of the events in the document are added.

Me: The document doesn’t contain events 11 and 12. It’s just 1-10...

Read More

The ultimate Sony PSP Go

Sony released the original PSP back in 2005. It was promoted as a portable PS2 but although it was impressively powerful for the time, as was standard practice back then, Sony was talking bollocks and in reality its power lay somewhere between that and a PS1.

Its games came on a Universal Media Disc or UMD. This was a 1.8GB disc encased in a plastic housing that was designed to protect the media from scratches.

UMDs were chosen over cartridges because of their capacity and, more importantly, their cost-per-GB. To compare, cartridges for Nintendo’s DS ranged between 8 and 512MB in capacity – with most games using either 64MB or 128MB.

In truth though, the format sucked. The PSP’s drives were painfully slow, clunky and overly fragile for a console that was meant to be portable. And thanks to the mechanical aspect of the drive, it also impacted on the battery performance of the console.

Sony released two more iterations of this design which improved the performance and specification of the console, but they were all hamstrung by the UMD drive.

In 2009, Sony released the PSP Go. This model removed the UMD drive and the idea was that users would get their games from the online store instead. The removal of the drive meant that the console could be much smaller and lighter than all the other iterations, with better battery life.

Where Sony gave with one hand though, it took away with the other. The memory format was changed from the Pro Duo of the earlier models to another proprietary format called M2, which was much smaller – about the same size as Micro SD. This decision would be significant for the model’s future.

Read More

Gray Weddings Review

Phone: 07960 964 156 (but they never seem to actually answer this)
TrustPilot profile:

Linked to:

Name: Jackson & Gray
WeddingWire profile:

Update 7/11/2018:

About a week after this review went live, I was contacted by someone who had some interesting information that may add some credence to Edward’s claim that Gray Weddings is no longer trading...

Read More

Why Nintendo sucks at hardware

In general, I’m a fan of Nintendo: their hardware possesses a playfulness that is absent in their competitors and their games are almost always polished to within an inch of their life.

But Nintendo does seem to make a lot of really stupid mistakes with their hardware: mistakes that often make me wonder what their product designers – not to mention QA teams – are smoking sometimes.

I’m not talking about cosmetic preferences here – purple consoles aren’t to everyone’s taste but that doesn’t constitute a design flaw...

Read More

Nando’s in job applicant data error

On Wednesday the 20th of December at 5.04pm, I received an email from LinkedIn thanking me for posting a job vacancy for an Ecommerce Manager with Nando’s UK in London. The email was addressed to someone who, according to LinkedIn, was an HR Advisor at Nando’s.

My initial thought was that this was some kind of phishing email whereby I was expected to click on a link that took me to a LinkedIn lookalike where I would sign in and hand over my login credentials to some unsavoury characters.

Except that on closer inspection, the email was genuine. It really did come from LinkedIn, and the job vacancy was real. So why did I receive this email?

It seems that the individual who posted the vacancy used an email address that belonged to a domain that I own. I have no idea why...

Read More

The ultimate Sega Dreamcast

Having recently secured a dedicated games room after moving house, I’ve been slowly working my way through each retro console and making it the best that it can be before adding it to my custom-made TV cabinet. First on the list was the Sega Dreamcast.

The first thing to do was replace the optical drive (inherently one of the parts most prone to failure on retro hardware) with a USB GD-ROM. This board physically replaces the drive with a USB port allowing the user to run their games from USB stick. Games load faster, the console is more reliable (and a lot quieter!), and depending on the size of the USB stick, the owner need never get up from the sofa again when switching games!

When researching this component I come across a fair amount of negative feedback on “Mnemo”, the guy who ...

Read More

The seasoned C expert and the XML file

I was recently working on a project that was being developed by 3 different teams that were each located in different countries: one in the UK, one in Germany and one in India. Each team was working on distinct parts of the project so for the most part we were fairly self-contained, but there was a degree of overlap so every now and again there was a need to talk to someone from one of those teams.

Of significant relevance to this story was a particular member of the German team. Let’s call him Mr German. To date, I hadn’t conversed much with Mr German: only really to exchange pleasantries over video conference when we were the only ones who had turned up on time for a meeting.

Of course, I can’t go into any specific detail here so bear with me.

So one day I’m working on something and I ge...

Read More

Is the use of antibiotics leading to increased resistance in bacteria?

There has been a lot of coverage in the media in recent times about the rise of “superbugs”: bacteria that has become immune to even our strongest antibiotics.

Sensationalist headlines predict the end of the world as killer bacteria wipe out the human race, unstoppable in their march thanks to resistance acquired from exposure to antibiotics that are flippantly over-used by hypercondriacs.

The theory that is used to justify these headlines is that more we use antibiotics, the more quickly bacteria evolve to resist them, and the faster the drugs stop working. Basically, an arms race where biology is pitted against technology, and where biology will be the inevitable winner as technology eventually runs out of ideas.


But is this really the case?

Read More

The fundamentals of writing a framework

In software engineering, a framework is an abstraction in which software that provides generic functionality can be modified by implementation-specific code in order to result in application-specific software.


A good framework adheres to the SOLID principles of object-oriented design. These principles are:

  1. Single responsibility principle. A class should do just one thing (and do it well).
  2. Open/close principle. A class should be open for extension but be closed for modification.
  3. Liskov substitution principle. Objects in a program should be replaceable with instances of their subtypes without breaking the application. See: polymorphism.
  4. Interface segregation principle. Many client-specific interfaces are better than fewer general-purpose interfaces.
  5. Dependency inversion princip...
Read More