Note: Please don’t share this on Hacker News – I don’t need the grief from gatekeepers telling me I don’t know how to write a compiler. This is an account for myself and for friends. /hugs I said in my previous post, I Built a Ruby Parser, that I would write about my ongoing compiler project Natalie, but I really wanted to finish the compiler rewrite first. I’m proud to say the rewrite is finished!
Sorry, this post will read like a “dear diary” entry rather than some life-changing HN-worthy guidance. Back in November 2020, almost on a whim I started work on a new parser for the Ruby programming language. It was almost exactly a year after I had started working on my compiler project (I hope to write a longer post about that someday soon), and in my frustration with the state of affairs with Ruby parsers available to a humble C/C++ programmer, I decided to see how hard it would be.
Hi! 👋 My name is Tim. I like to create stuff. You can follow me on the birdsite. Indeed, I have left Twitter at least once, but for now, I’m back. :-) In the day I work for a company called Planning Center, which builds really great software for churches. At night and on weekends I like to tinker with things that bend my mind, such as compilers and algorithm challenges.
First, some background 🔗My church uses Planning Center Check-Ins to track attendance for churchgoers, and to help with security with little ones going to kids areas. It’s a great product. Yay! Check-Ins runs on iOS, Android, macOS, and Windows machines. Yay! Dymo label printers are cheap and plentiful. Yay! Check-Ins can print to a Dymo printer from macOS or Windows, but not from a tablet. Boo! The problem 🔗We want to print to Dymo printers, which are inexpensive, from an iPad.
I’m very proud to announce the completion of my first programming language compiler! Malcc is an incremental and ahead-of-time lisp compiler written in C. This is the story of my progress over the years and what I learned in the process. An alternate title for this post is: “How to Write a Compiler in Ten Years or Less” (There’s a TL;DR at the bottom if you don’t care about the backstory.
Recently I switched to the Sway window manager on my favorite laptop and realized that ClipIt does not work there. I was reminded of an old Ruby script I wrote way back in 2012 to serve this purpose. Time to dust that thing off and make it work with Wayland! I installed the excellent wl-clipboard by Sergey Bugaev and started hacking. Here is my script: Here’s how to use it:
Recently I made the decision to shut down the church.io website (it’s now a redirect), delete the corresponding Slack community, and move the GitHub repositories back to my own personal account. Church.IO failed to build the community of software creators I dreamed of. Mistakes were made. This is a retrospective, and an explanation for anyone wondering where we went. What Was it? 🔗“Church.IO” was created in 2011, intended to be a lovely little community of developers and designers who code and craft open source software specifically for churches.
Late in 2017, I politely said good-bye to Twitter and deleted my account. My Twitter account was 10 years old, and the anniversary, as anniversaries often do, prompted me to think about the value of a decade spent microblogging. I remember when Twitter was a quiet site for geeks, and my first tweets were about HTTP servers and Git and SliceHost (remember them?). And my geek friends replied sometimes. And there were no politics.
Note: We no longer use this. I have an updated post for the new setup. Our church uses iPads and Dymo printers for children check-in. Parents check in their child, a label prints on the printer, and they stick the label on the child’s shirt. We use Planning Center Check-ins of course, and it’s great! One downside to Dymo printers, however, is that their software only runs on Mac and Windows, necessitating a full computer connected to the printer.
CanCan is a wonderful plugin for Rails that allows you to define all your authorization logic in one place. For small apps, it works well. But as my app’s authorization needs grew more complex, I realized I needed a different approach to declaring and testing authorization. So I went looking… It turns out that the Authority gem is exactly what I was looking for: Authority splits out auth logic into individual “Authorizers”.