All posts by Dylan Schiemann

About Dylan Schiemann

Known for things called Dojo, SitePen, and Comet.

Dojo 2 updates – Week ending Jan. 27, 2017

Over the past few weeks, we’ve been working on several large improvements to widget authoring and theming with Dojo 2.

Theming

We’re currently using css-modules and css-next via PostCSS, a powerful tool for transforming CSS with JavaScript. css-next enables us to just write vanilla CSS with vendor prefixing done automatically, so there’s no need to learn the separate syntax of a CSS pre-processor such as SASS, LESS, or Stylus, just the new semantics of CSS.

This gives us several primary benefits for how themes are applied to widgets within Dojo 2:

  • Local scoping by default and obfuscated class names prevent class name collisions across widgets and from top level CSS rules
  • Full autocomplete/Intellisense for widget authoring, which extends to how CSS class names are specified. Only the locally scoped widget class names are available, which is very powerful
  • Users can import fully supported Dojo 2 theme variables into their custom widgets
  • CSS authoring is fully built into the Dojo 2 cli

Overall we believe this will provide a complete end-to-end authoring experience that makes theming much easier for TypeScript developers.

This work has either landed in master or is currently under review as PRs.

Simplifying widget state and property handling

Via our widget API, we promote the reactive principles of “properties in, events out”. By default, Dojo 2 widgets are stateless. Widgets are passed properties and implement a render function. Through refactoring to reduce and simplify the surface area of widgets, we have removed state from the widget API. This simplifies the authoring experience of widgets, leaving us with a very simple public API for widgets: `render` and `diffProperties`. Both functions have sensible default implementations.

We also provide capabilities for more advanced widget authoring, such as diff-ing single properties if needed, and adding behavioral traits via functional composition.

Usage of Dojo 2 widgets is documented in the widget-core readme.

Web components

Beyond our usage of Custom Elements for all Dojo 2 widgets, we have been working on support for making any Dojo 2 widget easy to export as a web component to use within other environments that support web components. While a web component will not have all of the benefits of using a widget inside a Dojo 2 environment, this will make it much easier to include a Dojo 2 widget within a non-Dojo application. For example, say you want to make dgrid available for use in non-Dojo applications? This will now be much easier to do with Dojo 2 widgets.

Initial support for web component utilities landed recently in widget-core. Support for exporting a single widget as a web component, and installing via npm, is currently under development.

Dojo 2 roadmap

As January draws to a close, we’re continuing updates on the Dojo 2 roadmap.

Dojo 2 updates – Week ending Jan. 13, 2017

We’ve accomplished a lot on Dojo 2 over the past few months, which has meant a fair amount of churn and improvements. Rather than trying to recap everything, we’re going to start covering some of the highlights in more frequent, shorter blog posts than we did in 2016.

Dojo 2 roadmap update

We have a new Dojo 2 roadmap. It’s currently more accurate about the things we’ve finished than it is about the things that are upcoming. We’re in the process of splitting out the remaining items into things that block the first Dojo 2 beta, and those that will follow it.

Scoped packages

With npm, the first package to choose a name wins, and in the past this has led to things like dgrid, dstore, and even util and themes not being able to have the same name in npm as they do in our own repositories. npm does not make it easy to provide aliases between names, so there’s been a fair amount of workarounds needed to provide a consistent installation experience for npm and non-npm users.

A while back, npm added support for scoped packages, so that it would be easy enough to refer to something as @dojo/core rather than dojo-core. We had resisted going this route as we were still aiming to support bower, but with a significant decrease in adoption of bower, and a heavy reliance on npm for the Dojo 2 development approach, we’ve made the decision to drop bower support for Dojo 2 and we’ve started using scoped packages.

In your code, the main change will be with how you include and reference dependencies. A dojo/core commit shows how this works in practice, but the things to note are:

  • The source package remains in the same location, e.g. dojo/loader is still found at https://github.com/dojo/loader
  • When including that package as a dependency, you will now include it as @dojo/loader instead of dojo-loader in both your package.json as well as within any ES6 module import statements, as well as via any npm install commands, e.g. npm install @dojo/loader

Besides being able to keep short and consistent package names, all officially supported Dojo 2 packages will be included under this scope.

Dojo 1.12 released!

Happy Holidays from the Dojo team, we’re pleased to announce updated releases!

Dojo 1.12

Dojo 1.12 is now available for download or via npm or bower. Point releases are also available for versions 1.4 through 1.11!

