Globally Scoped

A Blog About Technology, Life, the Universe, and Everything.

Recent Posts

Captioning Tools Extravaganza!

published on
In this post, I’m going to cover a wide range of automatic captioning tools based on my personal experiences with them. This is not a comprehensive list - there are far more tools than a single person can test. For context, I’m deaf, and I’m not fluent in American Sign Language (ASL), so captioning is critical in both my personal life and professional career. Since 2018 when they started to become available, I’ve relied heavily on automatic captioning tools in both aspects of my life. Read More...

Some Blog Automation Notes

published on
I’ve finally gotten around to something I should have done a long time ago; I’ve moved the blog repository over to GitHub, and since it’s a public repository I finally set up GitHub Actions… so beyond testing posts locally, getting a new post up now is as simple as merging a new PR into main. Heck, I could even type up a new post on my phone, assuming I hated myself that much. Read More...

Maui Setup

published on
As noted in my housekeeping post, I’m wanting to play with dotnet MAUI; a more desktop focused approach to coding would be an interesting paradigm shift, and I have ideas cooking for apps I’d like to build. However, MAUI is still new and in flux, and the process of getting an app to initially run and compile proved immensely frustrating, and I ran into the same issues on both my Windows desktop and my Mac over a few days of messing with it. Read More...

Housekeeping Notes

published on
The blog lives! Some minor housekeeping notes: There is now a link to my Mastodon profile in the header. I glance at Twitter now and again, but rarely post there anymore since I am not one of Space Karen’s greater admirers. I’ve also actually set this up to show that the account is indeed mine as linked on the site. Mastodon makes that pretty painless, which is nice. I may attempt to post more frequently! Read More...

On Apple's M1 Macs

published on
Compared to the first-day adopters, I’m a bit late to the party here… but as of the end of February I’ve joined the ranks of ARM MacBook users. After two weeks or so of sustained usage, I’m impressed. The short version of how I ended up with it: I took my 2016 15" MBP in to the Apple Store (this was, I will note, a very interesting pandemic experience1) to get the keyboard and “service battery” message evaluated. Read More...

2020 in Review

published on
It’s been quite a while since I blogged consistently. Since I would like to develop a habit of writing again this year and there’s been a lot going on, it seems like a great time to drop a year-in-review post. Some background that I haven’t mentioned here: I was laid off from my old job in fall of 2019, then took a new contract-to-hire role much closer to home a few months later. Read More...

Better Know a Method! - Ramda's .Cond(), Part 1

published on
After spending a couple years away from C# and node.js programming doing a fair amount of ETL work and a lot of Java, I’m working on getting back into the swing of two of my favorite languages. Yes, I’ll admit it - my controversial take is that I actually like JavaScript a lot of the time. Like most languages, it’s not perfect, but it gets the job done as long as you’re careful (and do some testing) and its flexibility is both a blessing and a curse. Read More...

Routing requests through nginx by querystring

published on
I’m writing this up as much for my own future reference as I am to help others, since I found the documentation a bit lacking in this area. For reasons not worth getting into, I needed to build a proof-of-concept to transparently proxy requests to different servers based on a querystring value, using nginx as a reverse proxy. The TL;DR solution: worker_processes 2; events { worker_connections 1024; } http { upstream server1 { server web1:8080; } upstream server2 { server web2:8080; } map $arg_queryval $node { default server2; "abcd1234" server1; } server { listen 80; location / { proxy_pass http://$node; } } } This transparently routes any request to the proxy with a querystring argument of queryval=abcd1234 to server 1. Read More...

Flattening a List

published on
Getting back to writing articles after spending the better part of a month fighting off a sinus infection and helping my wife get over a nasty cold. Normally I love northeast Ohio, but I’m so over winter right now. I read a post a month or so ago asking why it’s so difficult for programmers to write code to flatten a list… so naturally, this got me thinking about it and I wanted to tackle it. Read More...

Bank Transactions with Ramda, part 2

published on
When we left off, we’d gotten our data imported from the CSV, run a map operation on it to add some extra metadata, demonstrated how to use Ramda to filter it, and had a quick demonstration of simple currying. Let’s move on. To recap, this is where we’re starting from: const fs = require('fs'); const csv = require('fast-csv'); const R = require('ramda'); function getTransactionsFromFile(fname) { return new Promise(async (resolve, reject) => { if (! Read More...


captions (1) devops (1) docker (1) dotnet (1) functional (3) maui (1) ml (1) nginx (1) node (3) ramda (3) vscode (1)