Friday, 6 July, 2018 UTC


Summary

Editor’s note: A changelog is “a log or record of all notable changes made to a project. [It] usually includes records of changes such as bug fixes, new features, etc.” Publishing a changelog is kind of a tradition in open source, and a long-time practice on the web. We thought readers of Hacks and folks who use and contribute to MDN Web Docs would be interested in learning more about the work of the MDN engineering team, and the impact they have in a given month. We’ll also introduce code contribution opportunities, interesting projects, and new ways to participate.
Done in June
Here’s what happened in June to the code, data, and tools that support MDN Web Docs:
  • Shipped 100+ HTML Interactive Examples
  • Shipped Django 1.11
  • Shipped tweaks and fixes by merging 252 pull requests, including 32 pull requests from 26 new contributors.
Here’s the plan for July:
  • Decommission Zones
  • Focus on Performance

Shipped 100+ HTML Interactive Examples

In June, we shipped over 100 HTML interactive examples, adding quick references and playgrounds for our HTML element documentation.
HTML Interactive Example for <figcaption>
Schalk Neethling fixed the remaining blockers, such as applying an output class as a style target (PR 961), and adding some additional size options (PR 962). wbamberg wrote instructions for adding the examples to MDN, and SphinxKnight and Irene Smith pitched in to deploy them in less than 24 hours. MDN visitors have fun, informative examples on JS, CSS, and now HTML reference pages.
Irene Smith joined the MDN writer’s team in June as a Firefox Developer Content Manager. She started work right away, including helping with this project. Welcome to the team, Irene!

Shipped Django 1.11

We deployed Django 1.11 on June 6th. There are no visible changes, but also no errors for MDN visitors. Sometimes a engineering project is successful if you just get back to where you started.
Like the Falcon rockets, we traveled far to return to the same place.
We did most of the preparation work in development environments. On June 1st, we shipped Django 1.11 to our staging environment (PR 4830). This exposed a few issues that were quick to fix, such as the logging configuration (PR 4831) and client-side translation catalogs (PR 4831). Tests in the production-like staging environment ensured the last bugs were fixed before MDN’s visitors saw them.
We’re looking ahead to the next framework update. Django 1.11 is the last to support Python 2.7, so we’ll need to switch to Python 3.6. We’ve added a Python 3 build to TravisCI, and will ratchet up compatibility over time (PR 4848). Anthony Maton started the Python 3 changes at the Mozilla All-Hands, updating tests to expect random dictionary order, a security feature enabled in Python 3.3 (PR 4851). We expect many more changes, and we plan to switch to Python 3 with Django 1.11 by the end of the year.
The next Django Long-Term Support (LTS) release will be 2.2, scheduled for April 2019. The work will be similar to the last upgrade, updating the code to be compatible with Django 1.11 through 2.2. Ryan Johnson started the process by converting to the new-style middleware, required in 2.0 (PR 4841). We plan a smooth switch to Django 2.2 by June 2019.

Shipped Tweaks and Fixes

There were 252 PRs merged in June:
  • 133 mdn/browser-compat-data PRs
  • 45 mdn/interactive-examples PRs
  • 39 mozilla/kuma PRs
  • 12 mdn/kumascript PRs
  • 10 mdn/bob PRs
  • 7 mdn/infra PRs
  • 4 mdn/data PRs
  • 1 mdn/learning-area PR
  • 1 mdn/webextensions-examples PR
