Canada Revenue Agency — please do better. Your web site is broken.

So I saw a job ad on LinkedIn announcing that the CRA was hiring new personnel to answer phones for people with questions about their taxes. Being that I’m someone looking for a job, I decided to go to the CRA web site and submit my candidature. Several days later they still don’t have it, nor — as far as I can tell — do they have anyone’s candidature since posting the ad, and the weird thing is that they seem to be blissfully unaware of this. Let me walk you through the process and you’ll see why.

First, I went to the CRA web site and looked for the “careers” link. Job opportunities link

I click on the Job opportunities link, which takes me to the careers page, where I see a Candidate Registration link, which I click.

Submit your candidature

In the resulting form I select that I’m a member of the general public, and click on the data privacy statement checkbox. So far, so good.

Candidate registration 1

In this second Candidate Registration page (experienced UX writers will share my annoyance at having two consecutive pages with the same name, but let’s ignore that) I enter the appropriate data and click on the Next button.

Candidate registration 2

And voila! an error message. “The session has timed out”.

Session error (029)

But I did not let this deter me. I clicked on the Exit button, which took me back to the CRA front page, completed the process again, and this time… I now got a different error, “Our services are not available at this time”.

Error 010 - service is not available

I shared this last error message in the LinkedIn ad for the recruiting drive and haven’t heard anything from them since. The ad appeared on Tuesday (IIRC) and the web site SNAFU is still there.

So, dear Canada Revenue Agency, if you see no submissions for your recruiting drive don’t conclude it’s because nobody wants to answer people’s questions about taxes. It’s because your web site just. doesn’t. work.

Maybe you guys should be concentrating to hiring people to make sure that your web sites are usable instead of obsessing about killing public sector jobs, because having fewer and fewer staff isn’t going to fix things on your end.

On the role of AI in technical writing

For those who are new to my blog, hi, I my name is Tony and I am a technical writer. More specifically, I am a technical writer with 25 years’ experience in the role, and have plied this trade at all levels, from writing illustration-heavy instructions for self-checkout robot supervisors working in grocery stores to system administrators tasked with rebuilding market-trading systems from scratch in the event of a major disaster such as an earthquake — covering both hardware and software. I’ve written docs for distribution in printed manuals, virtually-printed manuals (you know, Acrobat format), and online help formats. I’ve implemented XML-DITA based complex help infrastructure for companies.  I’ve also created and maintained web sites since the web became something accessible to everyone in the mid-90s.

I’ve also been looking for a job for a year now. Sadly the only “success” I’ve had was to get a technical support job for which I had not applied, but was contacted directly by the manager, and I’ve been spending the last 7 months wishing I’d said no to that one for so many reasons, but that’s a story for another day. Let’s just say that I have learned to look on unsolicited job offers with suspicion, maybe a little late, but it’s probably better than if I had never abandoned the “let’s not look a gift horse in the mouth” attitude.

The simple fact is that AI has taken a huge bite out of the numbers of jobs in the software field. I’ve been laid off several times, and more than once jumped at surprise job opportunities which turned out to be nightmares I ended up bitterly regretting. The point is, at many points in my career I have looked for new employment. As with the craft of technical writing, I have lots of experience in that. And yes, there are far, far fewer job offers in the field than there used to be. This is a manifold problem — and the rise of generative AI has had a role to play in most of it.

  • Many companies seem to think that the nature of AI as a “large language model”, and the fact that it can generate intelligible text, means that you don’t need writers
  • Companies have been laying off hundreds of thousands of IT workers in many different functions thinking that AI can do those jobs, resulting in a glut of available IT workers with industry experience and qualifications
  • AI companies right now are soaking up capital that would otherwise be going to fund profitable companies and sinking that money into an endless money pit.

Now, there’s not much that can be done about that third factor. Right now the only thing money managers are seeing is that “market gains” — little more than enormous bets — are favoring AI companies for investment money. In a world where the stock markets have become little more than speculative betting parlors, it’s just something we have to live with.

However, the technical writing market is, I would argue, unfairly paying the price for AI’s unrealized — and in my view unrealizable — promises, and falling victim to what’s known as the doorman fallacy. Note that the doorman doesn’t have to be a man, but that’s how the fallacy is widely known at this time.

