Project Ideas
This is a quick capture of notes for various project ideas. See also the ReadingList.
CLOS datastore
A database of CLOS objects that can be preserved across systems.
It probably needs the following fields:
- label
- a label for which "system" (in the ASDF sense) this belongs to. The closest analogue to SQL is a database name.
- class
- what is the name of the class? The closest analogue to SQL is a table.
You can load and store CLOS objects using the tuple \(\{label, class, id\}\).
Major questions:
- How is the data stored on disk?
- What is the API/RPC interface?
GPS time sync device
The basic idea is a GPS-equipped system to broadcast time over some combination of WiFi, LoRa, and bluetooth. It's specifically intended to be a local device, something useful in Collapse Computing, although the GPS system will likely not be available then.
SSH key storage system
This idea keeps coming up, so I should probably just build it.
- add host key
- remove host key
- get current list of keys
- tag keys: src (e.g. sr.ht…), authkeys, etc
- wobsite, api, cli tool?
Command line tools
Busybox
Kyle's System Tools
DNS resolver
Like adsuck.
- Trie libs?
- Domain splitting?
- I think that I can just intercept packets, check to see if it's a query for a banned host, and destroy that.
Service manager
This would be a part of the Lisp DCOS.
kyle's editor
Universal hex utility
The hex-manip program needs to read and inter-convert hex files to and from standard formats such as I-HEX86, S-Rec, raw binary. Hereby, a major function is filling unused code areas with a defined value. Another heavily-used feature is the creation of, for example, a CRC or similar checksum placed at a fixed location in program code and used for verification of program-code-integrity at run-time (e.g. in the idle task).
When we make a HEX mask for, let's say, the beagle bone, we begin with a I-HEX86 extract with objdump or objcopy. We might use a hex-manip program to fill this raw HEX-dump to a given size such as 32kB with a defined fill pattern. Then we need to convert the filled I-HEX86 to raw binary and finally hang a skinny boot header composed of two 32-bit words (size of the image and memory location) at the beginning of the file (such that it boots the bare-metal app with the standard boot-loader). This file is called "MLO" for the case of beagle bone, but other systems have other needs for hex-manip.
It's not really hard to write a hex-manip program. Basically, one needs to specify an input language for buffer manipulation, address-shifting, calculating and placing checksums, etc. Finally, a hex-manip program needs to be worked into the build.
Knowledge management
Graphbook deprecated
- Graphbook was a cool project, but I think I put too much into making it a programmer's notebook.
- A general tag-based notebook might be better.
- What if you could specify relationships between tags?
Linkage
- Tags
There are different ideas for how tags should be applied:
- in Roam, a tag is treated like a page name in a wiki. The tag is important for a specific text. The best example I can think for a large knowledge store that does this is C2.
- in a lot of other places, a tag applies to a page. The tag page itself tends to just be a link to all the pages that have this tag.
The first is harder to do, because you have to somehow keep track of where it is in the page.
exocortex
There's a page on this elsewhere.
Miscellaneous project ideas
- Implement an ACME server in Lisp.
Skill sharpening
Codecrafters
Codecrafters has you implement systems in your programming language of choice (as long as it's supported).