March 8, 2021

A Lectionary Browser

Recently, I have been working on an interactive Lectionary Browser. A lectionary, in case you do not know, is a collection of scripture readings used in the planning of Chrisitan worship in some Christian communities. The most common lectionary is the Revised Common Lectionary, which is the focus of my little app.

The RCL consists of a three-year cycle. Each year contains a year's worth of readings for every Sunday of the Christian Year and also some special days. And each day is part of a particular season that corresponds to the time of the year. The seasons are the same every year, but the readings for each day are different.

The RCL names it's years with a complete lack of creativity. The first year is named "Year A." Guess what the others are called? Year B and Year C! So clever. But they are somewhat thematic as each year tends to focus on one of the synoptic Gospels (Matthew, Mark and Luke) and all of the years turn to John for special days.

The seasons used by the RCL are Advent, Christmas, Season After Epiphany, Lent, Easter, and Season After Pentecost. The Season After Epiphany and the Season After Pentecost are somtimes referred to as "Ordinary Time" but the use of the word "ordinary" is confusing. It does not mean that they are dull. Rahter, it means they are "ordered" or "ordinal" and thus follow the pattern prescribed by the lectionary.

For my app, I first created a Ruby on Rails back end that served as an API for the lectionary readings. My application supports muliptle lectionaries, though I only modeled the RCL. In the future, I could add additional lectionaries easily. The Lectionary Browser also provides a RESTful interface, so resources are found via logical URL structure. All requests made to the RESTful API are responded to with standard JSON responses.

For the frontend of my app, I wrote a React app that uses Redux for state management. Redux was the most difficult part of this project for me because it is conceptually a little complex, but as I build the app and started using it in a real application, I started understanding how it works.

I made a nice video to show you how the app is supposed to work:

The hardest part of this project for me was getting my head around Redux and how it is supposed to work. Redux is a tool for managing state, which is something React does natively, but the React model is somewhat limiting. With Redux, you can provide pieces of your state to your components as you need to from a centralized store where all your state is stored. In order to accomplish this, the Redux packing provides tools for creating your store and manipulating it. Another package, called "react-redux" makes Redux integrate nicely with your React components by connecting them to your Redux store - with a function cleverly called "connect."

Once you have your components thought through, and the data they will need discerned, you can connect them to your Redux store and retrieve the data you need for that component. Changes can be made, but you have to be careful that you don't mess up your state, so Redux uses Actions and a Dispatch function that manages your changes to your state. Your actions are simple functions that describe your changes, and dispatch is a function provided by Redux that safely updates your state. While it sounds complicated, and it is a bit, it actually makes state management much simpler.

I hope to continue working on this project, adding a user model and note taking capability among other features. So, perhaps, if I find time, I will make this app more useful.

October 20, 2020

My First Hackathon

Last week I participated in my first ever "hackathon."

A hackathon is an event where teams of programmers and nerds address a particular problem with a technological solution over a set time period. Often these are 24 hour or weekend spanning experiences that encourage sleep deprivation and poor diet choices. Ours however spanned the whole week since it was conducted virtually to accomodate the COVID age.

The Future of Forestry Hackathon focused on the forestry industry in New England and was partially sponsored by Do North Coworking where I sometimes hang out. I was part of a three-person team randomly put together as part of the hackathon. Getting to know each other and work well together in such a short time frame was one of the challenges of the hackathon, but we ended up working well together over Slack and email. We decided to tackle the first problem statement:

How can environmental and geospatial data be used to evaluate potential logging margins to ensure they are commensurate to the financial risk associated with harvesting wood? Reliable margins in logging can be challenging to come due to unforeseen environmental factors. In many cases, market value of the harvested wood doesn’t reflect the time and risk associated with the harvest for specific trees. Whether the most valuable trees are two miles in through dense forest requiring significant time and fuel or the tree is on steep slope making it very dangerous or challenging to harvest, the market pricing doesn’t reflect these factors, nor do loggers have the tools to do this evaluation.

Our solution focused on providing a core set of tools for assisting in the process of valuing standing timber and risks associated with harvesting that timber. We used GIS data provided for us as part of the challenge to map a small farm and provide information related to the timber on that farm and how to navigate the terrain. We also created a calculator tool that allows for inputs from a harvester to calcuate the potential financial value of a paricular tree.