Note that our documentation and tutorials for 1.10 remain valid for 1.11 and 1.12. 1.12 is mostly a release that fixes reported issues and adds minor feature enhancements to keep things improving while minimizing the risk of issues when upgrading. More details are available at the Dojo 1.12 release notes.

Dojo 2

We’re getting close to the much anticipated Dojo 2. We’ve reworked our approach many times to strike what we believe is the right balance of modern and efficient to use. You may track our progress at Dojo meta and the Dojo 2 roadmap. Our current goal (no guarantees, we want to get things right rather than meet an arbitrary deadline!) is to have a beta release in Q1 2017. Let us know if you would like to get involved!

In the past month, we’ve reworked the dojo/widgets approach to simplify state management with the virtual DOM, we’ve created an initial proof of concept for dgrid 2, implemented an ES8 Observables shim to reduce the dependency size for reactive observability, made significant strides on stores and i18n for Dojo 2, and much more.

Thanks!

Thanks for your contributions and support this year. We made many key improvements to giving Dojo 1.x while focusing the majority of our efforts on Dojo 2. We’re very excited to release Dojo 2 in 2017.

Dojo Recap – July, August, and September 2016

We’ve been incredibly busy making a tremendous amount of progress towards Dojo 1.12 and Dojo 2 over the past few months, which has slowed the rate at which we’ve been blogging. Here are some of the highlights:

Dojo 1.12

We’re planning a Dojo 1.12 release candidate towards the end of October, with plans to release sometime in November.

Dojo 2 accomplishments

  • dojo/has is now beta
  • dojo/shim is now beta
  • dojo/core has received several more alpha releases and is close to beta
  • dojo/has is now beta
  • dojo/compose has received several beta updates to reflect improvements needed for dojo/stores and dojo/widgets
  • dojo/actions has received several more alpha releases and is close to beta
  • dojo/widgets has received several more alpha releases, and css modules development is underway
  • dojo/dom is now beta
  • dojo/routing has received several more alpha releases and is close to beta
  • dojo/app has received several more alpha releases and substantial refinements
  • dojo/stores is now alpha
  • dojo/actions has received several more alpha releases and is close to beta
  • dojo/dataviz is a new prototype for virtual dom based data visualizations
  • dojo/i18n is close to alpha
  • dojo/actions has received several more alpha releases and is close to beta
  • dojo/actions has received several more alpha releases and is close to beta
  • dojo/cli is now alpha. Additional cli packages such as dojo/cli-build, dojo/cli-create-app, dojo/cli-css-modules, and cli-lint-tslint are under development
  • The Dojo example applications are being iterated constantly to keep pace with the changes to Dojo 2

We still have a fair amount of things to complete prior to Dojo 2 beta, but we’ve come a very long way over the past few months. Thanks to everyone for their efforts in creating a solid Dojo 2!

Dojo Recap – June, 2016

We continue our focus towards Dojo 2. This post contains a quick summary of the updates we’ve made over the past month!

Dojo 1.11.2 released

We released Dojo 1.11.2, as well as 1.10.6, 1.9.9, 1.8.12, and 1.7.10 in early June. These updates are available via the Dojo downloads and are also now available on the Google CDN.

Dojo 1.11.3 is planned for release in late August.

Chrome 53 may deprecate synchronous XHR

Synchronous XHR is not supported as part of the XHR 2.0 specification. Synchronous XHR was the foundation for the pre-AMD loader system in Dojo releases prior to Dojo 1.7. At the moment, there are a few options but none are ideal:

  • Update to use AMD (make sure you specify async: true in your configuration)
  • Use the cross-domain version of Dojo (this may still break with i18n and text files, so all resources will need to be built into your built layer)

We are exploring possible options for Dojo 1.6 users, though an upgrade to an AMD version of Dojo is the safest option at this time to make certain your older Dojo applications continue to work in Chrome.

UPDATE: Chrome does not plan to drop standard Sync XHR (as much as they would like to) as it is still widely used on the web.

High level Dojo 2 progress

The overall Dojo 2 progress is tracked at dojo/meta:

dojo/metaDojo 2 status

In the past month, we’ve had many alpha and beta updates, and a few new packages added:

  • dojo/has and dojo/shim were split from dojo/core, each now at alpha1
  • dojo/compose now at beta6 (from beta4)
  • dojo/widgets now at alpha3 (from alpha1)
  • dojo/actions now at alpha4 (from alpha3)
  • dojo/grunt-dojo2 now at beta9 (from alpha7)

