Technology Solutions for Everyday Folks

Tagged with 'php'

Reflections on Advent of Code 2023

Screen snip of a portion of the AoC "map" for 2023

I finally gave Advent of Code a shot for 2023! In years past I'd think about/stumble across/remember it a week or two in and automatically 'nope' out of starting. This year, in large part due to the WinAdmins Discord, I was both reminded of it in advance and also had a small community of other folks taking part (and a private leaderboard to watch).

Read More

Upgrading All The Things to Ubuntu 22.04

One of my "winter break" projects this year was to get all of my disparate Ubuntu server instances upgraded and into parity. Last year I wrote about my adventure moving WSL Ubuntu from 18.04 to 20.04, which happened before 22.04 was officially released. In that process I noted the longer-term target of moving to 22.04 which brings us to the here and now!

Read More

Adding Push Notifications to the Tempest WeatherBot

Slack Tempest WeatherBot alert notification for a close lightning strike

This is the "final" installment of my summer 2022 blog series about the development of my Slack Tempest WeatherBot.

Read More

Adding External Data to the Tempest WeatherBot

Slack Tempest WeatherBot in-channel alert notification from NWS API data for a Dense Fog Advisory

This is the third in the short series of my journey building the Slack Tempest WeatherBot. In this post I'm walking through the steps to incorporate external data from the National Weather Service (NWS) API for alerts and forecast options.

Read More

Expanding Interactivity with the Tempest WeatherBot

Slack Tempest WeatherBot App Home tab display with current conditions and daily statistics

In the last post I wrote about the basics of building the Slack Tempest WeatherBot and its basic set of command arguments. This post builds on those commands with an overview of expanding the Slack interactivity by adding a bot app home tab.

Read More

Creating a Slack Bot for Tempest Weather Station

Image of Tempest weather station with device features highlighted

In summer 2020, I picked up a WeatherFlow Tempest station...a purchase I'd been considering for the better part of a year. It's an awesome and compact little thing, and on the whole I've been super happy with it. In my location it tends to over-report rainfall as the haptic rain sensor is also sensitive to vibrations on the mounting point (a pole in my yard).

Read More

Upgrading an Old Application to 21st Century Passwords

I have a confession to make: I've ignored a Really Bad Password Form on an inherited web application for about at least a decade too long.

I'm not proud, but every time I considered changing the password mechanism to something more modern (and more secure), decision paralysis would set in...in great part due to the design challenges I anticipated in quietly upgrading this for users of the app in question.

Read More

The MMSMOA Retweet Bot in Action

Cartoon robot image of the @mmsmoabot with breastplate advertising MMS and the bot Twitter handle

Hot on the heels of last week's triumphant return of the "MOA" edition of MMS, I'm writing up a post-conference review of my somewhat-accidental creation: the MMSMOA Retweet Bot.

I shared the bot's story with a number of folks during the conference, often while peddling the bot's stickers, but several folks also encouraged me to share the details via blog post as well so here it is!

Read More

In-Place Upgrade of WSL Ubuntu 18.04 to 20.04

About two months back (early March to be exact), I had the opportunity to finally deprecate some old versions of applications and packages due to planned retirements and upgrades. Most specifically a full-on move to PHP 7.4 was in sight, though there were other bits. I run and have access to a bunch of different environments so it felt right to get environments back to a standard (or at least closer) base configuration.

Read More

Improving DMARC Compliance: Authenticated SMTP Relay

I've done a lot of server migrations for very unrelated reasons over the last six months or so. Many of these host applications that send emails, and I've implemented the basics to get them sending DMARC-compliant messages. This has generally been limited to DNS SPF records for each host configuration. Generally speaking, having SPF or DKIM compliance is 'enough' to get your messages not flagged as spam, though it can depend on the DMARC policy configuration.

Read More

LAMP to WAMP: Adventures in Server Migration

Server migrations are an inevitable task, but I found myself in a different than normal circumstance recently. A planned server stack retirement, combined with the server "owner's" technical capacity and expertise required a change in platform. Specifically, this shift meant moving from Linux to Windows.

Read More

Moving a Legacy Drupal Stack to a New Server Host

One of my "end of 2021 break" projects was a planned "lift and shift" of my primary Drupal instance to a fresh, sparkly new web host stack. The stack on which it resided was reaching end of life and for a few other reasons it was time to make the change. In preparation, over the last year or so I've been de-coupling and untangling some of the baggage that had accumulated on the old server and its structure over time. Relatively simple things like straightening out, consolidating, or consistently applying vhost configurations.