A number of problems arose as we worked on this project. I was surprised at how difficult it is to find regional pricing information for harvested timber. I assume these prices are confidential and that lumber mills who buy harvested wood don't really want to share their prices. It would be a neat project to find a way to report pricing information or to work with an industry group to encourage more pricing transperancy. I think more clarity about pricing would assist harvesters in evaluating the potential reward for their efforts and also find suitible buyers for thier produce.

It was a lot of fun for me to work on this project and I look forward to another hackathon in the future. For my contribution to the project, I configured a Linode server and installed the necessary software. I set up NodeJS and used ExpressJS to build out a webserver. I also created the Tiber Tally calculator feature. My partners did the heavy lifting on all the GIS stuff and the CSS/design pieces. There is currently a server up and running, but I won't be able to leave it up forever since it's cositng me a little money.

Since we are in the Northeast Kingdom of Vermont, not a lot of teams finished their projects. Despite quite a bit of initial interest, only three teams submitted final projects and one of those teams was not able to present because of internet problems. Nevertheless, I am proud to report that our project was selected the winner! Not bad for my first hackathon.

October 9, 2020

Looking forward to Winter

This year, I am hoping for a long, snowy winter.

Last year our winter was cut short on account of COVID. This year our winter will be different because of COVID. Ski resorts are posting their precautions and rules and though they vary from place to place, the bottom line is that things will be different.

Most resorts, as far as I know, are not opening their indoor spaces. So, you won't be able to enjoy lunch (at least inside) or an after-ski beer. That will be tough! But if we have good snow, I don't think I'll care. I'll just focus on the positive and enjoy some good skiing.

This will be my third season downhill skiing. I did not grow up doing this as a kid. In Texas, snow was an extremely rare oddity. I remember one year we got a "snow" and the news covered it. A kid had made a respectable snowball, but it required all the snow on his front lawn. The grass was green underneath. That was the biggest snow I remember.

Now, I am pretty used to snow. And I'm excited for season three on the slopes. Here's hoping for a cold, snowy, long winteer. It will be a welcome distraction from all the other crazy things going on in the world.

October 2, 2020

Another Overstatement

This is yet another Overstatement.

I am moving my blog again - in part as a learning exercize. This site is now running on Nginx, being createed with Jekyll. I configured the server, so here's hoping it is all working right...

And maybe with this new set up I'll post a bit more. That would be good for me.

Thank you to all my fans.

February 25, 2019


A lot of people have left the church. I've entertained the idea many times myself. But I never really thought the church would leave me.

Today, the United Methodist Church, in which I was baptized, grew up, ordained, and for many years served as one of its clergy, voted to essentially split over the "issue" of homosexuality.

A lot of details remain to be clarified. But the ultimate destiny is now clear. The United Methodist Church will collectively stick it's head in the sand and declare that homosexuals have no place in their club. Those of us who envision a church defined by more than it's narrow understanding of human sexuality and who wish for the church to welcome everyone, regardless of anything, will be left to create a new church born from the broken remains.

Among reasons for churches to split, this must rank among the most petty.

This is the message the United Methodist Church has for gay and lesbian people: you are not acceptable. You do not belong. You are not welcome. Think about that. That's the good news from the UMC. What future is there in that? Do conservatives honestly think that they will march gleefully into righteousness by excluding and condemning a marginalized group in our society that has only recently started to find their place in our culture? Is that the basis of our church? It is so critical that we express this cruel and exclusionary position, rooted in homophobia, that our church can split in half.

The plan that has passed is called the Traditional Plan. How appropriate. What church thinks it's future lies in clinging to tradition?

Sadly, this move will do little to address the underlying problems facing the UMC. Those who think clarifying the church's position on homosexuality will lead to a new era of growth are not only out of touch with reality, they also don't understand the fundamental problems of the UMC. Like our structure. Like the itinerancy. Like our property laden congregations. Like the lack of viability of many of our churches. Like the guaranteed appointment. This is not a plan to address any of the problems facing the church. This is a plan to satisfy a self-righteous agenda attempting to preserve some self-perceived holiness in a misguided attempt to enforce sexual norms that literally have nothing to do with the gospel of Jesus Christ.

I am saddened by this news. But like all bad news, there is also some hope. Perhaps this moment will empower the emergence of a new kind of church, that will address the long-standing issues facing the UMC and at the same time offer some good news for all of God's people.

In the meantime, I feel churhcless.