DONT WATCH IF YOU WANT TO PLAY MY GAME
Want to replicate this? Here are the files
Explanation: ( The numeric code can be an access code for a panel, or a combination lock.
Openscad can be found here https://openscad.org/
Openscad source
sliderWithMax =40; // [80] difference() { union() { linear_extrude(height=1.4) difference() { hull() { circle(d=6,$fn = 100); translate([sliderWithMax-2,0]) circle(d=4,$fn = 100); } translate([4,0]) for (i=[0:sliderWithMax/2-3]) translate([i*2,0]) circle(d=1,$fn = 100); } cylinder(d=6.7, h=3.8, $fn=100); } translate([0,0,-1]) cylinder(d=2.5, h=3.8+2, $fn=100); translate([0,0,-1]) cylinder(d=4.7, h=1+1, $fn=100); translate([0,0,3.8-2+1]) cylinder(d=4.7, h=2+1); }
Only the ones i’ve played recently or having good memories playing it.
Only noteworthy games
Pyramid Mummy pharaoh thingy ??? One of the first games i remember.
(Besides Pong on a “pong-only” system)
I’ve played a Mummy game in Black/White on a XZ81 or ZX Spectrum, one of the first Computers i had access to. (Richard)
But i can´t find/remember the name.
The Sentinel (1986)
https://classicreload.com/the-sentinel.html
https://en.wikipedia.org/wiki/The_Sentinel_(video_game)
In The Sentinel, the player takes the role of a Synthoid, a telepathic robot who has to take control of a number of surreal, checkered landscapes of hills and valleys, by climbing from the lowest spot, where the hunt begins, to the highest platform, over which the Sentinel looms.
The Synthoid itself cannot move across the level; instead it can look around, accumulate energy by absorbing the objects that are scattered across the landscape, create stacks of boulders, generate inert Synthoid shells and transfer its consciousness from one of these clones to another.
Kings Quest II? (1985)
Played this with my friend Richard on his Atari ST
Few years later, same kind of Game Engine:
Leisure suit larry in the land of the lounge lizards
The Myst series (1993-)
Carmageddon
The player races a vehicle against several other computers controlled competitors in various settings, including city, mine, and industrial areas. The player has a certain amount of time to complete each race, but more time may be gained by collecting bonuses, damaging the competitors’ cars, or by running over pedestrians. Unusually for a racing game, checkpoints do not extend the time limit.
7th Guest
The 7th Guest is an interactive movie puzzle adventure game, produced by Trilobyte and originally released by Virgin Interactive Entertainment in April 1993. It is one of the first computer video games to be released only on CD-ROM. The 7th Guest is a horror story told from the unfolding perspective of the player, as an amnesiac. The game received a great amount of press attention for making live action video clips a core part of its gameplay, for its unprecedented amount of pre-rendered 3D graphics, and for its adult content. In addition, the game was very successful, with over two million copies sold. It, alongside Myst, is widely regarded as a killer app that accelerated the sales of CD-ROM drives.
DOOM and Quake
Many many hours i’ve spend playing doom with Mandy on my first network (1995?)
Quake was my Graphics Card Checker, i never made it to level two!
Amiga
Shadow of the Beast, Super Frog ,The Sentinel, Game of Thrones and Dr Mario
https://www.youtube.com/watch?v=OuGilF0TwYA
And dual player Stunt Car Racer. We played this before there were networks, using a serial cable!
Simulators and more
I used to have Microsoft Flightsim (the old version) , but my main operating system is Linux so i switched to XPlane (Windows, linux and Mac) See other posts about Flightsims
VR games
We bought VR glasses.
Besides viewing movies in 3D, playing with Blender in 3D, Xplane flightsimulator there are some games i sometimes play.
I expect you to die, WWI Warplanes, Green Hell and Mass Exodus Redux. The last one is great fun together with a PC player.
Android games
Tried several games, non stuck.
I enjoyed “SpaceTeam” the most.
Current (dorment on my phone) : Mekorama, BinaryGrid2 (Yes Nerd), Dice me and 2 Player Reactor (those last two, for playing with friends while traveling)
Arcade games
I only knew Galaga, on a table version in Germany (We played there with the Concord Pipe Band)
The other one was
Hyper Olympics by Konami ( Snackbar “Lunch” when attending school LTS Deventer )
PC Games (Recent)
Uboot, Xplane Flightsimulator,Keep talking and nobody explodes
https://store.steampowered.com/app/494840/UBOAT/
Switch Games (Recent)
Limbo, Unravel Two, Death Squared,Machinarium,Degrees of Separation, Guacamelee 2
Mostly Co-op
Sidetrack … pinball
I really like the Terminator pinball game.
There is one in Zwolle at https://computermuseum.nl/
(This one i played when i was a soldier in 1992)
I have some test setups for Virtual Pinballs, but its not the same.
“Recent” old Skool games
https://www.henriaanstoot.nl/2021/11/21/retropi-handheld/
1942 – https://en.wikipedia.org/wiki/1942_(video_game)
Metal Slug series – https://en.wikipedia.org/wiki/Metal_Slug_2
UPDATE: 20230214 more work done
Making a frame in a aluminum case, using rivets and nut rivets.
The nut rivet tool (suggestion by Duncan) is a superb addition in my tool shed!
There is place for 4 modules in this “test” case. I need to move the holes for the rivet-nuts, because the modules should go in every position.
(Also 4 rounded corners)
Module example https://www.henriaanstoot.nl/2022/12/20/connect-the-wires-puzzle/
TODO:
Alumium squares instead of these wooden temporary pieces.
Making a buildin power connector like this.
Think of something to place in the lid!
UPDATE: 20230214
UPDATE: 20230214 / 20230224
Install Bullseye on a SDCard
Enable wifi country code using raspi-conf
(While you at it, enable I2C for the display)
Install and configure an Access Point
# As root apt update apt upgrade apt install hostapd apt install dnsmasq systemctl stop hostapd systemctl stop dnsmasq cat <<EOF > /etc/hostapd/hostapd.conf interface=wlan0 driver=nl80211 ssid=escape hw_mode=g channel=6 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=mysecretpass wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP EOF cat <<EOF >> /etc/dnsmasq.conf interface=wlan0 bind-dynamic domain-needed bogus-priv dhcp-range=192.168.50.150,192.168.50.200,255.255.255.0,12h EOF cat <<EOF >> /etc/dhcpcd.conf interface wlan0 nohook wpa_supplicant static ip_address=192.168.50.10/24 static routers=192.168.50.1 static domain_name_servers=8.8.8.8 EOF sed -i s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g /etc/sysctl.conf mkdir /etc/nftables cat <<EOF > /etc/nftables/nft-stat-ap.nft flush ruleset table inet ap { chain routethrough { type nat hook postrouting priority filter; policy accept; oifname "eth0" masquerade } chain fward { type filter hook forward priority filter; policy accept; iifname "eth0" oifname "wlan0" ct state established,related accept iifname "wlan0" oifname "eth0" accept } } EOF chmod +x /etc/nftables/nft-stat-ap.nft cat /etc/nftables.conf | grep nft-stat-ap.nft || echo 'include "/etc/nftables/nft-stat-ap.nft"' >> /etc/nftables.conf systemctl unmask hostapd systemctl enable hostapd systemctl enable nftables reboot
UPDATE: 20230214
Now in its case, added two buttons and one led.
UPDATE : 20230224 mqtt config
apt-get install mosquitto mosquitto-clients vi /etc/mosquitto/conf.d/remotemqtt.conf per_listener_settings true # internal mqtt listener 1883 allow_anonymous true # connection over the internet connection bridge-01 address remoteserver:8883 bridge_cafile /etc/mosquitto/certs/ca.crt bridge_keyfile /etc/mosquitto/certs/remoteaccesspoint.key bridge_certfile /etc/mosquitto/certs/remoteaccesspoint.crt topic escape/# both 0 remote_username remoteuser remote_password remotepass ########## remote server config cd /etc/mosquitto mosquitto_passwd passwords remoteuser cd /etc/mosquitto/certs ./generate-CA.sh client remoteaccesspoint copy ca.crt remoteaccesspoint.key and remoteaccesspoint.crt to accesspoint mosquitto.conf pid_file /var/run/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ #per_listener_settings true # Plain MQTT protocol listener 1883 allow_anonymous true # End of plain MQTT configuration # MQTT over TLS/SSL listener 8883 cafile /etc/mosquitto/certs/ca.crt certfile /etc/mosquitto/certs/webserver.fash.lab.crt keyfile /etc/mosquitto/certs/webserver.fash.lab.key allow_anonymous false password_file /etc/mosquitto/passwords # End of MQTT over TLS/SLL configuration listener 9001 protocol websockets # End of plain Websockets configuration # WebSockets over TLS/SSL listener 9883 protocol websockets cafile /etc/mosquitto/certs/ca.crt certfile /etc/mosquitto/certs/webserver.fash.lab.crt keyfile /etc/mosquitto/certs/webserver.fash.lab.key log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d connection bridge-01 address extramqttserver:1883 topic lscspm1/# both 0 topic owntracks/# both 0 topic escape/# both 0 log_type all
Controlling Display and MQTT messages examples
python3 printline.py -1 "line 1" -2 "line 2" wget https://github.com/emcniece/rpi-lcd/blob/master/RPi_I2C_driver.py cat printline.py # requires RPi_I2C_driver.py import RPi_I2C_driver from time import * import sys, getopt #python3 fix unichr = chr mylcd = RPi_I2C_driver.lcd() # test 2 1234567812345678 def main(argv): line1 = '' line2 = '' try: opts, args = getopt.getopt(argv,"h1:2:",["txt1=","txt2="]) except getopt.GetoptError: print ('printline.py -1 <line1> -2 <line2>') sys.exit(2) for opt, arg in opts: if opt == '-h': print ('printline.py -1 <line1> -2 <line2>') sys.exit() elif opt in ("-1", "--txt1"): line1 = arg elif opt in ("-2", "--txt2"): line2 = arg mylcd.lcd_display_string(line1, 1) mylcd.lcd_display_string(line2, 2) if __name__ == "__main__": main(sys.argv[1:])
Print internal and external ip
myip=$(/usr/sbin/ifconfig eth0 | grep "inet " | awk '{ print $2 }') extip=$(curl -s http://whatismyip.akamai.com/) python3 printline.py -1 "i $myip" -2 "e $extip"
mosquitto health tester
timeout 1 mosquitto_sub -t '$SYS/#' -C 1 | grep -v Error || exit 1
Button press shutdown
raspi-gpio get 27 | grep level=0 >/dev/null if [ $? == 0 ] ; then python3 printline.py -1 "shutting" -2 "down" /usr/sbin/halt -p fi
Cleaned-up minimal mqtt poster
#include <WiFi.h> #include <PubSubClient.h> const char* ssid = "ssidname"; const char* password = "ssidpass"; const char* mqttServer = "192.168.50.10"; WiFiClient espClient; PubSubClient client(espClient); void initWiFi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Connecting to WiFi .."); while (WiFi.status() != WL_CONNECTED) { Serial.print('.'); delay(1000); } Serial.println(WiFi.localIP()); } void setup() { Serial.begin(115200); initWiFi(); Serial.print("RRSI: "); Serial.println(WiFi.RSSI()); client.setClient(espClient); client.setServer(mqttServer,1883); if (client.connect("testmodule")) { Serial.println("connected"); client.publish("escape/testclient", "connected"); } else { Serial.println("Mqtt not connected"); } } void loop() { } }
Don’t know what game to buy?
Head over to boardgamegeek.com
Ratings, wiki, manuals, reviews, forum and more
Get you own collection list online
Our list is here
Link https://boardgamegeek.com/collection/user/fashice
My top 5 games (at the moment) are:
U-BOOT: The Board Game is a fully cooperative, real-time tabletop game of WW2 submarine warfare. It allows 1 to 4 players to assume the roles of the Captain, the First Officer, the Navigator, and the Chief Engineer on board of a type VIIC U-boat. The game is driven by a companion app, allowing for an unprecedented level of realism, as well as a challenging enemy A.I. which will push your skills to the limit. The action unfolds both on the strategic and the tactical scale, always demanding teamwork, efficient crew management, and quick situation assessment.
Memoir ’44 is a historical boardgame where players face-off in stylized battles of some of the most famous historic battles of World War II including Omaha Beach, Pegasus Bridge, Operation Cobra and the Ardennes. The game includes over 15 different battle scenarios and features a double-sided hex game board for both beach landings and countryside combat. Each scenario mimics the historical terrain, troop placements and objectives of each army. Commanders deploy troops through Command and Tactic cards, applying the unique skills of his units — infantry, paratrooper, tank, artillery, and even resistance fighters — to their greatest strength.
Monster Slaughter is a tactical game inspired by horror movie classics, where each players takes control of a family of three monsters: father, mother and child, each with their own stats and family power. Their objective is to scour the cabin looking for five guests, find their hiding spot and “take care” of them! Each victim hides in a pile of cards that monsters must search through to find them, gathering items and traps as they do. Once revealed, a guest’s miniature is put on the board and can be attacked!
However, each player has secretly set a killing order for these guests, and killing them in order is worth more points. They can use their item cards to defend the guests against other monsters or scare the victims away to other rooms, so the guests die in a more favorable order!
Some DIY own build games are:
Shogi (Japanese Chess)
https://www.henriaanstoot.nl/2012/05/31/shogi-game-lasercut/
Crokinole (Canadian game)
https://www.henriaanstoot.nl/2018/06/14/made-a-crokinole-game/
I’ve been working on some modular gadgets which can be combined to make a complete puzzle.
I like games like Keep-talking-and-nobody-dies. (Which is a computer game, but you have to play it with multiple persons and a physical “manual” Great fun!)
https://keeptalkinggame.com/
And i like real escape rooms.
There are some puzzle “rooms” you can buy in the game store, it is okay but many are for single use only.
I’ve been following some people on youtube, i saw some great ideas but not a remote over the internet using physical knobs and switches.
This is a RFID reader with an old Amico Esp8266 Arduino. It sends RFID information to the MQTT broker
Some other tools ‘n knobs .. and stuff
I want to use Adhoc Wifi and a Mqtt/Nodered setup which uses a mqtt over the internet to get people (and their knobs) connected
I already got a lot of test schematics
Schematic for the MQTT enabled RFID module
ESP8266 <-> RC522
D8 SDA
D5 SCK
D7 MOSI
D6 MISO
GND GND
D1 RST
3V3 3V3
Code
Below will write the RFID id to “rfid/id” and resets this when you remove the tag to “rfid/id = 0”
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <PubSubClient.h> #include <MFRC522.h> #define SS_PIN D8 #define RST_PIN D1 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long cardId = 0; WiFiClient net; PubSubClient client(net); const char* mqtt_server = "MQTTBROKER"; const char* ssid = "MYSSID"; const char* password = "MYWIFIPASSWD"; void setup() { SPI.begin(); mfrc522.PCD_Init(); WiFi.mode(WIFI_AP_STA); WiFi.begin(ssid, password); client.setServer(mqtt_server, 1883); } void reconnect() { while (WiFi.waitForConnectResult() != WL_CONNECTED) { WiFi.begin(ssid, password); } while (!client.connected()) { String clientId = "NodeMCUClient-"; clientId += String(random(0xffff), HEX); if (!client.connect(clientId.c_str(), "rfidclient", "...")) { delay(5000); } } } void loop() { reconnect(); if (!mfrc522.PICC_IsNewCardPresent()) { return; } if (!mfrc522.PICC_ReadCardSerial()) { return; } cardId = getCardId(); char buffer[10]; sprintf(buffer, "%lu", cardId); client.publish("rfid/id", buffer); uint8_t control = 0x00; do { control = 0; for (int i = 0; i < 3; i++) { if (!mfrc522.PICC_IsNewCardPresent()) { if (mfrc522.PICC_ReadCardSerial()) { control |= 0x16; } if (mfrc522.PICC_ReadCardSerial()) { control |= 0x16; } control += 0x1; } control += 0x4; } delay(0); } while (control == 13 || control == 14); reconnect(); client.publish("rfid/id", "0"); delay(500); mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } unsigned long getCardId() { byte readCard[4]; for (int i = 0; i < 4; i++) { readCard[i] = mfrc522.uid.uidByte[i]; } return (unsigned long)readCard[0] << 24 | (unsigned long)readCard[1] << 16 | (unsigned long)readCard[2] << 8 | (unsigned long)readCard[3]; }
Schematics used for the Solenoid lock
Software is a mqtt example from the internet which toggles a PIN on the arduino.
I never look in the mirror, so why do i need one?
The mirror foil was already ugly in the corners.
There were bumps.
Never finished a proper interface
This one was made using a touch screen, so there are always fingerprints you could see
I’m going to use the display for an in-house small Escape Room idea i have.
Only the time part still worked, but i could not find the right cables for the touch part. The buttons displayed are meaningless anyway 🙂
Just a mockup
Mirror part was done using a Safety/One way mirror foil.
Cut a part as large as you screen, spray a little water and stick it on.
At some point i displayed Dashticz on there.
Apparently i started playing with a magic mirror setup in 2015, according some timestamps of code on my fileserver.
We take a lot of pictures, with our Nikon camera and our mobile phones.
(Apparently in 2019 5544 pictures)
Some stats 757 20190803 - on a single day (Holiday) Average pictures per month locate "/2019/" | egrep -i "photoalbum|gsm" | egrep -i "mp4$|jpg$" | grep -Eo '2[[:digit:]]{3}[[:digit:]]{2}[[:digit:]]{2}' | cut -c-6 |sort | uniq -c | sort -n | awk '{ sum += $1; n++ } END { if (n > 0) print sum / n; }' 461
Besides android pictures being automatically uploaded to our nextcloud, I’m using some apps and scripts to get pictures and movies stored on my fileserver. (bash scripts/andftp)
For sorting those media files, i made a sorting script.
(Today I added a location sorting addition using GPS information stored in the exif information.
INSTALLING
pip3 install reverse_geocoder
You need python3, exiftool, exiftime and mediainfo
copy below python script in ~/bin/reverse2.py
( need more info? change last print entry admin1/admin2)
[{‘lat’: ‘-39.45556’, ‘lon’: ‘173.85833’, ‘name’: ‘Opunake’, ‘admin1’: ‘Taranaki’, ‘admin2’: ‘South Taranaki District’, ‘cc’: ‘NZ’}]
import reverse_geocoder as rg import sys lat=sys.argv[1] lon=sys.argv[2] coordinates = (lat,lon) results = rg.search(coordinates) # default mode = 2 #print (results) for entry in results: print(entry['name'] + "(" + entry['cc'] + ")")
And a bash script /usr/local/bin/exifsort.sh
#!/bin/bash #set -x reversepath=/home/henri/projects/reversegeo/reverse2.py #RAW rawcnt=`ls | grep -i nef$ | wc -l` if [ "$rawcnt" = "0" ] ; then echo "no raw" else mkdir raw 2>/dev/null ls | grep -i nef$ | while read ; do mv $REPLY raw ; done fi ls | egrep -i "jpg$|jpeg" | while read ; do location="" getmodel=$(exiftool "$REPLY" |grep "Make " | awk '{ print $3 }') if [ "$getmodel" != "" ] ; then getmodel=$getmodel/ fi echo "$REPLY" | grep WA0 >/dev/null && getmodel=whatsapp/ gpsinfo=$(exiftool -c "%+.6f" "$REPLY" |grep "GPS Position" | cut -d":" -f2 | tr -d ' ' | sed s/,/\ /g) if [ "$gpsinfo" != "" ] ; then location=$(python3 $reversepath $gpsinfo | grep -vi load | sed s/\(NL\)//g) fi dater=$(exiftime "$REPLY" 2>/dev/null | egrep "Created|Digitized" | sed s/Digitized/Created/g | tail -1 | cut -c 16-19,21,22,24,25) if [ "$dater" = "" ] ; then # echo "Trying from filename" dater=$(echo $REPLY | grep -Eo '2[[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{2}') if [ "$dater" = "" ] ; then # echo "Trying from filename - maybe without dashes" dater=$(echo $REPLY | grep -Eo '2[[:digit:]]{3}[[:digit:]]{2}[[:digit:]]{2}') fi fi if [ "$dater" != "" ] ; then year=$(echo $dater | cut -c-4) mkdir -p "${getmodel}$year/${dater}/$location" mv "$REPLY" "${getmodel}${year}/${dater}/$location" else mkdir -p "${getmodel}unknowndate/$location" mv "$REPLY" "${getmodel}unknowndate/$location" fi done ls | egrep -i "mov$|mp4$" | while read ; do location="" getmodel=$(exiftool "$REPLY" |grep "Make " | awk '{ print $3 }') if [ "$getmodel" != "" ] ; then getmodel=$getmodel/ fi echo "$REPLY" | grep WA0 >/dev/null && getmodel=whatsapp/ gpsinfo=$(exiftool -c "%+.6f" "$REPLY" |grep "GPS Position" | cut -d":" -f2 | tr -d ' ' | sed s/,/\ /g) if [ "$gpsinfo" != "" ] ; then location=$(python3 $reversepath $gpsinfo | grep -vi load | sed s/\(NL\)//g) fi dater=$(mediainfo "$REPLY" | grep Encode | tail -1 | cut -f2- -d: | cut -f3 -d" " | sed s/-//g) if [ "$dater" = "" ] ; then # echo "Trying from filename" dater=$(echo $REPLY | grep -Eo '2[[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{2}') if [ "$dater" = "" ] ; then # echo "Trying from filename - maybe without dashes" dater=$(echo $REPLY | grep -Eo '2[[:digit:]]{3}[[:digit:]]{2}[[:digit:]]{2}') fi fi if [ "$dater" != "" ] ; then year=$(echo $dater | cut -c-4) mkdir -p "${getmodel}$year/${dater}/$location" mv "$REPLY" "${getmodel}${year}/${dater}/$location" else mkdir -p "${getmodel}unknowndate/$location" mv "$REPLY" "${getmodel}unknowndate/$location" fi done
Example running in a directory with mixed media
# Raw images get moved into a RAW directory
no raw
# Samsung phone detected with date and GPS location
mkdir -p samsung/20220717/Hilversum
mv 20220717_133453.jpg samsung/20220717/Hilversum
# OnePlus phone
mkdir -p OnePlus/20021208/Voorburg
mv IMG_20190109_091825.jpg OnePlus/20021208/Voorburg
# Realme (Added country when not NL)
mkdir -p realme/20220607/Isle of Islay(GB)
mv IMG20220607213630.jpg realme/20220607/Isle of Islay(GB)
# Whatsapp has no date embedded so it get it from filename
Trying from filename
Trying from filename - maybe without dashes
mkdir -p whatsapp/20221021/
mv IMG-20221021-WA0000.jpg whatsapp/20221021/
# Nikon without GPS
mkdir -p NIKON/20220613/
mv DSC_1423.MOV NIKON/20220613/
# Whatsapp video without exif
mkdir -p whatsapp/20170528/
mv VID-20170528-WA0006.mp4 whatsapp/20170528/
# No camera name detected in exif from mobile movie
mkdir -p 20190114/Maarssen
mv VID_20190114_142455.mp4 20190114/Maarssen
# Location in mp4
mkdir -p 20220607/Lamlash(GB)
mv VID20220607155044.mp4 20220607/Lamlash(GB)
Result
./NIKON/2022/20220613/DSC_1423.MOV ./NIKON/2022/20220610/750_1101.JPG ./realme/2022/20220818/Hilversum/IMG20220818203825.jpg ./realme/2022/20220607/Isle of Islay(GB)/IMG20220607213630.jpg ./2019/20190114/Maarssen/VID_20190114_142455.mp4 ./whatsapp/2017/20170528/VID-20170528-WA0006.mp4 ./whatsapp/2022/20221021/IMG-20221021-WA0000.jpg ./2022/20220607/Lamlash(GB)/VID20220607155044.mp4 ./2022/20220516/Hilversum/VID20220516125913.mp4 ./OnePlus/2002/20021208/Voorburg/IMG_20190109_091825.jpg ./samsung/2022/20220717/Hilversum/20220717_133453.jpg
You could automate this using incrond
apt-get install incron
add your user to /etc/incron.allow
incrontab -e
add
/fileserver/mediain/ IN_CREATE /usr/local/bin/sortmymedia.sh
sortmymedia.sh
#!/bin/bash cd /home/user/media /usr/local/bin/exifsort.sh
The cyanotype (from Ancient Greek kuáneos, “dark blue” and túpos, “mark, impression, type”) is a slow-reacting, photographic printing technique. It produces a cyan-blue print used for art as monochrome imagery applicable on a range of supports, and for reprography in the form of blueprints. For any purpose, the process usually uses two chemicals: ferric ammonium citrate or ferric ammonium oxalate, and potassium ferricyanide, and only water to develop and fix. Announced in 1842, it is still in use.
This technique was also used as a method of copying drawings.
For example buildings and schematics. While making copies of drawings with the exact dimensions of the original, making the result untemperable was another big plus. ( You could not move/redraw walls for example on the copy)
I’ve printed a photo on transparant sheets to experiment with.
(Next time, i’ll take a larger size, and fix the contrast.
The most interesting ones i’ve made today: