The Dust Bowl

PayPal Tech Blog Team
The PayPal Technology Blog
5 min readFeb 7, 2014

This dust bowl post is not about yet another American football bowl game. Nor is it about what might be coming to pass for those of us in California with no rain. Rather, it is a recap of the first gathering of dust.js contributors and users. The goal of the meeting was to set directions and schedules around the evolution of the dust templating engine (http://linkedin.github.io/dustjs/).

The companies represented at this first Dust Bowl were: Benefitfocus, eBay, LinkedIn, PayPal, StubHub, and Yahoo.

The meeting kicked off with each company providing a summary of how they are using dust. Then we moved on to the main agenda for the day:

  • New build mechanisms for the dust GitHub project
  • Quarterly release plans for 2014
  • Directions for Dust.js helpers
  • Making extension/hooking of dust easier for frameworks
  • Security-related issues
  • Internationalization and globalized object formatting (dates, money, etc.)
  • Review of major open issues to determine concensus and direction
  • Futures: promoting dust, meetups, blogs, expand awareness, future dust bowls

What the future holds

Like kids eager to open their presents, I’m guessing you want to see what new goodies are in the works so let’s go there straight away. Some of the items are exploratory and some are quite concrete. The goal is to have a release per quarter in 2014.

Q1 2014

  • Establish collaborative mechanisms for contributors in the intervals between dust bowls. Ideal features: Mobile friendly, milestones, tasks, discussion board, notifications
  • Evaluate options for making 3rd party dust helpers easier for the community to find and load
  • Size of dustjs-helpers library is a factor when adding new helpers. Explore ways to let someone build a library with just the ones they need.

Features for Q1 2014

  • A solution for retaining whitespace in templates for HTML/JS (Issue #238)
  • Lower some error messages to warnings
  • Evaluate helpers for inclusion in core set (See section below)
  • Parser syntax errors should be passed to callback (Issue #107)
  • Unspecified parameter results in null value (Issue #252)
  • Support template that contains JavaScript // comments (Issue #300) — part of whitespace work.
  • Partial parameters lower on stack than context (Issue #313). Reverse a code change that is no longer needed after the changes around on how paths work.
  • Add CommonJS support (Issue #325)

If you only ever add features to a language, it becomes bloated. Some things turn out to be bad decisions in hindsight or of little value. As part of a New Year slimming down, we discussed deprecation of some language features. The new warning/error logging capability added in release 2.1.0 would provide a notification mechanism for deprecation. The features we might want to put “on notice” for future removal are:

  • Manual contexts on sections and partials {>partial:context}
  • JavaScript functions in the JSON context (use helpers)

As part of the Q1 cleanup, we will review old GitHub issues with an eye to closing ones that are unlikely to ever get done and consolidating others into a single new issue that covers several related topics.

Q2 2014

Q2 will be a performance enhancement-oriented release. We will go back and compare current performance with our baseline, determine where slowdowns arose, and determine ways to make things faster. General performance profiling will further inform areas of performance improvement work.

As part of the performance work, we will add build automation so performance changes are measured at each commit. Examining compiled code patterns help us understand if compiler changes can improve runtime performance and minification of generated code.

Organizationally, we proposed Dust Bowl II for around the end of the second quarter.

Features for Q2 2014

  • Enhance the 4-panel playground for users. Make it 3 panels by hiding generated code but with option to show it. Provide a way to support user partials and helpers in the playground.
  • Add tests to better cover internal private functions.
  • Improve testing environment to make it easier to test complex templates and contexts.
  • Domain dustjs.com has been registered. Build out a pre-release user portal to “all things dust” at this URL.
  • Evaluate allowing single quotes for parameters in sections and partials (currently only double quotes are allowed)
  • Make external APIs more easily hookable for extension.
  • Extend onLoad to allow passing context.
  • Allow user-provided alternatives to the dust cache.
  • Allow alternative logger to be hooked into the dust logging.
  • Look at async vs sync behaviors that exist today and possible ways to control which is used.

Q3 2014

Official launch of http://dustjs.com to target new and advanced users. Site would include::

  • Blog
  • Upcoming releases
  • Documentation
  • Simplified Sandbox playground for trying out dust
  • Examples ranging from simple to advanced
  • Content Restructure

Features for Q3 2014

  • More robust XSS filtering library (LinkedIn and PayPal have these)
  • Strong emphasis on XSS risks of using current @if due to it using eval. Deprecate it and provide safer alternatives (@or, @if interpretive version)
  • LinkedIn and PayPal have security scanners for dust templates. Consider open-sourcing. See also https://github.com/smfoote/Swiffer.js for a general dust lint-like scanner
  • Extend filter implementation to give users the ability to write more powerful filters. Step 1: Make context available to filters which opens up a decent amount of extra functionality for things like double evaluation of braces Step 2: Extend the compiler to allow a filter with parameters like: {name | filter(param1, param2, …) }.
  • Explore compiler enhancement for static final blocks in template to capture complex text blocks for multiple reuse
  • Begin regional meetups to promote dust

Q4 2014

  • Look at more “way out there” directions like HtmlBars (https://github.com/tildeio/htmlbars)
  • Look at status of Web Components work and how it might integrate with dust.

So that’s the best guess currently as to how releases look for the upcoming year. Let’s look at a few other topics that were discussed during the day.

Directions for Dust.js helpers (some candidates for general utility inclusion)

Localization/Internationalization (No release identified)

  • PayPal kraken-js open source has an internationalizaton solution for messages
  • LinkedIn @format tag tackles a number of issues like formatting numbers, currency, date/times, and more
  • Look at intl.js polyfill for future language extension areas
  • Look at https://github.com/component/component/ which has some L10N things

GitHub Releases and Issues

  • Consider using new GitHub Releases mechanism. Generally favorable opinion on doing this.
  • Look at waffle.io (Trello-style for GitHub issues) to manage issues.
  • Consider https://github.com/fat/haunt to create GitHub issue bot to help manage the backlog/new submittals.

Futures

We wrapped up the day by discussing how we can spread knowledge and interest in dust. Ideas included:

  • Blogging — your reading one right now
  • Be active on StackOverflow area for dust
  • A standard introductory presentation that can be given at local meetups
  • Contact with local college and universities to promote JavaScript, Node and dust. Possible seminar presentations.
  • Meet online quarterly and in person twice a year.

At the end of the meeting, all of us were pleased at the plans made for dust. Hopefully, the community will find some useful new features in the plans. If you want to join the action as a contributor, head right over to https://github.com/linkedin/dustjs or https://github.com/linkedin/dustjs-helpers for the helpers — check out the issues and see if you spot something you are interested in contributing to. Then fork a copy, do your thing and send us a pull request.

- Richard Ragan: @rrragan, https://github.com/rragan

--

--