Updating the SFO Museum Wayfinding Service - Publications

This is a blog post by aaron cope that was published on June 12, 2023 . It was tagged wayfinding and golang.

Postcard: American Airlines, Douglas DC-3. Paper, ink. Gift of Thomas G. Dragges, SFO Museum Collection. 2015.166.0232

We are pleased to announce the launch of printable “publications” for the SFO Museum Wayfinding Service. These publications are PDF files depicting all the SFO Museum galleries and exhibitions and public art works from the San Francisco Arts Commission on display along a given route at SFO.

Each publication starts with a “table of contents” page showing a map of the route and all the exhibitions, galleries and public art works along that route. The name for each exhibition and publication art work is listed alongside the page number where photos and text about each object are included. There’s also a QR code at the bottom of the page which links to the corresponding wayfinding route on the Mills Field website.

Every exhibition and each public art work has its own “title” page that follows the same model: A map is displayed on the right with the complete wayfinding route and a marker for that work along the route. A small image and the title of the exhibition or object is displayed on the left-hand side of the page and there is a QR linking to that exhibition or object on the sfomuseum.org website below.

Public art works are followed by a single page containing a larger image, a descriptive text and credit line information. Exhibition objects are displayed using a two-page layout for each object. The first page contains a title and descriptive text. The second page displays the title, a large image and credit line information. The texts for individual objects are often longer than the space afforded on a page that also contains an image so we’ve split them in two.

The last page of every publication is a repeat of the map depicting all the things along a route and a QR code the online feedback page on the SFO Museum Wayfinding website. In the coming weeks and months we plan to add support for additional formats like the ePub standard used for electronic books. That is further discussed later in this blog post.

How does it work?

Once you’ve selected a route a new icon and link to create a custom publication for that route will appear in the top right-hand side of the page.

For example, here’s what the link to create a custom publication for all the things along the route between the Grand Hyatt Hotel Lobby to Gate B18 looks like:


From this page, you can choose whether or not to limit your custom publication to only include exhibitions from SFO Museum or public art works from the San Francisco Arts Commission. The default choice is to include both.

You’ll also be prompted to enter an email address which is used to send a time-sensitive confirmation code for your custom publication. Your email address is only used to send a confirmation code and a link to the finished publication. SFO Museum will not share it with any third parties or use it for any other purposes.

Once you receive the confirmation code and have entered it in to the form we’ll schedule a new task to generate your publication and send you a separate email once it’s complete. This second email will contain a link to your publication that you can download and save to your computer. Note that these links are also time-sensitive and will expire in 24 hours.

Why are we doing this?

Employee t-shirt: Virgin America. Cotton, ink. Gift of Lisa Larsen, SFO Museum Collection. 2018.071.026

In the Updating the SFO Museum Wayfinding Service - Galleries, Public Art, Flights and Barcodes blog post I wrote:

Eventually, we can use that same information to compile a PDF file, or a video or even, eventually, an audio guide or podcast about all the work, past and present, that a passenger has passed which they can take with them on to their flight. Not enough museums follow their visitors “out of the building” or offer them the means to continue to think about what they’ve seen after the fact. This remains the great untapped opportunity for all museums but especially a museum in an airport since, in many ways, “leaving the building” is what an airport is all about.

Custom publications are a first attempt at designing and producing artifacts which can be thought to “follow a visitor out of the building” (or the museum (which also happens to be the airport)). Think of them as training wheels towards achieving that goal. We believe that the objects and public art works on display at SFO Museum and SFO are worth seeing in person but that doesn’t, and shouldn’t, preclude the ability to enjoy these things when you are not at SFO.

