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/console environment. 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.

A git host I used for a long time went down permanently. Some things have not been moved to other hosting. I am self-hosting some things. Others may have accurate links to them but their docs may cite old hosts. Over time I will be working to clean up the mess.

My Software

These are just a few of the projects I ahve worked on. I write little things all the time, but do not always update this page to show them.

Programming Languages

nimf

I originally wrote nimf in golang. It was the first programming language I wrote. I recently rewrote it, with some changes, in C. It is a stack based language, strings are kind of rough to use (but are there). It supports really basic file and socket operations as well.

fa

fa is another stack based language. It is based on FALSE, but has been expanded to include string handling, file handling, more variable space/memory, and more. It is my first medium sized project in C that did not come from a tutorial (all mistakes are my own, lol). The reference counting still has some bugs in it, especially surrounding closing files that are saved to multiple places in memory. It is coming along, though, and I have started to maybe just a little bit get the hang of some facets of C programming. It is less scary than it was, though I do not know what I would do without Valgrind (yes, I do: leak memory).

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 (unhygeinic), lexical scoping, dynamic typing, garbage collection, module system, package manager (currently broken), vim/emacs/nano syntax plugins, optional modules (gui, clipboard, and a light gui system called 'dialog' that leverages system prompts).

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!

felise

felise is the successor to nimf. It is a stack based language, but this time it is typed and has a larger focus on variable use, procedures, and more-automatic memory management. It improves the usability of nimf substantially.

nimf (legacy version)

nimf was my first attempt at writing a 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 and felise.

The local documentation 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.

Bird - vm & assembler

Bird is a stack based virtual machine and an assembler for that virtual machine. Both were very much learning experiences and are not up to the quality of, for example, slope. They aren't really meant to be used and were more about the experience of writing them.

Utilities & Applications

sled
A text editor with a subset of vim/vi functionality. It started out as a go port of the Kilo text editor and has morphed in various ways that suit me. The only two things I want it to have that it does not: unicode support and soft wrapping. Maybe someday.
solo

solo is a version control sysem (vcs) written in my programming language, slope. It is a version control system designed more for backup and personal editing rather than collaboration. It features commits, branches, and merging. There is a companion program soloweb that will generate a static site for a solo repository. When using soloweb it leverages ssh, tar, and a few other core utils common to posix systems to achieve pushing static html repos with downloads and cloning available.

slp

This is the package manager for slope.

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.

numc / gnums / nums

These are three separate programs. They are all stack calculators that use reverse polish notation. nums was the original and is written in go for a terminal environment. gnums uses nums under the hood for the calculator portion, but is gui-based (rather than terminal), numc is a port of nums to the C programming language.

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. I host documentation for it here.

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.