32 of these were from first-time contributors:
  • Fix compat data for let in Chrome (BCD PR 1632), from zx.
  • Update Function.json (BCD PR 1988), from Jack Giffin.
  • Add compat data for Window sub features from A to F (BCD PR 2109), from Keshav Mesta.
  • Add compat data for CSS type timing-function (BCD PR 2183), from Pavel.
  • Update replaceTrack API support version (BCD PR 2205), from Xin.
  • Add safari compatibility for exponentiation operator ** (PR 2212), from schlagi123 (first contribution to BCD).
  • aspect-ratio supported in Chrome (BCD PR 2224), from Filip Chalupa.
  • Update Edge 17 ParentNode/ChildNode API support (PR 2280), from Jonathan Neal (first contribution to BCD).
  • Add safari compatibility for navigator.sendBeacon (BCD PR 2281), from Eran Shabi.
  • Add Response.{error, redirect} for Edge/Safari (BCD PR 2285), from James Browning.
  • Update compat for HTMLMediaElement.captureStream() (BCD PR 2295), from Jakub Knoz.
  • Add a description for javascript.builtins.Promise.Promise (PR 2303), from kenju (first contribution to BCD).
  • Updated NodeList apis for Edge (BCD PR 2325), from Richard Eames.
  • Update grammar.json (PR 2328), and Update TypedArray.json (PR 2331), to BCD from Peppesterest.
  • Add externally_connectable (BCD PR 2329), from Anatoli Babenia.
  • Add note about partial support for Path2D constructor in Edge (BCD PR 2343), from hn3000.
  • Added support information for tab_background_separator (PR 2349), andisPointInStroke (PR 2375), to BCD from Irene Smith.
  • Safari has more FormData support now (PR 2376), from Jimmy Wärting (first contribution to BCD).
  • Correct “expected output” mistake (Interactive Examples PR 1000), from Arkangus.
  • Add a name to the provided address (Interactive Examples PR 1004), from Robert Katzki.
  • Update the German localization for SeeCompatTable (KumaScript PR 719), from Metaa.
  • Replace deprecated cache_behavior with ordered_cache_behavior (PR 3), Change behavior from */users/* to users/* (PR 5), and 3 more PRs from Ryan Johnson (first contributions to infra).
  • MDN infra terraform refactor (infra PR 4), from Ed Lim.
  • syntaxes.json: <'border-radius'> instead of <border-radius> (Data PR 246), from abaco.
  • Missing parenthesis at the end of sentence (learning-area PR 75), from Jerson Zúñiga.
  • Removed newline in URL causing match error (webextensions-examples PR 360), from Nicholas Hansen.
Other significant PRs:
  • Migrate HTMLSelectElement from the wiki (BCD PR 1406), from SphinxKnight, one of the 11 PRs merged from the March Hack on MDN event. 27 to go!
  • Add compat data for input-password (BCD PR 2235), from Mark Boas, one of many PRs in the epic <input> data migration.
  • Use mdn/infra instead of mozmeao/infra (Kuma PR 4840), from Ryan Johnson.
  • Remove ok_() from tests (Kuma PR 4865), from Anthony Maton.
  • Fix CurrentGecko macro (KumaScript PR 720), from Ryan Johnson.
Planned for July
July is the start of the second half of the year, and the team is thinking about what can be done by the end of the year. We’re planning on finishing the compatibility data migration this year, and expanding interactive examples to another documentation section.

Decommission Zones

Zones are a wiki engine feature that moves a tree of pages to a different URL, and applies additional CSS for those pages. Zones also add complexity to every request, require additional testing, and are a frequent source of bugs and translation problems. Zones have more enemies than fans on the MDN staff.
We’ve been deprecating zones for a few years. We stopped using new zones as a design tool. In last year’s site redesign, we de-emphasized the style differences between zones and “standard” wiki content (PR 4348). When migrating MDN to a new data center, we added a redirects framework that can elegantly handle the custom URLs. We’re ready for the final steps.
At the Mozilla All-Hands, Ryan Johnson and wbamberg prepared to remove zones. The work took the entire week. On the engine side, custom URLs need redirects to the standard wiki URLs, and some zone styles need to be preserved (PR 4853). Zone sidebars need to be reimplemented as KumaScript sidebars, along with translations (PR 711). Finally, content needs to be changed, to add the KumaScript sidebars and to use standard wiki CSS. While the changes are large, the effect is subtle.
The subtle differences between zone styles and without zone styles
After the work week, we reviewed and refined the code, double-checked the changes, and clarified the plan. We’ll ship the code, update the content, and delete zones in July.

Focus on Performance

We’re wrapping up the performance audit of MDN in July. We’ve picked some key performance metrics we’d like to track, and the headline metric is how long it takes for the interactive example to be ready on CSS, JS, and HTML reference pages. Schalk Neethling is implementing the timing measurements (IE PR 967,Kuma PR 4854, and others), using the PerformanceTiming API so the measurements will be available in browser tools. We also track timing in Google Analytics, to get real-user metrics from MDN’s global audience, unless the user has requested that we don’t track them.
We’ve found several performance bottlenecks, and we’re prioritizing them to pick the quick wins and the high-impact changes. We’ll ship improvements in July and beyond.