Thursday, October 26, 2023

Thunderbird - Red Exclamation Mark on Recipient Address in Compose


Red exclamation mark next to an email address in the compose box. Originally I copied the email address from OSTicket. It looked like this "" with bold on the "t". This was the invalid character. Strange because now I can't reproduce it.


There's a non-windows character in the name somewhere. Try typing the name in directly vs copying and pasting the address from another program.


Orange PI Zero 3 - Initial Set Up, DDNS, and WireGuard Configuration



This is a multipart article wrapped into one. We'll use the Orange PI Zero 3 as a DDNS update client, Pi-hole server, and as a WireGuard server. This will assume you've read and setup the pi already. (INSERT ARTICLE HERE ABOUT GENERAL SETUP). We'll load some cool tools for administering the network as well.

This entire thing started when you could no longer buy a Raspberry PI for $35.

Usually NVR camera systems will include some sort of dynamic dns service or allow you to use your own update URL. I had the "pleasure" of working on a Speco NVR unit. If you've never heard of them stay away, they're akin with the no name systems sold in big box stores. Five minutes with this thing and you'll want to throw it out a window. There's tons of standard features that are nowhere to be found on these units. I've seen cheaper noname brands that include more functionality.

This particular Speco VX NVR only includes their own ddns service (which does not work) and contains no alternative options. They do not give you the option to use popular services such as "no-ip" or "dyndns". Usually you can get away with using the "dyndns" update url with your own service. Nope, not this time.

In comes the Raspberry PI, great idea but still (10/2023) ridiculously overpriced by scalpers, so this is a no go. Orange PI looks like a viable alternative on paper at a quarter of the cost and is currently in stock.

I'm using the Orange PI Zero 3 for this (tested with 1 & 2gb version). Amazon had them delivered the same day.

Since there are no commercial cases available I have modified another design to include a spot for velcro and or hidden drywall screws. I've also modified it to take the el cheapo Amazon stainless metric socket cap screws that have a splined design on the cap side. My local hardware store has the smooth side version (18-8) which is why they fit easily on the first print.

I can only find two types socket cap screws from McMaster-Carr that fit the bill for this design. One has a smooth side and is labeled " 18-8 Stainless Steel Socket Head Screws" and the other " Super-Corrosion-Resistant 316 Stainless Steel Socket Head Screws" is overkill for this design but I suspect it's what the Chinese have sloppily copied and are reselling on Amazon.

I believe the original designer of this case used the CAD files in Fusion 360 of the 18-8 screws and not a physical measurement of the Amazon specials.

I'm in the process of redesigning this case from the ground up to make the installation easier.

Monday, October 23, 2023

Windows 10 & 11 - Show WiFi Password for Specific SSIDs


Use CMD or Terminal to show the saved wifi password of previously connected and remembered SSID's on Windows 10 or 11.

Command Syntax:

List all wifi profiles on current machine:

netsh wlan show profiles

Show wifi password for specific SSID:

netsh wlan show profile name=WIFI-NAME key=clear

If there’s spaces in the wifi name, enclose the name in parenthesis:

netsh wlan show profile name="WIFI NAME WITH SPACES" key=clear


Sunday, October 22, 2023

Orange PI Zero 3 - How to Default U-Boot Environmental Variables + Help Output


U-Boot shenanigans. While playing around with VxWorks images I figured I better have a copy of this in case something goes wrong. Little did I know at the time that the OS image would reset all the variables back to normal after the first boot. I kept the post in case someone wants the default output or help command output as a reference.

*The serial connection on the Orange PI Zero 3 (MicroSD port at top) from left to right is GND, RX, TX.

*If you default the boot variables or you screw something up, insert a MicroSD card with "Orangepizero3_1.0.2_debian_bookworm_server_linux6.1.31" burned to it and boot it. This should set the env variables again.

Here's the output of the "env" command:

=> env
env - environment handling commands

env default [-f] -a - [forcibly] reset default environment
env default [-f] var [...] - [forcibly] reset variable(s) to their default values
env delete [-f] var [...] - [forcibly] delete variable(s)
env edit name - edit environment variable
env exists name - tests for existence of variable
env export [-t | -b | -c] [-s size] addr [var ...] - export environment
env import [-d] [-t [-r] | -b | -c] addr [size] [var ...] - import environment
env print [-a | name ...] - print environment
env run var [...] - run commands in an environment variable
env save - save environment
env set [-f] name [arg ...]


