Future(?) Project List

Posted: 2023-02-04
Last Modified: 2023-08-15
Word Count: 1662
Tags: c-programming lua java programming python ruby vaporware

Mostly for my own sake, here’s a list of programming projects I’d like to do. I lack the time, energy, and skills to undertake most of them. Enjoy.

Pri Name I.L. Description Status
A+ codepoint java library to read and write Unicode code points preliminary version on GitHub1
A+ JSONPP java JSON Pull Parser preliminary version on GitHub1
A C-Conv c portable unicode conversion library implementation almost complete
A C-Symbol c portable library for interned C-strings implementation almost complete
A C-Table c portable hashtable implementation implementation almost complete
A ELTNPP java ELTN Pull Parser in Java implementation barely started
A JSON-C c, … JSON Pull Parser with C, Ruby, Python, etc. bindings vapor
A Tiny Projects various assorted small projects to learn various languages only three (of 80+ possible) done
A- FM Cache java Simple in-memory caches partly coded, doesn’t work yet
A- SLAN-J java Scheme-like alternative to JSON, YAML, etc. spec written and amended, implementation barely started
B C-Port c portable library for I/O in embedded and non-standard C vaporware
B Estimation Framework ? estimate time a calculation takes for more accurate progress bars still exploring2
B ELTN-Lua lua ELTN Parser in pure Lua mostly3 vapor
B ELTN-C c, … ELTN Pull Parser with C, Ruby, Python, etc. bindings vapor
B SLAN-C c, … SLAN Pull Parser with C, Ruby, Python, etc. bindings vapor
B- Bookmark DB js? py? ts? database of ALLLLL my bookmarks vapor
B- Dependency Tracer java, js/py/rb trace code dependencies and unused classes in Java and JSPs some half-baked programs, but mostly vapor4
B- E-Book DB js? py? ts? database of ALLLL my pdfs and epubs, including if I’ve read them (yet?) vapor
B- luaenv lua rbenv for Lua vapor
B- TPP lua, py, rb Template Pre-Parser, for non-C source/library version incompatibilities and simple code generation vapor
C+ Contract Definition Language (CDL) java? py? DbC DSL vapor
C+ Contract-X java, py ⇒ c, cs, java, js, ts, … CDL preprocessor + library for various programming languages vapor
C+ JSON-RPC Server c library for a non-blocking HTTP(S)-based JSON-RPC server frontend vapor
C+ Lua CSP lua, c Communicating Sequential Processes in Lua vapor
C+ Statiki go? lua? py? rb? hugo for wikis a few experiments, mostly vapor
C E-Any c ref-counting framework for any “object” all vapor
C E-String c ref-counted Unicode String all vapor
C ExpObj c, lua, py, rb “exported objects” in C all vapor
C M-Pool c memory manager for M-Strings (and other things?) mostly vapor
C M-String c memory-managed Unicode strings mostly vapor
C TypeLib (formerly M-Lib) c extending M-Strings to useful datatypes, data structures, and a hybrid XPCOM/CORBA component model vapor
C XTIDL java, c ExpObj/TypeLib Interface Definition Language vapor
D Agile Project Tracker ? index cards and whiteboards automated vapor, plus there’s at least a dozen
D Game Table ? play tabletop games on your browser! vapor, plus there’s at least half a dozen now
D Language Construction Tools ? write your own Klingon! vapor, plus https://www.vulgarlang.com does it better.5
D Lending Library ? database and app for friends who borrow books vapor
D Teufel c, teufel The best parts of Eiffel, Java, SML, and Go total vapor
D TTRPG Character Generator html, js chargen for my current favorite table top role-playing game6 very vapor
E Inventory and Invoicing ? toy enterprise app for educational purposes vapor
E Messaging Framework ? exorcizing ghosts from my message-oriented-middleware startup past7 very, very vapor
E Space Game ? live your Star Trek8 and Last Starfighter9 dreams! oh so vapor
E Text Adventure Engine ? write your own Infocom game! so very vapor
E Trade and Market Data ? exorcizing ghosts from my trading desk support past very, very vapor

Yes, many of these come from an old list I found. I’ll add more when I come up with new ideas or act on these old ones.

Priorities

Priorities get a letter grade, as above. Rough definitions:

Priority Meaning
A+++ Occupies my every waking moment.
A++ Working on it right now.
A+ Will work on it ASAP.
A Probably do it next.
A- Lower priority, but in the queue.
B+ Right after some other things are done.
B Sooner rather than later.
B- Real Soon Now.
C+ Might be fun, if I find the time.
C Might be educational or useful, if I find the time.
D Maybe if I’m really motivated at some point.
E Only when I have infinite time.

Dependencies

Some things have to be done before other things. Here are the known dependencies.

Diagram Key

Diagram Key

Java Projects

Project JDK Project Dependencies “External” Dependencies
cache 11+ none java.net.*, javax.management.**
codepoint 8+ none config files in jars, Java reflection, java.nio.Buffer
CDL-X ?? none parser generator (ANTLR, CongoCC, etc.)
Contract-X ?? CDL-X comment processor (Javadoc, Doxygen, etc.), code generator (FreeMarker, StringTemplate, etc.)
ELTNPP 8+ codepoint10
JSONPP 8+ codepoint10
JSONPP2P ?? JSONPP Jakarta’s JSONP
SLAN-J11 11+ none12
XTIDL ?? CDL-generic parser generator (ANTLR, CongoCC, etc.)
XTIDL-J ?? XTIDL; TypeLib or ExpObj spec parser generator, code generator (FreeMarker, StringTemplate, etc.)

Java Project Dependencies 1

Java Project Dependencies 2

