Shared posts

31 Aug 19:03

You can replicate almost any plot with R

Although R is great for quickly turning data into plots, it is not widely used for making publication ready figures. But, with enough tinkering you can make almost any plot in R. For examples check out the flowingdata blog or the Fundamentals of Data Visualization book.

Here I show five charts from the lay press that I use as examples in my data science courses. In the past I would show the originals, but I decided to replicate them in R to make it possible to generate class notes with just R code (there was a lot of googling involved).

Below I show the original figures followed by R code and the version of the plot it produces. I used the ggplot2 package but you can achieve similar results using other packages or even just with R-base. Any recommendations on how to improve the code or links to other good examples are welcomed. Please at to the comments or @ me on twitter: @rafalab.

Example 1

The first example is from this ABC news article. Here is the original:

Here is the R code for my version. Note that I copied the values by hand.

library(tidyverse)
library(ggplot2)
library(ggflags)
library(countrycode)

dat <- tibble(country = toupper(c("US", "Italy", "Canada", "UK", "Japan", "Germany", "France", "Russia")),
              count = c(3.2, 0.71, 0.5, 0.1, 0, 0.2, 0.1, 0),
              label = c(as.character(c(3.2, 0.71, 0.5, 0.1, 0, 0.2, 0.1)), "No Data"),
              code = c("us", "it", "ca", "gb", "jp", "de", "fr", "ru"))

dat %>% mutate(country = reorder(country, -count)) %>%
  ggplot(aes(country, count, label = label)) +
  geom_bar(stat = "identity", fill = "darkred") +
  geom_text(nudge_y = 0.2, color = "darkred", size = 5) +
  geom_flag(y = -.5, aes(country = code), size = 12) +
  scale_y_continuous(breaks = c(0, 1, 2, 3, 4), limits = c(0,4)) +   
  geom_text(aes(6.25, 3.8, label = "Source UNODC Homicide Statistics")) + 
  ggtitle(toupper("Homicide Per 100,000 in G-8 Countries")) + 
  xlab("") + 
  ylab("# of gun-related homicides\nper 100,000 people") +
  ggthemes::theme_economist() +
  theme(axis.text.x = element_text(size = 8, vjust = -16),
        axis.ticks.x = element_blank(),
        axis.line.x = element_blank(),
        plot.margin = unit(c(1,1,1,1), "cm")) 

Example 2

The second example from everytown.org. Here is the original:

Here is the R code for my version. As in the previous example I copied the values by hand.

dat <- tibble(country = toupper(c("United States", "Canada", "Portugal", "Ireland", "Italy", "Belgium", "Finland", "France", "Netherlands", "Denmark", "Sweden", "Slovakia", "Austria", "New Zealand", "Australia", "Spain", "Czech Republic", "Hungry", "Germany", "United Kingdom", "Norway", "Japan", "Republic of Korea")),
              count = c(3.61, 0.5, 0.48, 0.35, 0.35, 0.33, 0.26, 0.20, 0.20, 0.20, 0.19, 0.19, 0.18, 0.16,
                        0.16, 0.15, 0.12, 0.10, 0.06, 0.04, 0.04, 0.01, 0.01))

dat %>% 
  mutate(country = reorder(country, count)) %>%
  ggplot(aes(country, count, label = count)) +   
  geom_bar(stat = "identity", fill = "darkred", width = 0.5) +
  geom_text(nudge_y = 0.2,  size = 3) +
  xlab("") + ylab("") + 
  ggtitle(toupper("Gun Murders per 100,000 residents")) + 
  theme_minimal() +
  theme(panel.grid.major =element_blank(), panel.grid.minor = element_blank(), 
        axis.text.x = element_blank(),
        axis.ticks.length = unit(-0.4, "cm")) + 
  coord_flip() 

Example 3

The next example is from the Wall Street Journal. The original is interactive but here is a screenshot:

Here is the R code for my version. Note I matched the colors by hand as the original does not seem to follow a standard palette.

library(dslabs)
data(us_contagious_diseases)
the_disease <- "Measles"
dat <- us_contagious_diseases %>%
  filter(!state%in%c("Hawaii","Alaska") & disease == the_disease) %>%
  mutate(rate = count / population * 10000 * 52 / weeks_reporting) 

jet.colors <- colorRampPalette(c("#F0FFFF", "cyan", "#007FFF", "yellow", "#FFBF00", "orange", "red", "#7F0000"), bias = 2.25)

dat %>% mutate(state = reorder(state, desc(state))) %>%
  ggplot(aes(year, state, fill = rate)) +
  geom_tile(color = "white", size = 0.35) +
  scale_x_continuous(expand = c(0,0)) +
  scale_fill_gradientn(colors = jet.colors(16), na.value = 'white') +
  geom_vline(xintercept = 1963, col = "black") +
  theme_minimal() + 
  theme(panel.grid = element_blank()) +
        coord_cartesian(clip = 'off') +
        ggtitle(the_disease) +
        ylab("") +
        xlab("") +  
        theme(legend.position = "bottom", text = element_text(size = 8)) + 
        annotate(geom = "text", x = 1963, y = 50.5, label = "Vaccine introduced", size = 3, hjust = 0)

Example 4

The next example is from the New York Times. Here is the original:

Here is the R code for my version:

data("nyc_regents_scores")
nyc_regents_scores$total <- rowSums(nyc_regents_scores[,-1], na.rm=TRUE)
nyc_regents_scores %>% 
  filter(!is.na(score)) %>%
  ggplot(aes(score, total)) + 
  annotate("rect", xmin = 65, xmax = 99, ymin = 0, ymax = 35000, alpha = .5) +
  geom_bar(stat = "identity", color = "black", fill = "#C4843C") + 
  annotate("text", x = 66, y = 28000, label = "MINIMUM\nREGENTS DIPLOMA\nSCORE IS 65", hjust = 0, size = 3) +
  annotate("text", x = 0, y = 12000, label = "2010 Regents scores on\nthe five most common tests", hjust = 0, size = 3) +
  scale_x_continuous(breaks = seq(5, 95, 5), limit = c(0,99)) + 
  scale_y_continuous(position = "right") +
  ggtitle("Scraping By") + 
  xlab("") + ylab("Number of tests") + 
  theme_minimal() + 
  theme(panel.grid.major.x = element_blank(), 
        panel.grid.minor.x = element_blank(),
        axis.ticks.length = unit(-0.2, "cm"),
        plot.title = element_text(face = "bold"))

Example 5

This last one is from fivethirtyeight.

Below is the R code for my version. Note that in this example I am essentially just drawing as I don’t estimate the distributions myself. I simply estimated parameters “by eye” and used a bit of trial and error.

my_dgamma <- function(x, mean = 1, sd = 1){
  shape = mean^2/sd^2
  scale = sd^2 / mean
  dgamma(x, shape = shape, scale = scale)
}

my_qgamma <- function(mean = 1, sd = 1){
  shape = mean^2/sd^2
  scale = sd^2 / mean
  qgamma(c(0.1,0.9), shape = shape, scale = scale)
}

tmp <- tibble(candidate = c("Clinton", "Trump", "Johnson"), 
              avg = c(48.5, 44.9, 5.0), 
              avg_txt = c("48.5%", "44.9%", "5.0%"), 
              sd = rep(2, 3), 
              m = my_dgamma(avg, avg, sd)) %>%
  mutate(candidate = reorder(candidate, -avg))

xx <- seq(0, 75, len = 300)

tmp_2 <- map_df(1:3, function(i){
  tibble(candidate = tmp$candidate[i],
         avg = tmp$avg[i],
         sd = tmp$sd[i],
         x = xx,
         y = my_dgamma(xx, tmp$avg[i], tmp$sd[i]))
})

tmp_3 <- map_df(1:3, function(i){
  qq <- my_qgamma(tmp$avg[i], tmp$sd[i])
  xx <- seq(qq[1], qq[2], len = 200)
  tibble(candidate = tmp$candidate[i],
         avg = tmp$avg[i],
         sd = tmp$sd[i],
         x = xx,
         y = my_dgamma(xx, tmp$avg[i], tmp$sd[i]))
})
         
tmp_2 %>% 
  ggplot(aes(x, ymax = y, ymin = 0)) +
  geom_ribbon(fill = "grey") + 
  facet_grid(candidate~., switch = "y") +
  scale_x_continuous(breaks = seq(0, 75, 25), position = "top",
                     label = paste0(seq(0, 75, 25), "%")) +
  geom_abline(intercept = 0, slope = 0) +
  xlab("") + ylab("") + 
  theme_minimal() + 
  theme(panel.grid.major.y = element_blank(), 
        panel.grid.minor.y = element_blank(),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        strip.text.y = element_text(angle = 180, size = 11, vjust = 0.2)) + 
  geom_ribbon(data = tmp_3, mapping = aes(x = x, ymax = y, ymin = 0, fill = candidate), inherit.aes = FALSE, show.legend = FALSE) +
  scale_fill_manual(values = c("#3cace4", "#fc5c34", "#fccc2c")) +
  geom_point(data = tmp, mapping = aes(x = avg, y = m), inherit.aes = FALSE) + 
  geom_text(data = tmp, mapping = aes(x = avg, y = m, label = avg_txt), inherit.aes = FALSE, hjust = 0, nudge_x = 1) 

31 Aug 19:03

The Apple TV+ Strategy

by Neil Cybart

There is an opening for Apple to find success in paid video streaming. Letting others wage the content arms race, Apple will look to create a curated feed of compelling visual storytelling. Priced with sustainability in mind, Apple TV+ will be positioned as a way to push Apple’s broader video distribution platform forward. Combining Apple TV+ with other curated collections of content, Apple is developing a different kind of content consumption arm for hundreds of millions of highly engaged and loyal users. Apple TV+ has much higher odds of success than consensus assumes.

Content Distribution Arm