To put it simply, the doorman fallacy describes the pitfall of reducing a role to only its most obvious characteristics. Why would you pay someone to be a doorman? On the surface, it doesn’t make any sense to do that. People can open their own doors, they already do that every day in their homes. Why not just install a revolving door that anyone can walk through without any effort, or an automatic door?

The fallacy here is that a doorman provides a service that goes beyond simple ingress and egress from a building. The mere presence of the doorman shows that there is someone there paying attention to the people who enter and exit the place, and to the general environment of the building. If you’re someone who lives there, this provides a certain level of comfort, not just in not having to open the door yourself, but in the sense of knowing that if something unusual is happening, this person can tell you about it. In the classic sense, the doorman can also tell you about other places in the neighborhood, such as where to go for lunch. They can also receive packages for you. If there’s a fire happening in the building, they may be the first person to know about it and contact the fire department.

And by getting rid of the doorman, one simply abandons providing all those services. People living in New York City know what that’s like, and that’s why apartments in “doorman buildings” rent at a premium.

Opening doors is just a small part of the doorman’s job.

Getting rid of technical writers because “the LLM can write” is to fall into that trap. Actually writing the docs is only a small part of what a technical writer does. Most of the job, for any technical writer position, consists of knowing the product inside and out.

An LLM may be able to take a web app, go through it, and tell you what each option in each UI element does, but it cannot tell users how to execute the tasks they want to use the software to accomplish. That is a technical writer’s real job. Yes, “writing the docs” may technically be a description of what we do, but in order to get that done you need to integrate a lot of knowledge, including (but not limited to):

  • knowing the audience for which the docs are written (the most essential part, I would argue)
  • knowing why the audience needs to use the product, what they hope to accomplish with it
  • knowing the ins and outs of the product
  • testing the product from a user-acceptance point of view
  • passing feedback to the development team as to what works and what doesn’t — not just bug reporting, but is the product putting obstacles in the user’s way
  • organizing this knowledge into a logical and natural pattern for the user for the online help
  • identifying areas where the user may need more context-sensitive guidance
  • organizing the knowledge of the product in ways that will provide the most practical way for the organization to keep said knowledge so that it may be used by product managers, project managers and developers

By getting rid of technical writers companies are largely abandoning knowledge about their own products, their users, and how to best serve their own needs in the future.

Likewise there is an idea among tech companies that the technical writer’s role can be filled by developers themselves. This is another trap. Developers in this day and age tend to work on a specific feature, or sometimes a sub-feature, and once that one “atomic” piece is complete move on to another feature. Rarely does a developer have a good overall sense of what the product as a whole is supposed to do, except maybe in the case of senior devs within a company who — and they will freely tell you this — have little time for the docs, except for API documentation where they more often than not end up being both the consumers as well as the producers. But again, APIs are domain-specific, and rarely cover the full functionality of a software product.

The other aspect of this is that developers look at a software product as something they make, and not something they use from end-to-end. Something may seem very obvious to a developer but require explanation to a layman who is just trying to use the product to accomplish a task that’s entirely foreign to them. I’ve met many developers who are absolutely brilliant at what they do, but once they step outside that very delimited discipline they are simply at a loss for words and engage in behavior that strikes non-developers as bizarre and irrational. The same is often said of (for example) university professors and people with PhDs. They don’t give doctorates to stupid people, that’s just a fact. However the same thinking that gives rise to industry-leading developers and thinkers leads to people with extremely deep knowledge in one particular area of knowledge to the detriment of other areas, including many that are just common sense to most people. As I said I’ve worked in the software industry long enough to know how true that is.

And this brings us to the question of what role artificial intelligence has to play in the technical writing process. And I would argue that I just don’t see much there. Technical writing, at least in the software industry, is about taking a product that was written by people, and making it easier to use by other, completely different people. And that’s why you need people in technical writing positions.