Dojo 2 ToDoMVC

We’ve also created a reasonable first draft of a ToDoMVC app with Dojo 2, the hello world of JavaScript applications. Source for this is found in the dojo/examples repo.

Dojo 2 ToDoMVC

Some of the major items we’ve been solving include:

  • Many refinements to dojo/app, including custom element support and dozens of refinements
  • More than a dozen improvements to dojo/widgets including important stability fixes for use with dojo/app
  • significant work on actions, routing, core, compose packages

Dojo 2 in progress

This month we’re focused on:

  • Making more progress on Dojo 2 builds
  • Improving dojo/app and dojo/widgets
  • More updates for TypeScript 2 support
  • Refining APIs and features as we work on creating example applications
  • dojo/i18n
  • Early exploration on vector graphics and visualizations

Please let us know if you would like to get involved! Either find us on IRC, leave a comment here, or start contributing on GitHub. We greatly appreciate the help!

Conference talks

Check out our talk on how Dojo 2 has benefits from ES6 and TypeScript features from FullStack 2016!

Dojo Recap – May, 2016

We continue our focus towards Dojo 2. This post contains a quick summary of the updates we’ve made over the past month!

Dojo 1.11.2 coming soon

We will soon release Dojo 1.11.2, as well as backported releases, to address a few regressions in the 1.11.1 release.

Chrome 51 regressions with xstyle (and dgrid 0.4 and earlier)

Chrome 51 introduced a breaking change that is being rolled back that has impacted some Dojo users that were using older versions of dgrid with an old xstyle dependency. If you have not upgraded to dgrid 1.0 or newer, we recommend doing that. If you still need an older version of dgrid, we recommend updating to dgrid 0.4.2. If you only want to update xstyle, we recommend getting version 0.3.2 or applying a small patch to xstyle.

High level Dojo 2 progress

The overall Dojo 2 progress is tracked at dojo/meta:

Dojo progress

In the past month, we’ve had many alpha and beta updates, and a few new packages added:

  • dojo/loader now at beta5 (from beta4)
  • dojo/compose now at beta4 (from beta1)
  • dojo/core now at alpha7 (from alpha5)
  • dojo/widgets now at alpha1 (from prototype)
  • dojo/actions now at alpha3 (from prototype)
  • dojo/cli package created
  • dojo/app package created
  • dojo/grunt-dojo2 now at alpha7

Some of the major items we’ve been solving include:

  • build process and cli for Dojo 2, including work to support r.js and webpack
  • support for alternative loaders including SystemJS
  • added many new widgets to dojo/widgets including usage of Flexbox for layout widgets, as well as support for including Dojo 1 widgets
  • significant work on the application factory, actions, and routing packages
  • Style guide and linting refinements
  • Updates for the TypeScript 2 release and typings

Dojo 2 in progress

This month we’re focused on:

  • Making more progress on Dojo 2 builds
  • Improving the application factory
  • More updates for TypeScript 2 support
  • Refining APIs and features as we work on creating example applications
  • Getting many of the things we started in May to a more stable state

Please let us know if you would like to get involved! Either find us on IRC, leave a comment here, or start contributing on GitHub. We greatly appreciate the help!

Dojo Recap – April, 2016

It’s been a very productive and busy year to date as work towards Dojo 2. This post contains a quick summary of the updates we’ve made!

Dojo 1.11 released!

In late March, we released Dojo 1.11, along with updates to 1.10, 1.9, 1.8, and 1.7. Visit the Dojo download site to grab a tarball, or use GitHub, bower, or npm to install the latest versions. Note that the Google CDN has been slow to respond, and has not yet updated to 1.11.1.

