Home

Software

These projects are for Linux unless otherwise stated, although they may or may not work on other platforms.

Count: This is a python script that counts the files and directories in the current directory.

Countdown timer: This is a python command-line countdown timer.

Ki: Ki is a command-line app that allows you to access and create organized index-like content conveniently without painfully navigating through directory structures. It allows for symmetric encryption, choosing what app to open files with, and so forth. You can also name paths so you can go to them by that name. You may want to use this short bash script to make that even easier. To name a directory, enter it on the command-line and then type `ki -B`; select `a` and choose a name.

Language Checker (LangCheck) This Python script allows you to quickly evaluate the language and content of a text (it checks against things like profanity [including religious profanity], insults, drugs, gambling, violence, and sex) to see how family-friendly it is. It does require some education to use properly. It doesn't do all the work for you; it merely simplifies and considerably shortens the process. You run the text (or link) through the program and it generates a list of words that may or may not be concerning to you. You can look up the ones that might be concerning to you in the text to see if they're a problem. While it might seem a bit rough, it's remarkably effective at catching concerning language. It goes by the motto that it's better to catch things that aren't concerning than to miss things that are (that's why you have to evaluate the list yourself instead of letting it do all the work for you; another reason is that you're responsible for your own conscience; so, you decide which words make it). Trigger warning: the source code obviously needs to contain foul language in order to check for it (I don't recommend you peruse it). I imagine this would work on other platforms besides Linux, too.

Manual Chess: This is a manual Chess set in Python (using Tkinter for the GUI), made with the assistance of ChatGPT. It's designed to allow you to use the board and pieces however you want, so you can make up your own Chess variants and similar (it also allows you to play many current ones). There's no computer opponent, and it doesn't tell you how to move your pieces. See the source code for instructions on how to use it, including keyboard shortcuts. To load it, copy and paste the source code into a plain-text file and run it with Python 3.x. It's just one file (no images). I imagine this would work on other platforms besides Linux. FYI, I prefer to use the Python version over the JavaScript web edition, even though the web edition has some obvious advantages (I'm not really sure why, other than that it's easier to play my Chess variants when you can rely on casing instead of colors, in addition to how I prefer the way the pieces drag); plus, it's nice that I can make a keyboard shortcut to open it that doesn't have to open a whole web browser.

Manual Chess (web edition): This is version 0.2.3 of a JavaScript version of the above Python program with a few alterations (ChatGPT did the vast majority of the programming, translating from the Python app, with guidance from me). So, now you can play it in your web browser; just click that link. It has actual Chess pieces instead of letters. You can't put non-Chess pieces on the board. The keyboard shortcuts are a little different. You have to control+click to remove a piece instead of a double-click. It has some buttons. Other than that, it's about the same. Use s and w, and i and k to increment and decrement the score. Use h to shuffle and f to flip. You have to press the New Game button to restart the game. Like the Python version, it's just one file, with no images (the Chess pieces are Unicode characters). This app does not work with a touchscreen, yet. You can't change the board size, yet. This should work on other platforms besides Linux, but I haven't tested any. Bug: You can't drag a new piece from the panel to a spot you just vacated (but you can move it somewhere else and then move it there).

