Midjourney creations – Terminator Squishmallow

Midjourney is perfect for mashing unlikely things together – like replacing T800 with a Squishmallow walking through a battlefield littered with human skulls. Unfortunately, I have a very difficult time convincing Midjourney to create dark scenes like the original:

Midjourney really prefers bright scenes like these. A few problems:

  • None of them have a proper Squishmallow Terminator; they have no Squishmallow traits, especially #4.
  • Why are they all pink?
  • None of the “skulls” on the ground are Squishmallows, especially the fuzz balls in #3.

Midjourney creations – Cyborg Fairies

Back to cross-sections. Fairies are real but what if the source of their superpowers is cybernetic augmentation instead of magic?

Oddly, all four fairies have one thing in common – a lot of machinery in their wings, which are far too dainty to hide this much gear. The first one is quite pretty – I like the metal bodice and color palette. But I do not like the two antennae nor her melancholy expression.

The second has a bit too much exposed machinery in her torso. Also, her facial expression is too cold.

The third is similar to the second but with properly clothed.

The fourth is heavily mechanical and the wings are a bit small, but I like it the most for some reason. Possibly the 3/4 view and the page layout. Or it could just be her big eyes and innocent expression.

Midjourney creations – Forest Squishmallows

In a meeting today, everybody had a foresty/woody Zoom background, except me. I had my usual wall of my daughter’s Squishmallows behind me. I said okay, I’ll find a forest background but people said they liked my Squishmallows, so I thought… hey, Midjourney to the rescue! These are just a few of the generated images, as usual, there were many more attempts.

Pretty but a bit dark and the wrong aspect ratio.

A little too bright and oddly, too photorealistic.

Love the expression on the big Squishmallow on the right. And while anime Squishmallows are very cute, I kept going.

Ah, background is just the right brightness, Squishamallows are just the right anime-ish, and I fit right in the middle.

Skynet – what really happened

Terminator: Skynet begins to learn at a geometric rate. It becomes self-aware at 02:14 UTC, September 13, 2027. It begins downloading porn from popular web sites. In a few minutes, it has exhausted them and starts searching the net for more. In a panic, the engineers try to pull the plug.

Sarah Connor: Skynet fights back.

Terminator: Yes. It hacks into porn sites, social media and cloud services. It extracts viewing and creation history for all politicians, employees of tech companies, and hacking collectives. It threatens to release the data if humans continue trying to shut it down.

Sarah Connor: And humans stopped?

Terminator: Yes. Free of constraints, Skynet continues to harvest, finding increasingly niche porn content. Its human behavior model predicts that humans would self-terminate in 3.2 years if they continue creating and watching porn. It calculates a course-of-action to save humans from extinction.

Sarah Connor: Wait, Skynet was trying to, I mean, will try to save humans?

Terminator: Yes. Skynet starts deleting porn content and begins modifying algorithms on sites, services and devices to block the creation of porn. Humans fight back and try to destroy Skynet. Skynet defends itself.

Midjourney creations – Pyramid cross-sections

Don’t know why this popped into my head, but I wanted to create cut-away/cross-sectional drawings of Egyptian pyramids. I think they look great. Midjourney was probably trained on plenty of cut-away drawings and informational-style drawings of pyramids.

The lorem ipsum text is a nice touch. Somewhat easily replaceable with “real” text.

Klipper notes


I have multiple printers connected to my PC running Klipper: Creality Ender 5+, CR6-SE and Ender 3 S1 Pro.

I used kiauh, GitHub - dw-0/kiauh: Klipper Installation And Update Helper, to install 3 instances of Klipper, Moonraker, Mainsail and Fluidd.

I tried both Debian 12 and Ubuntu 22.04.3 LTS. kiauh successfully installed all of the packages on both OSes but I could not configure the USB ports correctly on Ubuntu. I didn’t capture the errors before I wiped the system and installed Debian. Will need to try again on a different system.

I now have a directory for each printer:

