Adventures in printing:

The proprietary blob plugin for HPLIP is ported to FreeBSD by literally saying "this Linux library is actually for FreeBSD" and adding a tiny implementation of a couple glibc functions, amazing! But HPLIP is not necessary for my printer, foo2zjs is an open source driver that supports it.

PostScript is not PostScript, apparently. (Actually my printer wants PDF, it seems — setting generic PDF on the client side when network printing over CUPS worked.)

And if CUPS doesn't see the printer when using the open source drivers, it IS a permissions issue, make sure to restart devd to activate the rule that's included with the cups package. (The fact that HPLIP sees the printer is… odd. Was it running HPLIP stuff as root?)

The recent standardization of Encrypted Media Extensions by the W3C isn't actually a big deal. EME was already used in production with multiple independent implementations (which is a W3C requirement). Before that, Flash and Silverlight provided similar things. Worse, some video services used (and still use) custom NPAPI plugins to protect their content.

And yet, a lot of people on several link discussion websites posted ridiculous slippery slope doomsday scenarios. Like, now, NOW the Web will be no longer open and free, full of DRM for everything, even news articles will be DRM'd, and proprietary software will run in the browsers instead of "open" scripts (that you can View Source), and someone even seriously suggested that browsers might stop playing non-DRM content.

How come this never happened when Flash was extremely popular and included DRM capabilities? ;-) It's as if no one except for movie studios actually wants to use DRM.

Also, there's this innovative technique for proprietary software on the web. Actually it existed since forever and it's called… doing the interesting things on the server side.

Recent discovery: forwarding serial ports over the network is pretty easy. Useful for embedded development!

For example, if you're working with an ESP8266 SDK in a Linux VM, but the device is attached to a FreeBSD machine: run something like doas python2 ~/rfc2217_server.py -p 8266 /dev/cuaU0 on the host and use something like rfc2217://192.168.1.2:8266 as the --port argument to esptool.

(Yeah, use that script. Other RFC2217 implementations don't seem to support binary mode for some reason.)

Polymer 3.0 is pretty exciting! R.I.P. HTML Imports.

Paper elements were automatically converted to ES Modules… except for the deprecated neon-animation, which is a dependency of paper-dialog and some others. Hopefully this will be solved soon. micro-panel is a heavy user of paper-dialog! :D

Also, a new interesting thing by the Polymer team is lit-html, which is not yet actually integrated with Polymer…

Moving VMs from VirtualBox to Client Hyper-V

I've decided to move the VMs on my desktop from VirtualBox to Microsoft Hyper-V. Because reasons.

Actually because I've upgraded my desktop to an AMD Ryzen CPU: first, AMD-V/SVM is not supported by the Intel HAXM thing from the Android SDK, so I wanted to try out Microsoft's Hyper-V based Android "emulator" (VM configurator/runner thingy) instead. Second, giving 16 virtual CPUs on an SMT 8-core to a FreeBSD guest in VirtualBox results in a weird performance issue. (Though giving 4 vCPUs to multiple VMs on a 4-core CPU worked fine.) Third, it's Oracle VM VirtualBox and no one likes Oracle.

So, here's how you can do it as well.

How to get Hyper-V

You need Windows 10 Pro, Enterprise or Education. (Or Windows Server, obviously.) Just enable it as a feature and restart.

Alternatively, installing the MS Android "emulator" automatically enables it.

How to migrate a VM (FreeBSD, Linux or Windows with EFI)

(NOTE: older versions of FreeBSD apparently had some loader issue that prevented EFI boot in Hyper-V. Everything works for me on a recent build of 11-STABLE.)

In VirtualBox, go to the Virtual Media Manager (Ctrl+D) and copy your disk as VHD. In the Hyper-V Manager, use the Edit Disk dialog to convert the VHD to VHDX.

If you haven't done that yet, go to the Virtual Switch Manager and make a virtual switch ("External" is like bridge mode in VBox).

Now make a virtual machine. Generation 2, no dynamic memory (FreeBSD doesn't support that), select the virtual switch and the VHDX disk.

Click Connect and it should just work.

By the way, it's nice that you can always close the console window without powering off the VM, unlike in VirtualBox where you need a special "Detachable start".

Interestingly, if you create the VM without a disk and attach the disk later, you won't see "boot from hard drive" in the firmware / boot order settings. And there's no add button! (WTF?) The fix is to use PowerShell:

$vm = Get-VM "YOUR VM NAME"
Set-VMFirmware $vm -FirstBootDevice (Get-VMHardDiskDrive $vm)

Speaking of which, it's nice to have a directly integrated PowerShell interface to all the things. My little xvmmgr script was initially written for VirtualBox, and that required COM.

How to migrate a VM (other OS)

Well, a similar process, but use Generation 1.

My experience so far

Client Hyper-V has pleasantly surprised me. It's a very smooth experience: it looks like a Type 2 hypervisor even though it's actually Type 1, it runs VMs without any performance issues… what else could you ask for?

Well, the downside is its lack of flexibility in terms of paravirtualized (MS calls them "synthetic" or something) vs emulated devices.

All you get is the choice between two generations. Generation 1 means legacy BIOS boot from an emulated IDE drive with emulated all the things plus optionally some paravirtualized devices like the NIC. Generation 2 means EFI boot from a SCSI drive with paravirtualized everything. Oh and the SCSI controller is also on the vmbus. So there's no way to use EFI and SCSI with e.g. OpenBSD, you need full Hyper-V support for at least the disk and network to do that. Thankfully Microsoft contributed that support to FreeBSD! :)

Camera LGE Nexus 5X Photo parameters 1/24 ƒ/2.0 ISO 539 Software bullhead-user 7.1.2 N2G47W 3938523 release-keys

My desktop has Ryzen! :D

Interestingly, it runs my 2400 rated DDR4 sticks at 3200. Not super tight timings (CL18-19-19-37 1T) but pretty good for Hynix memory. My previous system, non-K Skylake, couldn't run it above ~2450.

I went to pull the gadgetbridge repo today and look at this shit. Someone issued a DMCA takedown because "reverse engineering of my work or sharing images from my work is strictly forbidden"?! Fuck off asshole, you can't copyright that. Apparently the reverse engineering is bluetooth logs. What a dick.