Yes, there are contributions that can be made, largely in the area of analytics. In a world where documentation is mostly distributed online, it’s very useful to be able to identify which areas of the documentation are being consulted, how much time users are spending on those areas, and which areas are barely if ever looked at. But I would argue that consulting with technical support would yield greater benefits. See what subjects users need to consult technical support about — it’s not just bugs. Sometimes the documentation can use more conceptual information before jumping into individual tasks. Sometimes a feature may have been updated without letting the documentation team know about it. That happens, especially with distributed teams. And technical support teams tend to have far better analytics already in place than documentation teams, because that’s a large part of their key performance indicators (KPIs) in a way that it’s just never been for documentation teams. But there’s a certain role there.

However when it comes to the core tasks of technical writing, I just don’t see much of a role for generative artificial intelligence.

Does that mean I’m against AI altogether? I’m not against the concept. I find it useful as an agent that can handle the coding part of development. Why? Because coding is a discipline that’s very tightly delimited. And by “coding” I mean in the strictest sense — turning algorithms into code, and doing basic testing on the resulting code to ensure that it works. The algorithm still needs to be spelled out by the user for AI coding to be effective. And the code needs to be read and reviewed by a human to make sure it doesn’t have a ton of side effects. It’s also proving to be a lot more expensive than what its chief sales people have been clamoring. When a company releases a new technology, it’s looking to monetize. That’s literally the only role of a corporation. Look out for the shareholders.

AI has its uses. Thinking those uses include technical writing is a mistake.

Killing WordPress Comment Spam for Fun and Profit

I recently had to “reboot” this blog as I had to remove it from a wordpress-multisite installation and serve it as a standalone instance. By the way, if you’re starting a new WordPress project, avoid multisite installations like the plague, they really don’t work well and are an expensive pain to spin off, as the plugins that actually work for multisite installations are typically much more expensive than the (often free) ones that do not require that capability.

This aside, one of the big problems you will come up against when administering a “default” wordpress installation is comment spam. Basically you will see hundreds of comments on your posts pile up, but when you actually have a look at those comments you will quickly realize that almost all of them will be essentially from bots that attempt to spam your posts with links. But you can avoid this with a few very simple steps that will stop the spammers dead in their tracks.

WordPress Settings

The relevant settings can be found by logging into your WordPress instance as an administrator, then from the Dashboard going to Settings > Discussion.

Default post settings

The first thing to do is decide whether you want to allow comments on your posts at all. It’s not as obvious as thing as it might seem. If you try to measure engagement by relevant comments on WordPress, you will likely be very disappointed. A much better measure of engagement is how much discussion you can generate on social media sites on which you share your posts. So, the easiest way to cut down on spam is to disable comments entirely by unselecting the checkbox next to  Allow people to submit comments on new posts and skipping the rest of this article.

Other comment settings

If you do allow comments, the most effective way to cut down on the amount of spam is to select Users must be registered and logged in to comment in this section. Spammers are just not going to go through the trouble of registering as a user and will just skip your site, which is the best scenario.

Before a comment appears

Unless you expect that your blog will be a particularly busy one in terms of users comments — and in 2026 that is not a very likely eventuality — make sure to select both the Comment must be manually approved and Comment author must have a previously approved comment options. These will make sure that spam comments do not appear under your posts by default. I believe that those are the default settings in WordPress, but you’ll want to double-check.

Comment Moderation

At this point your installation is already pretty secured, but to “bulletproof” things you should change the Hold a comment in the queue if it contains X or more links option to 1 instead of the default 2.

Conclusion

Just adjusting your WordPress settings in the ways described above should cut down the spam submitted to your site by 99%. Sure, having a large number of comments on posts may seem encouraging if you’re starting a new project, but what you really want is engagement, not people using your site to advertise (mostly) porn and other questionable sites. And in my experience the engagement will actually come from the forums and social media sites on which your share your posts, and not those left on your site.

Thanks for attending my TED talk…

On the usefulness of AI…

Today I gave AI a chance. It didn’t go well.

It’s not the first time I give it a shot. In previous attempts I have found that AI, in that case CoPilot, is OK at coding, as long as you personally figure out the exact algorithm you want to turn into a python script and tell the bot exactly what you want it to do step by step. So I’m not necessarily opposed to the technology altogether.

However today I tried to get the Claude bot to translate a document that was maybe half a page long. I sat there and after a while thought “well this is taking a while”. But I was patient. And after several minutes, voila! I got a message that I was “out of messages”.