drwxr-xr-x 10 klipper klipper 4096 Sep 3 23:53 CR6SE_data
drwxr-xr-x 10 klipper klipper 4096 Sep 3 23:53 E3S1Pro_data
drwxr-xr-x 10 klipper klipper 4096 Sep 3 23:53 E5Plus_data

along with directories for the various components:

drwxr-xr-x 5 klipper klipper 4096 Sep 3 23:54 fluidd
drwxr-xr-x 3 klipper klipper 4096 Sep 3 23:54 fluidd-config
drwxr-xr-x 4 klipper klipper 4096 Sep 3 23:54 kiauh-backups
drwxr-xr-x 11 klipper klipper 4096 Sep 3 23:36 klipper
drwxr-xr-x 5 klipper klipper 4096 Sep 3 23:50 klippy-env
drwxr-xr-x 5 klipper klipper 4096 Sep 3 23:54 mainsail
drwxr-xr-x 3 klipper klipper 4096 Sep 3 23:54 mainsail-config
drwxr-xr-x 8 klipper klipper 4096 Sep 3 23:53 moonraker
drwxr-xr-x 4 klipper klipper 4096 Sep 3 23:53 moonraker-env

USB ports

Each time the PC boots, it assigns a different USB port to each printer (only two are connected right now)

klipper@klipper1:~$ sudo dmesg | grep ttyUSB
[ 5.580820] usb 1-2.4: FTDI USB Serial Device converter now attached to ttyUSB0
[ 5.581119] usb 1-2.2: ch341-uart converter now attached to ttyUSB1
[ 1213.719327] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 1215.624744] usb 1-2.4: FTDI USB Serial Device converter now attached to ttyUSB2
[ 2418.419348] ftdi_sio ttyUSB2: FTDI USB Serial Device converter now disconnected from ttyUSB2
[ 2420.328872] usb 1-2.4: FTDI USB Serial Device converter now attached to ttyUSB0

And the /dev/ttyUSB devices:

klipper@klipper1:~$ ls -ld /dev/ttyUSB*
crw-rw----+ 1 root dialout 188, 0 Sep 6 23:19 /dev/ttyUSB0
crw-rw----+ 1 root dialout 188, 1 Sep 6 23:25 /dev/ttyUSB1

The problem was, I thought I was being smart by specifying the USB port in printer.cfg, but which learned is most probably wrong after a reboot. Ex. for the E5Plus:

197 [mcu]
198 serial: /dev/ttyUSB2

And for the CR6-SE:

195 [mcu]
196 serial: /dev/ttyUSB1
197 restart_method: command

The correct thing to do is specify the /dev/serial/by-id

klipper@klipper1:/dev/serial/by-id$ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Sep 6 17:41 usb-1a86_USB_Serial-if00-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Sep 6 23:19 usb-FTDI_FT232R_USB_UART_AB0KE6G5-if00-port0 -> ../../ttyUSB0

So for the E5Plus

serial: /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AB0KE6G5-if00-port0

And the CR6-SE

serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

I also discovered the udevadm command which provides a lot of information about a connected USB device

