This category is for posts that are not quite finished, yet. This content may or may not make sense depending on how severly a post is not finished, yet. You may find here abandoned projects, outdated information, empty posts, posts without their most crucial part, or generally incomplete p
How I'm Dreaming Now Entry created on 2025-12-17 (edited 2026-01-04) Authors: steeph (368) Categories: Dreams (4) Lucid Dreaming (12) Personal (13) incomplete (21) edit
This will probably become one of those posts here that will stay unfinished for long without getting to the point. But I'll try not to care. But if I want to be able to finish it at some point I have to start it first.
Lucid Dreaming (I'll not include a definition here. But there are different ones.) was one of the subjects I spent years intensively studying. Both by reading and by experimenting with my own dreams. Most of my experimenting was about trying out different induction techniques. My success wasn't greater than that of most people attempting to learn to dream lucidly at will. Most give up without much success. I was too interested and not blinded by exaggerated claims enough to stop after a few months. To be honest and complete, I did stop after a few months and not as much success as I wished for. But after a pause of a few years my newfound interest in the subject was greater, lasted longer and lead to a deeper dive into the literature, science and culture of lucid dreaming. I hung out in the largest German-language lucid dreaming web forum and connected chats and TeamSpeak gatherings a lot. I read every recommended book on the topic, then continued with every mentioned book, then went to find even more on my own (and then stopped because most newly published "ebooks" on the topic at the time were of very low quality). I visited meetups, started the German-language podcasst together with Zitrom.I've tested and compared a lot of dream diary software (most, actually), filled books of physical dream diaries and built my own dream diary software. I took part in a project to fix up the German-language lucid dreaming wiki, assisted in research, edited and translated texts, helped fund projects, tried assisting tech and drugs, wrote articles for several blogs in the field, and so on.
I've also looked at every published lucid dream induction technique in 2014 that I could find in German and English sources, compared and categorised them and wrote and overview about them. I've tried many of them for four to six weeks at a time and picket out some for more experiments. This is probably the part most people who take an interest in lucid dreaming are mainly interested in: How to increase the rate of lucid dreams and improve their quality? I don't necessarily have any better answers to that than others. But I have a few years of experience of and for my own.
I've always struggled to keep my mind free enough from stress to be able to accomplish much in my hobbies (or anything beside my day job) when I'm working full-time. So while I'm working full-time (I am and have been since I stopped my intense occupation with the topic of lucid dreaming) I don't have any advances over any other motivated and interested person. But I did collect some experience in some key abilities that help to increade lucid dreaming rate. When I want to remember my dreams (and am not super-stressed and distracted), I do. When I have free time and sleep in I remember my dreams if I intenmd to or not. This is a good jump start to using my dreams for insight or lucdid reaming attempts. Every now and then I gain insight in the fact that I'm dreaming without trying, even in times where I'm not interested in my dreams at all. It's just something that happens in my dreams now. It can be part of the plot of a non-lucid dream, or I realise more of the possibilities that my dreaming state opens for decisions in that moment, or I have a full lucid dream worth taking a place in one of my dream diaries. Either of those are usually fun or at least interesting.
(…)
Alternative Operating System: Essence Entry created on 2022-03-29 (edited 2024-11-15) Authors: steeph (370) Categories: #100DaysToOffload (41) Computer (78) Operating Systems (23) Software (52) incomplete (22) Languages used: en (255) Topics: Software → Alternative Operating Systems (18) edit
Essence
This is one I'm continuasly disappointed to not have been able yet to get running on real hardware. I like what I've seen. But I can't get it to boot, as do others. I don't know too much about the internals of Essence. But it seems to be relatively far in develpment. There is a sleek GUI with tabbing windows in the look of early Chromoium browsers, which looks very inviting, if only I could get it to even try to boot on any computer. The focus has not been on making the OS actually boot on real hardware so far. And unfortunately there has been no release since 2022 and no update to the code for over a year. So I stopped hoping that it might be working soon. I was looking forward to getting to know a knew OS that doesn't take a Unix-like approach and has nice tabbing windows.
(tba:screenshots)
Other new OSs not for real hardware
While Essence is what I created this entry for because I really hoped to be able to try this GUI on real hardware, I'll use the spacce left by the lack of an experience report to mention a few other PSs that look promising but aren't (yet) made to run on actual hardware.
Munal OS
An experimental operating system fully written in Rust, with a unikernel design, cooperative scheduling and a security model based on WASM sandboxing.
TacOS
My from-scratch OS with its own kernel written in C and assembly
TacOS is a UNIX-like kernel which is able to run DOOM, among various other smaller userspace programs. It has things like a VFS, scheduler, TempFS, devices, context switching, virtual memory management, physical page frame allocation, and a port of Doom. It runs both on real hardware (tested on my laptop) and in the Qemu emulator.
Alternative Operating System: Sortix Entry created on 2024-11-03 Authors: steeph (370) Categories: #100DaysToOffload (41) Computers (19) Operating Systems (23) Software (52) incomplete (22) Languages used: en (255) Topics: Software → Alternative Operating Systems (18) edit
sortix
Sortiix is one of the more mature hobby OSs. It feels well-rounded in the features that it already has. Stable and relatively bug-free. Sortix is a Unix-like, POSIX compliant OS with it's own kernel, system tools and libraries. It contains packages that have been ported from Debian. But all the most interesting core components are implemented anew.
Sortix has made steady progress over like 15 years. That's probably the biggest difference between it and similar hobby OSs. Version 1.0 was released in 2016. Even in that form it is really usable. It boots without any issues on real hardware. It's stable, comes with all the core unix tools you'd expect, but it didn't have a GUI and network support, yet. It switched to nighly releases after that. Since then, features have been added to the point that not many things separate it from being as useful for daily usage as HaikuOS.
(tba:screenshots)
Alternative Operating System: MikeOS Entry created on 2022-03-29 (edited 2024-11-02) Authors: steeph (370) Categories: #100DaysToOffload (41) Computers (19) MikeOS (2) Operating Systems (23) Software (52) incomplete (22) Languages used: en (255) Topics: Software → Alternative Operating Systems (18) edit
MikeOS
A very limited and simple operating system written in assembler for 286 computers (and newer compatible architechtures, obviously). Pretty much what I would imagine as a successful outcome if I would write one to see that I can do it. It works, there's a text editor, a game, you can list, edit and execute files. Not much more though at first glance. I didn't look into writing additional software for it myself, yet. There are many forks of MikeOS. Most of them named after the forker and not under active development. It's a project I'd look into if I'd want to learn x86 assembler. Simple, not looking like any other OS I've seen.
MikeOS is neither UNIX-like in any way nor is it similar to CP/M or DOS. It is closer to being a BASIC interpreter with a program menu. But there is a bit more to it. Everything is in the same text mode in VGA resolution. After booting, you get a box with list of menu items in pointing to submenus or executable programs. Among those programs are a BASIC interpreter, some simple games, a text editor and a file browser. That's about the gist of what you get. It's all very simple and fast. Enough to write your own applications or scripts. And it all fits on a single 3.5" HD floppy. There are third-party applications to be found on the internet. But almost all that I stumbled upon were part of MikeOS forks.
Next to the menu there is also a command line with a very small list of commands. To be honest, from a user point of view, I don't know what to do with it.
There are quite a few forks. It seems to be a great hobby project. And because it's all relatively simple it's a project you can actually finish after a while, not like writing your own UNIX clone with system tools, glibc port and modern GUI. MikeOS forks usually come with some additional apps and scripts and some changes in UI. Some add to the few system calls, add their own menu. Some even started to add network support. One MikeOS fork I have to mention is MichalOS because it overhauled the UI to make it more pleasing and added quite a few simple apps and games that all seem to be very stable. It has an image viewer and a music program. TomOS is a fork that adds support for directories. ShoockOS seems to be about simplifying things even more.
On the MikeOS web site there are handbooks, resources for development and links to software projects for MiikeOS. MikeOS is a great help if you want to learn x86 assembly in a practical way without starting from zero. But it is also useful as an OS for embedded applications or simple hobby projects (interacting with Arduino, other serial communication tasks, …). And it could also be considered useful for everyday tasks if you found a home computer from the mid 80s useful.
(tba:screenshots)
Not Yet Written Posts Entry created on 2021-04-19 (edited 2022-12) Authors: steeph (370) Categories: incomplete (22) Languages used: en (255) edit
This is just a list of topics I may want to write a post about at some point. I'll refer to it in the unlikely scenario that I want to take some time writing something but don't know what. I don't really know why I made this public. I'bve read a good argument recently on not keeping such a list. And it's neither complete nor up to date anyway. I think I'll remove this entry. But not today.
- A generic post about programmes that I've written that nobody ever saw because it never got into a state in which it would have been worth sharing before I lost interest in the project. (DOS and Windows software)
- Zeitraffervideos (RdB hauptsächlich)
- Reverse Proxy Services: localhost.run, ngrok, serveo, sish
- My Serendipity
- Lucid Dreaming Electronic Devices
- YouTube Clients
- Klik & Play Games
- short post about blucid intro recognising the musician
- finally post rest of the BLucid episodes
- battery charging training bike
- The (Slow) Death Of A ThinkPad
Klik & Play Entry created on 2022-07-19 Authors: steeph (370) Categories: Computer (78) Retro Computing (6) Retro Tech (6) Software (52) Video Games (4) incomplete (22) Languages used: en (255) edit
I have been wanting to write about this piece of 16 bit Windows software for a quite a while. I don't know why.
I'll just start this entry and continue whenever. Just want to have it started for now…
When I got my first own computer - that must have been around 1996 or 1998 (probably closer to 1998) - I got most of the software that I used for free from magazines that came with diskettes or CDs. Because it was cheap. I reckon the publishers didn't really pay for the software that was on them, or may even have gotten payed for including restricted freeware/shareware on them. Because most of these magazines weren't even pricey for the magazine themselves, and you got the software for free. One of these disks included a demo of "Klik & Play" (That's how it's spelled everywhere. I'm pretty sure it was spelled "Klik 'n' Play" in the logo/intro animation, though. But whatever.) A programme that promised to enable the user to create computer games without previous knowledge, without writing any code, without knowing how to programme at all. I checked it out just because it was there. I remember thinking "who are they trying to fool with that language and why?" because of the slogan and promises (that I don't remember word by word). But after playing with it for a while, I was positively surprised by how true the claims seemed to be. You could really create a video game without knowing how to code.
I thought this piece of software genius back in the day. I was - idk - 12 and hadn't really thought of writing my own software. Computer software, in the minds of the people that I had to do, wasn't something that you wrote or edited yourself. Creating your own programme, writing your own code wasn't really in the realm of possible things to do with a computer. Almost as much as it is viewed now. I mean, editing a .BAT file in DOS was the hackiest one would get among my friends, and even that was rare. So the fact that the developers (Europress Software - Wikipedia credits Francois Lionet and Yves Lamoureux) managed to allow me, to create a simple, 2D, actually playable game, and the way they managed to allow this by using mostly to only the mouse, impressed me.
I think I don't want to explain how creating a game with Klik & Play works in detail. You can search the web or watch a video for that. But to get an idea of what it was like, and of how simple it was: On any given screen ("level") you can click an icon to add an object. You can select from a number of categories or add your own graphics and GIF animations. Then you could choose whether that object is just a background object (not doing anything, not moving, not interacting with other objects, not changing, ...) or if it represents one of the players. If it's a player, you can choose a set of controls. Most of the actual programming takes place in a table. On one axis are all the objects, on another axis something that can happen to or with them. And in the fields of the table, you choose what's supposed to happen when this circumstance ever comes true. So the table sort of represents a huge set of possible interrupts. Common things that can be acted upon are: An object touches an edge of the screen, an object touches another object, a key has been pressed and released, ... And examples for possible actions are: Move an object by incrementing/decreasing coordinates or by setting them to a fixed value, changing an objects velocity, jumping to the next or a specific screen ("level") in the game, increasing the player's points by 1. Just with there few examples, you could: Make the player object jump when you hit the space bar (e.g. in a jump&run style game), make it stand on the ground object and platforms (e.g. in a platform style game), make it move left and right when you hit the arrow keys, make it reappear on the other side of the screen when it leaves of side (like in Asteroids), make it collect and count coins, make it die when it touches a deadly enimy and only one life was left on the counter, go to the next level when this one is won, ... and much more.
Note that this is all done by only clicking on objects, buttons, lists, menus. Once you got used to the interface and know what's available, it's really easy to use. There is a feature that makes getting started with a new game even easier though. You can run the game in a mode where every event for which an action can be defined, interrupts the game and lets you choose an action (or choose that for this event it shouldn't ask/interrupt again) and then continue the game. The ball touched a stone, what do you want to happen? Bounce the ball, delete the stone object, increase variable A by 1, play CLICK.WAV. The ball touched the left edge of the screen. What do you want to happen? Bounce the ball, play CLACK.WAV. …
I think I could have handled writing code myself at that age, at least after having created some silly game-like things in Klik & Play. But nobody showed me and teaching myself seemed overwhelming. (It wasn't really. Good books and reference guides existed back then. But I didn't know.) Anyway.
You could play the game file by opening it with Klik & Play or you could compile it, which produced two files: an 16 bit EXE and a game file. I think the latter contained all the graphics and sounds and the executable was the actual game. But I'm not sure.
There were a number of programmes around in the 90s that promised to let you programme and/or create your own games without knowing anything about computers first (or that made some similar claims of that sort.) I tried two others, that took a completely different approaches. But I think they deserve their own entries. I could probably plan to make a series about these sort of tools where I start with the goal to create a complete list of functional, worth mentioning programmes, and end up with a pile of unexpected feelings of resignation over the fact that there are too many products to mention, like I did with alternative operating systems.
(tbd: proofreading, add links, add screenshots, fix misremembered details, write continuation about Klik & Play games.)
PIN Changer Entry created on 2022-04-14 Authors: steeph (370) Categories: Arduino (4) Code (31) DIY (16) Electronics (16) Hardware (16) Projects (41) incomplete (22) Languages used: en (255) Topics: Projects → Arduino (4) edit
I had to change the default PINs of over 200 SIM cards once. And such a situation could arise again. So I've built a PIN changer in which I just have to insert the card, wait a few seconds and it's done.
The Card Slots
SIM cards in their natural form factor aren't as fiddly to handle as they are in the form factors most people know, which is Mini SIM, Micro SIM and Nano SIM. Classical SIM cards are the same size as other smart cards. I found a card slot with an end switch on eBay. I like it when I find industry grade parts for cheap on eBay as part of some remaining stock. Additionally I've used a slide-in mini SIM slot and another, separate end switch from my parts collection in case I to change the PINs of smaller cards.
The Baseband Processor
Other parts that I've used is an Arduino Nano sized Arduino Nano nearly-clone and an A6 modem module. There are many similar modem modules designed around different but similar ICs. Many of them are cheap and widely used for DIY IoT projects. So example code for the Arduino and other help can be easily found on the web. I don't know why I went with a module with an A6. But it works fine and there are an Arduino library for it as well as cheap modem modules with it available.
(tba:voltage supply)
The Controller
Yes, Arduino may be kind of the noob go-to board and could look up how to use microcontrollers on their own finally and even if I don't want to I could finally start to use ESP32s like everybody else. But I know Arduinos and by now I'm familiar with it and it works, so, whatever. Arduino Nano is kind of my go-to form factor now because they have integraded USB, are Uno compatible and small. Unless I need more or something very specific I use Arduino Nano almost-clones with USB-C port.
The Code
The code is a real mess. It had been a long time since I had written any even halfway serious C. It may have been the first time, actually. The sketch surely is very easily improved by somebody who knows what they are doing. I intended to improve it myself. But the project is currently abandoned and The code is doing what it should in a way I initially had in mind as the goal. But I'll leave the mess of the comments in for the case that somebody wants to make out what I was thinking.
// Funktionen umschreiben: Beim Empfangen wird erwartet: 1. der AT-Command zurück, 2. eine Antwort, 3. OK oder ein ERROR.
// Daher sollte abgefragt werden, bis entweder OK oder ERROR kam oder 20/50/9001(?) Abfragen lang weder OK noch ERROR an kam.
// Die Antwort in Variable speichern? Naja, String zurückgeben halt.
// Antworten, die mit "^" anfangen brauchen nicht gehandlet zu werden, da keine Kommandos, die mit AT^ beginnen gesendet werden.
#include
SoftwareSerial A6MODULE(6,7);
int intled = 13; // Internal LED
int successled = 8; // Green LED
int failled = 9; // Red LED
int wrongpinled = 10; // Orange LED
boolean debug=true;
//String commands[5] = { "AT", "AT+CPINC2", "AT+CPIN?", "AT+CLCK=\"SC\",2", "AT+CPIN=\"3010\"" };
//int command = 0;
const byte maxmsglength = 32;
char received[maxmsglength];
boolean newData = false;
String response = "";
int i=0;
/*
To check/do:
1 AT: OK?
2 is PUK required - abort
3 are less than 3 PIN attempts left? - abort AT^CPINC=?
4 is PIN disabled
5 enable it: 0000
6 is PIN enabled
7 unlock
8 is card unlocked
9 change PIN: 1996
was PIN wrong - report and leave it
*/
void setup() {
pinMode(intled, OUTPUT);
pinMode(successled, OUTPUT);
pinMode(failled, OUTPUT);
pinMode(wrongpinled, OUTPUT);
// All LEDs turn on at the beginning and stay on during the wait period at the beginning, then turn off before communication with the A6 module starts.
digitalWrite(intled, HIGH);
digitalWrite(successled, HIGH);
digitalWrite(failled, HIGH);
digitalWrite(wrongpinled, HIGH);
Serial.begin(9600);
delay(500);
digitalWrite(intled, LOW);
digitalWrite(successled, LOW);
digitalWrite(failled, LOW);
digitalWrite(wrongpinled, LOW);
A6MODULE.begin(9600);
delay(500);
digitalWrite(intled, LOW);
}
void loop() {
sendtoa6("AT");
if(getfroma6("OK")) {
// sendtoa6("AT+CPIN?");
// if(getfroma6("+CPIN:SIM PUK")) { fail; } // If the required password is PUK, abort.
// sendtoa6("AT+CPIN?");
// if(getfroma6("+CPIN:SIM PIN2")) { fail; } // If the required password is PIN2, abort.
// sendtoa6("AT+CPIN?");
// if(getfroma6("+CPIN:SIM PUK2")) { fail; } // If the required password is PUK2, abort.
// WAIT FOR SWITCH RELEASE FIRST
sendtoa6("AT+CPIN?");
getfroma6("+CPIN:SIM PIN"); // The last non-empty response will be stored in the global response variable. Problem with this: If the A6 module sends an unsolicitated message before the response to the CPIN command, nothing gets done and the card needs to be re-inserted again.
if(strcmp(response, "OK") == 0) { // If already no PIN is required
// sendtoa6("AT+CLCK=\"SC\",2"); // Ist PIN-Abfrage eingeschaltet? Oder ist es "SC"?
// if(getfroma6(???)) { PIN-Abfrage einschalten mit 0000; }
// ENABLE PIN HERE
d("I don't know how to enable the PIN.");
}
if(response = "+CPIN:SIM PIN") { // If the required password is PIN, continue.
sendtoa6("AT^CPINC=?");
if(getfroma6("^CPINC: 3")) { // If not exactly 3 attempts are left, abort. (should be larger than or equal to 3, shouldn't it?)
sendtoa6("AT+CPIN=\"0000\""); // Freischalten mit 0000
delay(50);
if(!getfroma6("OK")) { fail; } // If that was not the right password, abort.
sendtoa6("AT+CPWD=\"SC\",\"0000\",\"1996\"");// PIN ändern
delay(500);
if(getfroma6("OK")) { Serial.println("Looking good."); }
// sendtoa6("AT+CMGD=0,4"); // Should delete all SMS
// if(getfroma6(???)) { ; }
d("I don't know how to delete SMS.");
sendtoa6("AT+CPIN?");
if(getfroma6("+CPIN:READY")) {
// TURN OFF A& MODULE FOR SAFE CARD REMOVAL
digitalWrite(successled, HIGH);
}
} else { // If not exactly 3 times left
fail;
}
delay(1000);
}
}
}
void fail() {
digitalWrite(failled, HIGH); // Turn red fail LED on and ...
d("Something failed! Ending programme.");
while(1); // ... don't do anything anymore.
}
void wrongpin() {
digitalWrite(wrongpinled, HIGH); // Turn yellow LED on and ...
d("Wrong PIN! Ending programme.");
while(1); // ... don't do anything anymore.
}
//boolean getfroma6(char str[32], char str1[32], char str1[32], char str1[32], char str1[32], char str1[32]) { // Returns true if the passed (expected) message was received, false if anything else was received.
boolean getfroma6(char str[32]) { // Returns true if the passed (expected) message was received, false if anything else was received.
boolean asexpected = false;
for (i = 1; i < 9; ++i) {
receivelinefroma6();
// d("d1 "+response);
if(received[0] == '\0') { // If the received message is empty
continue;
} else {
response = received;
}
if(strstr(received, "ERROR") != NULL) { // If the received message contains "ERROR"
d("Received an error: "+response);
fail;
}
if(received[0] == '+') { // If the received message starts with a "+" sign
d("Reseived response: "+response);
} else {
if(strstr(received, "OK") != NULL) { // If the received message is "OK"
d("Received OK.");
asexpected = true; // Also treat OK like the expected message. No unexpected OK should ever be sent from the A6 module. So this is fine. No, it is, really.
// if(asexpected) { return true; }
} else {
if(strncmp(received,"AT",2) == 0) { // If the received message starts with "AT"
d("Received AT: "+response);
} else { // For any other received message
d("Received: "+response);
}
}
}
newData = false;
if(strstr(received, str) != NULL) {
d("Received expected message: "+response);
asexpected = true;
}
}
if(asexpected) { return true; }
return false;
}
//void handleresponse() {
// response = received;
// if(received[0] == '+') {
// d(" Response: "+response);
// } else {
// if(strstr(received, "OK") != NULL) {
// d(" It's okay.");
// } else {
// if(strncmp(received,"AT",2) == 0) {
// d(" I've sent: "+response);
// }
// }
// }
// newData = false;
//}
void receivelinefroma6() {
delay(80);
static byte counter = 0;
char rc;
received[0] = '\0';
while (A6MODULE.available() > 0 && newData == false) {
rc = A6MODULE.read();
if (rc != '\n') {
received[counter] = rc;
counter++;
if (counter >= maxmsglength) {
counter = maxmsglength - 1;
}
}
else {
received[counter] = '\0'; // terminate the string
counter = 0;
newData = true;
}
}
}
void sendtoa6(String command) {
// Serial.println(command);
A6MODULE.println(command);
d("Sent: "+command);
}
void d(String line) {
if (debug == true) { Serial.println(line); }
}
(tba:connections,assembly,photos?)