XML::Compile with an Extension Namespace
Starting this May, mortgage folk are going to be required to send Freddie and Fannie data including additional data points in ULDD phase 3 extension. At face value, adding these additional data points shouldn’t be a big deal at all. However, the legacy code I’m maintaining used XML::Compile to generate code. For various and sondry reasons — which I will not go into here — XML::Compile in the code I’m maintaining was in a place where it was extremely difficult to add XML elements that weren’t included in the original base Mismo 3.0 namespace.
Read more...Cron in Docker with Debian Slim
Recently, I needed to get cron working inside a Docker container running Debian Slim. It’s not difficult once you figure it out, but it did take a bit of research and learning to get everything to work.
First off, Debian Slim is real slim. There’s no cron nor is there a syslog when you want to debug things. Add apt-get install cron and rsyslog in your Dockerfile before you start anything else. With syslog installed, you can tail /var/log/syslog while you’re debugging your cron files, which is incredibly helpful.
Automated Weekly Sermon Podcast
Each Sunday at Church of the Epiphany we record our sermon using someone’s mobile phone. We started doing this back in September and, for the last three months, editing and uploading these sermons to our website has been a fairly manual process. Starting this month, however, with a combination of JustCast, Dropbox, Hazel, Squarespace, and Auphonic I’ve been able to mosty automate the process.
1. Download & Rename

Each week shortly after worship, Fr. Justin e-mails me the audio recording of his sermon from his phone. His Android phone defaults to .m4a for audio, so I’ve setup a simple Hazel rule to monitor my download folder for that extension so the file is quickly renamed and moved off to my external archive drive.
Word to Markdown Conversion with Footnotes
Many of the essays on this site start their life in Microsoft Word or Scrivener. Early on, I would have to convert essays to Markdown for posting manually. This generally worked okay, but I lost my footnotes. I tried Word to Markdown for a brief while, but it didn’t work entirely as I’d like it to. Enter Pandoc. I’ve been using Pandoc to convert all of my Word documents — including footnotes — for the last two years. I’ve been delighted with the results.
Read more...East Nashville Antenna Television Update

