It was 2021. Spring pollen competed with birdsong to fill the air. Sneezes abounded. We needed to relocate my mom, but were having a rough go of it. Finding the cash to finance a move and purchase a dwelling of some kind was proving elusive.
I took an inventory of my skills:
Skill Level Construction (houses) Basic Software development High Musical talent Mediocre Busking at the waterfront on the weekends might pull in a few hundred a month — more if they pay me to stop.
Recently a friend asked me about copying his Raivo OTP database to Aegis. Those are both solid MFA apps. The only problem is Raivo only works on iOS, and Aegis only works on Android.
His Raivo database had hundreds of entries, so it would have been a real pain to manually set it up in Aegis. Plus, keeping them in sync would be an additional pain.
We searched for an existing open-source conversion tool, but came up empty-handed.
So I built a nice budget app for Android and iOS. A core feature is sending you an alert when a bill is nearly due. Each platform required a very different approach to reliably schedule and trigger those notifications. This… is that story.
Scheduling stuff is hard Have you ever received an alert from an app for something you deleted? For example, you keep getting a reminder to pay your “Doggie Daycare” bill, but you don’t even have a dog anymore?
You’ve got a bunch of DNS zones hosted on Verizon’s Edgecast, and you’d like to move them over to Azure DNS. Sounds tedious and error-prone. Let’s use the API’s for Edgecast and Azure to automate copying over those DNS records.
All but the most trivial code needs some configuration and setup to do meaningful work. From database connection strings to IoC container initialization — even the lowly idempotent Hello World app is dependent on the implicit default configuration of its environment.
In the physical world, we like instrument clusters, dashboards, things that bring together all the buttons, switches, dials, and toggles into one convenient place. Configuring our code should be no different. Wouldn’t it be nice if managing all the config things were as easy as driving your car?
Well, meet your new friend, Dicese Slex, (Dih-CHESS-ee Slex, for the uninitiated). He’s a cool don wearing silk system threads, and he’s here to spruce up your configs. At the very least, he hopes to get you thinking about the importance of code configs.
“Voice hoarse, I heaved a huge shoulder-slumping sigh. I’d just wanted to maximize the thing. Instead there I was yelling at all the kids on my lawn, throwing rocks at a cloud, ranting on about non-existent terms like Trust-Driven-Development. Who hurt me, you ask?”
It was the forth annual company campout and we were huddled around the fire pit swapping horror stories gathered from the dark depths of the software industry, holding the fire at bay with an array of steely s’more forks.
Wouldn’t you like to know when MailGun fails to deliver an email? Or worse still, when someone complains about an email you sent?
MailGun can notify you about the following events:
Clicked Complained Delivered Failed Opened Unsubscribed There’s just one catch: You have to write your own webhook, then subscribe to those events with your webhook’s URL. If that thought left you cross-eyed, fear not! The reign of cloud computing has made this simpler than it used to be, especially the introduction of functions as a service.
Wouldn’t it be cool to send out an SMS SOS with the touch of a button? Like your own private SMS Bat-Signal!
I’ll show you how to do it using Twilio and an Azure Function. Here’s an overview of the simple architecture:
/--> | |--> 📱 |--(HTTP POST)--> [ Azure Func 𝛌 ] ---> | Twilio |--> 📱 \--> | |--> 📱 Simple, right? Let’s paint the clouds red, 160 characters at a time.
🤜 💥 🤛
Scenario: You’re using an Azure Logic App to update a Salesforce record using the Salesforce API connector.
Problem: The Salesforce connector doesn’t make it easy to send a custom update request. It wants you to name all the fields you intend to update. But what if you don’t want to update some of those fields, based on some condition? Well, you were up a creek — until you found this post.
Grab a bowl of buttery popcorn because the saga continues! The end of the previous chapter saw our intrepid little Rails app camping happily on Heroku. This latest chapter in the hosting chronicles brings with it a twist: not just a change in host, but a complete migration from one programming language to another.
Onward for the Why’s, How’s, and Gottchas of the switch.