Dot Zip Domains Considered Harmful

So… it appears that Google, in their infinite wisdom stupidity, has bought and launched the top level domain ‘zip’ and thus introduced such wonderful domains as ‘https://details.zip’, ‘http://taxforms.zip’ or, as you can see below, ‘https://financialstatement.zip‘. And thus possibly confusing everyone, for ever, all of the time.

But Google is not alone in partaking in this stupidity. ICANN, who should have been on the ball and who already had rules about homophones in UTF domains, seem to have let this slip though without a single thought.

The damned fools.

Building QEMU 7.0 on Raspberry Pi OS

***NEW: Building QEMU 8.0 on Raspberry Pi OS***

The Introduction

And spring 2022 brings us another major release of QEMU – in this case, QEMU 7.0, available in all of its tar.xz’d loveliness directly from qemu.org.

Whilst the Raspberry Pi OS‘s package repository remains the fastest, simplest way to get QEMU onto your Pi, Pi OS’s Debian lineage often leaves it trailing the cutting edge – in the case of QEMU, the packaged release for Raspberry Pi OS (version 2022-04-04) is version 5.2 from way back in December 2020.

QEMU can be installed via the Raspberry Pi OS package manager – or via ‘apt install’ on the command line. Alas, the version offered is several years behind the latest release.

Fortunately, QEMU is fairly easy to download and compile ourselves.

Continue reading

Leaking Pipes with Swift and External Executables

Observed with MacOS 12.4/Xcode 13.4.1/Swift 5

There are quite a lot of tutorials out there covering the basics of running external executables from within Swift and, with very little effort, it’s quite easy to throw together something like this…

import Foundation

let wrappedUname = Process()
wrappedUname.executableURL = URL(fileURLWithPath: "/usr/bin/uname")
wrappedUname.arguments = ["-v"]
let unameOutputPipe = Pipe()
let unameErrorPipe = Pipe()
wrappedUname.standardOutput = unameOutputPipe
wrappedUname.standardError = unameErrorPipe
do{
    try wrappedUname.run()
} catch {
    print("Unexpected error: \(error).")
}
wrappedUname.waitUntilExit()
let unameOutput = String(decoding: unameOutputPipe.fileHandleForReading.readDataToEndOfFile(), as: UTF8.self)
let unameError = String(decoding: unameOutputPipe.fileHandleForReading.readDataToEndOfFile(), as: UTF8.self)
print("Output: " + unameOutput)
print("Error: " + unameError)
Continue reading