Making, Maintaining, and Monitoring Many Weird Things
I am a polymath who specializes in computers. I write software, much of which is Free. I maintain a few services, all of which are Free. All of this, and technical support, I provide to those who ask, gratis, because I believe in helping people. Unfortunately, my hobbies also include having a roof over my head and food in my belly, and neither of those things are gratis.
I have very severe PTSD as a result of my childhood. It is severe enough that the US Social Security Administration considers me unemployable. This is technically not a permanent disability, but the road to recovery is long and painful... I have been walking it for 12 years, and I still have a long way to go. In the past, I have only rarely brought up these issues in public... but recently, I have come to believe that I have a duty to stand up and be counted, instead of being one of the millions of invisible sufferers. I do so not for my own sake, but to raise awareness in general.
I try to live frugally. I conserve water and energy. I use computers for way too long—my laptop was manufactured in 2007, and my workstation (which does not still have any of its original parts) was originally built in 2009 and last upgraded in 2014. I have few other possessions, and do not generally seek more. Unfortunately, no matter how hard I try, I cannot "frugal" myself out of every single bill. Electricity, Internet, rent, food and water aren't free.
In case you're reading this and you don't already know who I am, here are a few of the less-weird things I've worked on. If you find one of them interesting or useful, consider boosting my income by a few cents.
libsn- A simple, embeddable, super-portable C++14 library for localization. I have some issues with gettext's approach, so I made a library of my own.
libsndoes not depend on a particular storage method for its message catalogs; it includes an optional module that can find them in the filesystem, and/or you can write one of your own—perhaps integrating with a game engine or providing messages from ROM.
sntools- Some tools that come in handy for managing
lsx- A lightweight independent(ish) implementation of SHA-256 and Twofish, with bindings for C99, C++, and Lua.
logi6502- A Logisim component library providing an emulated W65C02S 8-bit CPU as a circuit element. It is probably* cycle-accurate down to the smallest behavior of each pin. (*See the linked page for an explanation of the "probably".)
overbuild- A general-purpose command line tool for Linux, which runs a script whenever certain directories / files change. I use it with
cargo buildto provide continuous builds while developing. It might be useful for other purposes too.
slugger- Yet another
rsync-based personal backup solution. Some assembling required.
tez- A C++14 library for embedding large data files (message catalogs, precomputed functions, etc.) directly in your executable.
tinytext- A very small bitmap font, designed to be readable by humans and computers. This allows you to create a "graphical file format", where text written in this font is actually also machine-readable data.
- The ARS - A fictional 8-bit video game system that might have existed in the late 1980's; created as major electronics company Eiling Technologies entered a death spiral, it was overpriced, overengineered, and undersupported. If you're interested in 8-bit development but find the specific limitations of real 8-bit consoles slightly too limiting, have a look.
ars-emu- An emulator for the console. Runs on Linux, Windows, macOS, and in the web browser.
ars-init- Initialization and interrupt handling code for the ARS in a few flavors. Includes a rather nostalgic boot-up screen in the
ars-intl(not ready yet) - Unicode-based localization/internationalization support for the ARS, including bidi support. In addition to solving the "text problem" for you,
ars-intlmakes it easy, if desired, to open source the localizable components of a game without having to open source the rest.
ars-tracker(page, source) - An HTML5-based tracker, similar to FamiTracker, for authoring music content for the ARS. Still very much in beta. (This is a collaboration between me and Admiral Potato, whose other work you should definitely look at as well.)
tracklib(not ready yet) - Compiler for
ars-trackermodules, and a playback library that can play the compiled modules on the "real" hardware.
arstifacts(page, source) - A web page that simulates the video output hardware of the ARS, and the input and display hardware of a rather nice CRT from the early 90's. It allows you to quickly preview the ARS's particular display artifacts. This simulation was proved with extensive testing via a video card jury-rigged into a general-purpose DAC and connected with jumper wires and scotch tape to a real vintage CRT. (A higher-performance version of this simulation is included in
ars-emuas an optional feature.)
hubris- A "programming language" that provides a layer of variable allocation and function call safety on top of 65C02 assembly. Specifically designed to aid development on the ARS, but may be useful to 65C02 development in general with some tweaking.
ars-hubris-skeleton- A skeleton of an ARS game written in Hubris, and a simple build system. Suitable starting point for ARS development.
desperation(extremely not ready yet) - An open source 8-bit roguelike survival game.
- TTTP - A protocol for networked "ASCII" art games like NetHack and Dwarf Fortress, as well as fullscreen TUIs in general. Includes authentication, encryption, and compression. Over LANs and moderately low-latency WANs, provides excellent performance.
libtttp- Portable implementations of both the client side and server side of the TTTP protocol. Written in OS-agnostic C99. Depends on
lsxand the GNU Multiple Precision Arithmetic Library, and nothing else. Uses very close to the minimum resources possible, and supports every feature of TTTP, including (theoretically) Unicode mode.
tttpclient- A TTTP client. Known to work on Linux and Windows, and should be possible to get working on macOS. Supports every feature of TTTP except Unicode mode.
dfstream3- A Linux-only (maybe macOS too?) shim for Dwarf Fortress that, with some work, transforms it into a TTTP server. This allows you to play Dwarf Fortress remotely, and optionally to allow spectators to watch you play in high-fidelity while using very little bandwidth. I occasionally use it to play Dwarf Fortress on my slow laptop, while actually running it on my [less] slow workstation. Does not support graphical tiles or TTF fonts.
- The Apocalypse Computer - A design for a rugged, extremely long-lived computer. Dead until I miraculously scrounge up the cash to build the prototype.
- 16-bit W65C816S CPU
- Main memory is a few megabytes of non-volatile MRAM, replacing both ROM and RAM in normal use
- Custom programming environment, providing a 100% non-volatile "reboot-free" operating system
- "Recovery ROM" for when the above inevitably screws up
- Small eInk display (subject to change depending on failure rate research)
- Rugged, electrically-simple keyboard
- Integrated Flash memory containing a Wikipedia database dump
- "Universal" power supply, capable of running the computer off of anything that provides at least 1V and 50mA (two bare PV cells or a single AAAA battery would suffice), and capable of utilizing up to about 250V
- High-spec components, with MTBFs measured in decades
- RS-232 and parallel GPIO ports
SolraBizna さんは 3 年前 に参加しました。