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.
Surströmming as it should be eaten.
As the tin is pressurised, open the surströmming in a basin of water. Wash it, gut it, and wrap it in buttered tunnbröd, a type of sweetened flat bread, with sour cream, potatoes and onion. Accompany with beer.
Didn’t have tunnbröd, used another flat bread.
I liked it enough to have two portions, would eat again.
2 Years ago i designed some earrings for my girlfriend. This time i used Blender instead of inkscape.
Blender file
https://media.henriaanstoot.nl/datafiles/Oorbellen2022.blend