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
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.) |
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, …?) |
-
Using
duplicate-files.rb
as a test case, I need to make tools to develop and implement more accurate estimation functions. ↩︎ -
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.) ↩︎
-
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. ↩︎
-
Variously Cypher, D100 (BRP / OpenQuest / Mythras) Everywhen (based on BoL), Traveller / Cepheus, Year Zero System (Mutant Year Zero / Coriolis / Vaesen / etc.) … ↩︎
-
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? ↩︎
-
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. ↩︎
-
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. ↩︎
-
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. ↩︎ ↩︎ -
SLAN implementations have as few external dependencies as possible: all documents are UTF-8, IO uses ubiquitous platform features on Java. ↩︎
-
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. ↩︎ -
A common reference-counting mechanism that maintains the count for all objects in a Table instead of on the object. ↩︎
-
A library for common behavior between E-String and M-String. ↩︎
-
A simple API to read data from an arbitrary source. Combines
lua_Reader
with codepoint. Created because Port seemed a bit like overkill. ↩︎ -
A simple API to write data to an arbitrary source. Combines
lua_Writer
with codepoint. Created because Port seemed a bit like overkill. ↩︎ -
Implementations of common data types eventually used by ExpObj and/or TypeLib. ↩︎
-
The plumbing of CSP: channels, endpoints, messages, etc. ↩︎
-
A Lua library to read and write structured messages through CSP channels. ↩︎
-
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..) ↩︎