Besides 5.25 inch, 3.5 inch, and cassette’s
Here are some old storage carriers i found in my collection













Update: 20220514 – Vic Graf cartridge and more







Manual : https://archive.org/details/VIC_Graf_1982_Commodore/page/n11/mode/2up
I’ve got a load of cartridges, some of them i tested:
When running scripts which take a long time, i don’t want to wait for things to finish before i can start the next one.
For example, using my dedup script or compiling stuff. I wanna know when it is finished.
So i made some scripts
I’ve put a function in .bashrc, so i can use a command like
notify “Compiling is ready”
A command like this i can put at the end of a command or in a script file at the end.
make && make install && notify “compile ready”
What does it do when executed?
How?
At the end of your .bashrc
function notify() {
if [ -z "$1" ]; then
echo "Usage: $0 \"message\"";
exit 1;
fi
mosquitto_pub -h 10.1.0.17 -t notify/bashscript -m "$1"
}
Scripts on my Domoticz instance
Python script
#!/usr/bin/python
import paho.mqtt.client as mqttClient
import time
import os
import subprocess
import shlex
Connected = False
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
global Connected
Connected =True
else:
print("Connection failed")
def on_message(client, userdata, message):
print "Message received: " + message.topic + " : " + message.payload
fileName = "/home/pi/domoticz/scripts/speech" + " \"" + message.payload + "\""
print fileName
args = shlex.split(fileName)
time.sleep(1)
p = subprocess.Popen(args)
broker_address = "10.1.0.17"
port = 1883
#user = "user"
#password = "password"
client = mqttClient.Client("speechcmd")
#client.username_pw_set(user, password=password)
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker_address, port=port)
client.loop_start()
while Connected != True:
time.sleep(0.1)
client.subscribe('speech/cmd')
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print "exiting"
client.disconnect()
client.loop_stop()
Caching speech script
This script will look for a cached audiofile with requested text, and uses that. Else it wil request a audio file from google, caches it and plays it though the speakers.
#!/bin/bash
INPUT=$*
input2=$(echo $INPUT | base64)
echo "$input2 = $INPUT" >> /home/pi/cache/files-text-relation
if [ -f /home/pi/cache/$input2.mp3 ] ; then
mpg123 -q /home/pi/cache/$input2.mp3 1>/dev/null 2>/dev/null
else
echo not cached
STRINGNUM=0
ary=($INPUT)
for key in "${!ary[@]}"
do
SHORTTMP[$STRINGNUM]="${SHORTTMP[$STRINGNUM]} ${ary[$key]}"
LENGTH=$(echo ${#SHORTTMP[$STRINGNUM]})
#echo "word:$key, ${ary[$key]}"
#echo "adding to: $STRINGNUM"
if [[ "$LENGTH" -lt "100" ]]; then
#echo starting new line
SHORT[$STRINGNUM]=${SHORTTMP[$STRINGNUM]}
else
STRINGNUM=$(($STRINGNUM+1))
SHORTTMP[$STRINGNUM]="${ary[$key]}"
SHORT[$STRINGNUM]="${ary[$key]}"
fi
done
for key in "${!SHORT[@]}"
do
echo "Playing line: $(($key+1)) of $(($STRINGNUM+1))"
NEXTURL=$(echo ${SHORT[$key]} | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g')
echo $NEXTURL
mpg123 -w $input2 -q "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$NEXTURL&tl=En-us"
ffmpeg -i $input2 -codec:a libmp3lame -qscale:a 2 /home/pi/cache/$input2.mp3
mpg123 /home/pi/cache/$input2.mp3
done
fi
Node-red flow
function notify() {
if [ -z "$1" ]; then
echo "Usage: $0 \"message\"";
exit 1;
fi
mosquitto_pub -h 10.1.0.17 -t notify/bashscript -m [
{
"id": "1442fca698589679",
"type": "mqtt in",
"z": "cb6f001b.721c3",
"name": "",
"topic": "notify/bashscript",
"qos": "2",
"datatype": "auto",
"broker": "8c74c5f6.9a7a48",
"nl": false,
"rap": false,
"inputs": 0,
"x": 180,
"y": 580,
"wires": [
[
"ddf5744bb5b73d4d",
"faa5c794652d7a57",
"b4e0107399248fea",
"443f960b5d1cf40e"
]
]
},
{
"id": "ddf5744bb5b73d4d",
"type": "mqtt out",
"z": "cb6f001b.721c3",
"name": "",
"topic": "speech/cmd",
"qos": "",
"retain": "",
"broker": "8c74c5f6.9a7a48",
"x": 590,
"y": 560,
"wires": []
},
{
"id": "e95e828451d83158",
"type": "comment",
"z": "cb6f001b.721c3",
"name": "bash notify",
"info": "",
"x": 170,
"y": 540,
"wires": []
},
{
"id": "faa5c794652d7a57",
"type": "mqtt out",
"z": "cb6f001b.721c3",
"name": "",
"topic": "mqttlcd/message",
"qos": "",
"retain": "",
"broker": "8c74c5f6.9a7a48",
"x": 570,
"y": 720,
"wires": []
},
{
"id": "b4e0107399248fea",
"type": "delay",
"z": "cb6f001b.721c3",
"name": "",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"outputs": 1,
"x": 480,
"y": 640,
"wires": [
[
"ac4faf30b8adbe3f"
]
]
},
{
"id": "ac4faf30b8adbe3f",
"type": "function",
"z": "cb6f001b.721c3",
"name": "Empty payload",
"func": "msg.payload = \"\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 640,
"y": 640,
"wires": [
[
"faa5c794652d7a57"
]
]
},
{
"id": "dfbe26c12fc5e742",
"type": "pushover",
"z": "cb6f001b.721c3",
"name": "Alleen Henri",
"device": "rmx1931",
"title": "Node-Red-Pushover",
"priority": "1",
"sound": "pushover",
"url": "",
"url_title": "",
"html": false,
"x": 850,
"y": 500,
"wires": []
},
{
"id": "443f960b5d1cf40e",
"type": "function",
"z": "cb6f001b.721c3",
"name": "Set pushover payload",
"func": "\nmsg.topic = \"Bash Notify\";\nmsg.priority = 1;\nmsg.sound = \"cosmic\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 660,
"y": 500,
"wires": [
[
"dfbe26c12fc5e742"
]
]
},
{
"id": "8c74c5f6.9a7a48",
"type": "mqtt-broker",
"name": "10.1.0.17",
"broker": "10.1.0.17",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "15",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]
Added custom fields to Phpipam, so i can remove my port sheet and administer everything in Phpipam. And to prepare for a Augmented reality project i want to create.
Howto add fields:
Go to the administrator menu on the right.
Select IP related management > Custom fields
Custom IP addresses fields press the plus sign
Give it a name and description.
I’m using varchar(10) at the moment
so i can enter switchname:port (media:4)
See below for a example: Using a QR code and the information, i want to display port information using a app.
Update 20220510
Sorting out my fileserver, i had the need for a deduplication script.
Many files i’ve been copying from backup, clouds mobile devices and workstation. Inevitable to get many copies.
Below script walks a directory, using locate it tries to find files with same name. Using a md5sum it wil check if it is the same file, when found a simular file it stops searching, removes the one from the check-directory and checks the next one.
#!/bin/bash
# Copy this script to your to clean directory,
# when you got a copy on your fileserver from this script
# then the copy in your clean dir will be removed also.
# Dont want that? change
# find -type f |
# into
# find -type f | grep -v <nameofthisscript> |
# dont is current directory, skip these from locations
dont=$(pwd)
# Never start in /mnt ? uncomment below
# echo "$dont" | grep "^/mnt" && ( echo "start in tank" ; exit )
find -type f | while read file ; do
filemd5=$(md5sum "$file" | cut -f1 -d" ")
basenamefile=$(basename "$file")
echo "searching $basenamefile"
locate -i "/$basenamefile" | grep -v "$dont" | while read location ; do
if [ -f "$location" ] ; then
locatedfilemd5sum=$(md5sum "$location" | cut -f1 -d" ")
if [ "$filemd5" == "$locatedfilemd5sum" ] ; then
echo "found same md5sum at $location"
rm "$file"
break
fi
fi
done
done
# Remove empty dirs?
# find . -type d -empty -delete
Locate can be slow, sometimes it is better to put the locate DB in memory of on another fast storage system.
mkdir /ramdisk
mount ramfs -t ramfs /ramdisk/
cp /var/lib/mlocate/mlocate.db /ramdisk/
# change above script locate command
locate -d /var/lib/mlocate/mlocate.db -i IMG20191123.jpg
And remove empty directories?
Add below at the end of the script
find . -type d -empty -delete
As posted before ( https://www.henriaanstoot.nl/2022/04/09/c64-plus-drive-running-again/ ) i’ve got a little gadget which emulates a C64 diskdrive.

I’ve been using this for a while now, and i’m really impressed by it. It just connects to the Serial Din of your C64, draws power from the Cassette port. … And even looks like a mini drive!
I’ve been converting Disks to images as well as runnig previously converted D64 images on a real C64 again.
Also the internet provides loads of images to run again.
Converting and running:
There is a disk selector and run program you can use. (See below)
Also you can use the buttons for disk swap/change.
One from my collection: A training kit for learning to write machine language.
Update: 20220514 – Save and Load a program
Update: 20220829 – Mad-1 computer runaway movie


A little example, life programming a little machine code.
ORG 1800
0E 80 ; LD C,0
21 C0 00 ; LD HL,00C0
CD E4 05 ; CALL 0X05E4
0E 01 ; LD C,0
21 00 01 ; LD HL,0100
CD E4 05 ; CALL 0X05E4
C3 00 18 ; JMP 0X1800
Found this cameo in the movie “Runaway”


Using a tape and COMX-35 cassette player, i can store and retreive programs
Above i mentioned a Runaway Cameo .. well there is a MAD-1 system cameo also. (Which also i in my collection)


All my Mikrotiks are running production, so i need a virtual environment
sudo add-apt-repository ppa:gns3/ppa
sudo apt update
sudo apt install gns3-gui gns3-server
git clone https://github.com/GNS3/ubridge.git
cd ubridge
sudo apt-get install libpcap-dev
make
sudo make install
reboot
nohup gns3server &
gns3
edit > preferences
qemu
qemu vms
New and select chr-6.48.6.img
New project > select vm
NOTES
ping not working? use even number interfaces (8)
garbled output? .. Answer (Y/N) with N when starting telnet. Or turn off and on again.
Part 1 of my 680x computer.
Running a little program to read dipswitches and displaying them using leds.
0000 CE 8020 ; LDX #$8020
0003 6A 01 ; DEC 1,X
0005 86 04 ; LDA A A
0007 A7 02 ; STA A 2,X
0009 A7 03 ; STA A 3,X
000B A6 00 ; LDA A 0,X
000D A7 01 ; STA A 1,X
000F 20 FA ; BRA
Design of sound chip intergration
I found a cassette tape yesterday. I was really curious .. dont remember making this.
Connected a tape drive to my C64 and tried to get the damn thing to read the tape.

Got stuck on READY’s with no programs. Being a little rusty into using C64 i tried:
Maybe there was a turbo loader used?
Maybe my tape unit wasn’t aligned?
Tried multiple tape units, couldnt find a Tape Head Alignment Program like:

So i used another method to see if data was recoverable.
Using UberCassette or AudioTap
Above are two examples with uses recorded wave files and calculations to generate the original written bits!
Recorded the tape to mono wav file using a generic linux recording application.
ubercassette taperecording.wav mytape.tap