Apple has been in the business of distributing content to its users for decades. However, 2019 is shaping up to be the year of Apple reinvigorating its content distribution arm. To reflect the growing momentum found with subscriptions and to take advantage of certain ideals found with privacy and curation, Apple has been unveiling a revised content distribution arm that provides users access to human curated collections of media and entertainment. This content will be provided by both Apple (video) and third parties (news, video, music, games).

  • Apple News+ (human editors curating stories from hundreds of paid magazines)

  • Apple Music (human tastemakers creating playlists consisting of songs)

  • Apple Arcade (human editors developing a curated collection of games)

  • Apple TV+ (human producers creating a curated portfolio of visual stories)

Apple TV+ Details

Despite Apple remaining secretive and cagey about Apple TV+ details, we can have confidence in the service having a few key attributes.

  • Apple TV+ will be a paid service. Apple’s language at its March event implied that Apple TV+ would be tied to a subscription (i.e. not free). Last month, during the company’s 3Q19 earnings call, we received another major clue from Apple CFO Luca Maestri that Apple TV+ would be a paid service. Maestri said Apple TV+ will boost Apple Services revenue. Given that Apple had previously said Apple TV+ would be ad-free, the only way Apple TV+ could boost Services revenue is through paid subscriptions.

  • Apple TV+ will have a limited amount of content at launch. Apple TV+ will lack a back catalog of content at launch. Obtaining rights to an expensive back catalog would have led to a bidding war and plenty of leaks to the press. While the exact number of Apple TV+ shows that will be available at launch isn’t known, Apple highlighted five at its March event, and there are reportedly another 30 or so projects under development. Apple has shared four trailers for shows said to launch this fall (For All Mankind, Dickinson, The Morning Show, and Snoopy in Space).

  • Apple TV+ will have a free trial. Maestri disclosed on Apple’s 3Q19 earnings call that Apple TV+ will have a free trial. Such a trial would be unnecessary if Apple TV+ was available for free. In addition, the presence of a free trial may provide some clues as to how Apple plans on releasing new show episodes going forward. Apple has previously said that new series will be released on a monthly basis.

Early Skepticism

Consensus continues to struggle with some basic questions pertaining to Apple TV+. For example, the idea of Apple getting into original video in the first place still makes some people uncomfortable. However, much of the skepticism surrounding the service boils down to one thing: Apple is viewed as not having enough content to justify charging users.

One of the oddest criticisms that has been floating around is that there are now too many paid video bundles for consumers. This is a classic example of “the grass is greener on the other side.” The dream was for consumers to access their favorite TV channels a la carte. That vision is becoming a reality, but not quite in the way we expected. There are now ways to subscribe to individual “channels,” but they are large bundles of content fueled by content budgets in the billions of dollars per year. Nevertheless, some think that subscription fatigue will make it difficult for Apple TV+ to find a seat at the paid streaming table.

Strategy

Consensus thinks that if it wants to have a chance of Apple TV+ competing, Apple needs to dramatically increase its video content budget (likely around $2B per year) while keeping subscription pricing artificially low. The error found in such thinking is that Apple TV+ isn’t like other paid video bundles. Apple will look to fight a different battle.

Instead of competing in a content arms race or grabbing as much user attention as possible (both battles will be brutal), Apple will look to position Apple TV+ as a way to strengthen its broader video distribution platform.

Apple TV+ is positioned as an exclusive curated feed of content only available in the Apple TV app. Instead of paying to access a lot of mediocre video content that won’t be watched, for roughly the same price each month, subscribers will access a handful of exclusive stories that the entire family can watch together.

The Apple TV app, available on hundreds of millions of iPhones, iPads, Macs, Apple TV boxes, and various third-party smart TVs and streaming sticks / boxes, is designed to be a depository for a user’s video consumption. Success for Apple will be measured by the number of subscribers turning to the Apple TV app for video consumption. Similar to how Apple Card is leading users to become familiar with the Wallet app, Apple TV+ is a way to push the Apple TV app forward. As long as subscribers use the Apple TV app, Apple wins even if the subscriber watches content from HBO, Hulu, or Disney (since Apple earns revenue from those third-party subscriptions).

One problem for Apple is that the video streaming leaders, including Netflix, have no interest in playing ball when it comes to the Apple TV app. These companies want users to spend time on their own platforms, not Apple’s. This has resulted in the Apple TV app lacking the kind of deep integration with third-party content bundles that Apple management wanted. However, recent developments in the paid video industry are beginning to raise the question of whether or not the decision to bypass Apple’s home for various third-party video “channels” was the best business decision.

Industry Dynamics

There are five fundamental issues plaguing the paid video streaming market, and each one stands to be taken advantage of by Apple.

  1. Subscription pricing is subsidized. Most companies are subsidizing paid bundle pricing in an effort to grab as many users (and their data) as possible. Given the amount of money being spent on content, a Netflix subscription in the U.S. probably should be more like $20 per month, not $13. Disney could have easily priced Disney+ at $15 to $20 per month rather than $7 given that a subscription includes access to the company’s evergreen library of content. This dynamic ends up helping new entrants like Apple as odds are good that consumers will subscribe to a few inexpensive bundles instead of one large expensive bundle.

  2. User growth is prioritized too much. Companies are making questionable product and business strategy decisions in an effort to grow as quickly as possible. It’s time to start wondering if binge-watching, a development aimed at hooking people onto platforms for as long as possible, has actually been a positive development in the video space. The more bundles that embrace weekly release schedules for new shows, the more a central location such as the Apple TV app (where shows from various bundles appear when available) makes sense.

  3. Mediocre content is becoming a problem. There is a finite amount of time each day. Companies are desperate to fill as much of it as possible with content. This battle for our time will lead to paid video bundles becoming bloated with mediocrity. This will result in users wanting more curating and filtering to focus on just the premium content - another tailwind for relying on something like the Apple TV app.

  4. Data capture is a ticking time bomb. The degree to which video streaming companies are collecting viewer data has not received the attention it deserves. Data capture has been positioned as a selling point under the guise of something leading to better content recommendations. However, the failure found with “smart recommendations” represents a major hole in the claim that such data collection is even needed in the first place. Apple’s data privacy stance with its revised content distribution arm is being underestimated.

  5. Value propositions are lacking. Not enough is being done to truly set paid video bundles apart from the competition. It is likely that churn will become a notable problem in the industry as consumers hop from bundle to bundle depending on which new shows are available. If this occurs, we will likely see more shows released on a weekly or even monthly schedule. While this will be done in an effort to reduce churn, it will likely lead many to crave a central depository for the newest shows.

The Difficult Truth

A harsh reality is unfolding in paid video streaming: There isn’t a sustainable business model for a standalone streaming service looking to compete in a content arms race. Netflix is trying to make a go at being a standalone paid video streaming service while also significantly ramping up content spend. It is noteworthy that Netflix has also taken actions to move away from Apple’s content distribution arm that include bypassing iTunes payment and not wanting much to do with the Apple TV app.

One way of assessing how Netflix’s business model is performing is to look at the company’s free cash flow. The situation doesn’t look good.

Exhibit 1: Netflix Free Cash Flow (Annual Totals on a Trailing Twelve Months Basis)

Netflix Free Cash Flow (Above Avalon)

Netflix is burning through billions of dollars each year, and there is no light at the end of the tunnel. Netflix management will argue that negative free cash flow is merely a consequence of the company placing a huge bet on original content (higher costs up front). However, the company makes no attempt at suggesting free cash flow will turn positive anytime soon. Instead, Netflix plans on continuing to issue debt to fund its ballooning content budgets. This simply isn’t sustainable. Something has to give.

The $140 billion question facing Netflix is whether or not the company will be able to reduce its content spending and raise subscription pricing once it has achieved much of its user growth. There is reason to be skeptical. Competition for engagement is going to be brutal, and most companies playing in the paid video space are looking for other ways to monetize users and the intellectual property (IP) behind paid video streaming bundles. This will pressure Netflix’s ability to raise pricing.

  • Disney has three viable and profitable ways (movie tickets, theme parks, merchandise) to monetize the IP underpinning Disney+.

  • Amazon positions Prime Video as an add-on to a Prime subscription.

  • NBCUniversal is treating its upcoming ad-based video subscription service as another way to keep cable subscribers.

Given how easy it is to switch from paid video bundle to paid video bundle throughout the year, churn has the potential of ravaging the industry. Based on Netflix’s most recent earnings release, the churn effect is real, and we haven’t even seen genuine competition in the paid video streaming space. It is time to start wondering if Netflix would benefit from integrating into the Apple TV app and once again supporting iTunes for payment.

Long Game

Based on Disney’s aggressiveness with Disney+ (a $13 per month bundle consisting of Disney+, Hulu, and ESPN+ is going to make waves) and recent actions on the part of NBCUniversal and WarnerMedia to bring home the most valuable IP, it’s clear that companies are ready to wage war against the first-mover: Netflix.

Apple finds itself in a different situation as it both produces original video content and distributes third-party video bundles. From Apple’s perspective, competition in the paid video streaming space is a great thing. By having power move from one or two companies to a number of players, Apple’s strategy to become the “bundler of bundles” stands to benefit. It also doesn’t hurt to have an ecosystem of a billion users and 1.5 billion devices.

Receive my analysis and perspective on Apple throughout the week via exclusive daily updates (2-3 stories per day, 10-12 stories per week). Available to Above Avalon members. To sign up and for more information on membership, visit the membership page.

31 Aug 19:03

Where salaries stretch the farthest

by Nathan Yau

Salaries are higher in big cities, but it also cost to live more in such places. So, Indeed adjusted salaries for cost of living to find where you get the most for your buck:

When we adjust for cost of living, the highest-salary metros look totally different. Among the 185 US metropolitan areas with at least 250,000 people, adjusted salaries are highest in Brownsville-Harlingen, TX, Fort Smith, AR-OK, and Huntington-Ashland, WV-KY-OH. All ten of the highest-salary metros are small and mid-size markets — none has more than a million people. Most are in the center of the country, and the only two in an expensive state — Visalia-Porterville, CA, and Modesto, CA — are in California’s Central Valley, worlds away from the state’s pricey coast.

Of course the caveat is that in some of these locations there’s not as many places or things to spend your stretched dollar on.

Tags: cost, Indeed, salary

31 Aug 19:02

Timing is everything: Why telecom industry visions get it wrong