You might choose to create a custom publication to read on your flight after you’ve gotten to your gate and are waiting to board your plane. You might choose to create a custom publication that you can print out to explore public art works and exhibitions pre-security even if you’re not flying out of SFO. You might choose to create a custom publication for a friend who has a layover at SFO and isn’t sure what to do. Remember that you can already travel from one end of Boarding Area G to the other end of Boarding Area C and from one end of Boarding Area A to the other end of Boarding Area B, post-security, at SFO. Once the new Harvey Milk Terminal 1 building is complete (sometime in 2024) you’ll be able to do the “full loop” of all the terminals post-security. That’s a whole lot of opportunity to see whole lot of art at SFO (not to mention everything in the SFO Museum Aviation Collection and these publications can be your custom guide along the way.

A note about formats

Plat: San Francisco Department of Public Works, Bureau of Engineering, proposed airport site. Paper, ink. Transfer, SFO Museum Collection. 2000.018.079.009

The initial launch of publications only supports one format: PDF files. In the coming weeks we plan to add support for another: EPUB, a commonly used format for e-books. PDF files have broad support in all mobile and desktop computers and are familiar to most people. It’s also well-suited to printing since that is the heritage the format springs from. Some people have criticized PDF files because they are a less open format than others (like EPUB) and because they typically are designed for letter-sized pieces of paper that may not display well on mobile devices.

This is one of the situations where everyone is right but we had to start somewhere and we chose to start with PDF files. The goal for these publications is to support as many different formats as people desire (and is practical to produce). Creating publications as e-books, which enjoy better display options for variable-sized devices, is coming soon and if there are other formats you think we should consider we’d love to hear about them.

The rest of this blog post gets in to some technical details about how we’ve implemented publications for the wayfinding service. If that’s not interesting to you this is a good place to stop reading and go try creating your own custom publication.


Of if you’d just like to see the example publication, of all the exhibitions and public art works on display between the Grant Hyatt Hotel Lobby and Gate B18, shown in this blog post you can download it here:


Note that this PDF file is 35MB and 179 pages long (reflecting all the work on display at SFO at any given moment). Okay, on to the technical bits.

Under the hood

Photograph: Lockheed 18 Lodestar, Fairbanks, Alaska. Photograph. Gift of Philip Smith, SFO Museum Collection. 2021.069.168

In addition to the code that generates PDF publications for a wayfinding route we’ve also developed discrete components for storing and processing offline tasks (like producing a publication), generating, delivering and validating access tokens (for the confirmation codes) and localizing dates and times in messages (in order to tell a person when an access token will expire in the timezone where they are located). These were all developed in the spirit of doing the extra work to produce and share small focused tools by and for the cultural heritage sector.

The cultural heritage sector needs as many small, focused tools as it can produce. It needs them in the long-term to finally reach the goal of a common infrastructure that can be employed sector-wide. It needs them in the short-term to develop the skill and the practice required to make those tools successful. We need to learn how to scope the purpose of and our expectations of any single tool so that we can be generous of, and learn from, the inevitable missteps and false starts that will occur along the way.

We are committed to open sourcing the first two components but they are still a bit rough around the edges and haven’t been properly documented yet. We have released the last component, though.

Localizing dates and times

Time converter: Pan American World Airways. Cardboard, ink, metal. Gift of the Pan Am Association, SFO Museum Collection. 2000.058.1498

We want to be able to localize dates and times for people visiting SFO Museum websites and in order to do that we need to know “where” they are. Not precisely where they are but just what timezone they are in. To accomplish this we are using the openly-licensed MaxMind GeoLite2City IP lookup database which is bundled as an embedded file in the sfomuseum/go-geoip2 package and used to derive the timezone associated with the IP address a person has requested a custom publication from.

Embedding the MaxMind data produces some abnormally large binary tools but these file sizes are understood to be an acceptable trade-off. The reason we don’t mind the large file size is that we deploy the service to derive a timezone for an IP address as a simple AWS Lambda Function URL where, aside from the time it takes to upload the service in to AWS, its file size is sort of irrelevant. Deploying the service as an AWS Lambda Function URL with an embedded database means we don’t need to think about configuring our service with dedicated filesystems, databases or containers (to manage filesystems or databases).

Finally an AWS Lambda Function URL deployment has the attractive quality of “scaling to zero” so we are only charged when the function is invoked (like when we need to derive a person’s timezone from their IP address) rather than running a dedicated server 24 hours a day. This was previously possible using the plain AWS Lambda function paired with an AWS API Gateway pattern but what Function URLs allow is removing the API Gateway piece from the puzzle so that there are fewer moving parts to keep track of.

Here’s an example of what that IP address to timezone service looks like run as a web service locally on my computer:

$> curl 'http://localhost:8080/timezone?address='

And here’s what it looks like running as a AWS Lambda Function URL deployment:

$> curl 'https://{FUNCTION_URL_ID}.lambda-url.{AWS_REGION}.on.aws?address='

This is not all the service could do, since it has access to all the interesting data that the MaxMind databases provide, but it is all the service does today. It is very much a “small focused tool”, a fast and cheap solution to a specific problem that can be plugged in to a larger purpose-fit application. It works for us and we hope it might be useful for you too.