Read More

Reconciling Disparate Datasets

A few weeks ago I was asked to help update a centralized inventory dataset, which to us is definitely a "tertiary" system. Several hundred device records were associated with our part of the organization, and every time I opened the list I quickly "noped" out of doing anything with it. But the time came when I needed to actually do something with it lest I wind up on someone's naughty list.

Read More

Date Math is Gross

This year, I'm working with/mentoring a paid intern on a device monitoring project for a portion of our fleet. These sort of projects are always fun and meaningful in that we identify a problem or opportunity to improve, and then solve said problem in a way we've not done before. It works out well for everyone involved because we get an improved process or "thing," the intern gains some practical experience and skills (often with stuff they've never encountered), and the intern gets paid to boot.

Read More

Whoops! Cleaning up Mistakes via API

Gif with "I've made a huge mistake" as caption.

Posting again after kind of a lengthy break. It's summertime, and for lots of disparate reasons I've queued up topics but haven't had the ambition or taken the time to write them all out. So today we get a tale of automation mistakes and the subsequent cleanup.

Read More

A Twitter Bot for Dad Jokes

About a month ago, I discovered this gem of a tweet:

Read More

My First Twitter Bot: A Journey into Twitter's API

Dancing Robot

Sometime around Thanksgiving/November 2020, I formalized the idea that I would actually build a Twitter bot for the sake of novelty and as an experiment/learning exercise. One night at suppertime, we discussed what might be cool as a bot and those ideas are still on the list as possibilities for the future. Ultimately, I settled on a bot idea that built on some things I've used in the past (Google API) so I wouldn't have to learn All The Things in addition to building a bot and figuring out the Twitter API.

Read More

Pushing Data Into Google Sheets Sheets (Yes, Multiples)

Screenshot of basic sheet including multiple tabs/sheets (Excel)

If you recall from the last tech post about pushing data directly into Google Sheets, I promised a follow-up regarding the process of adding multiple sheets worth of data to a given parent sheet.

Read More

Programmatically Push Data to Google Sheets

Screenshot of a very basic CSV file of gibberish test data

I've written in the past about the ability to ship files to Google Drive via its REST API and PHP, which is a super-cool process in and of itself. In the last few months, I've been moving more and more of our internal data shipping processes to Google Shared Drives for ease of end user access. As folks started working remotely, moving data to Google has solved several support burdens regarding access and such.

Read More

Character-Perfect Fixed Width Import Files

Flintstones Cartoon Sewing Machine

One of my springtime projects at work was to button up a recently-refreshed process to transmit some billing data between systems. By 'recently-refreshed,' I mean 'finally made a process whereby a human doesn't have to manually generate a file which had been the de-facto process for the better part of twelve years. Due to the cascading effects of some staff turnover in the unit in question, IT was brought into the loop to help find a better way to work this process.

Read More

TRIM-ming up for Summer

Trimming a hedge with lawnmower attached to tractor loader

Not really TRIM-ming for summer, but taking the opportunity to briefly write about Rule #1 when dealing with unknown (or incoming) data.

Sanitize. Thy. Inputs.

Without going into great detail (as it doesn't matter at the end of the day), last week I encountered a vendor that apparently doesn't know how to do this very well. Or at all. What ultimately transpired is the complete failure of a reasonably-routine change process to capture a critical failure in production.

Read More

Batch Ship Data to Google Team Drive

Moving Data

A few weeks ago, I wrote a brief bit about capturing webcam images. This post expands on the initial process: specifically, what to do with the images once procured.

Read More

Capturing Your Internet-Connected Webcam Images

Puppet bird with binoculars

Over the years, we've had a few public Internet-connected cameras pointing at various places around campus. We've used them for publicity and other purposes since the mid-1990's, and starting in around 2010 would sometimes be called upon to create a sort of time-lapse video of activity from one of said cameras.

Read More

Auto-Transpose Data

Geeks and Repetitive Tasks Graph

Many years ago, an individual in our office retired and the position was not replaced. For several reasons, this was an appropriate decision: the landscape of IT and our localized service portfolio had, for lack of a better phrase, stabilized. Our team was more often innovating in ways involving or prioritizing partnerships over custom builds or infrastructure requirements. We were appropriately consuming centralized services made available as a commodity.

Read More