And even worse, there was seemingly no way for me to save the prerequisites and strategy for the translation so that the next time I have to deal with the same situation, Claude wouldn’t have to do all this extra processing.

The source and target languages are very common. The file format was very common. The amount of text was frankly trivial. And I have nothing to show for all this. At least if a human was working on this I would have had at least a partial translation.

Words fail me in expressing how much of a disappointment this whole experiment turned out to be. This is why companies are spending hundreds of billions of dollars? This is the “future of work”? This is why it’s practically impossible to find a job in the software industry these days?

What a sh*t show.

The strange allure of “realistic” simulator games

I never understood the point of The Sims. It’s already difficult enough to live one’s life without then coming home and living another one on a computer, really. Second Life seemed to somehow make it worse by inventing the concept of “virtual jobs”, “land” ownership and virtual corporations.

So I was rather surprised to find myself hooked on a game I’ve been playing for the past  couple of months: Car Mechanic Simulator 2021. It’s on Steam, and it’s one of those games I can in fact play on Linux. Basically you start out with a small garage, you do jobs, earn money, expand, and eventually you start doing things like buying cars, fixing and tuning them and then sell those cars for big profits.

So, great. It’s a video game that’s essentially a watered-down version of… a job. It’s a game sector that’s enjoyed considerable expansion in recent years, basically simulations of common place jobs. The biggest one of these is probably Farmer Simulator, but there are lots around covering everything from driving a bus to lawnmowing and even power-washing (!). They’re usually based on the template that you’re an entrepreneur starting a new service, and you grind your way to making that business a success.

Well, I’ve found that on several occasions by the time I shut down the game I look outside and the sun is coming back up. It’s very addictive — it seems to scratch an itch I haven’t had in a long time — the love of work.