How to Default the Boot Environment Variables:
  1. Pull the MicroSD card from the PI.
  2. Type "reset".
  3. Hit the space bar to interrupt boot.
  4. Type "env default -a".
  5. Type "reset".
  6. Hit the space bar to interrupt boot.
  7. Type "printenv" and it should look like the following:
=> printenv
bootcmd=run distro_bootcmd

Environment size: 62/131068 bytes

After booting "Orangepizero3_1.0.2_debian_bookworm_server_linux6.1.31":

boot_normal=sunxi_flash read 45000000 boot;bootm 45000000
boot_recovery=sunxi_flash read 45000000 recovery;bootm 45000000
bootcmd=run setargs_nor boot_normal
setargs_mmc=setenv  bootargs earlyprintk=${earlyprintk} initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} rootwait init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} selinux=${selinux} specialstr=${specialstr} gpt=1
setargs_nand=setenv bootargs earlyprintk=${earlyprintk} initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nand_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} selinux=${selinux} specialstr=${specialstr} gpt=1
setargs_nor=setenv bootargs  earlyprintk=${earlyprintk} initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nor_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} selinux=${selinux} specialstr=${specialstr} gpt=1
snum=REMOVED (19 characters)

U-Boot Help Menu:

?       		- alias for 'help'
base    		- print or set address offset
bdinfo  		- print Board Info structure
boot    		- boot default, i.e., run 'bootcmd'
bootd   		- boot default, i.e., run 'bootcmd'
bootm   		- boot application image from memory
bootp   		- boot image via network using BOOTP/TFTP protocol
cmp     		- memory compare
coninfo 		- print console devices and information
cp      		- memory copy
crc32   		- checksum calculation
echo    		- echo args to console
editenv 		- edit environment variable
efex    		- run to efex
env     		- environment handling commands
erase   		- erase FLASH memory
fastboot		- fastboot - enter USB Fastboot protocol
fatinfo 		- print information about filesystem
fatload 		- load binary file from a dos filesystem
fatls   		- list files in a directory (default /)
fatsize 		- determine a file's size
fatwrite		- write file into a dos filesystem
fdt     		- flattened device tree utility commands
flinfo  		- print FLASH memory information
go      		- start application at address 'addr'
gpt     		- GUID Partition Table
help    		- print command description/usage
i2c     		- I2C sub-system
itest   		- return true/false on integer compare
loadb   		- load binary file over serial line (kermit mode)
loads  			- load S-Record file over serial line
loadx   		- load binary file over serial line (xmodem mode)
loady   		- load binary file over serial line (ymodem mode)
loop    		- infinite loop on address range
md      		- memory display
memtester		- start application at address 'addr'
mm      		- memory modify (auto-incrementing address)
mmc     		- MMC sub system
mmcinfo 		- display MMC info
mw      		- memory write (fill)
nfs     		- boot image via network using NFS protocol
nm      		- memory modify (constant address)
pbread  		- read data from private data
poweroff		- Perform POWEROFF of the device
printenv		- print environment variables
protect 		- enable or disable FLASH write protection
pst     		- read data from secure storageerase flag in secure storage
reset   		- Perform RESET of the CPU
run     		- run commands in an environment variable
saveenv 		- save environment variables to persistent storage
setenv 			- set environment variables
setexpr	 		- set environment variable as the result of eval expression
sleep   		- delay execution for some time
source  		- run script from memory
sprite_test		- do a sprite test
sunxi_axp		- sunxi_axp sub-system
sunxi_card0_probe       - probe sunxi card0 device
sunxi_flash		- sunxi_flash sub-system
sunxi_so		- sunxi_so sub-system
tftpboot		- boot image via network using TFTP protocol
timer_test		- do a timer and int test
timer_test1		- do a timer and int test
uburn   		- do a burn from boot
version 		- print monitor, compiler and linker version


Saturday, October 21, 2023

QuickBooks 2018 through 2024 - Scheduled Backups Not Working? - Fix