Almost a year ago I blogged about my new antenna set-up here in East Nashville. All in all, I’m still happy with my decision to drop cable and switch to antenna and streaming services. The Tivo Rovio OTA has proven to be money well spent. The Tivo is extremely easy to use and seamlessly binds OTA recordings with Hulu, Amazon Prime, and Netflix. Because the Tivo supports Plex, I’ve also converted an old Mac Mini into a Plex server. Our TiVo-centered over the air setup is better than cable ever was!
Read more...Sea Walls: haud responsalis sed peccator
Recently I saw a call for more people in enterprise IT to start blogging. Following that call, I’ll offer some reflections.
The foundation of a healthy IT culture in the enterprise starts with IT leadership and, especially, front-line IT management focusing on building a great working environment for developers. If developers are overextended, overworked, are not able to innovate, and are not given the dedicated time needed to solve problems, there is no hope for the transformation of corporate IT.
Read more...Perfect Perl Kwalitee
In the time since Date::Lectionary was added to CPAN, I’ve been working hard to get a perfect Kwalitee score and make a really solid distribution. Documentation on how to make a module are all over the place and I’ve yet to see a good, single article or post to explain how to do it. This is my attempt, I hope you find it useful.
Required Files
README
I like keeping my POD within the code of the module I’m developing and having the README file(s) automatically generated from that. Below is a simple shell script I’ve developed as part of my authoring process to generate well-formed readme files in Markdown, POD, and plaintext. Having all three formats means that GitHub and MetaCPAN both have what they need to render my README as best as possible.
Read more...My WSL Perl Development Environment
Recently I bought a little Windows tablet on sale for $60 as a device to play around with Windows 10 on and for — hopefully — testing a future UWP or PWA Windows version of LectServe. I’ll give a review of the NuVision tablet at some point in the future, but after I spent two! days getting Windows updated to the newest release, I quickly enabled the Windows subsystem for Linux and installed Debian.
Read more...Mary, Mother of God, Most Blessed Human
The second iteration of the Women’s March garnered much attention this weekend. From outward appearances in the news and social media, version 2.0 of the Women’s March was even less unified than the inaugural event of 2017. Saturday’s gatherings across the nation involved feminists, Black Lives Matters, labor movements, immigration activists, Democrats, and a host of other concerns. Though headlines were careful to present female-only images of the events, candid photos on my social media feed show many men co-opting the movement as well. — I should also note how the movement is already experiencing commercialization and participation in the march commoditized (especially via social media posts). —
Read more...How my View of Salvation has Changed
After a semester studying soteriology, how has my view of salvation changed? It has not. I have, however, increased my ability to articulate my view.
Salvation is an unwarranted gift of grace from God offered to all of humanity. All the children of Adam and Eve are born into sin and death. Humanity has distanced itself from God and has brought corruption into God’s good creation. God, in his infinite mercy, looked down and saw that there was no one to rescue humanity from her fall, so he decided to save her himself (Isaiah 63:5). As his voice created all things ex nihilo at the genesis, so his eternal Λόγος came “mighty to save” (Isaiah 63:1) and to make “all things new” (Rev 21:5).
Read more...Full-Text Search using Hugo & Lunr
Adding full-text search to a statically generated Hugo site is a fairly easy process. As I’ve mentioned before, I’m already using Gulp to compile and minify my site. Using that Gulp file as my starting point, adding full-text search is a simple three-part process.
To enable search, I decided to use the Lunr.js library. Lunr is simple to use and has just the right amount of features for adding some simple search capabilities to your site. To start, you’ll need to create a JSON index of your site for Lunr to use. I put this layout under _default and called it search.json.
Translation: Conciliatio Locorum Scripturae, Chapter 21
A modern English translation of Andreas Althamer’s 1527 Dialloge hoc est, conciliatio locorum scripturae, qui prima facie inter se pugnare videntur extended and translated into early Modern German in 1528 in Nürnberg (Nuremberg) and published as Diallage, das ist vereynigung der streytigen sprüch der schrifft, welche im esten anplick, scheynen wider einander zesein.
Diallage: Das ist Vereynigung der Streytigen Sprüch der Schrifft, Kapital XXI
Ich wil verhörten das herz Pharaonis / Exo. 4.
Pharao hat sein herz verhert / Exodi. 8.
Nichts streyten auch dise zwen sprüch / denn das herz Pharaonis ist ein mal verhert aus dem gericht Gottes / nacher nit mehr erweyckt. / Got hat im kein new hertz geben und das staynen herz von im genumen / sonder in seiner blindheyt gelassen / das er an im erzeygte sein glori. Darumb leydt nicht daran du sagest. / Pharao hab sein herz verhert oder sey im aus dem rath Gottes verhert worden. / Denn was Gott in uns thüt / das thun wir auch. / Was die axt thüt / das thut der zymmerman auch. / (Was der werckmeister thüt dz instrument auch) / feyrt er / sie auch wirckt er sei mit. / Der hamer schmidt mit dem schmid und ist baydes war / das fewz macht das eysen weych der schmid macht das eysen weych. / Pharao war ein vaß des zorns / und wiewol er etwo von seiner boßheit durch die mirakel und zaychen erschreckt / abstund / so ist erdoch bald wider in sin art geraten. / Er mochte nit warlich von herzen layd tragen uber sein boßheit / denn das staynen herz ward nicht von im genumen / sonder ye mehr und mehr wurde er verhert / nicts bewegt von wunder und zaychen. / Dann die natur Gottes ist / das sei die gotlosest mehr und mehr verstockt, / verblendt, und böser macht. / wie die sunne den schelmen stinckent macht / und die böse augen haben gar plendt / ist doch die ursach nicht in der sunnen / sonder an den augen und schelmen. / Also erregt Gottes wort die art der gotlosen / wo es auff sie scheynt / und ist doch den gotlosen wesen feynd / Psal. 5 wie die sunne dem gestanck / was für einer natur eyn yeder ist / also wirckt das wort in im. / Ist er aus Got geporen und ein Christ / so wirckt es in im leben und selickeit. / Ist er Adam und nicht widergepron / so wirckts nichts denn todt und verdammus in im. / Wie die sunne das wax waych macht, / den laym hört / das gras grün das hew dürr/ und ist doch ein sunne / die in einem yeden wirckt was es ist / und ist ein ursach aller ding on schuld.
Read more...Build, Minify, and Upload Hugo to S3
Though I’m not a huge fan of JavaScript, I include a small bit of it in this site to track page views and to generate the tag cloud on my search page. Since my project had already been polluted with JavaScript, I decided a while back to go all in and use WebPack and Gulp to bundle my JavaScript code, build my Hugo site, minify everything, and then upload the whole thing to S3.
Read more...Automate Slack Status with IFTTT
Recently I came across the need to automatically update my status in Slack. I have class Monday and Tuesday afternoons/evenings which requires me to leave work a little early. As I’m often rushed, I don’t always remember to set my status. This has, at times, left my team waiting on a response to a message I won’t see for a few hours.
Luckily, using Slack’s legacy tokens and following the guidance of Made by Munsters I was able to use IFTTT to quickly automate the updating of my Slack status.
Read more...Hugo Site on S3 and CloudFront
For a very long time I’ve hosted this site at Nearly Free Speech. I’ve been happy at Nearly Free Speech, but with the launch of LectServe and other IoT and Serverless projects of mine on the AWS stack, it made logistical and financial sense to consolidate on Amazon.
Moving my Hugo site to Amazon was a fairly simple affair. First I setup a simple S3 bucket to drop my Hugo generated files to. Nothing special there at all. Next, I setup a CloudFront distribution to handle TLS and serve the files on S3. With a simple change in my domain’s DNS record everything worked perfectly. Perfectly except that all my URLs had to end in index.html to work…