Image for post
Image for post

Have extra money you’d like to invest? Congratulations! You’re on the first step to securing your financial future. Now that you’ve decided to invest, it’s time to decide which type of investment account to put your money into. If you have sufficient money to invest, you may need to choose several. But which accounts are best? And in what order?

The strategy I outline below is compiled from my own research and experience. I’m not a financial advisor, but I hope you’ll find this valuable.

Decisions, decisions

As a modern employee, you likely have several types of investment accounts at your disposal that are offered by your employer, as well as others available outside your employer. They are not all equal. …


Image for post
Image for post

I originally wrote this on November 5, 2015, when our daughter Brinley was six years old. I shared it on Facebook and am now sharing it with the rest of the world. Brinley is now ten years old. Most everything described below still applies; she’s just older and bigger now with a newer set of spinal rods and on oxygen 24/7.

With all that’s been going on with our daughter Brinley, I’ve had a lot of people ask about her condition and background. Since Brinley is now sleeping soundly I figured I would take a moment to write it up. I do this so others might learn. Maybe it will help diagnose a child someday. Maybe it will help others through hard times. Maybe it will satiate some curiosity. Whatever the reason, you’re invited to read if you so desire. …


Image for post
Image for post

In a prior article, I wrote about how the Adobe Experience Platform Launch team ❤️ open source. We strongly believe that open source matters to the community for three reasons: transparency, ease of implementation, and continuous improvement. In an effort to continue our open sourcing efforts, we’re happy to announce that we’ve open sourced the Core extension (see the code repository).

What is the Core extension?

Adobe Launch allows companies to deploy marketing technologies onto their websites. As part of the process, marketers build rules to define how marketing technologies react to events that happen while a user is on their website. …


Image for post
Image for post

Let’s get this out of the way: Much has been written about why a full software rewrite is a bad idea. I largely agree with the sentiment. It typically is a bad idea. It brings with it high risk and a high rate of failure. You should spend a meaningful amount of time considering the risks involved in a software rewrite before taking the plunge.

For me, I don’t particularly enjoy talking in absolutes and I’m unconvinced that rewriting software is a clear-cut issue. …


Image for post
Image for post

This post is the fourth in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets
  3. An HTTP Caching Strategy for Static Assets: Configuring the Server
  4. An HTTP Caching Strategy for Static Assets: Testing the Implementation

For this, we’ll use the Chrome browser. First, we’ll clear our browser cache. Next, we’ll open the Chrome developer tools and show the Network tab. Then, we’ll load up our site. In our case, that’s https://launch.adobe.com. Once we get past the Launch login screen, we should see something similar to this:

Image for post
Image for post
Requests with empty cache

The returned status code is 200 for all the files shown. As expected, we received the full contents of all the files and nothing was pulled from the browser cache (it was empty). Note that thelaunch.adobe.com entry is the request for our index.html file. …


Image for post
Image for post

This post is the third in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets
  3. An HTTP Caching Strategy for Static Assets: Configuring the Server

Now that we’re generating files according to plan, we need to start serving them with the appropriate cache headers from our server.

For Launch, we use NGINX for our HTTP server. Let’s take a look at our NGINX configuration (I’ve trimmed it down to the important parts):

server {
...
location ~ \.cache-[a-z0-9]+\. {
etag off;
add_header Cache-Control "public,max-age=31536000,immutable";
}
location ~ .+\..+ {
add_header Cache-Control "no-cache";
}
... …


Image for post
Image for post

This post is the second in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets

In Adobe Experience Platform Launch, the absence of a caching strategy is a bad caching strategy. We want most of our files to be cached as long as possible. Even so, when we release an update, we want to make sure the user gets the update. These goals might seem somewhat contradictory. If the files are always pulled from cache after the initial load, how will the browser ever know if there are updates on the server? …


Image for post
Image for post

This post is the first in a four-part series.

In Adobe Experience Platform Launch, we provide a web application where our users manage their marketing technologies. To power the user interface, a number of assets (HTML, JavaScript, and CSS files, for example) must be shipped from our servers to the user’s browser.

Caching, in this context, is the technique of storing a copy of these assets on the user’s machine so when they use our application again or navigate to different pages that use the same files, the user’s browser doesn’t have to load the files from our servers again. Instead, the browser can re-use the copy of the assets that are on the user’s machine, which is a much faster process and results in a snappier user experience. …


Image for post
Image for post

Avid reader Benjamin Bytheway writes:

I’d like to know more about the lifecycle of a Launch library loaded on a page. When the Launch library loads on a page for a customer, what happens with extensions? At what points do certain pieces of code run?

Thanks for writing in, Benjamin.

Let’s discuss the lifecycle of a Launch library. To be clear, this is the library produced from Adobe Experience Platform Launch that gets published to the Launch user’s website.

We’re going to dig into extensions a bit, so it may help to have at least a basic understanding of what a Launch extension can do and how it is composed. If you’re unfamiliar with extension development, I recommend starting out by reading our extension development documentation or watching this video on extension development. …


This post is intended for extension developers who already have at least a basic understanding of what an Adobe Experience Platform Launch extension can do and how it is composed. If you’re unfamiliar with extension development, I recommend starting out by reading our extension development documentation or watching this video on extension development.

Image for post
Image for post

Most often, when someone builds an extension for Adobe Experience Platform Launch, the purpose is to enable Launch users to easily implement an existing marketing technology on a website. The vendor of the marketing technology almost always has an existing library that provides necessary functionality. Without Launch, the website owner typically must copy, paste, and configure a snippet of code provided by the vendor into their website’s HTML. This snippet of code, when run, will typically load the vendor’s library from a content delivery network (CDN) where the vendor has chosen to host it. …

About

Aaron Hardy

I am a software engineer at Adobe working on the Launch product, primarily focusing on the Launch runtime library and extension development ecosystem.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store