by Dean Bubley

Introduction

One of the things I find most frustrating about technology forecasts and visions – especially in telecoms and mobile – is the lack of awareness of adjacent issues and trends, or consideration of "gotchas" and alternative scenarios.

So for example, when telcos, vendors or policymakers predict what 5G deployment, or network-slicing, or edge-computing or anything else might result in – applications, uptake, revenue opportunities and so on – they often fail to ask two critical questions:
  • Distractions: What are the prerequisites for this to happen? What are the bits of the overall wider system that are forgotten but necessary, to make the headline technology feasible and useful? And when will they be achieved? What's the weakest link in the chain? Is delay inevitable?
  • Disruptions: What else is likely to happen in the meantime, which could undermine the assumptions about demand, supply or value-chain structure? What's going on in adjacent or related sectors? What disruptions can be predicted?

    This post has an accompanying podcast, on my SoundCloud:



    Internal distractions & pre-requisites

    So for example, for 5G to be successful to the degree that many predict (“trillions of $ of extra GDP”, millions of extra jobs etc) there first needs to be:
    • Almost ubiquitous 5G coverage, especially indoors, in sparse rural areas, and in other challenging locations
    • Enough fibre or other backhaul connectivity for the cell-sites
    • Suitable software and hardware platforms to run the virtualised core and other elements
    • Enough physical sites to put antennas, at low-enough costs & with easy-enough planning
    • Many more engineers trained and qualified to do all of the above
    • A decent business case, for instance in remote areas
    • 3GPP release 16 & 17 to be completed, commercialised and deployed, especially for the ultra-low latency & high-reliability applications.
    • Optimisation and operational systems, perhaps based on as-yet-unproven AI
    Yet vendors and policymakers often gloss over these "annoying" practicalities. There seems to be an attitude of “oh, they’ll have to make it work somehow”. Well, yes, perhaps they will. But when? And at what cost? What changes does that imply? How will the gaps and limitations be bridged? And what happens if firms go bust while waiting for it all to happen? What other ways to solve problems can users pursue sooner, that don't involve 5G?

    A key implication of this is that timing and profitability of massmarket adoption is often much later than expected. While Amara's Law might eventually apply (we tend to overestimate the effect of a technology in the short run and underestimate the effect in the long term), that doesn't mean that early initial adopters and investors make the returns they'd hoped for.



    External disruptions and substitutes

    Perhaps even more pernicious is the lack of situational awareness about parallel developments elsewhere in the broader tech ecosystem. These undermine both demand (as alternative solutions become viable in place of the hoped-for technology) and supply / operation (by throwing up new complexities and gotchas to deal with). 

    These are often not just “what ifs" but “highly likelies” or "dead-on certainties".

    So for instance, the visions of network slicing, or edge-computing for 5G (which will really only crystallise into large-scale commercial reality in maybe 4-5 years) will have to contend with a future world where:


    • 5G networks are still patchy. There will still be lots of 4G, 3G and “no G” locations. What happens at the boundaries, and how can you sell QoS only in certain places?
    • There will be a patchwork of “uncontrolled” locations – they might be 5G, but they could be owned by roaming partners, indoor network providers, private localised cellular operators and so on. How will a slice work on a neutral-host's network?
    • An ever-greater number of devices spend an ever-greater amount of time on Wi-Fi – usually connected to someone else’s fixed-line infrastructure and acting as either uncontrolled, or a direct arbitrage path. 
    • Telcos have to cap their energy use and associated CO2 emissions, or source/generate clean power of their own.
    • Wi-Fi 6 will emerge rapidly & is hugely improved for many use-cases, but most 5G predictions only compare against legacy versions
    • Hardware based on "commodity hardware" runs against the current tide of semiconductor fragmentation and specialisation (see recent post, here)
    • Devices will often have VPN connections, or use encryption and obfuscation techniques, which means the network won't be able to infer applications or control traffiic.
    • Users and devices will use multiple connections together, either for arbitrage, aggregation, or more-sophisticated SD-WAN type models.
    • Pricing, billing, customer support and security will be challenging on "federated" 5G or edge-compute networks. Who do you call when your network-slice doesn't deliver as expected - and how can they diagnose and fix the problem?
    • Liability and accountability will become huge issues, especially if 5G or slicing is used for business-critical or life-critical functions. Are your lawyers and insurers prepared? 
    • AI will be used for instant price-comparison, quality monitoring & fault reporting, collective purchasing and even contractual negotiations. "Hey, Siri, mimic my voice and get me the best discount possible with the customer-retention agents"
    These are just some basic examples. Once you get into individual verticals, particular geographies or even specific companies, a whole host of other issues start to crop up  - sector regulation, value-chain shifts, government involvement, expectations of 20-30 year tech cycles and so on. Sure, in theory 5G might fit into various industries' own transformation journeys - but they won't design around it.


    Conclusions

    I find this all very frustrating. So many company boards, strategy departments or lower-level product/service management teams seem to operate on the basis of "all other things being equal..." when the one certainty is that they won't be



    So the two sets of factors tend to be multiplicative:
    • Distractions are internal to a new concept, and lead to delays in technology launch, market maturity and revenue.
    • Disruptions are external and often inevitable, but any extra delay increases their range and impact yet further.
    It's never possible to predict everything that might get delayed, or every possible disruption from adjacency. But it seems to me that many companies in telecoms don't even bother to try. 

    Companies accept the "hype cycle" as inevitable, even if it might be possible to flatten it out.

    By coincidence, while writing this post I started reading "Range" by David Epstein (link) which talks about the importance of "analogising widely", and the risks of narrow expertise and superficial analysis, rather than looking for implications of cross-sector / cross-discipline similarities and lessons. 

    When evaluating new technologies and service concepts, CEOs and CFOs need to rely less on familiar industry echo-chambers and consensus hype, and instead seek out critics who can find hidden assumptions, both internal and external to their plans. This isn't just a negative exercise either - often, a "ranging" exercise throws up unexpected positives and opportunities from adjacency as well risks.



    This post has an accompanying audio podcast - click here & please subscribe!

     
    Footnote
     
    I sometimes get asked to "stress test" ideas and plans, and help companies avoid expensive mistakes, get started on future glitches today, or prepare for and avoid contingencies and unintended consequences. 

    Often, that exercise will throw up new opportunities as well. Usually, a collaborative (but candid) group workshop ensures this isn't a blame-game, but a path to smoother growth and innovation. The skills and mindsets can be learned and replicated, too.

    If that type of approach sounds interesting, please get in touch with me, either by email (information AT disruptive-analysis DOT com) or via LinkedIn (link).



    31 Aug 19:01

    Defending the deportation of sick children

    by Josh Bernoff

    How do you justify evil? According to the AP and the Boston Globe, the Trump administration is ending a program that allowed families to stay in the United States while their children receive medical treatment for illnesses like cancer. (Boston is a center for specialized hospitals for children and cancer treatment so it deals with … Continued

    The post Defending the deportation of sick children appeared first on without bullshit.

    31 Aug 19:01

    Unwritten

    by peter@rukavina.net (Peter Rukavina)

    Start your Friday by listening to Unwritten by Pomplamoose ft. Malinda.

    Pomplamoose

    31 Aug 18:53

    Waterloo-based North’s Focals now shows native Android notification actions

    by Bradly Shankar

    Waterloo, Ontario-based North has rolled out a new feature to its Focals smart glasses that allows wearers to see native Android notification actions.

    Now, users can enable their Focals’ new ‘Android Notification Actions’ feature to display shortcuts that have been enabled by developers, such as delete or archive for Gmail.

    Additionally, the user can now click the Loop D-pad ring to choose between responding with smart replies or voice-to-text. Smart replies offer relevant responses based on the content of the message, while dictation uses the built-in microphone to let you speak what you want to reply with.

    As it stands, these features are only available for Android Focals users and are an ‘Experiment,’ according to North.

    Via: 9to5Google

    The post Waterloo-based North’s Focals now shows native Android notification actions appeared first on MobileSyrup.

    29 Aug 22:33

    Follow-Through

    Decades ago, when I was working for Dave Winer at UserLand, I learned about the concept of follow-through after a major release.

    If you’re an app maker, it might seem like your goal is to get to release day. Get the app done, make it available, publish an announcement, and then get back to coding. Let the world do what it’s going to do.

    One bang, and then back to work, in other words.

    But that’s not going to maximize your chances for a good release. You need to follow through — you need to keep going.

    Some of the things you might do, in no particular order:

    • Publish tips on using your app — one a day or so
    • Update your website with feedback, testimonials, and good reviews
    • Be available and communicative about your app
    • Go on some podcasts
    • Write about how release day went
    • Write about plans for the x.0.1 version
    • Field bug reports and feature requests gratefully
    • Thank reviewers who’ve done a good job
    • Make it as easy as possible for reporters and reviewers to get access to your app and to you
    • Work to build a community of customers, on Slack or similar

    I’m sure you can think of more things to do — the above isn’t everything, and every app is different.

    But the key is that you don’t just do the release and then stop. Instead, show that you‘re responsive, show that your app has momentum, show that you care enough to keep showing up.

    For me, at least, this is the fun part. I realize that’s not true for everybody — but you should do it anyway. 🎩

    29 Aug 20:55

    The Quest for Commute Trip Reduction – Part I: What is CTR, and who are its Frontrunners?

    by Alexandra Doran

    What is CTR?

    Commute Trip Reduction (CTR), a facet of Transportation Demand Management (TDM), is a suite of strategies (i.e. programs/policies) designed primarily to do two things:

    1. Reduce long commute travel distances, and
    2. Encourage and enable alternatives to using a single-occupant vehicle (i.e. more sustainable, healthier travel alternatives such as walking, cycling, taking transit, and carpooling)

    The responsibility for implementing CTR strategies falls on employers (typically ‘large employers’ such universities and hospitals), required by some form of government legislation.

    Examples of CTR Strategies
    • Encourage cycling, walking, and transit instead of using a personal vehicle
    • Provide transit-oriented incentives such as pass subsidies or reimbursement
    • Provide subsidies or reimbursement for cycling and walking gear
    • Provide on-site cycling storage, and shower/change room facilities
    • Incentives and arrangements for carpooling/vanpooling to-and-from work
    • Allow employees to work full or part-time from home or remote/satellite offices
    • Strategically select or move the office location to a transit hub
    • Provide a Guaranteed ride home service

    An example of a large employer recognized as having successfully employed CTR strategies is The Gates Foundation.The Gates Foundation has reduced their “drive-alone” rate from 88 percent to 34 percent by distributing a suite of transit benefits to employees, including free Monorail punch cars and free monthly Zipcar hours. It also disincentivizes parking: The company lot charges a daily rate instead of a monthly rate. The Gates Foudnation is estimated to employ over 1,500 people.

    In addition to the examples of CTR strategies mentioned above, there is also what’s known as the CloserCommutes Strategy:

    The CloserCommutes strategy calls for multi-worksite employers – school districts, banks, municipalities, health authorities, retail and hospitality chains, etc. – to update their HR policies to reduce unnecessarily long commutes by the following tactics:

    Swapping work locations. Allow and encourage people doing the same job to switch locations to improve the commute for both parties. Maintain data on employees’ commutes and regularly examine for potential voluntary swap matches.

    New Hires and internal openings. Assign new hires to sites near their home. Consider transfer candidates’ commute times as a criterion when filling internal job openings. Maintain a roster of employees’ desired work sites.

    A CloserCommutes pilot project at 30 Seattle-area bank branches demonstrated a 17% reduction in total employee commute distance could be achieved within 15 months.

    Why is CTR Important?

    CTR strategies can help tackle critical problems facing today’s [urban] societies. As transportation is one of, if not the, largest Greenhouse Gas (GHG) contributor in urban environments, it is imperative that vehicle-related GHG emissions be reduced whenever and wherever possible – and fast. By enabling people to rely less on the use of personal vehicles, CTR can help to reduce transport-related GHGs.

    By enabling people to have a shorter, healthier commute to work, CTR strategies can help to  improve physical and mental health. For example, peer-reviewed research indicates that longer commutes are linked to increased worker stress, unhappiness, sedentary living, obesity, job dissatisfaction, illness and absenteeism.

    Finally, CTR strategies bear economic benefits by lowering one’s personal travel costs such as car payments, parking, and gas. Importantly, there are benefits not just for employees, but employers. While initially the creation and implementation of CTR strategies may seem inconvenient to employers, doing so can result in reduced absenteeism, higher productivity, and a happier and healthier staff.

    CTR Frontrunner: Washington State/ Seattle-Puget Sound

    Re-post from CITYLAB 2015 article, How Washington State Convinced Big Companies to Dramatically Reduce Drive-Alone Commutes

    Washington States CTR program has helped the state reduce drive-alone commutes—especially in the metro Seattle area—and by extension traffic congestion, car-related pollution, and energy use. It’s also accomplished its goal of convincing employers they’re in the transportation game after all.

    Adopted into law in 1991, CTR targets big employers in heavily populated areas, requiring them “to implement programs to reduce single-occupant vehicle commuting by employees at major worksites.”

    Washington defines big employers as those with more than 100 workers, though some local governments compel smaller companies to make similar efforts. State agencies provide assistance and oversight, but companies are free to design whatever commute shift plans make most sense for them.

    CTR has met its initial goals of “reducing automobile-related air pollution, traffic congestion, and energy use,” and more. The latest progress report found that between 2007 and 2012, the rate of driving alone among CTR participants fell 3 percent and vehicle miles declined 4.6 percent—huge figures extended across 1,100 worksites and two-plus decades. The shift is more impressive when placed against trends toward higher drive-alone rates at non-CTR companies, as well as the rest of the nation, over the same period.

    Re-post from CITYLAB 2018 Article, How Seattle Is Winning the War on the Car Commute

    Thanks in part to considerable efforts by the region’s largest employers, the share of commuters driving solo into downtown Seattle is on a dramatic decline.

    Just 25 percent of workers traveling into the center city drove themselves, according to the results of the latest annual commuter survey by the Seattle Department of Transportation and non-profit partner Commute Seattle. This is the lowest share since the city started keeping track in 2010.

    Additional CTR Strategy Examples:

    San Diego Association of Governments (SANDAG) iCommute

    Establishing an Effective Commute Trip Reduction Policy in Massachusetts

    This post is part one of a two part series. The purpose of part one has been to introduce the concept of CTR by providing a definition and examples of what it is, why it’s important, and who is successfully championing it. Part two focuses on the opportunities and challenges of implementing CTR strategies, highlighting existing local plans, programs, and policies that can serve to support potential future CTR strategies in Vancouver and beyond.

    29 Aug 20:54

    My Next Chapter

    by Chris Beard

    Earlier this morning I shared the news internally that – while I’ve been a Mozillian for 15 years so far, and plan to be for many more years – this will be my last year as CEO.

    When I returned to Mozilla just over five years ago, it was during a particularly tumultuous time in our history. Looking back it’s amazing to reflect on how far we’ve come, and I am so incredibly proud of all that our teams have accomplished over the years.

    Today our products, technology and policy efforts are stronger and more resonant in the market than ever, and we have built significant new organizational capabilities and financial strength to fuel our work. From our new privacy-forward product strategy to initiatives like the State of the Internet we’re ready to seize the tremendous opportunity and challenges ahead to ensure we’re doing even more to put people in control of their connected lives and shape the future of the internet for the public good.

    In short, Mozilla is an exceptionally better place today, and we have all the fundamentals in place for continued positive momentum for years to come.

    It’s with that backdrop that I made the decision that it’s time for me to take a step back and start my own next chapter. This is a good place to recruit our next CEO and for me to take a meaningful break and recharge before considering what’s next for me. It may be a cliché — but I’ll embrace it — as I’m also looking forward to spending more time with my family after a particularly intense but gratifying tour of duty.

    However, I’m not wrapping up today or tomorrow, but at year’s end. I’m absolutely committed to ensuring that we sustain the positive momentum we have built. Mitchell Baker and I are working closely together with our Board of Directors to ensure leadership continuity and a smooth transition. We are conducting a search for my successor and I will continue to serve as CEO through that transition. If the search goes beyond the end of the year, Mitchell will step in as interim CEO if necessary, to ensure we don’t miss a beat. And I will stay engaged for the long-term as advisor to both Mitchell and the Board, as I’ve done before.

    I am grateful to have had this opportunity to serve Mozilla again, and to Mitchell for her trust and partnership in building this foundation for the future.

    Over the coming months I’m excited to share with you the new products, technology and policy work that’s in development now. I am more confident than ever that Mozilla’s brightest days are yet to come.

    Thoughts from Mozilla Board Members on Chris Beard’s Tenure as CEO
    Chairwoman Mitchell Baker’s Reflections on Chris’ Time at Mozilla

    The post My Next Chapter appeared first on The Mozilla Blog.

    29 Aug 20:54

    Thank you, Chris

    by Mitchell Baker

    Thank you, Chris.

    Chris Beard has been Mozilla Corporation’s CEO for 5 and a half years. Chris has announced 2019 will be his last year in this role. I want to thank Chris from the bottom of my heart for everything he has done for Mozilla. He has brought Mozilla enormous benefits — new ideas, new capabilities, new organizational approaches. As CEO Chris has put us on a new and better path. Chris’ tenure has seen the development of important organization capabilities and given us a much stronger foundation on which to build. This includes reinvigorating our flagship web browser Firefox to be once again a best-in-class product. It includes recharging our focus on meeting the online security and privacy needs facing people today. And it includes expanding our product offerings beyond the browser to include a suite of privacy and security-focused products and services from Facebook Container and Enhanced Tracking Protection to Firefox Monitor.

    Chris will remain an advisor to the board. We recognize some people may think these words are a formula and have no deep meaning. We think differently. Chris is a true “Mozillian.” He has been devoted to Mozilla for the last 15 years, and has brought this dedication to many different roles at Mozilla. When Chris left Mozilla to join Greylock as an “executive-in-residence” in 2013, he remained an advisor to Mozilla Corporation. That was an important relationship, and Chris and I were in contact when it started to become clear that Chris could be the right CEO for MoCo. So over the coming years I expect to work with Chris on mission-related topics. And I’ll consider myself lucky to do so.

    One of the accomplishments of Chris’ tenure is the strength and depth of Mozilla Corporation today. The team is strong. Our organization is strong, and our future full of opportunities. It is precisely the challenges of today’s world, and Mozilla’s opportunities to improve online life, that bring so many of us to Mozilla. I personally remain deeply focused on Mozilla. I’ll be here during Chris’ tenure, and I’ll be here after his tenure ends. I’m committed to Mozilla, and to making serious contributions to improving online life and developing new technical capabilities that are good for people.

    Chris will remain as CEO during the transition. We will continue to develop the work on our new engagement model, our focus on privacy and user agency. To ensure continuity, I will increase my involvement in Mozilla Corporation’s internal activities. I will be ready to step in as interim CEO should the need arise.

    The Board has retained Tuck Rickards of the recruiting firm Russell Reynolds for this search. We are confident that Tuck and team understand that Mozilla products and technology bring our mission to life, and that we are deeply different than other technology companies. We’ll say more about the search as we progress.

    The internet stands at an inflection point today. Mozilla has the opportunity to make significant contributions to a better internet. This is why we exist, and it’s a key time to keep doing more. We offer heartfelt thanks to Chris for leading us to this spot, and for leading the rejuvenation of Mozilla Corporation so that we are fit for this purpose, and determined to address big issues.

    Mozilla’s greatest strength is the people who respond to our mission and step forward to take on the challenge of building a better internet and online life. Chris is a shining example of this. I wish Chris the absolute best in all things.

    I’ll close by stating a renewed determination to find ways for everyone who seeks safe, humane and exciting online experiences to help create this better world.

    The post Thank you, Chris appeared first on The Mozilla Blog.

    29 Aug 20:54

    Aquaminds Notetaker - Jeffery Smith

    As far as I know, they are only working on Notetaker and Noteshare. I cannot seem to warm up to iPad outliners, from anyone. Ultimately, I think people who want to do outlining or list-making on an iPad will use a 'net-based app.

    satis wrote:
    >
    >Any word on an iOS version? I'm asking because with WWDC 2019's
    >demonstration of the new Catalyst framework for moving iPad apps to the
    >Mac I think we're going to see a lot of competition starting to show up
    >by the end of the year or next year from ported apps like GoodNotes (not
    >to mention Notability which is already iOS/macOS).
    29 Aug 20:54

    Closer to the Machine

    Sven Bluemmel, Office of the Victorian Information Commissioner, Aug 29, 2019
    Icon

    This book (155 page PDF) was published "to increase the Victorian public sector’s understanding of AI technologies that have the potential to impact our lives, and to assist those who implement AI systems to appreciate the technical, social, and legal aspects." It's not one single work but rather seven individual essays by seven authors on topics ranging from defining AI to where AI can go wrong to issues in regulating AI. Add this one to your library of ethics-in-AI resources.

    Web: [Direct Link] [This Post]
    29 Aug 18:23

    Ye olde weblogge

    by Andrea

    Ask MetaFilter: Any old-school bloggers still posting? User y6y6y6 is “looking for folks blogging pre-2002 that are still going”. Update: You can find all the weblogs in this list.

    Obviously, I’m still blogging, but so are many other people. Re-found some old favorites in the comments of this thread, especially some whose feeds stopped updating in my very old version of Netnewswire (3.2.15, in case you were wondering.)

    Speaking of which, Netnewswire 5.0 is now available! It’s open source and free, and it requires MacOS 10.14.4 or newer. (Which means I will have to update my operating system.) An iOS version is also on the way.

    29 Aug 18:23

    Apple’s classic rainbow logo could be making a comeback: report

    by Patrick O'Rourke
    iPhone XS

    Apple’s iconic, classic rainbow logo could be making a return to the company’s devices in some way.

    This rumour comes from a “well-connected” tipster that claims to have received the information from an employee that works at Apple’s Cupertino, California office, according to MacRumors.

    It’s unclear what Apple products might feature the classic logo, but it’s likely going to make its way to a MacBook or Mac device given the design was first used in the Apple II computer back in 1997.

    The logo was featured on a wide variety of Apple devices all the way up to roughly 1998 when the retro logo was phased out for the current monochrome design present on Apple’s products today.

    There’s also a possibility Apple could be planning to release a limited-edition line of multiple devices, including the Mac, iPhone and iPad, featuring the logo, similar to its Product Red line.

    MacRumors notes that the rumour could have no truth to it, but states that the information comes from a source that has “longstanding connections to both Apple and related industries.” The publication says that it has no other sources that have shared similar information.

    It’s worth noting that Apple’s fall hardware event press invites feature a similar multicoloured, rainbow Apple logo.

    While I’m not sure I’d like to see this design return to all Apple products, a special edition ‘Silver’ iPhone with a rear rainbow logo could look pretty cool.

    Source: MacRumors

    The post Apple’s classic rainbow logo could be making a comeback: report appeared first on MobileSyrup.

    29 Aug 18:20

    What is a continuation?

    by Eric Normand

    Continuations are a cool feature you often find in functional languages. In this episode, we look at what they are, why you’re probably already using them, and the cool things you can do with them.

    Video Thumbnail
    What is a continuation?

    Continuations are a cool feature you often find in functional languages. In this episode, we look at what they are, why you're probably already using them, and the cool things you can do with them. https://share.transistor.fm/s/f36b3a28 https://youtu.be/zB5LTkaJaqk Transcript Eric Normand: What is a

    Transcript

    Eric Normand: What is a continuation? By the end of this episode, we will have gone over this concept. You will understand it. You will see why you’re likely already using continuations, even if you don’t know it yet, and what you can do with continuations.

    Hello, my name is Eric Normand, and I help people thrive with Functional Programming.

    Continuations became important in scheme. They were used as part of the compiler as a…continuations were used as a compiler implementation technique. We will go over a little bit how that’s done.

    What is a continuation? That is the main part of this episode. Continuations have to do with how functions are called and then returned.

    Imagine a typical scenario — you have Function A which does some work, calls Function B, and then does some more work with the return value from B. When Function A calls B, what actually has to happen?

    You’re passing control to another function, you’re going to push onto the stack a new stack frame and record in that stack frame where to return to. After you do a jump, a go-to, to run that function, where does the return statement take you back?

    You have to write that down as a pointer, just write it down. You also have to write down all the arguments into the stack. Then, when you jump to the Function B, it knows where to look up the arguments and then it also knows where to return when it’s done.

    That’s how the function calls work and the stack works. Notice we pushed this pointer onto the stack along with the arguments, but what if we made it an argument? What if we made that pointer an argument, instead of something to check when you are about to return?

    Instead of a pointer, what if we made it into a function that you could call? Basically, you do x equals b, and then you have some more code. You’re saving the return value of b. I said b, and I did parentheses with my fingers. It’s x equals call b, so b().

    You have the return value of b stored in x. After b returns, it’s going to get saved to x, and then you’re going to do some more stuff. What if you made a function that was just that, some more stuff? Also, assigns that stuff to x, the return value to x.

    This is a function you’ve packaged up. Instead of a pointer to jump there, you just make it into a function. You pass that to b. Now, b, instead of calling return, could just call the function that’s an argument.

    In Scheme, it’s called k. It’s the continuation. Just imagine you add an argument to your function b. It’s called k. Then at the end of the function, when it’s done, it calls k. That does the continuation of what a was doing.

    Now, typically, when you return, you’re returning a value. That value is useful. To get that value that’s returned from b, you make it an argument to k. k is a function of one argument, and b will just call that with whatever value it would have returned.

    Now, imagine you did this with every function. Every function, you added an argument called k — that was the continuation — and it was one argument. Instead of having a return statement, you just called k. Of course, because it’s a return statement, it’s the last thing your function will ever do before it’s over.

    That means that it’s always in tail position. We talked about that in a previous episode. There’s a tail call removal, where, if you’re in tail position, meaning it’s the last call, the last call of a function call of the function — a function that’s made out of other function calls — The last function call before you return, that’s called the tail position.

    Because you’ve threaded this k through every function call — this is a different k each time — you’ve turned your program inside-out and nested it to the right, instead of going straight down, every function call is in tail position.

    Which means that every function call can be optimized into a go-to, and you never have to return. You don’t have to return, because there’s no return statements used anymore. They’re just always calling k, the next thing, the next thing, and the next thing.

    You don’t need a stack anymore, because the stack’s main job is to keep track of where to go back, how to return. You’re not returning, so you don’t need a stack. You need one frame to store the current arguments.

    You just thread that k through there, and you have this style of programming is called continuation passing style. Now, this is not a pleasant style to write code in, but your compiler can turn your straight-line, imperative, “Do this, do this, do this, call that,” nested function calls, you can do all that.

    Turn that into continuation passing style, and then it has this really nice property, that you don’t need a stack. It has other properties. For instance, because it’s a function, and functions are first-class, you can save it somewhere. Just know about that. We’ll talk about it in a second.

    I don’t know if this rings a bell to you, but if you’re a JavaScript programmer, you’re often calling a function that has a callback. That callback is going to get called with the result of that asynchronous function.

    If you do Ajax, the response to your Ajax request is going to get passed to a function sometime in the future. What typically happens is you have, “This Ajax needs this callback, and then that callback makes another Ajax request, and so it has another callback. That one makes another one, and it has another callback…”

    You have this deeply-nested callback chain. That is just continuation passing style. It’s one of the reasons why I say that JavaScript is one of the best things to happen to functional programming in a long time.

    People are doing continuation passing style without even knowing it. They just picked it up, because they had to. This thing that was this arcane, functional programming style idea from compiler theory is now a thing [laughs] that people are writing their code in.

    They know it’s not very ergonomic. It forces you to break up your program to the right, so you’re deeply nested. It’s hard to coordinate things. It’d be much better to write it straight up and down, but they’re learning it.

    They understand its limitations. They understand how to sequence things by calling the next continuation, the next continuation. Just as an aside, the new stuff in JavaScript called async/await. I say new, relatively new.

    It lets you write straight-line code, but you put await in there in front of something that would be asynchronous, and it just waits. It looks like it waits. Really, internally, the compiler is turning that into a continuation passing style, or in the JavaScript world, called a callback chain style. I don’t know what they call it. It’s callbacks in JavaScript.

    It looks straight up and down, straight line, like, “I can do this. Then I do this step, then I do this step, and I wait for this step. Then I do this step. I wait for this step.” Putting those awaits in there, it’ll get turned into continuation passing style. It’s an ergonomics issue. It doesn’t really add any functionality, but it’s a really nice bit of ergonomics.

    All right, back to the main thing. What are these useful for? Oh, that’s what I said in the beginning, like why you might be using them already. If you’re doing JavaScript, you’re already doing continuations. What are these useful for?

    Notice, we’ve gotten rid of the stack. That’s nice. We don’t have this problem of stack overflow anymore. The Scheme folks, the people who invented Scheme, published a lot of papers about how the function call, before Scheme, was actually a very heavyweight thing.

    You wouldn’t want little, bitty functions, because it would eat into your performance. You’d make big functions, with 20, 30 lines of code in them. You do a whole bunch of stuff in them. Then, just for convenience, for programmer convenience, you’d have another function you would call that would do this common routine.

    You wouldn’t treat them like, they were too heavyweight to say, “I’m just naming this one operation with a new name, and I’ll wrap it in a new function.” It was too heavyweight for that. What they showed was that function calls are very lightweight.

    That, especially if you do this continuation passing style, you can make it just like go-to. You don’t even need to return anymore. You’re just passing a few arguments on the stack, the same stack frame you had before, and you’re doing a jump.

    You don’t even have to remember where you were, although you do. It’s part of the Clojure of the continuation, if you’re curious. Because it’s a function, that was function was built in a certain environment. It has certain state.

    Anyway, it just showed that function calls could be super, super efficient, just about as efficient as a go-to. You could use them wherever you wanted, and they were a good compiler technique. What can you do with them, besides make nice compilers?

    One thing is, just like in the JavaScript world when you have callbacks, is you can add asynchrony in there. I could, instead of calling k, my function could put k on a queue to be called later. That’s what JavaScript does.

    It’s not done directly. There’s some other, like the networking engine, if you’re doing Ajax. The Ajax happens, and it gets put on a queue when it’s done as an event. There’s an event loop. There’s a lot of machinery there.

    In essence, what you’re doing is you’re putting the continuation onto the queue. Because things are round robin, and they’re taking turns, you’re able to share a processor between multiple timelines, even though there’s only really one thread.

    These are often called co-routines. Another thing that you can do with continuations is the same kind of stuff you might do with stack manipulation in function calls. For instance, you could implement exceptions.

    You could have exception handling, where the continuation is wrapped in something that will do a finally or do a catch on an exception being thrown. Then it’s going to continue after the try-catch block was finished.

    Anything that you would do, typically think would require a language-level implementation, if you’ve got access to those continuations, you can do a lot of stuff. That’s how Scheme manages to do so much language-level stuff, but in the language itself.

    All right, so, let’s recap. Continuations are a way of representing the rest of the calculation. After I return from this function, what else do I need to do? They are wrapped up in a function, and the argument is the return value of the thing that you’re calling.

    There’s a style called continuation passing style, where you replace all return values with calls to the continuation, to the next continuation. If you do this, you don’t need a stack. The stack is implicit in those function calls.

    You can also use continuations as a means of inserting some indirection. Instead of actually calling the continuation, you could put the continuation onto a queue. You could hand it to something that monitors it or something, makes sure it succeeds, it completes correctly. Maybe it’ll retry it, something like that.

    Anything you can do with a function, boom, now, you’ve got that continuation as a function. You can implement exception handling, things like that.

    All right, so, if you found this episode useful, you can find all the past episodes at lispcast.com/podcast. There, you’ll find audio, video, and text versions of all of the past episodes. You’ll also find links to subscribe to the podcast, and also find me on social media.

    Social being the keyword. I’ve got email, Twitter, LinkedIn. I love to get into discussions with people, so please reach out. This has been my thought on functional programming. My name is Eric Normand. Thank you for listening, and rock on.

    The post What is a continuation? appeared first on LispCast.

    29 Aug 18:18

    The Sudden Appearance of Hope by Claire North

    by Ton Zijlstra

    After reading and enjoying a first book by Claire North, 84K, I downloaded some others, like the previously mentioned The Gameshouse. The Sudden Appearance of Hope was a fun fantasy tale (someone is so forgettable that she gets away with everything) with a social media style data-predatory app (called Perfection) taking over and building the worlds elite in its own image. A nice fast paced chase around the world, with soul searching how to have a sense of self without permanent outside feedback (because people don’t remember you at all, ever), whether that is freedom or hell. Near future in its setting with small easily overlooked changes, e.g. where Scotland appears to have gone independent (only implied by the passport control on its English border).

    Having read three books by Claire North in the past few weeks, I like how very different the stories are, in genre almost. One a fantasy tale that doubles as a historic novel, one a more dystopian near future SF story entirely set in the UK, one an almost old fashioned ‘honor amongst thieves’ detective story taking place around the world, but based on a fantasy premise that allows for a psychological development story in parallel, and set in the social media age. I still have one book by Claire North left, which is her debut, curious about what it will bring.

    29 Aug 17:09

    The web I want for my kids

    by Dries

    Coder Dojo
    Volunteering as a mentor at CoderDojo to teach young people, including my own kids, how to write software.

    Last week, I published an opinion piece on CNN featuring my thoughts on what is wrong with the web and how we might fix it.

    In short, I really miss some things about the original web, and don't want my kids to grow up being exploited by mega-corporations.

    I am hopeful that increased regulation and decentralized web applications may fix some of the web's current problems. While some problems are really difficult to fix, at the very least, my kids will have more options to choose from when it comes to their data privacy and overall experience on the web.

    You can read the first few paragraphs below, and view the whole article on CNN.

    I still remember the feeling in the year 2000 when a group of five friends and I shared a modem connection at the University of Antwerp. I used it to create an online message board so we could chat back and forth about mostly mundane things. The modem was slow by today's standards, but the newness of it all was an adrenaline rush. Little did I know that message board would change my life.

    In time, I turned this internal message board into a public news and discussion site, where I shared my own experiences using experimental web technologies. Soon, I started hearing from people all over the world that wanted to provide suggestions on how to improve my website, but that also wanted to use my site's technology to build their own websites and experiment with emerging web technologies.

    Before long, I was connected to a network of strangers who would help me build Drupal.

    29 Aug 17:09

    Increasing Drupal speaker diversity

    by Dries
    A special bird flying in space has the spotlight while lots of identical birds sit on the ground (lack of diversity)

    At Drupalcon Seattle, I spoke about some of the challenges Open Source communities like Drupal often have with increasing contributor diversity. We want our contributor base to look like everyone in the world who uses Drupal's technology on the internet, and unfortunately, that is not quite the reality today.

    One way to step up is to help more people from underrepresented groups speak at Drupal conferences and workshops. Seeing and hearing from a more diverse group of people can inspire new contributors from all races, ethnicities, gender identities, geographies, religious groups, and more.

    To help with this effort, the Drupal Diversity and Inclusion group is hosting a speaker diversity training workshop on September 21 and 28 with Jill Binder, whose expertise has also driven major speaker diversity improvements within the WordPress community.

    I'd encourage you to either sign up for this session yourself or send the information to someone in a marginalized group who has knowledge to share, but may be hesitant to speak up. Helping someone see that their expertise is valuable is the kind of support we need to drive meaningful change.

    29 Aug 17:09

    Low-code and no-code tools continue to drive the web forward

    by Dries
    Low code no code

    A version of this article was originally published on Devops.com.

    Twelve years ago, I wrote a post called Drupal and Eliminating Middlemen. For years, it was one of the most-read pieces on my blog. Later, I followed that up with a blog post called The Assembled Web, which remains one of the most read posts to date.

    The point of both blog posts was the same: I believed that the web would move toward a model where non-technical users could assemble their own sites with little to no coding experience of their own.

    This idea isn't new; no-code and low-code tools on the web have been on a 25-year long rise, starting with the first web content management systems in the early 1990s. Since then no-code and low-code solutions have had an increasing impact on the web. Examples include:

    While this has been a long-run trend, I believe we're only at the beginning.

    Trends driving the low-code and no-code movements

    According to Forrester Wave: Low-Code Development Platforms for AD&D Professionals, Q1 2019, In our survey of global developers, 23% reported using low-code platforms in 2018, and another 22% planned to do so within a year..

    Major market forces driving this trend include a talent shortage among developers, with an estimated one million computer programming jobs expected to remain unfilled by 2020 in the United States alone.

    What is more, the developers who are employed are often overloaded with work and struggle with how to prioritize it all. Some of this burden could be removed by low-code and no-code tools.

    In addition, the fact that technology has permeated every aspect of our lives — from our smartphones to our smart homes — has driven a desire for more people to become creators. As the founder of Product Hunt Ryan Hoover said in a blog post: As creating things on the internet becomes more accessible, more people will become makers..

    But this does not only apply to individuals. Consider this: the typical large organization has to build and maintain hundreds of websites. They need to build, launch and customize these sites in days or weeks, not months. Today and in the future, marketers can embrace no-code and low-code tools to rapidly develop websites.

    Abstraction drives innovation

    As discussed in my middleman blog post, developers won't go away. Just as the role of the original webmaster (FTP hand-written HTML files, anyone?) has evolved with the advent of web content management systems, the role of web developers is changing with the rise of low-code and no-code tools.

    Successful no-code approaches abstract away complexity for web development. This enables less technical people to do things that previously could only be done by developers. And when those abstractions happen, developers often move on to the next area of innovation.

    When everyone is a builder, more good things will happen on the web. I was excited about this trend more than 12 years ago, and remain excited today. I'm eager to see the progress no-code and low-code solutions will bring to the web in the next decade.

    29 Aug 17:09

    Recharge

    by Sophie Haigney

    BAD METAPHORS is an ongoing series that takes a critical look at the figures of speech that shuttle between technology and everyday life. Read the others here.


    At the end of a day, at the end of a week, at the end of a beginning of a week, I often find myself depleted and, as such, in need of “recharging.” I imagine myself like my iPhone, whose battery icon has, by most evenings, turned warning-red, teetering close to death. The thin line of battery juice might hover around four percent or seven percent or, if I have unusually remembered to switch it to “Low Power Mode,” 20 — just a fifth of its so-called life.

    When I plug my phone in, its battery receives a satisfying jolt, illustrated by a miniature lightning bolt. As the battery begins to fill up again, it turns green, the color of “go.” This process is part of a daily cycle that bears some similarity to the waxing and waning of the moon, except I pay more attention.

    My phone’s battery icon has become emblematic of my understanding of what it means to regain my energy: I want to turn from red to green. Saying that I need to “recharge” is at once an acknowledgement of my depletion — my low energy, my fed-up-ness, my ennui, my aches and pains, my general exhaustion — and a sign of my hope that reviving it could be as simple as plugging in. I am thinking of myself like my device, and as such, reducing my life to a deadening cycle: deplete, recharge, deplete, recharge, deplete. Repeat. The recharge is a means to an end; the stuff of life (care, nourishment, even boredom) is flattened into a utilitarian jolt of energy, one that allows me to run myself down the following day.

    I am thinking of myself like my device, reducing my life to a deadening cycle: deplete, recharge, repeat

    “Recharge” is a staple of both casual speech and marketing copy, from energy drinks to listicles of vacation retreats to gym routines and juice cleanses. The metaphor can be used as shorthand for so-called “self-care” tactics that range from switching supplements to adopting a new religion. Sometimes a recharge is an anesthetic of sorts: binge-watching TV shows at the end of a long day as a means of turning off your brain. Other times it’s an aspirational lifestyle-oriented activity: yoga, ultra-running, spending a weekend at a spa, reading for an hour in the morning before you turn on your phone. It can be something you literally consume: vegetables, coffee, Red Bull, a bottle of wine that will lift your spirits and leave you feeling re-baptized by your hangover in the morning. A recharge can just as easily be an abstention — people are always saying they’re full of energy since they stopped eating dairy or deleted Twitter. But in every case the objective is not primarily the experience itself. To “recharge” is to expedite the process of getting to “100 percent” or “fully functioning” or “high power.” It’s to emerge ready to work.

    The only logical endpoint of such a cycle is obsolescence

    There are of course some things that are actually essential replenishments for your body; we need to eat and sleep and hydrate. There are also things that probably feel good, like going to a spa or finding faith in God. But the concept of the “recharge” subjugates both pleasures and necessities to a category of utility. They’re valuable only as long as they help us get back to functioning well, and as long as they do so quickly. “Recharging” connotes a lightning fix, a battery that goes from dead to full in a matter of minutes — an instant plug-in, an influx of something external that will make us run well again. It refers to little or large adjustments we can make to our bodies or souls or schedules to make us work better, feel better, live better, under the often-untenable conditions of contemporary life. Even vacation, that ever-shrinking benefit, is not simply time away from the desk, time for ourselves, time allotted for the beach or the mountains or lying in bed. Instead, we go on vacation to recharge ourselves for the work that awaits us on our return.

    There is an almost mystical element to this search for a quick fix; it is rooted in the same misguided beliefs that once led Ponce de Léon to search for a “fountain of youth” upon landing in the so-called New World, scouring the ponds, rivers, lagoons, and lakes of the Florida coastline for the mythic fountain. (There’s debate about whether this actually happened, or if the quest is itself a myth — but the myth’s endurance tells us about its staying power.) The fountain of youth would be the ultimate recharge — a reversal of time in a single instant. The contemporary recharge is about continuously undoing the day before, quickly erasing the wear and tear of living, creating a fresh start or a blank slate or a best self. But it’s aimed at a singular objective: productivity.

    At its heart, the myth of the recharge is about turning away from what might be broken about the structure of our society — the constancy of work, the absence of affordable healthcare, the expectation that we will be “plugged in” or “online” 24 hours a day — in search of short-term, generalizable solutions. We do not ask ourselves whether all this might be untenable, but instead what supplement we might take to make it a little more bearable. We rise and grind and rise and grind and sleep in between. We deplete, recharge, deplete, recharge. 

    It is obvious, maybe, that the only logical endpoint of such a cycle is total obsolescence — breakdown — thus, at the end of a day, at the end of a week, at the end of a beginning of a week, I find myself “recharging.”

    29 Aug 17:09

    Apple Announces New Initiative to Support Device Repair Providers

    by Ryan Christoffel

    Following news earlier this summer that Apple was partnering with Best Buy for expanded repair service, today the company has announced another initiative to make device repairs more accessible:

    “To better meet our customers’ needs, we’re making it easier for independent providers across the US to tap into the same resources as our Apple Authorized Service Provider network,” said Jeff Williams, Apple’s chief operating officer. “When a repair is needed, a customer should have confidence the repair is done right. We believe the safest and most reliable repair is one handled by a trained technician using genuine parts that have been properly engineered and rigorously tested.”

    Independent repair providers can join Apple’s new program at no cost, provided they have an Apple-certified technician on staff. Joining provides a variety of benefits:

    Apple will provide more independent repair businesses — large or small — with the same genuine parts, tools, training, repair manuals and diagnostics as its Apple Authorized Service Providers (AASPs). The program is launching in the US with plans to expand to other countries.

    Apple’s moves this summer to make authorized repairs more accessible from outside an Apple Store reflect the company’s struggles to keep up with accelerated repair demand from a growing user base. While repairs will likely always be a core element of Apple Stores, by pushing more people to third-party providers, Apple can perhaps make its retail locations less crowded and thus more pleasant to visit moving forward.

    → Source: apple.com

    29 Aug 16:58

    Chicago policewomen checking for violations of the bathing suit-length laws. 1922. pic.twitter.com/6PKkr4WrUn

    by moodvintage
    mkalus shared this story from moodvintage on Twitter.

    Chicago policewomen checking for violations of the bathing suit-length laws. 1922. pic.twitter.com/6PKkr4WrUn





    124 likes, 40 retweets
    29 Aug 16:57

    A few thoughts on iOS 13.1

    by Volker Weber

    148d51f57d108a399d374f798209b129

    A few days ago Apple surprised testers with iOS 13.1 Developer Beta 1. Many thought this was just a typo for iOS 13.0 Developer Beta 9, but it wasn't. Instead, Apple has integrated all the unfinished features that had previously been dropped from 13.0 back into a fork.

    And everybody who was so eager to get their hands on the new O/S, is back at square one of the beta testing process.

    Here is what I think will happen:

    1. Within two weeks, Apple will announce new iPhones and ship them with iOS 13.0 ten days later, quickly followed by one or two minor releases (13.0.1 and 13.0.2)
    2. iOS 13.1 development will continue well into October and may find a release on a new crop of iPad Pro towards the end of that month, at which point the new iPhones gain the features left out of 13.0.

    What was supposed to be the original 13.0 simply isn't done yet. Apple needs to release parts of it, because the new iPhones depend on iOS 13. They won't be supported by iOS 12. And Apple cannot afford to delay the new iPhones.

    My only open question is whether Apple will release 13.0 to existing devices or hold off until 13.1 is ready. Since the public beta was also moved to the 13.1 branch, I am betting on the latter.

    But what do I know?

    29 Aug 16:57

    "I don’t know whether it is fortunate or unfortunate, but I have no such thing as national pride. I..."

    “I don’t know whether it is fortunate or unfortunate, but I have no such thing as national...
    29 Aug 16:52

    The Best Apple Watch Chargers and Stands

    by Nick Guy
    The Best Apple Watch Chargers and Stands

    You can do better than the charging cable included with your Apple Watch. If you want to keep your watch from sliding off the charger, prefer to prop the face up to use it in Nightstand mode, or just need a replacement cable or charger for your desk or luggage, Apple is no longer the only company that makes cables, stands, and docks for the Apple Watch. We spent 20 hours testing 12 of the latest Apple-certified Apple Watch charging accessories to find the best options.

    29 Aug 16:51

    Ontario Government restricting use of cellphones in classrooms starting November 4

    by Ian Hardy
    reverse wireless charging

    The Ontario Government is moving forward to ban the use of smartphones and other mobile devices in the classoom.

    Effective November 4th, 2019, this restriction applies to all personal mobile devices. The government defines ‘a personal mobile device’ as “any personal electronic device that can be used to communicate or access the internet, such as a cellphone or tablet.”

    This news comes after a public consultation last fall that reported 97 percent of parents, students and educators stated there should be some sort of ban put in place.

    There will be some flexibility in the classroom, specifically regarding unique educational purposes, for health and medical reasons and to support those with special educational needs.

    The government notes that students can bring their device to school and use it during recess and lunch.

    If a student is found using a mobile device without permission, disciplinary action is determined by the local school board or school policies.

    “When in class, students should be focused on their studies, not their social media,” said Stephen Lecce, Minister of Education, in a recent statement.

    “That’s why we are restricting cellphones and other personal mobile devices in the classroom, while making sure technology is available to help students achieve success in the digital economy and modern workforce.”

    Source: Ontario Government

    The post Ontario Government restricting use of cellphones in classrooms starting November 4 appeared first on MobileSyrup.

    29 Aug 16:51

    OnePlus TV will receive Android TV updates for at least 3 years, company hints at more IoT devices

    by Ian Hardy

    While the OnePlus TV won’t be available in Canada at launch, it’s important to follow along as the company expands its product lineup.

    Another update with further details regarding the television has been revealed by OnePlus CEO Pete Lau. The OnePlus TV will be powered by Android TV and promises to be “burdenless” and “fast and smooth.”

    Earlier reports hinted OnePlus plans to create its own AI assistant for the TV, though Lau noted that the company will continue its relationship with Google and that it will bring features “like the Play Store and Google Assistant” to the upcoming OnePlus TV. In addition, OnePlus committed to releasing OnePlus TV Android TV updates for at least three years.

    Other known specs OnePlus TV secs include a 4K QLED display, with the TV’s menu only displaying at 1080p. The TV is also tipped to feature a Mediatek MT5670 processor and will be available in several sizes, including a 43-inch, 55-inch, 65-inch, and 75-inch models.

    The OnePlus TV will be unveiled next month, with rumours pointing towards a September 26th event.

    Finally, Lau noted in this latest blog post that the “OnePlus TV is our first step to establish a OnePlus IoT ecosystem gradually. In order to do so, we had to choose an operating system that can interact and seamlessly connect with your Android phone.”

    This statement indicates that OnePlus could have plans to branch out to other smart home products eventually.

    Source: OnePlus

    The post OnePlus TV will receive Android TV updates for at least 3 years, company hints at more IoT devices appeared first on MobileSyrup.

    29 Aug 16:51

    Apple sets the date: The iPhone event is on September 10

    by Brad Bennett

    Apple has finally sent out its press invites to its September 10th iPhone event at the Steve Job’s theatre at the company’s headquarters in Cupertino, California. The keynote is slated to begin at 10AM PT/1PM ET.

    We’re expecting three new iPhones this year, with two of them featuring a ‘Pro’ naming scheme and new camera technology like a three-shooter setup and a new wide-angle lens.

    The other phone is slated to replace the iPhone XR and will only include two cameras, according to leaks. Apple is expected to continue offering the iPhone XR’s successor in a variety of colourful options, including a new green hue.

    Alongside the new phones, we should get launch dates for iOS 13, macOS Catalina, Apple TV+ and Apple Arcade.

    While we can’t say for certain what else Apple has in store, we round up as many Apple-related rumours as we could find for your reading pleasure.

    The post Apple sets the date: The iPhone event is on September 10 appeared first on MobileSyrup.

    29 Aug 16:51

    We Re-Launched The New York Times Paywall and No One Noticed

    by The Times Open Team

    That’s exactly what we hoped for.

    Illustration by Tim Peacock

    By Jeremy Gayed, Said Ketchman, Oleksii Khliupin, Ronny Wang and Sergey Zheznyakovskiy

    If you’ve read an article on The New York Times website any time in the past eight years, you’ve probably seen a little message telling you how many free articles you have left to read. You may also have seen our paywall: that big box that pops up and asks you to register or subscribe once you’ve hit your monthly article limit. This is our Meter Service and it’s an important part of our subscription-first business model.

    An example of the inline messaging that appear in Times articles.

    The Meter Service has been around since we first launched our paywall in 2011 and it determines if our readers can access the hundreds of articles we publish every day. It also handles over 30 million user requests daily and it is the gatekeeper for how we acquire new subscribers. In early 2018, we decided it needed to be rewritten. To up the stakes, we had to ensure there was zero interruption to the business while also writing it to scale for future needs.

    No big deal, right?

    To be clear, we don’t take rewrites lightly. If they can be avoided, then it’s probably best to avoid them. We combed through old documentation for the Meter, talked to people who had been involved throughout the years and determined what improvements it needed to continue to meet our business objectives. What we had on our hands was an eight-year-old application that had been in maintenance mode for most of its life. The original creators were long gone, and it was built at a time when the industry doubted whether a subscription-based digital news service would even work.

    When we cleared the cobwebs, what we found was a complex NGINX configuration that fronted a parsing engine in C and an architecture that couldn’t autoscale, all deployed to Amazon Web Services (AWS). The only saving grace was that the XML-based metering rules were versatile enough to meet our current business logic needs. It was obvious that we were years behind the type of architecture we develop at The Times today.

    To ensure that the Meter could scale, we needed business logic consolidated within the service itself, instead of spread out across our apps and website; Our Android app had its own metering service separate from the main service. Additionally, we needed the ability to quickly test and implement new metering rules and logic, which was something the XML configuration and C engine made extremely difficult to do — it was time consuming to make, test and deploy changes, and often prone to errors. Most importantly, we needed confidence that the system was working as expected.

    The changes we wanted to make

    A lot has changed in the years since we first launched the paywall, especially with how we architect our applications. We knew we needed to update the Meter with more modern technology, like a properly auto-scaled environment that could provide better latency for our application. Previously we had to pre-warm AWS load balancers ahead of anticipated traffic spikes, such as the elections. We wanted to avoid that by moving away from our over-provisioned cluster in AWS, to a newer auto-scaled Kubernetes infrastructure in Google Cloud Platform (GCP).

    We don’t write applications in C anymore, so we needed a new language that wouldn’t mean compromising on speed and stability, yet was more widely used at The Times and closer to the core technical competencies of our engineering teams. We decided on Go.

    Logging and metrics are a critical part of our current applications, and the Meter needed to be brought up to date. To be confident in its performance, we determined that having proper Service Level Objectives, or SLOs, would help in this effort. When something goes wrong, we need to see why the problem is happening and if action needs to be taken — PagerDuty works well for that.

    It’s all about the preparation

    It’s tempting to jump right in once you’ve architected a solution, but if you’ve ever done that before, then you know that it can lead to a lot of problems down the road. Getting different perspectives to vet our solution and make sure we had a plan for long-term stability and support were all essential for a smooth launch. Here are a few of the areas we made sure to cover.

    1. Request for Comments process

    The Times engineering group believes strongly in the Request for Comments (RFC) process because it helps bring visibility to a major architectural change and engages colleagues in decision making. An RFC is not very complicated; it is simply a technical document that proposes a detailed solution to a specific problem. We shared our RFC with all of our colleagues in the Technology department and asked for their feedback.

    Before we started coding, we spent several weeks preparing a couple of RFCs that outlined our plan to rewrite the Meter Service. This included documenting the current system and dependencies, analysis of multiple proofs of concept and creating clear architectural diagrams of our new solution. In the end, we were able to tighten up our plan and identify possible edge cases that we hadn’t thought through. The time it took to solicit feedback was worth it.

    2. Decide on a testing plan

    The beauty of rewriting a service is you can make sure it’s done right from the start. We wanted to have several testing layers that we could automate (because who enjoys manual testing) and included coverage from unit tests, contract tests, load testing and end-to-end functional testing.

    Remember, this was a high-stakes replatform and we couldn’t mess it up. So, we needed a way to definitively demonstrate that the new service wouldn’t break existing integrations or business behavior. With our testing strategy vetted by our RFC process, we could prove feature parity with the old meter and be confident in our comprehensive test suite.

    3. Making sure the lights are on (i.e. monitoring)

    The lack of visibility into the old Meter’s performance and stability was a problem for both technical and business reasons: the Meter is a key way we incentivize subscriptions purchases. The old service didn’t provide much visibility into performance, so we were never really sure how well it was working.

    Since we had little to work with, we decided we wanted to better understand how the existing service performed for our users. We put in place robust Real User Monitoring (RUM) to capture response times, error and success rates. This helped us determine not only what to watch for, but what benchmarks we should set for acceptable behavior.

    Before rolling out our new service, we put in place dashboards in Chartio (for client-side data) and Stackdriver (for service-level data) that allowed us to observe any changes to existing metrics. With this in place, we had yet another method for ensuring we could prove our rollout wasn’t going to break anything.

    Launch the service, make sure no one notices

    The prep work we did allowed us to move extremely quickly to rebuild the service, spin up the new infrastructure and create a solid deployment pipeline.

    The next step was to launch, but we wanted to make sure we did it right to avoid a high-stress and high-stakes situation. We couldn’t afford to have our launch end up like Indiana Jones trying to snatch the idol treasure in Raiders of the Lost Ark, so we came up with a tactical approach.

    Our challenge was to guarantee the new Meter Service performs at par or better than the old service, and to ensure the response is identical between the two services for every user. To achieve this, we had both services run simultaneously, though the new service didn’t impact users at first. We called this our “dark rollout.”

    Setting up a dark rollout

    Phase one of our rollout introduced a “dark” call to the new service for all users.

    The graphic above shows the call to the legacy service and the additional silent call we added to the web client that went to the new service. The call was non-blocking and had no impact on the actual user experience. The responses received from each service were tracked and compared, and we used this opportunity to load-test the new service to see how well it performed during real news-related traffic spikes.

    The benefit of this approach was that the legacy service was still functioning throughout, which meant we had the freedom to modify the new service without worrying about impacting users. We could even take it down if we needed to make configuration changes to the infrastructure, such as auto-scaling policies or instance sizes. We let this run for a couple weeks until we ironed out the last bugs and felt confident that we could proceed with a phased rollout.

    Validating the new service with a single client

    We accomplished what we needed from the dark rollout and felt ready to start relying on the response from the new service. Before we fully launched it, however, we did an initial test on The Times’s website to be extra safe. Within the web client integration itself, we routed one percent of traffic to the new service and the remaining 99 percent to the legacy service. Additionally, we added a back-end validation layer, which allowed us to compare the new and legacy service results to make sure they completely matched.

    The web client allocated one percent of requests to the new service, relying on the responses of those few users’ access.

    Validating all clients

    Once we knew we were good on our website, we moved on to test all other applications. At this point we knew the service worked, but thought that a gradual rollout was a smart way to have a smooth transition. There are a lot of ways to accomplish this, but we wanted to avoid having to update code in each integration. We opted to do it on the DNS level, pointing one percent of all traffic to the new infrastructure and 99 percent to the old. Then we watched and waited.

    DNS level allocation to the new service, with all clients impacted.

    Flip a coin: 50 percent rollout

    A huge milestone for us was the ramp up to 50 percent of all traffic to The Times’s web offerings using our new service. Things were humming along pretty well until we discovered a problem.

    Ramping up to 50 percent allocation by our DNS to the new service.

    Our AMP platform wasn’t handling requests properly and wasn’t metering users at all. That was great for users, but terrible for business. In short, AMP requires custom headers to be included in the response our service provides, but we weren’t providing them.

    After spending a day investigating, we realized these headers weren’t provided in the original legacy C code, but rather in the NGINX layer. We missed something big, but because we could easily throttle traffic to the new service, we had a disaster plan ready. We scaled down traffic to the new service and quickly added in the necessary headers before ramping back up to 50 percent. We triple checked everything, then watched to see how it fared.

    Ta-da! Everyone gets the new service

    The glorious day finally arrived where we felt confident enough to turn the dial and serve all traffic from our new Meter Service. The best part was that no one even knew we had launched — though, we did inform senior leadership and stakeholders.

    Retiring the legacy system and serving 100% of traffic from the new service.

    Part of launching a replatform is retiring the old systems, so we thanked the old system for its service and officially said goodbye to the old AWS stack. Overall our entire rollout took about a month. While that may seem long, it ensured we were completely confident that our new solution works. We avoided having a chaotic launch and actually felt a little awkward with how little drama there was.

    It’s now been a year since our launch and because of our approach, we have had a lot of time to improve the system, rather than chase production issues. We were even able to scale during record breaking United States midterm election traffic, handling over 40 times our normal traffic.

    This project allowed us to hone our playbook for how to handle launches:

    1. Peer review your plan before building.
    2. Ensure proper test coverage for key moving pieces.
    3. Ensure you have metrics and observability in place to watch for issues.
    4. Consider a very gradual rollout (even a dark rollout) instead of a full cut-over.
    5. Keep an eye out for anomalies during and after launch, and have an easy way to roll back if any issues come up.

    We’re trying hard to make great software here at The Times and are always looking to improve. Hopefully we’ve inspired you to do the same!

    Jeremy Gayed is Lead Software Engineer focused on evolving The New York Times’s web architecture. Follow him on Twitter.

    Said Ketchman is a Senior Engineering Manager overseeing the meter and marketing technology teams at The New York Times.

    Ronny Wang is a Software Engineer on the meter team.

    Sergey Zheznyakovskiy is Lead Software Engineer on the meter team.

    Oleksii Khliupin is a Senior Software Engineer formerly on the meter team.


    We Re-Launched The New York Times Paywall and No One Noticed was originally published in NYT Open on Medium, where people are continuing the conversation by highlighting and responding to this story.