Mirror, Mirror on the wall ... What will happen this fall?

October 1st, 2017 4 min read

With over a hundred contributors, more than 1750 commits, and literally hundreds of 3rd party modules, the MagicMirror project I started years ago still doesn’t fail to amaze me. Time for a quick update!

image

With the help of a lot of contributors, we manage to push out a great update at least every quarter. It doesn’t matter if someone adds a big core update, a small bug fix, a translation, or contributes to the documentation, every pull request brings a smile of joy on my face.

Of course, contributions are driven by the wishes and bug reports by the still growing community on the forum. A great example for the need of community discussions are the recent issues with the weather forecast module.

Weather Forecast Shenanigans

image

It turns out the API provider we are relying on, OpenWeatherMap, decided to disable the forecast API-endpoint for newly registered free users. It took us a while to figure out what the issue was, since ‘old’ users were still able to use the API endpoint for free.

image

With the help of a lot of contributors, we’ve managed to get a working fallback mechanism which uses the data from an alternative endpoint. A fix which is included in the 2.1.3 release which is released today (2017-10-1).

But honestly, it doesn’t feel right that we are relying on only one weather API provider, especially since this provider isn’t really known for its accurate predictions all over the world. Because of this, we are working a new weather module which will support multiple weather API providers and is easily extendible for additional providers. If you have any recommendations regarding free API providers, let me know in the comments down below!

Bring out the the Nunjucks!

image

Of course, one idea leads to another, which resulted in the decision on implementing a templating language for modules. Using templates, the development of new modules (like the new weather module) will be much easier and the code will be a lot cleaner.

We have chosen to use Mozilla’s Nunjucks which is a nice lightweight, easy to use templating language for JavaScript. The use of the templating feature is completely optional and won’t break any existing module.

The first implementation seems pretty promising and has already proven to make the development of the new weather module much more fun.

Give me some Slack!

image

Implementations like Nunjucks come with a lot of decisions and proposals. Because of this, the core contributors use slack to discuss these decisions. Feel free to join us on Slack if you want to contribute to MagicMirror’s core. But know that your contributions to the forum remain just as valuable.

MagicMirror’s Philosophy

With all these changes, I think it’s good to touch upon MagicMirror’s Philosophy. Every now and then, the discussion arises why we won’t use SASS as CSS precompiler, why we wont use Webpack to bundle all the assets and why we don’t use frameworks like React, Angular or Vue (which I love!). And although I do understand the benefits of all these suggestions it comes with one huge downside. Complexity.

Now, I understand that complexity is part of development. But the reason why I initially open sourced my MagicMirror project is because it’s the perfect Raspberry Pi beginners project. If you’ve never developed anything, contributing to the Magic Mirror project should be the perfect place to start. The fact that MagicMirror is voted number 1 in the MagPi Top 50! proves that this philosophy works.

As a matter of fact, a lot of valuable contributions are made by users who had never before send a pull request to any (open source) project. Something I’m very proud of!

Adding all the pre-compilers, bundlers and frameworks just adds to much complexity while most modules work perfectly without them. And better yet, if you want to use Vue, SASS or webpack in your own module, there is nothing stopping you!

Want to give MagicMirror v2.1.3 a try? Check it out here!

image
Loading comments …
©2021 - MichaelTeeuw.nl