sloum


software

I spend most of my time in a terminal emulator. As such, a lot of the software I develop is for use within a terminal [emulator]. I mostly write things for two reasons: to learn, and to help myself do something in a way I can undersstand and control (ie. I get what the code is doing and can modify it as needed). In general none of my software supports the Windows operating system and is designed for a posix oriented system: linux, Unix/BSD, Darwin/MacOS, etc. I also love the Haiku operating system, but have yet to develop any native Haiku applications (C++ is a terrifying mess to me). I generally work on a FreeBSD system or a Linux system of some sort or other for most of my development.

My Software

I have many more projects than these. But this is a decent cross-section of the non-web software work I do for myself. There is a lot more in the various repositories on the links page.

Major Projects

These are the projects that I continue to put work into (though rarely these days for some of them). They have larger codebases, outside contributors, and some of them are packaged for various operating systems.

slope

slope is a programming language loosely situated in the scheme/lisp family of languages. Among a certain type of software developer or computer enthusiast it seems that everyone has their own Lisp and this is mine. It has most of the things you would expect (except tail call optimization, though not for lack of trying): macros, lexical scoping, dynamic typing, garbage collection, module system, package manager, vim/emacs/nano syntax plugins, optional modules (gui, clipboard, and a light gui system called 'dialog').

The language is easy to write, comes with quite a few batteries included, and is a great conduit for my thoughts when coding. It has a few other users and contributors as well; including one that supposedly has used it in production at their job. So that is fun!

They are not listed here on this site, but I write a lot of slope modules as well. Including: line-edit, ini, kvdb, and many more.

solo

solo is a basic version control system written in the slope programming language. It is designed for non-collaborative use and can be used as a backup system with branches. There is a sister program called 'soloweb' which can be combined with solo to create static hosting via solo's push command (which uses soloweb, tar/gz, and scp under the hood).

This is a non-perfect, but definitely good enough system for small projects and easy self-hosting. It allows a solo devleoper to share their code with users, while creating a simple/bespoke solution for their versioning.

bombadillo

bombadillo is probably my most widespread project. It is a multi-protocol terminal based internet client. It supports gopher, gemini, finger, local files, and text rendering of http[s] (with an additional dependency and user opt in).

I got very burnt out on this project as the gemini protocol gained popularity. bombadillo was an early adopter and I did not handle the influx of interest and requests well. Since I had made it for myself I found I just didn't want a lot of things that other people did. I pulled back from open development after this project in favor of providing code for people but not having public issues or pull requests (though I am happy to receive an e-mail wanting to know if I am interested in a patch). I really would love people to not contribute to mine, but instead jump of and make their own based on mine or inspired by it. In any event, bombadillo is still the client I use when I browse gopher or gemini.

Minor Projects

These projects are mostly tools for myself to use and muck around with. Anyone is welcome to them, but they are definitely designed with me in mind as the user (even more so than the above listed major projects).

Colorfield Books

Colorfield Books is a website I created to host the books that I produce. It is written in html/php/css and has an optional reader mode using a more or less drop-in javascript library.

nums/gnums

nums and gnums are two separate programs. They are stack based calculators. gnums is a graphical version of nums and embeds most of the nums code under a bunch of gui code. I don't use gui software often, but I like having gnums on hand as an option. I often need to do little calculations for things and often prefer a stack based approach... so these come in handy for me quite often.

Both programs were developed in the Go programming language. gnums uses bindings to Dear ImGui for the graphical components.

swim

swim is a program for creating project boards/swim lanes. It is an offline program that saves projects to file. The files can be synchronized via rsync or other for collaborative purposes, but the program is mostly intended for solo or centralized use (on a server where multiple users may access it, for example). It was written in Go and detects terminal capabilities to provide a nice looking interface.

tally

Terminal based spread sheets are a solved problem... but this was fun to write. It uses stack based operations, rather than infix, within cells. It was written in Go.

Abandoned Projects

These were either built for fun/learning, have been superseded by other projects, or just don't get much use from me these days.

chalk

chalk is a line based text editor. It was written in python and was meant to be a simpler (and intentionally less powerful) 'ed'. I sometimes still use it for editing gophermaps, but otherwise don't use it too often. I started a Go rewrite that tries to bring modal editing into a line editor. That project has mostly been abandoned as well. I just like vim too much. That said, a friend has written an editor called xi in my programming language, slope, that I contribute to and have a lot of fun with.

slosh

slosh was my attempt at writing a shell. It works. It is basic. It can alias and set vars and such. It was not meant to be a programming language like bash or the like... just a basic way to execute and pipe things. The deal breaker that I couldn't get working right is suspend via ctrl+z and then resuming. The resume was always broken. I read a ton on the subject, but just didn't get it and what I did get seemed trickier than I wanted to deal with for this particular project. It was a fun learning experience though! Feel free to give it a try. It is a mostly capable, if basic, shell.

nimf

nimf was my first programming language. It is in the style of Forth (stack based). It doesn't bring a lot of new things to the table but jeez did I learn a lot working on it. In the end it was just too cumbersome to use. I did write a gopher client in it though! I run it every now and then for fun, but have abandoned it in favor of slope.

The local documentation listed below is pretty thorough if you decide you'd like to give the language a try. It is modules, has local variables, is tack based, and has configurable memory space. There is no grabage collection and strings can be funky to work with but are doable.