Author: dwolven

  • The Exiled Heavy Knight Knows How to Game the System: Halfway Verdict

    Picked this up mostly because there’s not a lot else airing right now. Another “disowned for the wrong class, secretly overpowered” isekai — a premise you’ve seen a dozen times if you watch this stuff at all. What’s carrying it: the animation and the lead.

    Animation. GoHands goes hard on motion — hyper-stylized, constant camera movement, a lot going on per frame. Critics are split hard on this: some found it flat-out hard to watch, others called it the one thing that stands out in a season with forty-plus similar shows. I land in the second camp. It’s doing the heavy lifting for a plot that isn’t reinventing anything.

    Elma. Tanks are usually the dependable background piece, not the lead. This show hands the archetype the hero slot, and it works — his refusal to accept the role everyone assigns him is doing more narrative work than the power-fantasy mechanics around him. Other coverage lands on the same read.

    Pacing. The real problem. Recaps are eating real runtime — one episode-level review flagged nearly four minutes of recap at the top of a single episode, straight-up filler. Episodes are already short; that’s a big bite. Multiple reviews call out the same structural issue: flashbacks and exposition interrupting momentum instead of building it. When the show does slow down for the right reasons — breather episodes, exploration over another fight — it’s clearly got more in the tank than the recap-padded episodes let on.

    Bottom line: great animation and a lead worth rooting for, propping up a familiar skeleton and a pacing problem that’s self-inflicted, not a content shortage. Trim the recaps in the back half and this could be one of the season’s better surprises.

  • News Roundup: August 19–26, 2026

    News Roundup: August 19–26, 2026

    This week’s roundup leans heavily on WordPress plugin security — three separate critical bugs landed in the space of a few days — plus the usual crop of vendor releases for the stack this blog runs.

    • Elementor Pro 4.2.2 fixes an unauthenticated RCE (CVE-2026-32475, CVSS 9.0) in the File Upload form module — any site with a published Elementor form containing a file upload field could have a PHP file dropped and executed with no login and no nonce. The researcher reported it in mid-July and Elementor had a fix ready within a day, but sat on the release for over a month. If you run Elementor Pro forms, don’t assume “recently patched” means “recently disclosed.”
    • Everest Forms patched an unauthenticated file-upload RCE (CVE-2026-19598) affecting over 100,000 sites — a second forms plugin with essentially the same class of bug as Elementor’s this week. If you’re running any form plugin with file-upload fields, this is a good week to audit which ones are actually still needed on your site.
    • TranslatePress 3.3.2 closes a critical, unauthenticated privilege-escalation bug (CVE-2026-19632, CVSS 9.8) that let attackers hijack administrator accounts outright. Combined with the two form-plugin bugs above, it’s been a rough week for WordPress plugin security specifically — worth a pass through your installed plugins if you haven’t updated in a while.
    • WordPress core 7.0.4 is a security-only release fixing an authenticated Author+ remote code execution bug (CVE-2026-65640) on sites running Imagick with Ghostscript. Narrower than the plugin bugs above, but nastier if you accept uploads from non-admin users — don’t wait on auto-updates for this one.
    • nginx 1.31.4 (mainline) / 1.30.4 (stable) patch a heap buffer overflow in the map directive’s regex handling (CVE-2026-42533) and a memory-disclosure bug in ngx_http_slice_module (CVE-2026-60005). Routine but not optional if nginx is sitting in front of anything.
    • Proxmox VE 8 reaches end of life on August 31 — no more security patches after that date, so this is the week to schedule the upgrade to VE 9 if you haven’t already. Separately, Proxmox VE 9.2 shipped official Arm64 support with full KVM/LXC/ZFS/Ceph parity, worth a look if you’re running or considering Arm homelab hardware.
    • Linux 7.2 is out, one of the busier kernel cycles on record at nearly 600,000 lines changed. Also worth noting: Fedora is taking the first concrete step toward restricting AF_ALG, the kernel’s userspace crypto API that’s been the source of several serious bugs this year — check whether anything on your boxes touches it directly before it starts getting locked down upstream.
    • MikroTik shipped RouterOS 7.24.1 stable, a maintenance release with bridge MLAG fixes on CRS8xx switches, VRRP-on-bridge stability improvements, and container host isolation hardening. If your MikroTik box is doing edge routing, it’s an easy hour of maintenance with real payoff.
    • InfluxDB 3.8 (Core and Enterprise) is about operational maturity rather than new query features — proper systemd units on the deb/rpm packages and an official Helm chart for running Enterprise on Kubernetes. Relevant if you’re on the TICK stack for homelab metrics and haven’t looked at the 3.x line yet.
  • Unlocking a Proxmox Guest VM Using the qm Command: A Step-by-Step Guide

    If you’re unable to start, stop, or migrate a Proxmox guest VM because it’s showing as locked, you need to clear that lock using the qm command before you can act on the VM. This usually happens after an interrupted backup, snapshot, or migration leaves a stale lock in place. This article walks through how to unlock a Proxmox guest VM. Skip to the bottom for a TL;DR.

    Step 1: Access the Proxmox shell
    You’ll need shell access to the Proxmox host. Connect over SSH, or use the “Shell” option in the Proxmox web interface for the relevant node.

    Step 2: Identify the guest VM ID
    Run qm list to see all guest VMs on the host along with their IDs and current status.

    Step 3: Check the lock type (optional but recommended)
    Run qm config <VM ID> and look for a lock: line in the output. This tells you what kind of lock is in place (e.g. backup, snapshot, migrate, rollback), which is useful context if the lock keeps coming back — it usually means the underlying job (a backup, for example) is still stuck or failing.

    Step 4: Unlock the guest VM
    Run qm unlock <VM ID>. Note that a locked VM typically can’t be stopped or started normally in the first place — that’s the point of the lock — so this is usually your first real action, not something you do after stopping the VM.

    Step 5: Start or stop the VM as needed
    Once unlocked, you can manage the VM normally: qm start <VM ID> or qm stop <VM ID>.

    Unlocking a Proxmox guest VM with qm unlock is quick, but treat it as a fix for a stuck lock, not routine practice. If a VM keeps re-locking, check what job is putting the lock there (backups are the most common culprit) and address that directly rather than repeatedly clearing the symptom. Keep your login credentials secure, and keep regular backups of your VMs.

    TL;DR:

    To unlock a Proxmox guest VM:

    qm config        # optional: check lock type first
    qm unlock 
    qm start         # or: qm stop 

    Replace <VM ID> with the actual guest VM ID in each command. For LXC containers, use pct in place of qm (e.g. pct unlock <CT ID>) — the commands aren’t interchangeable between VMs and containers.

  • Using Pigz with Tar

    pigz is a drop in multi-threaded replacement for gzip. If you have plenty of cores then it’ll significantly speed things up.

    tar -c --use-compress-program=pigz -f newtarball.tar dir
  • Remove a node from a Proxmox cluster

    Open a shell on one of the working nodes.

    #Get cluster status
    root@pve24:~#pvecm status

    If you don’t have a quorum then it may be necessary to change the number of expected votes. To do that issue the following command(s).

    root@pve24:~#pvecm expected 1

    Remove the node with:

    root@pve24:~#pvecm delnode pve25

    It may be necessary to restart corosync with:

    root@pve24:~#service corosync restart

    Reload the proxmox webgui if the node doesn’t go away and you are all set.

  • Slurping and decoding JSON in Perl

    Lately been doing a bit with JSON as a config file. It is a convenient way to store config variables.

    Procedural/Imperative style (untested, needs error handling, etc):

    #!/usr/bin/perl
    use strict;
    use Path::Tiny qw (path);
    use Data::Dumper;
    use JSON;
    
    my $file = "config/myfile.json";
    my $DATA = decode_json path($file)->slurp_utf8;

    OOP if it floats your boat (untested, needs error handling, etc):

    #!/usr/bin/perl
    use strict;
    use Path::Tiny qw (path);
    use JSON;
    use Data::Dumper;
    
    my $file = "./config/myfile.json";
    my $json = new JSON;
    my $data = Path::Tiny->new($file)->slurp;
    
    print Dumper $json->decode($data);
    print Dumper $data;
    
  • Cron Job for Let’s Encrypt nginx standalone renew Ubuntu

    I run nginx as a reverse proxy for sites that use SSL. Normally I’m doing something a bit strange so it doesn’t quite work having certbot manage my configs. This will renew ssl certs at 3am each morning if needed.

    0  3    * * 1   root    /usr/bin/certbot --standalone renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" > /dev/null 2>&1
  • Getting GeoJson Multipolygon for political units

    Editor’s note (2026): The polygons.openstreetmap.fr tool referenced below has a long history of intermittent outages — if it’s down when you need it, Nominatim’s own export/lookup or the Overpass API are good fallbacks for pulling relation geometry.

    Visit: https://nominatim.openstreetmap.org/ui/ and search for the location.

    Enter in the Location on the search bar

    Select the Details Button on the left for the entity you are interested in.

    Look for the value for the OSM relation id. In this case it is: 5396194.

    Visit the following URL: http://polygons.openstreetmap.fr/index.py and enter in the OSM relation id from above. You can use on eof the original geometries selected or generate a simplified version by setting the value of X to 0 and submitting. Then click on the geoJSON link.

    The geoJSON can then be imported into your database of choice such as:

    INSERT INTO table set gis = ST_GEOMFROMGEOJSON('{"type":"MultiPolygon","coordinates":[[[[-77.13,38.93],[-77.04,39.01],[-76.91,38.91],[-76.9,38.88],[-76.93,38.87],[-77.03,38.78],[-77.05,38.78],[-77.06,38.83],[-77.05,38.86],[-77.13,38.93]]]]}');
  • ext4 partition resize

    Editor’s note (2026): the original version of this post used `xfs_growfs`, which is for XFS filesystems, not ext4 — mismatched with the title. Corrected below: `resize2fs` is the ext4 equivalent.

    Never fails, I have to look it up every time. The sort though blogs, posts and generally bad information.

    For ext4:

    lvextend -l +100%FREE /dev/vg/lv_root
    resize2fs /dev/vg/lv_root
    

    For XFS, the equivalent is:

    lvextend -l +100%FREE /dev/vg/lv_root
    xfs_growfs /mount/point
    
  • Static Netplan template Ubuntu 20.04

    Editor’s note (2026): `gateway4` shown below is deprecated in current Netplan releases — it still works but throws a deprecation warning. The current-style syntax is a `routes:` block instead. Both are shown here.

    I like to leave a dhcp server up so that when I spin up a virtual machine to tinker with it’ll grab that IP and I’ll be on my marry way.

    If in the event that I want to later statically assign it (the ip) just use the following template and adjust.

    Older / still-working style (deprecated):

    network:
      ethernets:
        ens18:
          addresses:
          - 172.16.0.2/24
          nameservers:
            addresses:
            - 172.16.0.2
            - 8.8.8.8
            search:
            - domain.com
          gateway4: 172.16.0.1
      renderer: networkd
      version: 2

    Current-style syntax using a routes block instead of gateway4:

    network:
      ethernets:
        ens18:
          addresses:
          - 172.16.0.2/24
          nameservers:
            addresses:
            - 172.16.0.2
            - 8.8.8.8
            search:
            - domain.com
          routes:
          - to: default
            via: 172.16.0.1
      renderer: networkd
      version: 2