Time is the fire in which we burn.
— Arvada, Colorado UNITED STATES
So, the last time that I wrote a blog post here—nearly a year and a half ago—I was talking about a new software project that I had been working on for, at the time, about six months. I had said that the project was “pretty much already done”.
That part about it being pretty much already done… was not exactly the truth. There was also another lie: the one about my starting the project six months before the last blog post. In truth, I started this project back in college. Untruths aside, I think that my software project—despite being still unfinished—is done enough that I can finally let you in on the secret.
So, context: I grew up in what could be described as an evangelical environment. Each religion seems to have its holidays—and Christianity is no exception to that rule. However, my particular brand of vodka of Christianity certainly hadn't gotten that memo. Growing up, I seem to remember three Christian holidays: Christmas, Easter and Palm Sunday—end of list. I make the joke that, despite being Pentecostals, we didn't even celebrate Pentecost. Of course, my church also celebrated Independence Day, Memorial Day or any other day set aside for nationalistic glorification with the same sincerity because it conflated nationalism and spirituality (a disturbing trend that's a topic for another time).
Anyway, despite having just three holidays, there was still this awareness that there were other holy days. Of course, you couldn't escape Saint Valentine and Saint Patrick's days. Some people reminded us that Halloween had it's origins in Christian tradition before being appropriated by… satanists or something ('cause, you know, satanists and their candy…). Around Christmas time, you neither can't escape the barrage of Christmas carols—among them, “The Twelve Days of Christmas”. This raises the question: Twelve days? Well, which twelve days are these twelve days: the twelve before December 25 or the twelve after? (Spoiler alert: It's the twelve days after.)
Attending a Christian university, there was a little more exposure to these other holidays. Once, a professor asked us students if we were attending chapel on this particular day because it was “Monday Thursday”. What the !@#$ is “Monday Thursday”?, I thought to myself. Fortunately, that was the beginning of the Wikipedia age where, if you really want to know something, an answer was no further than the closest computer. (However, this was still before the smartphone age where answers now are no further than your pocket.)
Being a computer-science student, during my senior year, I chalked together a little one-page, PHP script that, for any year that you gave it, would spit out a liturgical calendar. It was pretty minimal; it showed just a few holidays, it marked the beginning and the end of the liturgical seasons and it showed each particular day on the calendar in its appropriate liturgical color, but that was about it. PHP has a built-in function that made calculating the date of Easter easy, so there wasn't a great deal of effort that went into it. After a bit of time, that calendar just stayed forgotten in the deep recesses of my website.
Let's jump ahead about eight years. I'm now in a new religious tradition. Specifically, it's a tradition that is overflowing with various “holy days” (which is the etymology of the word holiday). After a few months in my new church, I pulled out the old calendar that I made in college and reworked it.
By reworked, I mean I burned down the old PHP calendar script that I made and started fresh. I made a second “object-oriented” attempt that was more trouble than it was worth, so I burned that one down too and started over a second time.
Third time's a charm… as the saying says. It is still a work in progress, and I've spent countless (as in, I've literally lost count) hours working on this, and I anticipate that I'll be spending plenty more. I still don't feel that it's “ready”, but, if all goes according to plan… it'll never be ready. However, I just discovered that my calendar has started to show up in some Google searches, so I've decided that it's time to release it. Just yesterday, I registered liturgical-calendar.com and moved the calendar from this website over to its new domain.
My new website displays the liturgical calendar of the Anglican Church of North America (which itself is a work in progress). In addition (while I haven't yet built any sort of way to switch between the two—it is a work in progress after all), I also included the liturgical calendar according to the Episcopal Church's 1979 Book of Common Prayer.
I could really talk a while about the nice features that I put into it, but I will just mention a few:
One, in true linguistics-nerd fashion, the capability to have the calendar available in multiple languages was built in from the start, and, as such, I included translations into Spanish and French.
Two, the calendar provides links to other websites for scripture readings. However, Anglicans don't necessarily use ordinary Bible translations when reading the Psalms. Typically, a separate psalter is provided within each of the various versions of the Book of Common Prayer. Since I couldn't find a decent website with the psalter, I created my own website of the psalter. The psalter website still needs a lot of work, but that in itself was a monumental task for something that's kind of an afterthought.
Three, while the calendar was programmed in PHP, I also rewrote all of the functionality in JavaScript as well so that moving from page to page within the site becomes lightning quick! For this project, I actually programmed it TypeScript, a computer language from Microsoft that adds static typing to JavaScript and then compiles to JavaScript. The lack of static typing is a frustration for me in both PHP and JavaScript (among other computer languages), and I'm thrilled that tools now exist for static typing.
Lastly, while Christians in “the West” all use the Gregorian calendar for their feasts and fasts, I included functionality for the use of calendars used by Christians in “the East” such as the Julian, Coptic, Ethiopic and Revised Julian calendars. For good measure, I also threw in the Hebrew calendar too. While I'm not actually using this functionality right now, it's… there. In the future, I may expand the website to include calendars from other traditions besides just the Anglican one. However, to include this functionality, I am indebted to Edward M. Reingold and Nachum Dershowiz for their fantastic book Calendrical Calculations which contained and explained all of the mathematics that I needed to support all of these calendars (except the Revised Julian calendar which I had to create myself). When it became clear that I needed something to help me with the calculations, I read online that Reingold and Dershowiz' book was the one to use. After reading it, I recommend it for anyone seeking an understanding of calendrical calculations.
It's been a good deal of work, and it's been a great deal of fun. Going forward, I hope to continue to work on this project, and I hope that it can be of use those who have great liturgical-calendar needs! Also, I hope that this gives me more things about which to write blog posts. I encounter a bit of frustration when I see examples of software development that don't properly compute dates and times correctly. I've gotten into more than a couple of arguments at work about this. Hopefully, I can write a few blog posts on this topic in the near future to inspire good coding practices. Right now, it's a miracle that I wrote this one.
Tags: Calendars, Religion, Software Development