Shaving the yak, a grammar parser-generator for modified EBNF, Part 1

I decided to shave a yak. I've been working my way through Bob Nylund's excellent Crafting Interpreters and I got as far as chapter 7 in which you write a parser for your grammar. In the chapter, Bob discusses the grammar that we are to implement in the book. I decided, on a lark, that I would write a code generator that takes (something similar to) Bob's grammar spec and spits out serviceable C# code that can parse the grammar.

Setting up Nginx Proxy Manager, Autorun Using SystemD, Run as User

I need a reverse proxy and to be honest, I'd like it to be as simple as possible. NPM [0] looks really simple. I'd also like to not have to worry about restarting containers when my server goes down. docker-compose.yml [0] We begin with the following docker-compose.yml: version: '3.8' services: npm: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt Running services as a user Let's not use root to run the services.

Setting Up Owncloud Infinite Scale Using Docker

There are instructions for setting up a tech demo at [0], but these instructions result in a complaint about not having jwt_something not set up. A redditor pointed me towards [1], which seems to be a more complete document. Demo Setup Grab the ocis image. docker pull owncloud/ocis Create some necesary folders. We'll use the first to store the server config information. We'll use the second to persist the data the server produces.

Home Server SSH Setup

Set up SSH on a headless server on your LAN. Installation pacman -S openssh Setup Add a user and network specific rules to sshd config at /etc/ssh/sshd_config. Also search for user specific auth files. AllowUsers web Match 192.168.0.* AllowUsers web root PermitRootLogin yes Match all ... AuthorizedKeysFile .ssh/%u_authorized_keys ... And enable the sshd service. systemctl enable sshd.service && systemctl start sshd.service We also need a public/private key pair to SSH in with.

Working with VMs and KVM on Arch Linux

I found that I needed a fresh Windows install to test some documentation against. I've not managed VMs on Linux in a long time. The last time I did this I used VirtualBox and QEMU. Dependencies I'll be using QEMU and `virt-manager` [0]. The documentation says to install the following packages: virt-manager, qemu-desktop, dnsmasq and iptables-nft. I found later on that I also needed some utilities for managing VMs (I ran out of space and needed to expand one of the virtual drives.

Running a LLM Locally Using Llama.cpp and a HuggingFace Model

So you've heard about this AI language model thing and you're curious about how to run an AI model on your computer. You've never done this before and it sounds at least interesting! Cool! I've never done this before, either! Get an inference engine, llama.cpp. First, let's grab the llama.cpp github repository [0]. git clone git@github.com:ggerganov/llama.cpp.git And build the repo using make. cd llama.cpp && make This will take a few minutes.

Pipeline Language

Pipeline is a language idea that filters data through a pipeline of functions. A simple pipeline might be System.StdIn -> System.Command(wc -l) -> System.StdOut that takes a line in, reads the number of characters, and spits out the number of characters in the line. True, you can do this with bash. Pipeline is strongly typed. Let's say we want to implement the above newline delimited, character counting functionality. The data enters as a stream.

Environment Variable Resolution in VSCode

Problem Linux environment variables declared in ~/.bashrc aren't pulled into VSCode when it starts. Specifically, I declared a variable export foo\'bar'= in ~/.bashrc. I launch VSCode using its desktop file (via the rofi launcher). Then when I execute a dotnet build process I find that the foo variable is unset in any of the shells that VSCode launches. Solution This issue arises because of how VSCode initializes in different contexts.


Christ, Breaking, Making 🔗In a few words, I am first a follower of the God of the Bible; Christ is my saviour. Second, I like to break things. I started early in life breaking things. Later in life I learned to fix things and eventually make things. I don’t have a software engineering specialty to speak of, and my interests are broad. “Jack of all trades, master of none”. I have experience with Python, JS, Java, C, C#, Scheme, and a few other programming languages.