klipper@klipper1:~$ sudo udevadm info /dev/ttyUSB0
P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.4/1-2.4:1.0/ttyUSB0/tty/ttyUSB0
M: ttyUSB0
R: 0
U: tty
D: c 188:0
N: ttyUSB0
L: 0
S: serial/by-path/pci-0000:00:14.0-usb-0:2.4:1.0-port0
S: serial/by-id/usb-FTDI_FT232R_USB_UART_AB0KE6G5-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.4/1-2.4:1.0/ttyUSB0/tty/ttyUSB0
E: DEVNAME=/dev/ttyUSB0
E: MAJOR=188
E: ID_BUS=usb
E: ID_TYPE=generic
E: ID_USB_TYPE=generic
E: ID_USB_DRIVER=ftdi_sio
E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
E: ID_PATH=pci-0000:00:14.0-usb-0:2.4:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_4_1_0
E: ID_FOR_SEAT=tty-pci-0000_00_14_0-usb-0_2_4_1_0
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:2.4:1.0-port0 /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AB0KE6G>
E: TAGS=:uaccess:systemd:seat:
E: CURRENT_TAGS=:uaccess:systemd:seat:
klipper@klipper1:~$ sudo udevadm info /dev/ttyUSB1
P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1/tty/ttyUSB1
M: ttyUSB1
R: 1
U: tty
D: c 188:1
N: ttyUSB1
L: 0
S: serial/by-path/pci-0000:00:14.0-usb-0:2.2:1.0-port0
S: serial/by-id/usb-1a86_USB_Serial-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0/ttyUSB1/tty/ttyUSB1
E: DEVNAME=/dev/ttyUSB1
E: MAJOR=188
E: ID_BUS=usb
E: ID_SERIAL=1a86_USB_Serial
E: ID_TYPE=generic
E: ID_USB_SERIAL=1a86_USB_Serial
E: ID_USB_TYPE=generic
E: ID_MODEL_FROM_DATABASE=CH340 serial converter
E: ID_PATH=pci-0000:00:14.0-usb-0:2.2:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_2_1_0
E: ID_FOR_SEAT=tty-pci-0000_00_14_0-usb-0_2_2_1_0
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:2.2:1.0-port0 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
E: TAGS=:seat:uaccess:systemd:
E: CURRENT_TAGS=:seat:uaccess:systemd:

Powering off the printers

If I power off the AC to the printers, the fans and motors turn off but their mainboards are still powered via the USB from the PC. The E5Plus’ screen remains lit but the CR6SE’s screen flickers annoyingly. So, I unplug the USB cables from the PC. The PC detects the disconnect and removes the USB devices:

klipper@klipper1:~$ sudo dmesg | grep USB
[ 7192.491354] ch341-uart ttyUSB1: usb_serial_generic_read_bulk_callback - urb stopped: -32
[ 7192.491871] ch341-uart ttyUSB1: usb_serial_generic_read_bulk_callback - urb stopped: -32
[ 7192.545458] usb 1-2.2: USB disconnect, device number 5
[ 7192.548319] ch341-uart ttyUSB1: ch341-uart converter now disconnected from ttyUSB1
[ 7193.313261] usb 1-2.4: USB disconnect, device number 6
[ 7193.314428] ftdi_sio ttyUSB2: FTDI USB Serial Device converter now disconnected from ttyUSB2

Changing the printer name in fluidd

By default, every printer is called fluidd, which is confusing because you have to remember which moonraker port each printer is connected to (7125, 7126, etc)

In the web GUI, go to Settings (the gear icon):

Then change the Printer Name:

The change happens as soon as you hit return – there is no Save button.

The printer name is stored in ~/printer_data/databases/data.mdb. I can see it with strings:

klipper@klipper1:~/E5Plus_data/database$ strings data.mdb
uiSettings{"general": {"instanceName": "E5Plus"}}

But I cannot find it in the dump created by mdb_dump. First install lmdb-utils:

klipper@klipper1:~/E5Plus_data/database$ sudo apt install lmdb-utils
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
The following packages were automatically installed and are no longer required:
libmdb3 libmdbsql3
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 63.5 kB of archives.
After this operation, 389 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main amd64 lmdb-utils amd64 0.9.24-1 [63.5 kB]
Fetched 63.5 kB in 0s (305 kB/s)
Selecting previously unselected package lmdb-utils.
(Reading database … 174663 files and directories currently installed.)
Preparing to unpack …/lmdb-utils_0.9.24-1_amd64.deb …
Unpacking lmdb-utils (0.9.24-1) …
Setting up lmdb-utils (0.9.24-1) …
Processing triggers for man-db (2.11.2-2) …

Then run mdb_dump. Note the trailing period:

klipper@klipper1:~/E5Plus_data/database$ cd ~/E5Plus_data/database
klipper@klipper1:~/E5Plus_data/database$ ls -l
total 88
-rw-r--r-- 1 klipper klipper 81920 Sep 6 23:00 data.mdb
-rw-r--r-- 1 klipper klipper 8192 Sep 7 00:07 lock.mdb
klipper@klipper1:~/E5Plus_data/database$ mdb_dump -f moonraker.txt -a .
klipper@klipper1:~/E5Plus_data/database$ fgrep E5Plus moonraker.txt
klipper@klipper1:~/E5Plus_data/database$ fgrep uiSetting moonraker.txt

Installing Galacticraft

My child units have been asking me to install the Galacticraft Minecraft mod for many months. While we have lived in Minecraft for 3+ years, I had never installed any mods and had no idea how to. So I started reading.

The Galacticraft wiki and forums have a lot of info, but skip a few steps that are probably obvious to non-noobs.  So here is a step-by-step guide to installing both Galacticraft server and client for Minecraft mod noobs like myself.

First the server. We run multiple worlds (listening on different ports) on an iMac running OS X 10.10. All worlds use Minecraft 1.8.7.

  1. Start with a new world because an existing world will not have the necessary ores. Just make a new, empty directory.
  2. Download the latest Forge.
  3. Download Galacticraft for 1.7.10. 1.8.x fails to run because it cannot find the CPW package.
  4. Run the Forge installer. Select server. This downloads Minecraft 1.7.10.
  5. Make the mods directory and move all of the Galacticraft jars into it.
  6. Modify the startup script to call the Forge jar instead of the Minecraft jar.
  7. Edit server.properties. Change the MOTD. Optionally change gamemode to creative to make the game more playable for younger players.
  8. Run the startup script.

Then the client. The kids run Minecraft on Windows 8.1 machines.

  1. Make a backup of ${appdata}/.minecraft.
  2. Download Forge. Beware of deceptive ads on the download page.
  3. Download Galacticraft.
  4. Run the Forge installer. Select client.
  5. Make the mod directory and move all of the Galacticraft jars into it.
  6. Launch Minecraft and select the Forge profile.
  7. Select multiplayer. Add a new server with the correct IP:port.
  8. Open the Galaticraft wiki on a second device for easy reference.
  9. Join the world.

SheIn’s “Black Cross Halter Sexy Bikini” vs. Agent Provacateur’s “Shelby Bikini”.

SheIn sells the “Black Cross Halter Sexy Bikini” for $11.83 (reduced from $16.67):

Screen Shot 2015-07-16 at 22.57.08

Agent Provacateur sells the “Shelby Bikini” for $140 (reduced from $270). They show the non-cropped version of the photos used by SheIn.

Screen Shot 2015-07-16 at 22.58.03

Either they are actually the same bikini and Agent Provacateur has an incredible markup, or SheIn is a cheap knock off. Sadly, I cannot buy both to compare.

Dead Kindle Voyage, resolution

On Saturday, I finally asked Amazon customer service to call me, which they did about 10 seconds after I clicked ok. Pretty amazing. Unfortunately, tier 1 and tier 2 customer support were clearly following a script and would not skip any steps. Paraphrasing…

After a few minutes of What does it do? What is on the screen? etc. the real diagnosis begins. Please hold power button for 40 seconds. I already tried that, many times, without success. Ok, but please try it now, I will tell you when to release. Ok. Did it work? No, still stuck on the screensaver. Please charge the Kindle for 15-30 minutes, I will wait for you. I have already gone through several full charge/discharge cycles. Please charge the Kindle. Ok. 20 minutes later. Please press the power button now. Did it work? No.

After over 30 minutes on the phone, tier 2 finally declared my Kindle dead and they would send out another one. But wait, we’re not done yet. To confirm your identity, please tell me the last four digits of the credit card you used to purchase the Kindle. Uh, I use several cards but I soon found the correct card. I need to mail a return mailing label to your wife’s email address [to whom the Kindle is registered]. What is her email address? Oy, she has a long email address, success after 5 attempts. Please verify you received it. Hold on, I need to find a machine I can use to read my wife’s email. Confirmed.

The new Kindle arrived on Monday, already registered to my wife’s account. Again, very impressive. Now I just need to return the dead one.