Baron (Cast in Time, #1)
![]() |
|
![]() |
|
![]() |
|
I have lately been starting a ton of projects. Usually that would mean that I would be abandoning a ton of projects, but I have been finishing them. I have been doing this by treating my projects like they are not pets.
For example, let's take grafito a web frontend for system logs.
I started it. I worked on it for a week or two of spare time, and now it's DONE. Totally done. It has no missing features. It has no bugs. It is DONE.
It does what I want it to do, it does it well, it's poublished in all the ways that make sense, and I don't have to think about it anymore.
Sure, if someone finds a bug, I will fix it. If someone asks for a feature, I will consider it. But I am not going to spend time on it unless there is a good reason to do so.
I am specially not going to spend time on it just because I like it, or because I want to keep working on it. I am not going to pet it, or feed it, or take it for walks.
I am not going to think about what features I could add. It does what it does. It's pretty unixy, in that it does one thing and does it well. It is not a pet, it is a tool.
That is how I am handling my projects nowadays. I wrote tartrazine which is a syntax highlighting tool in a couple of weeks and it's done. Sixteen? DONE.
Some projects are not finished. Crycco is not finished. I will work on it some more. Because it's not done yet. It has missing features, it has bugs, it has things I want to do with it.
This is specially important for free and open source projects. Maintainers get overwhelmed. Starting a project is fun but maintaining it is like having a pet parrot, requiring constant attention, feeding, cleaning, and who will outlive you.
That attitude is not sustainable. Imagine you were a hobby carpenter making tables. Would you say "tables are never finished, they are abandoned"? No, you would say "this table is done, I will make another one if I want to".
That is a healthy attitude. This is not religion, and this is not a job. If I start a new project I will finish it, or I will abandon it, but I will not create projects that will require my attention forever.
I had been reading about remote KVMs for a while. There are several, like PiKVM, JetKVM, etc. I decided I wanted one to access my server at home because it has a nasty tendency to lose network connectivity, and I wanted to be able to fix it without having to go to the office and plug in stuff into it.
This is not like running RDP or VNC on the server in that to the server this is hardware. It works no matter how crashed or disconnected the server is, as long as it has power. It is like having a monitor, keyboard and mouse plugged in to the server, but remotely.
I had all the hardware I needed:
But I just could not make it work. PiKVM, the most popular one, makes it pretty difficult to make it work on anything other than the exact hardware configs they support, and those are exactly the ones I don't have.
I could not find any implementation that was easy to setup and supported the hardware I had, so I decided to write my own.
You can get the code at GitHub of course. It compiles to a single binary. It only requires you to have ffmpeg installed, and it should just work as long as your hardware supports OTG, you have a USB capture dongle, and you plug all the cables correctly.
One USB cable and one HDMI cable go from the server to the Radxa Zero (the HDMI via capture dongle) and you run the one binary built from this code on the Radxa Zero. It will start a web server on port 3000, and you can access it from any browser.
The web interface is very simple, but it works. You can see the video feed, and you can send keyboard and mouse events to the server. You can even provide a disk image that the server will think is a USB drive. I suppose you can even install the OS in the server that way, but I have not tried it.
If you want to access it more remotely, just setup a VPN in the KVM itself.
This is an occasional series of posts where I will share ideas for programs that don't exist, but should. The goal is to inspire developers to create useful tools that can make our lives easier. Or, more likely, to remind me about these ideas so I can create them myself. Or even more likely, to just get them out of my head so I can stop thinking about them.
For some things you don't need Git. But for those things you may still need version control.
Imagine a version control system just for you. Unless you are a developer, in that case it's not for you, it's for your dog or something.
I want a version control system that is better than "document.doc" ➡️ "document2.doc" ➡️ "document.final.doc" ➡️ "document.reallyfinal.doc"
Not a lot better but better.
Let's be ultraoptimistic and just dream of what would be ideal.
Sometimes the system may allow the user to see the difference between one version and another version. This requires app support in general if the file is not an ordinary text file.
That's it. That's all the features.
The sad part is that we had this in the 80s, in VMS. But anyway, it would be nice.
If I were to implement this I would do a simple implementation and then write a user-level filesystem to let the user access it transparently.
Further, maybe a library that allows using this from your own code? So you can save versioned?
Would be nice.