How to test AA and AAA batteries using a multimeter

I have a drawer full of spare AA and AAA batteries. Some are fresh, some are from remote controls that died last winter, some I found in a toy. Before tossing them or putting them to use, I check the voltage with a multimeter. It takes thirty seconds and saves you from guessing. What you need A cheap multimeter is all you need. Any digital one will do — I’ve used the same £8 model from Amazon for years. The probes should be intact and the battery in the multimeter itself should have charge (if it beeps when you turn it on, you’re good). ...

29 September 2025 · 3 min · 545 words · Shafiq Alibhai

Iceraven and Ironfox browser comparison

Both are Firefox forks for Android. Both strip out telemetry. They diverge on what to do after that. Iceraven is built around customisation. It exposes about:config, supports a wider range of add-ons than stock Firefox for Android, and tries to replicate the desktop Firefox experience on mobile. Updates come through GitHub releases. It’s aimed at people who want to tweak their browser. IronFox comes from Mull, which itself is a privacy-hardened Firefox fork. It removes more telemetry than Iceraven, disables features that leak data by default (WebGL, for example), and keeps the interface stripped down. It’s on F-Droid and Accrescent as well as GitHub. The trade-off is that some websites break because of the aggressive defaults. ...

29 September 2025 · 1 min · 138 words · Shafiq Alibhai

'How To Get BIOS Serial Numbers On Linux'

The quickest way to get a BIOS serial number on Linux: sudo dmidecode -s system-serial-number That’s usually all you need. dmidecode reads the DMI/SMBIOS table and prints the serial number directly. Other options If dmidecode isn’t available or doesn’t return what you need: # lshw sudo lshw -C bios | grep serial # /sys class interface (no sudo needed) cat /sys/class/dmi/id/product_serial The /sys/class/dmi/id/ path is the cleanest option if you want to avoid sudo. It exposes several DMI fields: ...

25 November 2024 · 1 min · 153 words · Shafiq Alibhai

Self-hosted services worth running on your homelab

I’ve been running a small homelab for a few years now, mostly just to tinker and escape the subscription treadmill. Over time I’ve collected a bunch of services that actually earn their keep, and this is a running list of the ones I’d recommend to someone starting out or looking to fill gaps in their setup. Nothing fancy. Just stuff that works, runs quietly, and gives you back control of your own data. ...

1 April 2024 · 6 min · 1165 words · Shafiq Alibhai

Shrinking PDFs with Ghostscript on the command line

I needed to shrink a PDF last week — something I don’t do often enough to remember the flags. Ghostscript is the tool, and it’s already on most Linux machines or a quick apt install ghostscript away. The command is: gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf The bit that actually matters is -dPDFSETTINGS=/screen. That’s the quality dial. /screen gives you the smallest file — fine for emailing or uploading, rubbish if you need to print anything. ...

1 April 2024 · 2 min · 251 words · Shafiq Alibhai

How I set up a data pipeline that actually works

I spent three months building a data pipeline last year and another two months fixing the things I got wrong. What follows is the architecture I ended up with, and more importantly the decisions that shaped it. Where the data comes from We pull from three kinds of sources. Internal databases, mostly PostgreSQL instances running on our own infrastructure. Third-party APIs for things we don’t control, like payment providers and analytics platforms. And CSV files that land in an S3 bucket whenever someone exports a report from a legacy system that nobody knows how to update. ...

1 March 2024 · 4 min · 760 words · Shafiq Alibhai

Shutdown Proxmox VM using CLI

SSH into the Proxmox host and run: qm shutdown <VMID> This sends an ACPI shutdown signal to the guest OS for a graceful shutdown. To find the VM ID: qm list If the VM doesn’t respond to the shutdown signal, force it: qm stop <VMID> qm stop is equivalent to pulling the power cable. Use it only when qm shutdown hangs.

17 October 2023 · 1 min · 61 words · Shafiq Alibhai

Learn Ansible

Ansible manages remote machines over SSH. No agents needed. You write playbooks in YAML that describe what the target state should be, and Ansible makes it happen. SSH setup Generate a key pair on the control node and copy it to your targets: ssh-keygen -t rsa ssh-copy-id username@target_host Inventory An inventory file lists your hosts and groups them: # my_inventory.ini [web] 192.168.1.2 [db] 192.168.1.3 You can also use dynamic inventory scripts that output JSON. ...

8 September 2023 · 2 min · 316 words · Shafiq Alibhai

How to count words in a PDF from the Linux command line

The simplest approach: pdftotext input.pdf - | wc -w pdftotext is in the poppler-utils package (sudo apt install poppler-utils or sudo yum install poppler-utils). The - sends output to stdout instead of a file. Other options pdfminer: pdf2txt.py input.pdf | wc -w Install with pip install pdfminer.six. Python with PyPDF2: import PyPDF2 with open("input.pdf", "rb") as f: reader = PyPDF2.PdfReader(f) total = sum(len(page.extract_text().split()) for page in reader.pages) print(total) Note: PyPDF2’s PdfFileReader and getPage() are deprecated in newer versions — use PdfReader and index into reader.pages instead. ...

5 September 2023 · 1 min · 132 words · Shafiq Alibhai

Install psql on macOS with Homebrew

brew install libpq brew link --force libpq psql --version libpq includes psql and other PostgreSQL client utilities. The brew link --force step symlinks the binaries into your PATH so psql is available from any terminal. If you don’t have Homebrew installed yet: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

26 July 2023 · 1 min · 47 words · Shafiq Alibhai