Let's start by saying this program sucks and support sucks even more. First there's the language disconnect when speaking to tech support and then when you finally do get your problem across to the agent either the phone gets disconnected or they never relay the problem up to the devs.

Scheduled Backups Failing? Let's Fix that:

Should be straight forward, open QB, create a local backup, schedule it, enter your admin credentials, and QB should start making scheduled backups according to the schedule. Yea well their software is shit and hasn't worked properly since 2018. I'm sure it didn't work properly before that either but 2018 is the earliest I've worked with.

If your user is just that, a user, in Windows, log in as them. You will need a admin account for this (we don't want to setup the backup under the user and then two weeks later have them change their Windows password.

  1. Schedule your backup in QB, close the workbook and exit QB.
  2. Elevate Task Manager and type in your admin credentials.
  3. Find the task. It will look something like, "your business name here12345 1234567890".
Try to run it and you'll see the error below:

As an admin edit the task and enable, "Run with highest privileges" on the first page of the task.

Manually run the task again. You won't see the backup box with progress indicator but if you monitor the folder where you told QuickBooks to store your automatic backups you will see a new file with a date and time slightly behind the current time.


Seriously not a fucking clue why they can't get this backup process right. Intuit if you're reading this, I'd expect a little more value and a fully working program for the money I just spent. $1549.00 That's the Premier Pro base edition marked up $150 from pre 09/31/23 pricing. Prior to that date the base license was $549 and additional licenses up to 5 users was $300/each. That was for QB Premier 2023. They can't even produce a change log of differences nor a justification for the price increase. They're probably trying to annoy the desktop users into jumping ship to the crippled online version.

Now the price for the Desktop 2024 version (which looks identical by the way and seems to function the same way tooπŸ™„), is $949/base + $300 for each additional user up to 5 users total.

I guess someone needed to justify their job over there.


Friday, October 13, 2023

Google Blogger - Manage Uploaded Photos & Videos


This entire blog is running on Google's Blogger but there's some weird quirks that are a pita to work around. One of them is figuring out where your uploaded photos are kept and how to manage them.


The following link ( is a link to the management URL for your photos and videos that have been uploaded to the Blogger platform.

I'm sure this documentation link will change in the future so let's save it to the Wayback Machine for historical reasons ( You're welcome.

Actual Link:

Here's the direct link to the album manager (


JDownloader 2 - Turn off Clipboard Observer aka LinkGrabber



Great app for downloading from but I don't need it picking up every single link I cut/copy while moving around the OS. I only want "LinkGrabber" to pick up what I paste in there.

Turn off Clipboard Observer aka LinkGrabber:

Using JDownloader 2 look for this icon in the main bar at the top and disable it. Toggle it so the checkmark isn't checked.


Tuesday, October 10, 2023

ffmpeg Syntax for NVR Footage



Occasionally from time to time I'm asked to pull video footage from NVR systems and send this off to either the customer or police departments. Honeywell systems will dump this footage as ".asf" files and for some reason it's not playable once directly uploaded to Google Drive. 

You also can't speed up the footage without artifacts starting to appear around 7-10x speed and getting worse with higher speeds around 15x. If re-encoded to the container MKV, it's playable on Google Drive. No clue why and I don't have time to figure it out at the moment. I may come back to this in a future article.

ffmpeg Syntax:

Combine Multiple Files:
  • CMD
  • CD to directory with ASF files to be combined.
  • Create a list of files to be combined and save them to "list.txt".
    • (echo file 'first file.asf' & echo file 'second file.asf' )>list.txt
  • To make things easy, CD to the directory of "ffmpeg.exe".
  • Run ffmpeg, concatenating each file in succession found in "list.txt", and save to a single "output.mp4" file.
    • ffmpeg -safe 0 -f concat -i C:\temp\list.txt -c copy output.asf
      • C:\temp\list.txt references must exist in C:\temp\
      • output.asf is generated in ffmpeg directory
      • make output file extension same as input then convert to MKV in Handbrake
      • can be .asf, .mp4, or mkv

Convert MP4 to MKV Container:
  • Change the input file and output file names
    • ffmpeg -i "INPUT FILE.mp4" "OUTPUT FILE.mkv"