Some planning
4th February 2024
Part of the reason I've procrastinated about this project for so long is its insanely ambitious. Domino is a commercial product and I work in a commercial environment so it's all too easy for me to think in commercial terms. This sets the bar for success way too high. Instead I really need to reframe the project and set some realistic goals. This is an opportunity for me to learn and expand my skill set and do some regular coding. This should be a literal hobby project.
The goal is therefore to build an experimental platform for developing, hosting and administering web applications that I'm happy to use for my personal projects. I am the only customer. This is a toy for me to play with and while I'm willing to share my toys, it's my toy and I'm picking the colour. Success will be measured by how much I learn, how much coding I get to do and how many puzzles I get to solve.
It's still an ambitious project so it does require some level of planning. I don't have a complete roadmap yet, but I know how I'm going to start.
First I need to implement a basic web server. This doesn't mean installing one of the many existing web servers, or even using a library to add one to my program. That is not how Lotus did it back in the 90's (I assume) and this is supposed to be an opportunity to learn. This means grabbing my book on socket programming and writing my own web server from scratch. Its first job will be to host this blog. I doubt it will be a complete web server, or even a good one, but I should have learnt something and it will be a base on which to build.
The next three deliverables, and I've not yet decided on an order are: a simple flat file database; an interpreter; and encryption.
The long term goal is to create a document oriented database. This is a massive project in itself so initially I'll create a simpler flat file DB. I've done this once before (20 plus years ago) and so that seems like a good place to start. I'm hoping I'll be able to build on that and iterate into a fully fledged DB over time.
If this is to be a development platform, at some point I'm going to need to read and execute code. This is where the interpreter comes in. More than that though, I think the interpreter will be useful in lots of places. A web server for example needs to parse and act upon requests. This sounds remarkably similar to what an interpreter does. This makes building the interpreter a strong candidate for my second priority.
Encryption should be a core component of the platform. It will be needed in the web server to support HTTPS. I want to be able to encrypt the on disk database. It will also be needed if I implement any kind of code or document signing. This may be an area where I let myself use an established library, it's a lot of complex maths I don't want to get wrong. However I want to understand how it works, so before using someone else's code I plan to get some books on the topic and create my own implementation of some common encryption algorithms.
Later I'll need to build web interfaces for server and database administration. I'm also going to have to build an IDE at some point. I'll realise what a huge and silly idea this is if I think about it too much more. For now I'll just hide those on a list somewhere and move on.
That is about as much project management as I can tolerate for a hobby project. Time to start coding. With any luck my next post should be about how I implemented a basic web server.
TC