Mike Dalrymple Mike Dalrymple

API Gateway Fundamentals with Terraform

This post introduces the basic elements of the AWS API Gateway and demonstrates how to deploy a useful API Gateway microservice using Terraform. This service will answer the common “What is my IP?” question by providing the client’s IP address, User-Agent, and the time the request was received. All of this is achieved with just an AWS API Gateway service configured with Terraform, no Lambda functions required. Preconditions This post assumes you have an AWS account, local credentials, and the necessary IAM permissions to create, update, and destroy AWS API Gateway resources.

Phone Numbers with Angular Material Design

I recently struggled with creating a phone number entry field in an Angular application that uses Material Design components. This post describes how I solved the problem and provides code that might be useful for your project. My basic requirements for phone number entry were: Phone numbers must format as they’re entered Data entry must be limited to digits International numbers must be accepted (for countries I support) Users must be able to paste formatted phone numbers in the field Pasted data must be properly reformatted and validated Valid phone numbers must be available in E.

V4 Signatures with Go on Lambda

The AWS Go SDK’s V4 Signer requires Credentials. While you can create Credentials with an access key and secret, when you’re running in Lambda you should get the credentials from your function’s assumed role. The documentation doesn’t provide a clear example of how to do this, but it’s easy. Credentials can be found in session.Session.Config.Credentials. The following snippet will create a v4.Signer with the credentials from the configured session. Setting the SharedConfigState to session.

Discover Your IAM Role With: sts get-caller-identity

When I’m working with AWS managed services like Beanstalk, ECS, Lambda, CodePipeline, CodeBuild, or whatever, I often have difficulty remembering which roles and policies these managed services are operating under. The aws sts get-caller-identity command provides a quick solution to this problem. As the documentation says, it… Returns details about the IAM user or role whose credentials are used to call the operation. aws.sts get-caller-identity documentation You typically find the AWS CLI installed on the services I mentioned so you can just run the command (no permissions are required to run it) and it will very clearly display the role (or user) you’re currently operating with.

Locking Down Your S3 Buckets With Terraform

Every time I hear about a company’s critical data being left exposed on the internet, I start thinking about my S3 buckets. I recently started creating some buckets with Terraform and realized acl = "private" isn’t as private as we would like. With that setting it’s still possible for objects to be put into the bucket with less restrictive ACLs. You know you only have "private" set when you see the text “Objects can be public” next to the bucket in the console.

The iPhone Switch

I’ve been using my iPhone XS for about 3 weeks now after my hellish Google support experience. So far the transition has been mostly painless. Here’s what I’m enjoying from the hardware side of things. Battery Life There’s a Google billboard off the 101 on your way out of San Francisco where Google claims the Pixel 3’s battery life is superior to the iPhone XS. My experience has been quite the opposite.

Don't Wait for the SFO Hole

I took this morning off work to take advantage of the “crummy” weather we’re having, so I could shoot some approaches in real Instrument Meteorological Conditions (IMC). The ceiling was 900’ and visibility was 3 miles in mist at San Carlos (SQL) when I was ready to depart. These were probably the lowest conditions I’ve departed in since I’ve received my instrument rating but I was confident that I could make it back to San Carlos if I had any problems during takeoff and on my way down from the city I noticed there was a sizable break in the cloud cover over SFO so that was an option as well.

Flying the Bay Tour

For the first weekend in March, we had some amazingly clear weather last weekend. It gave me an opportunity to take some friends on a couple trips over San Francisco in what is commonly referred to as the “Bay Tour”. When I got back into flying a few years ago, I was eager to fly the Bay Tour. Unfortunately, most of the information I found online talked about how incredible the flight was rather than more practical information about what to expect as a pilot.

OSUN, Where Art Thou... Going?

While my flight instructor Martin and I were working with the autopilot last weekend, we also spent some time working on flying with a partial panel. This practice is intended to simulate the failure of one or more instruments on the panel. For this particular “failure,” we simulated losing the directional gyro and attitude indicator by applying round covers that obscured the instrument faces. These are gyroscopic instruments that rely on a vacuum pump to operate, so we were essentially simulating a vacuum pump failure.

Letting George Fly