The upgrade from 1.10 to 1.11 should be very straightforward, as the release is primarily a bug fix release, along with the addition of the new flat theme and a small number of additions. See the complete list of bugs closed for this release or the commits within each repository (e.g. all Dojo 1.11 commits for more information on the release!

We received a tremendous amount of community support to make this release possible. Thank you for your help!

Note that a 1.11.2 release is planned for May.

High level Dojo 2 progress

The overall Dojo 2 progress is tracked at dojo/meta:

dojo/meta status

dojo/loader and dojo/compose are now in a beta state and dojo/core and dojo/dom, while still listed as alpha due to anticipated API changes, are very usable in their current state.

In the past month, the dojo/widgets prototype has been added, and feedback is greatly appreciated. dojo/actions is another recent package addition. Kitson Kelly and Dylan Schiemann gave a brief overview of dojo/widgets and dojo/compose at a recent London Ajax event.

Support for ImmutableJS and RxJS was also added to relevant packages within Dojo 2.

Detailed Dojo 2 updates

Over the past month, we completed the following:

Core

loader

dom

compose

parser

meta

dojo2-package-template

Dojo 2 in progress

More than 100 issues are currently in progress. Some of the highlights include:

Please let us know if you would like to get involved! Either find us on IRC, leave a comment here, or start contributing on GitHub.

I’d like to specifically thank taoqf who has become actively involved through contributions and feedback on dts-generator, dom, meta, dstore, core and loader. We greatly appreciate the help!

Dojo Spring 2016 events

There are a number of Dojo events this spring and early summer. We hope to meet you at one of these events. Let us know if there’s an event you would like to host in your area.

Conferences

Conferences we’re planning to attend and/or deliver talks.

Meetups

Training Workshops

  • SitePen Workshops. SitePen offers a number of online and in-person workshops focused on Dojo, ES6/TypeScript, and Intern. Paid registration required.

Let us know if you’re speaking at an event, and we’ll add you to our listings!

Case Study: ZOLL Web Console

This post continues our series of interviews with users of Dojo. This time, we interview Eric W. Brown who led the technical team that created the ZOLL Web Console and ZOLL TBI Console during his days at ZOLL Medical (Eric is now with Iotopia Solutions). ZOLL is a resuscitation company known for its defibrillators. Its Web Console runs on its high-end mobile monitors and defibrillators and enables the device not just to stream waveform data live to browsers on desktops or mobile devices, but also to collect the streamed output from up to forty devices for a single display on a desktop browser. This makes it easier for nurses to monitor a whole ward of patients. The TBI Console helps provide additional information for emergency personnel treating traumatic brain injury patients and is displayed on a mobile device. So far as we know, these were among the first JavaScript-based medical products to receive FDA approval.

Q: How did you first learn about Dojo?

I’ve been using Dojo for years. Its Pythonesque “batteries-included” approach made it appealing for some internal mapping products I did at another company long ago back in the Dojo 0.4.1 days. I’ve been using it off and on for various projects since.

Continue reading Case Study: ZOLL Web Console

Dojo Recap – Week Ending January 8, 2016

Up next in Dojo 1.x

We were incredibly active over the holidays triaging and working through issues for the Dojo 1.11 release. I personally read all 1300+ open tickets, and made the decision to close about 800 tickets. Given that we are starting to aggressively work on Dojo 2, it was time to be realistic about what we can actually fix, vs. what we need help from the community to fix. As such, I closed about 650 tickets as those which require a contribution or they will not get fixed, and another 150 as things that have already been fixed, or things we were able to fix over the holidays!

My feeling is that in order for the issue tracking system to be useful, it needs to have a manageable number of tickets, so that we can respond to all new issues quickly. I was also able to land nearly 100 pull requests, many of which were from the community. I wish we had been able to get to this a few years ago, and my goal is to get our number of open tickets down to below 200 within the next couple of months.

Ticket Graph

We are now aiming to finish the remaining dozen Dojo 1.11 tickets by the end of the month, do a release candidate, and then release 1.11 in February!

Rather than listing the large number of items that were fixed, I’ll simply provide some relevant links:

Recently in dgrid and dstore

dgrid 1.0 was released this week, as well as dgrid 0.4.1. dstore 1.1.1 was also released at the same time.

Recently in Intern

Work has been done to add several new features to Intern including collapsible test suites in the HTML reporter, support for CodeShip and Bamboo, documentation for driving Intern tests via Gulp, and to allow test suites to be skipped more efficiently.

Experimental work has also started on a refactor of Intern in TypeScript.

Recently in Dojo 2

We’re making further progress on Dojo 2 as well. We’ve made significant progress as follows:

Upcoming Dojo 2 efforts

We are currently working on the initial design document for Dojo 2’s widgets, and continuing to make progress on each package. If you’re interested in helping out in these areas, or other parts of Dojo 2, just let us know, either in the comments or on IRC.

Weekly IRC meeting

We’ve moved the minutes for our meetings for 2016. Meetings are still 9am US Pacific time on Tuesdays, IRC, #dojo-meeting.

Thanks!

Thanks for your help in improving Dojo 1.x and towards Dojo 2!