Since the Hare programming language became public, it has been subject to some passionate criticism regarding a perceived lack of memory safety. I agree that memory safety concerns are very valid as shown by clear evidence, so the question becomes: should we write Hare off because someone online said it’s not strictly memory safe? I think that Hare can mitigate many of these problems today,…
Overview My backup tool bupstash stores backups in a repository as an evergrowing set of encrypted data trees which use content addressing and structural sharing to deduplicate data. In order to delete unused backups we need to do something very similar to how many programming languages free unreferenced memory - garbage collection. This post will explain the evolution and implementation of the…
Recently I have been spending time on improving the performance of bupstash (my encrypted backup tool), and wanted to compare it to some existing tools to try and find its relative performance in the backup tool landscape. This post compares bupstash, restic, borg backup and plain old tar + gzip + GPG across a series of simple benchmarks. What do all these tools have in common? They encrypt data…
You know backups right? Those things you never got around to setting up… well no need to feel guilty any longer, today I’m excited to share my new backup tool - Bupstash! So why is bupstash cool? Bupstash lets you make encrypted, deduplicated and secure backups. Bupstash is fast, focused, and places strong emphasis on both security and privacy. Backups can happen to local drives or…
One aspect that always bothered me with rust projects are the seemingly huge number of depdencies that get built whenever you do a fresh build. This post is just a log of what I did to lower compile times of my open source encrypted backup tool bupstash and reduce my dependency burden. First, lets get a starting point on dependencies and compile times. The full dependency tree: $ cargo tree…
This post is the first public announcement of my new package manager and deployment tool for linux - hermes. Hermes provides features like: Atomic deployments. Atomic rollback. Remote builds. Sandboxed and reproducible builds. Avoidance of version conflicts. Avoidance of centralized infrastructure. Build everything from source. Shared caching to avoid excessive rebuilds. Those familiar with Nix or…
You need to go through quite a lot of ceremony in most programming languages to run a sub command. This post covers my design of a domain specific language to solve this problem for Janet. First, let’s set compare simple tasks you might perform during a typical script with some existing languages and tools. Run a command or abort. Shell: set -e git clone $url Python:…
In this post I will demonstrate how we can load native Janet extensions at runtime to add powerful new functionality to your janet programs (In this case Janet Shell). For this demo, we will be installing a native JSON extension and loading it into a running shell session so we can do JSON manipulation from the terminal. Installing the JSON extension The first step is to choose where to install…
Having a big mouth is at times one of my character flaws, so a while ago I made a few resolutions: If I say I will do something, I should always follow through. If I get the urge to complain about something, I should work on a solution. Not long after I couldn’t help myself while talking to a friend: “I want a new system shell that is small, fast, good for scripting, and also supports…
In this post we will write a Janetsh script that will do some parsing and scraping of command line output. Janetsh itself is my new shell and scripting tool based on the Janet programming language. The task we are trying to solve is connect to a remote git repository, list all the remote version tags that are also semantic version numbers and print the tags as useful json values. Writing the…
Just a quick post to release a new vscode plugin I have written - Acmeish, inspired by the acme text editor from plan9. The general idea of the plugin is to allow you to use system commands to manipulate text in your editor buffers in a convenient way, so the IDE blends better with the host system. The video does a far better explanation than what I am capable of describing in writing.
I just discovered stacked git which is an alternative ui for git, and am very impressed. It solves a lot of headaches I have been having with git and I feel like it may be a better user interface for people who like careful commits. Maybe it doesn’t get attention is deserves due to (in my opinion) a hard to understand website and little promotion, so to help spread the word here is my 2…
I did it. It wasn’t easy, but I did it. My C Compiler can compile itself. Even though it still has holes in functionality and obvious bugs, It gives me a funny sense of pride that my compiler can now be used to improve itself. I consider it a significant milestone, and this post shares an overview of what was involved. Lets look at the breakdown… Timeline and Commits ~ 188 days of…
I am busy implementing the C AMD64 calling conventions in my C compiler suite and have a topic worthy of a post. It is about testing the C ABI (How C programs layout structs and perform function calls). The old Linux C x86 ABI was relatively simple, to call a function you pushed arguments onto the stack in reverse order and you are done with it. Unfortunately for me, most people now use AMD64…