C Projects

Beyond specific libraries, these projects need a collection of techniques to adapt to various compilers, operating systems, and environments. My goal is to be as portable as Lua which doesn’t even need autoconf. (I may need to write my own “nanoconf” to adapt to 16, 32, or 64-bit pointers since I’ll likely end up implementing opaque and foolproof object handles with pointer swizzling.)

Project Project Dependencies External Dependencies
Unnamed Library 1 (fmcbase?):
- Conv none13 iconv or equivalents
- Lock none pthreads, Windows threads, etc.
- RWLock none pthreads, Windows threads, etc.
- RefCounter14 RefTable, RefSet, Lock
- RefSet
- RefTable
- StringTable Table (for now)
- Symbol StringTable, RefCounter, RefSet
- Table none
- WCharBuffer RefCounter
- WString 15 Conv, RefCounter
Unnamed Library 2: (fmcio?)
- Port <stdio.h>, iconv, libcurl, etc.
- Reader16 maybe Port <stdio.h>, file descriptors
- Writer17 maybe Port <stdio.h>, file descriptors
Base Types18 Table, WString, … arbitrary precision integer library w/ rational and decimal numbers
CSP19 none pthreads, Windows threads, etc.
E-Any RefCounter
E-String WString, E-Any
ExpObj E-String, E-Any
ELTN-C Reader, Writer
JSON-C Reader, Writer
JSON-RPC maybe JSON-C JSON parser (cjson, JSON-C, etc.), http server libs (libhttp), non-blocking I/O (select, …)
Lua CSP CSP, ELTN-C, JSON-RPC, LuaMsg Lua
LuaDb none Lua, database (postgres, etc.), json
LuaMsg20 CSP Lua
M-Pool Table RWLock
M-String WString, M-Pool21
SLAN-C CReader, CWriter
TypeLib M-String, M-Pool
XTIDL CDL parser generator (antlr, lex/yacc, lpeg, packcc, …?)
XTIDL-C XTIDL; TypeLib or ExpObj spec parser generator, code generator (autogen, templet, …?)

C Project Dependencies

XTIDLC Dependencies

Base Types Hierarchy

Derived Types Hierarchy


  1. Early progress report here. Also now on GitHub↩︎ ↩︎

  2. Using duplicate-files.rb as a test case, I need to make tools to develop and implement more accurate estimation functions. ↩︎

  3. Early progress report here ↩︎

  4. Mike Clark’s JDepend also does this, although I just wanted to trace the strands of spaghetti code I was dealing with at the time. (And at the Java class, not package, level.) The JSP part was tough considering we were using a proprietary app server and so pre-compiling JSPs for my little toy wouldn’t be easy. (End old man mode.) ↩︎

  5. About the only thing I’d add are more detail about syntax and sentence structure and a way to translate sentences into your new conlang … and they may have that by now. ↩︎

  6. Variously Cypher, D100 (BRP / OpenQuest / Mythras) Everywhen (based on BoL), Traveller / Cepheus, Year Zero System (Mutant Year Zero / Coriolis / Vaesen / etc.) … ↩︎

  7. What I intended to be the URL/HTTPS of asynchronous messaging … in the days before before AJAX, XML-RPC, JSON, node.js, socket.io, etc. Even if I did come up with something, didn’t XKCD have a comic about the standard to unify 14 standards becoming a 15th standard? ↩︎

  8. Inspired by a really old PC game where you played a ship exploring sectors and defeating Klangons or whatever they called them so as not get sued. I’m sure you could do it in JavaScript now. ↩︎

  9. Based on a FPS for NeXTSTEP (yes I’m old) where you shot down enemy fighters with a “space turkey” sound alerting you a new enemy had arrived. ↩︎

  10. The CodePoint class acts as a facade for all the work I need to do in the background, so hopefully JSONPP, ELTONPP, and any other projects can use the (working) API as-is while Codepoint work finishes. ↩︎ ↩︎

  11. The SLAN pull parser and basic builder in Java. ↩︎

  12. SLAN implementations have as few external dependencies as possible: all documents are UTF-8, IO uses ubiquitous platform features on Java. ↩︎

  13. If iconv is not included, the library will use a compile-time table of hand-coded converters, arranged alphabetically and indexed using binary search rather than a hashing function. This avoids the heap allocations of Table↩︎

  14. A common reference-counting mechanism that maintains the count for all objects in a Table instead of on the object. ↩︎

  15. A library for common behavior between E-String and M-String↩︎

  16. A simple API to read data from an arbitrary source. Combines lua_Reader with codepoint. Created because Port seemed a bit like overkill. ↩︎

  17. A simple API to write data to an arbitrary source. Combines lua_Writer with codepoint. Created because Port seemed a bit like overkill. ↩︎

  18. Implementations of common data types eventually used by ExpObj and/or TypeLib↩︎

  19. The plumbing of CSP: channels, endpoints, messages, etc. ↩︎

  20. A Lua library to read and write structured messages through CSP channels. ↩︎

  21. The point is to have memory-managed strings (and other things) without using Boehm-Demers-Weiser conservative collection . I’m planning a combination of reference counting, precise mark-and-sweep, and copying memory chunks protected from the usual C shenanigans. (That’s why I’m starting with strings: no internal references, but that just makes the interface between “managed” and “unmanaged” memory harder to design, implement, and explain to prospective users.) If/when I get to “other things” I’ll add a reimplementation of tri-color marking and implement GC as a co-routine to application activity, drawing just a little inspiration from Apple’s Objective-C retain / release / autorelease pool paradigm. (E.g. temp objects get held in “Scopes”; when the Scope ends, the abandoned objects get collected..) ↩︎