When I was shopping for a plane two years ago, my goal was to get a capable IFR platform for my instrument training and eventual instrument flight. Not being an instrument rated pilot, I leaned on my friends and flight instructor for advice. The overwhelming response was “you gotta have an autopilot.” The point simply boils down to safety. While you’re on an instrument flight in instrument meteorological conditions (IMC), you have your hands full.

Precision Counts

I topped off a busy work week with a busy weekend of air work. On Saturday afternoon we departed San Carlos for Salinas to do the Localizer DME runway 31 approach, my first with a DME arc. We had practiced DME arcs the previous weekend out in the central valley well away from any significant terrain. As you can see from the approach plate, that isn’t the case with this approach.

Brief the Approach

Last Sunday’s flight was a real workout including holding patterns, DME arcs an approach to Tracy (KTCY) and Los Banos (KLSN). The biggest lesson of the day was to brief the approach before flying the approach. Martin was playing the role of air traffic control while I was under the hood. After vectoring out of San Carlos, he had me cross TRACY intersection at 3,500’ and proceed direct OMWAP for the RNAV (GPS) Rwy 26 approach.

Peanuts Approach

November 96988 proceed direct Woodstock, cleared RNAV GPS Runway 32 approach. No, we weren’t flying in upstate New York, we were flying into the Charles M. Shulz airport (KSTS) in Santa Rosa, California. Let me take you back to last night when I got a text message from my flight instructor suggesting we plan a trip up to Santa Rosa to practice some enroute work and new approaches. As I was reviewing the available procedures, I was delighted to see the many references to Peanuts characters in the waypoints.


After passing my Instrument Rating Airman Knowledge Test last May, I began working through the flight training over the summer. Unfortunately work and life just got in the way but I have recently picked up the training again and will hopefully be able to complete the complete certification this time around. I had a training flight scheduled with my instructor, Martin Michaud, this past Friday which happened to coincide with the arrival of an arctic storm system blowing into the bay area.

Slides: 1964-67 Utah and Nevada

My dad, Joel Dalrymple, used to love taking pictures and giving slide shows. I was really young when he would give the occasional impromptu slide show at our house but I do recall them being lively affairs. I can’t do the presentation any justice but I’ve started getting some slides from his collection scanned and posted on Picasa. This first carousel was titled “Friends Utah and Nevada 1964-67”. The following are some choice shots, you can see the full collection or download full sized images by visiting the album on Picasa.

Symphony: Numbered Headings

I want the headings in my documents to have heading numbers. That way when I’m speaking to someone on the phone or via email, I can have them quickly navigate the document (e.g. “It’s in the first paragraph of section 2.2 on page 14."). If you’re coming from Word, figuring out how to do this in Lotus Symphony isn’t necessarily easy but this lesson should show you how. Set Up To get started, create a new Symphony Document with a few headings.

Beer Bread

When I was going to college in Boulder, one of my favorite treats was the beer bread at the Walnut Brewery. I don’t make it back to Boulder very often so I like to make the bread here in San Francisco using our very own Anchor Steam Beer. The following is a slightly modified version of the original. This recipe really brings out the beer flavor so make sure you use a beer that you enjoy the flavor of.

Lotus Symphony

Last fall IBM introduced their Lotus Symphony product (re-introduced really). This time around Symphony is a reworked version of the Open Office suite of business applications (word processor, spreadsheet, and presentation) integrated with the Eclipse application framework. I’ve been a huge fan of Eclipse since it first appeared as a replacement for the IBM Visual Age development environment. Eclipse has since grown into a multi-purpose framework for developing cross-platform applications.

Symphony: Docking the Style List

When you style your Symphony documents you should really use custom styles rather than individually styling your text. By using styles you can update the look of your document without having to go page by page making changes. A quick change of the appropriate style will propagate the change throughout your document. Symphony Documents provides you with an easy way to view all of the styles available in your document. To view the list go to Layout -> Style List… This will pop-up a window with the list of all your styles as seen below:

SSH Tunnels

Usually the Internet works great and I can get to everything I need to from wherever I may be. Sometimes, however, I find myself in a network with a firewall that blocks access to something I want. At times like those I revert to using SSH tunnels. Unfortunately (depending on how you look at it) I don’t find myself in those situations often enough to memorize the proper command syntax. Hopefully this blog entry will save me the hassle of sifting through Google results for the solution.