Mark's E-book Reader (MER): This is an old plain-text e-book reader or file pager that I made in Vala years ago. The source code doesn't compile on modern computers due to software updates (this is one reason I stopped using Vala and pretty much focused on Python after that. Nevertheless, you might be able to get it to run if you install some old dependencies (read the instructions for which ones you might want, if you use such as Ubuntu, Linux). The download does include an .exe binary for Windows, but I don't know if it works. I don't usually use this app anymore, but I do like how it handles margins (that seemed more difficult to replicate in Tkinter last I checked, which was long before ChatGPT existed).

NPK Calculator: This is a JavaScript calculator that lets you show the NPK of two fertilizers if you mix them together. ChatGPT wrote most of it, based on the logic I gave it. I don't guarantee it to be error-free, but as far as I know, it works.

Shule (version 0.2.0): Shule is a Linux text editor, authoring station, IDE, and plain text e-book reader. I personally find it very useful. It's written entirely in Python 3.x, using Tkinter. Some remarkable features include the ability to save and load favorites (by typing in a favorite name, but not by selecting it in a menu; a favorite is a named set of one or more filepaths on your computer); the ability to password-protect documents; sort ascending/descending, shuffle, reverse; change casing (uppercase, lowercase, title case); indent/unindent selection; ability to type special characters; open a terminal at the current file location; open a file manager at the current file location; customize fonts and colors; countdown timers and stopwatches; document statistics; fullscreen mode; bullet/number and unbullet/unnumber selection; timestamp; auto-indent; and so on. Shule works best when you're using a keyboard with a menu key, two windows keys, and insert key (used for compose keys), such as this one; however, you can reconfigure the compose keys if your keyboard isn't like that. It's currently optimized for Xubuntu 22.04.4 LTS. Often when a new Xubuntu version is released something needs to be edited having to do with the GNU Privacy Guard integration before it will work properly (GPG seems to change a lot). See the changelog.

Wikiweb: Wikiweb is database software (a library, mostly) that is designed to allow you to make complex two-way linking structures simply. You can do text-only data entry, and export your project to HTML, too. There are some features implemented for game design, too, such support for JavaScript to be run in the exported HTML when you click on links. This is a library (not an app). Wikiweb is a misnomer; it's not wiki software (the reason for the name is that it provides a data structure the likes of which would be nice if used in a wiki context, since it's a lot more flexible than a wiki-style category; but it's not for wikis particularly).

When I say it's database software, I don't mean it is efficient for large-scale purposes (and I don't mean it can't benefit from using another database, such as RocksDB, for its mode of storing persistent data). I basically mean it allows you to create a collection of individual data structures designed to be persistent. It is not a relational database model (it probably uses Pickle currently, and I know that's not super secure). I did plan to add users, groups, and security features, however. Wikiweb is not currently in active development (but I'm definitely not finished with it).

Planned software

A very fast reader-centric word processor and e-book reader

This idea began on 19 May 2025 (and was definitely there by 29 May 2025—although I've changed some details since then).

I plan to use RocksDB (which can handle extremely large datasets quickly in an offline context), using a special counting system for the keys (the counting system is designed to produce extreme short ordered keys, although the keys dont correspond to line numbers, and order isn't terribly important), with values that would probably be dictionaries compressed with MessagePack, with one of the values therein being a line of text in the document, another being the line number, others for revision history, others for next and previous lines, and so on. Linked lists would connect the lines to each other (the RocksDB keys would not do that). Only a manageable portion of the document would be loaded at a time (unless the document is not so large as to be slow thereby). The structure I have planned also would make the software ideal for a forum (AKA a message board). Anyway, this could mean an end to slow e-books and slow word processor files. It could preserve essentially an author's entire writing process in the finished product, if desired (this is largely on account of a novel line-numering system that it uses). However, it doesn't entirely replace traditional word processors, as it's meant to allow the reader to decide how it renders and how it shows up (the author does not fine-tune the way it looks; the author might choose some basic things, but most of the customization is up to the reader, to allow for a consistent and reliable reading experience between documents). Anyway, line numbering is not standard nor trivial in this system. The idea is to make it open files with millions or even billions of lines just as quickly and easily as files with a hundred lines (sacrificing quick access to line numbers makes it feasible to keep track of edit histories). I first planned to make a text editor instead, but I figured this was even more important in a word processor (since word processors and e-book readers are notoriously slow with large or complex files). Under the hood (at least), line numbers are static in this system: they never change (even if new lines are inserted behind them; this makes data much easier to reference, even when lines are added behind it later). I plan to integrate Wikiweb in with this and add a lot of the features found in Shule (Wikiweb would be for file indexes [each item in the index is equivalent to its own file, bearing the name of its key in the index; it would be useful for a dictionary or encyclopedia meant to accompany a book], but the indexes could be part of the document, rather than separate files in their own directory). Anyway, this is designed primarily for offline use; so, you could in theory store a whole forum on it and just pass it around via emails. It wouldn't really do tables and super fancy formatting like a normal word processor. It would focus mostly on text styles, links, headings, differentiation in fonts and things (although the reader would pick the actual fonts, and so each font would be defined by a purpose), maybe image insertions, and stuff like that. It would just do plaintext bullets for its lists (but it might render them specially)—I've never been a fan of lists you can't copy and paste reliably into a text editor.