If you asked me if it’s normal to want to work, my instinct is usually to say no. There are so many other ways to occupy one’s time! and yet I find myself constantly telling myself “ok, let’s renovate one more” whenever I play the game. So clearly I can take pleasure in work, in doing repetitive things for “credits” (which in this case do not convert to actual money, sadly.

In a way I’m reminded of a previous job I had as senior technical writer at Actional. I knew my stuff. It was in 2011-2012 and I was working mostly from home. I remember putting in work sometimes until 4am near release time as we had to produce docs for last-minute additions and make sure the online help worked correctly… then the test-and-repeat cycle.

Thing is, I didn’t mind doing this. To me this was part of the job. I and our other writer were producing the documentation, and my job was now to make sure everything worked, and I just did it, even if I was tired. That was work, but it was rewarding work.

And then it was all for nothing as in 2013 the company was sold to a VC firm that stripped everything down, getting rid of me and the other writer — as well as a bunch of other employees — and then, well, that lead to a bunch of other events in my life. And then I could never quite be coaxed into the idea that work (as a concept) was a positive thing, because the moment this started happening for me, the rug was pulled from under my feet like that and I ended up with nothing. I have no idea whether Actional is even a thing anymore, it’s at that level.

So, what makes this silly little sim game seem like what was really the most satisfying work experience in my life? Well, it’s the underlying “meta-mechanics” of the game. This is my “garage”. When I grind I earn credits. And also in-game achievements (I got all 46 of them). There was a progression. More work earns more money.

This is the way work is supposed to work.

So, this is not a very realistic representation of work. I mean, this is a computer simulation of manual work so there’s an obvious limit there. I don’t have to wash the grease from under my fingernails after playing, and I did start with a non-negligible sum of money by default, which starts you out on a fairly easy path. But the point remains. Hard work can be fun as long as it keeps being rewarded. Maybe it would be more realistic if, periodically — say, every year or so — a tornado ripped the whole garage out of the ground, a bit like the tech industry’s yearly spring wave of layoffs, and landed you there with zero credits, zero achievements, and no real way forward.

Which is kind of how I feel right now as someone who’s unemployed in the tech field despite 25+ years of technical documentation experience. And certainly this little note can help explain why I’m playing a mechanic in the first place. Right now I have a lot of time and nothing to do. I want to work hard and earn. But through a mix of job eliminations due to the promise (and not current capabilities) of AI, plus the glut of tens of thousands of tech workers having been recently laid off, it’s extremely difficult to find any job right now. And even if I do find something, how long before the company just “reorganizes” and lays me off as an employee with very little seniority? When is the next rug-pull coming?

So, that’s how it is. Sadly even my enjoyment of this game can best be seen as something driven by negative events and trends. It’s possible to enjoy work, and I have in the past, but it’s not something I’m likely to experience again in my life. And that’s pretty depressing.

A short trip through dependencies hell

With my recent embracing of Linux for my desktop PC, and my tendency to want to install various software that’s not necessarily ready for primetime, it was inevitable that I would run into the dreaded “dependencies hell” situation where something gets broken and ends up breaking other things. Well, I’m still typing this on my now-fixed Linux desktop, so this is definitely not one of these “screw Linux, I’m going back to Windows” post, and I’ll walk everyone through this incident in detail so that if by some chance you find yourself having a problem such as this, you will not panic and be able to repair things.

So yesterday I was going through some of my old archives and saw a big fonts package. We’re talking 1000+ fonts. I don’t want to install all of those, but I wanted to have a fonts manager app so I can have a visual preview of all of them and enable/disable some of them without wanting to move files around directly. One of the apps I saw listed as available for Linux was fontbase, and from the web site I thought it looked really interesting. It is distributed as an appImage, which I don’t like — we Linux users have to deal with multiple software packaging methods already — but it’s supposed to be a way software can be installed without requiring a separate app (like apt, flatpak, etc.) so I gave it a try.

Usually the way to install an appImage file is to make it executable and double-click it, so I do that… and nothing happens. I bring it up in Nautilus (“Files”), right-click and select run, and again, nothing. So I grumble and open a terminal from my Downloads folder and run it (with ./[file]), and get an error message:


dlopen(): error loading libfuse.so.2

AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
if you run it with the –appimage-extract option.


This error occurs because Ubuntu switched from FUSE2 to FUSE3. A long time ago. However I did not know that, and foolishly did not research this ahead of time. So I assumed that FUSE was not installed at all, and that’s how this all started.

Naturally I went to a terminal and entered “apt install fuse”. Apt warned me it would have to install a lot of packages and, more importantly, remove a lot of packages. However I was in the middle of playing a game and was not paying sufficient attention. If I had been paying attention I would have noticed that the packages to be removed included things like “ubuntu-desktop”, which is pretty important on a working Ubuntu desktop system!

Unfortunately I just hit enter to start the process. This did not have any impact on running applications so I kept doing what I was doing, playing the game (it was “Car Mechanic Simulator” on Steam, if you’re curious), and then I watched the Japanese Grand Prix, and went to bed.

When I woke up is when I realized how badly I had screwed this up. I woke my computer from sleep, but I couldn’t enter my password. So, I reluctantly did a hard reboot on the system — hold down the power key for 5+ seconds, then restart — and that’s when I became aware that I had made a huge mistake.

I made a huge mistake

So the computer restarts, I get the initial Ubuntu screen… and then it disappears and shows me the console output of the system startup. That’s not a good sign. Also the last message I saw was that gdm had failed. That’s really great, I thought sarcastically. And that’s when it hit me that installing the “fuse” package was the origin of the problem. I looked up whether the apt system has a rollback system, and it does not — maybe that’s why Ubuntu now uses snap. However it gave me a starting point. Fortunately I still had my phone working so I looked up fuse and realized that I had inadvertently rolled back FUSE3. So I switched to a terminal in text mode by pressing “Alt + F2”, logged in, and reinstalled FUSE3. However I also noticed that it didn’t involve installing a huge number of other packages but one thing at a time. I rebooted.

Of course I was still left in the system console after rebooting, with gdm loading but me not seeing a GUI. So again I switched to a terminal, and thought about what my next step was going to be, and fortunately I found that apt has a flag you can use to reinstall some parts of the system (–reinstall). So at that point I started looking for a “desktop” meta-package and immediately saw “ubuntu-desktop”, so I went for it with this command:

“sudo apt install –reinstall ubuntu-desktop”

and this operation took care of all the dependencies. I crossed my fingers, rebooted, and Hallelujah! I got my desktop back, and my first thought was “I gotta write this down”, that’s the technical writer in me I guess.

Fortunately Ubuntu has the ubuntu-desktop metapackage available. Had this happened with another distro I think recovery would not have been nearly as easy  And fortunately I remembered exactly what I had done at the system level which could have caused this problem. Because, make no mistake, I am the only person who caused that problem.

However it might be a good idea to “blacklist” the fuse package from getting installed by apt, as this really shouldn’t be done by anyone who’s running the Ubuntu desktop. I’m not exactly sure how this could be done, but it’d be a good idea.

That being said, and even better idea is to be careful AS ONE SHOULD BE when installing packages using sudo and apt, and to not just breeze through stuff because of a foolish sense of self-assurance that “I know what I’m doing”. And that’s ultimately the lesson from this — sudo as a tool is powerful, and the way it works on Linux is to add a step (authentication) that’s literally there to stop you from doing something stupid. In Breaking Bad the expression “respect the chemistry” keeps coming up. Well, if you’re using Linux, remember to “respect the permissions”. But, if you do get yourself into trouble, at least Linux is made in such a way that it’s possible to walk back your errors and get back to a working system, which is more than I can say for Windows.

A tool for file recovery cleanup

If you’ve ever run file recovery tools on a disk, you know that you can end up with multiple copies of recovered files. Well, I made a little script that can help reduce the number of duplicates for you to clean up.

https://github.com/eltopo1971/file-duplicate-nuker

fileDuplicateNuker takes a directory as an argument, then recursively goes through that directory and takes a hash signature from the files in it. When it encounters a file with the same hash signature, it deletes the file.

Does this take care of all the duplicates? Oh heavens no. That’s a feature, not a bug — call it erring on the side of safety. The script has no idea what kind of file it’s dealing with. All it does is take a hash signature and base the decision of whether to delete the file on that. If there is so much as one byte of difference in the file it’s examining, it’s counted as a unique file and not deleted.

That being said, from my testing it does delete a good number of files, and when you have thousands of files to wade through, any little bit helps.

Running a Windows virtual machine on Linux using an Existing Windows Installation

I’ve been a Linux user for years. At home I’ve kept a file server which runs off Linux, but that was “classic Linux” — without a graphical user interface, using the command line, and doing things the “hard way”. My main desktop PC was still running Windows, and had to because the one game I play regularly, Fortnite, was not available on Linux.

Well, someone recommended that I check out GeFORCE NOW, which is a virtualized environment you can use within Linux to play a large number of games in the cloud. I’ve always been skeptical about that type of play, largely because the capacity of the system to provide a good gaming experience had not previously been available. However since I live alone and have a good broadband connection I tried it out and loved it. It’s indistinguishable from playing the game from your own computer.

So, since most of the apps I use are open-source or otherwise available for Linux, I decided to switch from Windows to Ubuntu 24.04. My PC has two hard drives as well as a NVME drive which hosts the Windows system, so I decided to delete and transfer what I could from a 1TB drive and installed Ubuntu on there. It was a breeze and I was quickly up and running. Ubuntu has very good hardware support so most things just worked, and the only thing I had to hunt down was a driver for the Logitech G13 gamepad I constantly use. I’ve been running this for about 3 weeks now and I have no desire to go back.

However, today I came up against an obstacle. On Windows I used Bitvise SSH client to connect to this server, and Bitvise saves its files in its own binary format. I found myself in a situation where I would have to go back to Windows to use Bitvise to connect to my server. Also while my current situation does not require that I have access to a Windows machine, that can change all too easily. So I decided to create a Windows virtual machine (VM from now on), but instead of using a virtual hard drive file, I would simply use the disk on which Windows is already installed. That makes a lot more sense. It’s just more efficient.

I found one set of instructions to help me do that, but it dates back to 2021 and hasn’t been updated more recently, so I spend some time figuring out the more current way to go about it.

How to run a Windows VM from an existing Windows disk

For this you will naturally need a computer running Linux, preferably something Debian-based like Ubuntu. You will also need to install VirtualBox on that computer (downloads here). You should also disable Bitlocker encryption from your Windows drive before proceeding. I didn’t have it enabled on my drive so I don’t know how that would affect the installation.

Set up your user

Your user will need to be part of two groups: “disk” (to enable raw disk access) and “vboxusers”.

sudo usermod -aG disk,vboxusers [user]

Also let’s create a folder “vms” in your home directory in which you will keep your VMs:

mkdir vms

Set up your Windows disk

First, find out where your Windows drive is mounted. By default when you install Ubuntu on a computer with FAT32 or NTFS drives, they will be accessible to Linux.

lshw -short -class disk,volume

This will show you a list of your hard disks and their partitions. Look for a disk that contains a “Windows FAT volume”, a “reserved partition” and one or more “Windows NTFS volumes” and note the entry in the Device column for the disk (not partition). Usually this will be “/dev/nvme0” (if you have a NVME disk) or “/dev/sda”.

Next, we’re going to create a special file that points to that disk using a utility that is installed with VirtualBox. Enter this as your regular user (not root):

VBoxManage createmedium disk --filename=vms/[disk file].vmdk --variant=RawDisk --format=VMDK --property RawDrive=[Windows drive]

This file points at the location of the Windows drive.

Create a VM

Now we’ll start using VirtualBox itself. But before we do, let’s install the VirtualBox Extension Pack (download from here). To install the file just double-click on it on the file. It will launch VirtualBox and the installation will take place.

In the VirtualBox dashboard, click on the Create a new virtual machine (VM) link.

  1. In the VM Name field, enter a name for the virtual machine
  2. The VM Folder should be “/home/[user]/vms”
  3. In the OS field select Microsoft Windows
  4. In the OS Version field select the version of Windows installed on your Windows disk.Win12
  5. Click on the Next button at the bottom right of the New Virtual Machine window.
  6. Under Specify virtual hardware, adjust the Base Memory and Number of CPUs. Bring the Disk Size slider to the lowest value. Note that using 16GB (or more) of RAM is highly recommended otherwise you’ll find the VM experience very taxing, but keep in mind that this memory will not be available to your Linux apps while the VM is running.
  7. Select Use EFI
  8. Click on the Next button.
  9. Click on the Finish button.

Attach The Windows Disk to the VM

Now we’ll attach the pointer file we created in step 1 to the VM.

  1. In the Machines tab of VirtualBox Manager, right-click on the new VM and click on Settings.
  2. In the [VM]-Settings window, select the Storage tab.
  3. You’ll see a .vdi file which we won’t be using. Click on the Add Attachment button at the bottom right of the Devices box (see below) and select Hard disk from the dropdown menu. Attach Disk
  4. In the Hard Disk selector window, click the Add button.
  5. Select the .vmdk file you created earlier in the file selection dialog box.
  6. With the .vmdk file selected, click on the Choose button.
  7. In the [VM]-Settings window, select the .vdi file, and click on the Remove Attachment button (next to the Add Attachment button).
  8. Click OK to save your VM configuration.

Run Your VM

Nothing left to do but to run the VM and make sure it works, so in the Machines tab of VirtualBox Manager, right-click on the VM you just edited and select Start > Start with GUI.

You should be able to log into your Windows installation.

If you have tried in the past to install Linux and modified the UEFI partition of your boot disk… well, you will then have to navigate around the disk using the GRUB CLI to fix your boot sequence. This is beyond the scope of this particular tutorial, but instructions are easily found online. I had to do this myself.

Something else that came to mind as I was writing this was to try and see if I can do the same thing using QEMU instead of VirtualBox, which I will also write a tutorial for if I can manage to do it.

Keep in mind that virtualization at the local level can be a bit tricky and resource-intensive. It’s also one of the rare things that can completely freeze up your system and force you to reboot it — that’s called a kernel panic.

Elon Musk Keeps Spreading a Very Specific Kind of Racism

If nothing else positive comes out of his acquiring Twitter, it will at least have provided the public with an opportunity to see how obsessed Elon Musk is with race-related conspiracy theories.  A surprising amount of it is just plain creepy.

Elon Musk Keeps Spreading a Very Specific Kind of Racism (Mother Jones)