Discussion: Simplify the core.
See original GitHub issueSince I open sourced MagicMirror², I have received many awesome pull requests adding a lot of nice features to the Magic Mirror core. I am very grateful for that! Unfortunately, this comes with a downside: the application gets a lot more complicated.
The reason I open sourced MagicMirror² was because it is a perfect starter project for newcomers. Getting their feet wet in javascript and software development in general (see manifesto). With the current complexity, this project is slowly moving away from this.
I also noted that the amount of bash code is increasing, while the main intention of version 2 was to try to do everything in 1 program language: javascript. (Opposed to v1, which was a combination of languages like PHP, Javascript en in some cases Python).
Looking at other OS projects, there are some beautiful examples on how the project can be focused at what it does best. One example I like to mention is OctoPrint/OctoPi. Software to control your 3D printer. While @foosel does a great job to maintain the core application (OctoPrint), the packaged Rasberry Pi image (OctoPi) is maintained in a different repo by a different user (@GuySoft).
If we use that same approach there are a lot of things we can take out the core repo, and let other users start their own repo’s to accomplish the same features while separating concerns.
In my opinion, the following parts could initially be taken out of the core repo, and taken over by other repo’s:
- Installer script
- Update script
- Start Script
- PM2 integration
- Docker Package
Of course, we won’t take out these features as long as no other solutions are in place. As an install and update replacement, we need to write a good manual.
The added benefit of this approach is that the release schedule of the above features is no longer tied to the quarterly release schedule of MagicMirror².
With the new approach I think it’s good to set a few guidelines to which the future versions should adhere:
- Javascript, HTML, CSS only.
- No compile scripts (ie. webpack, sass, less)
- Focus (only) on Raspberry support.
- Install/Run/Update using default commands:
npm install
,git pull
, etc. Which will help people to learn and understand these commands.
Since this project would have never been such a success without the help of the community, I want to discuss this approach before taking any action. So I’m looking forward to your input.
Please let me know what you think with an open mind.
Thanks! Michael.
EDIT: Provisional TO DO List
Based on the discussion below, I made a provisional to do list which could be the base for the simplification of this repository. The to do list is not set in stone, and could change based on the feedback in this issue.
- Remove installer scripts (make sure an external repository is available as a replacement).
- Remove update scripts.
- Remove start script.
- Separate Client & Serveronly commands as regular npm commands:
npm run start
&npm run server
. - Cleanup folders (remove
/installers
&/splashscreen
and remove all root .sh files). Where necessary, replace shell code with javascript code. - Implement handler for incompatible modules.
- Create separate documentation site and repo.
- Improve documentation on how to install and update. This should reflect the procedure without an installer/updater, but it should also mention the available third party installers/updaters.
- Make an overview of the hard- and software requirements.
- Make an overview of the supported (tested) hardware and operating systems.
Feel free to share your ideas and feedback!
Issue Analytics
- State:
- Created 4 years ago
- Reactions:13
- Comments:85 (26 by maintainers)
@cowboysdude I’m not sure if or how I should respond to your comment. Calling people rude isn’t helping anyone. Especially when talking about open source software. Keep in mind that any work I have done for the past 6 years on the MagicMirror² project was completely voluntarily. I have no obligations to you or anyone else. The fact that you donated to the project doesn’t change that.
That being said: I think it’s important to explain that I’m absolutely not against the idea of “automatic installers”, “ready made raspberry images” or anything else that makes life easier for beginners. It’s just that I can’t manage all these components myself. Pulling them out as external repositories allows the maintainers to maintain those components without my intervention. @sdetweil’s hard work on the installer is a perfect example.
In the past years the project has grown a lot. This came with a huge downside: poor maintainability. If I let the project continue the way it was, it would eventually crash and burn. More important: I would completely lose the drive and interest to continue the project. By splitting up the project, this all can be prevented and will eventually improve the quality of the core. Of course this means we have to get trough some rough patches. And there certainly will be some moments of discussion and incomprehension. But keep in mind It’s only to keep the project running.
I’d also like to point out the forum is not intended to ask me for help. It’s a place where users can help each other and share their knowledge. Answering all questions I get would be more than a day job. I already have a day job. It pays my mortgage and has paid for the first 5 years of the MagicMirror² project. My time is limited. So I rather spent it on improving and releasing updates of the framework than answering individual questions.
As said before: donations don’t give me the obligation to help individuals out. That’s not the idea behind an open source project like MagicMirror². Donations are used to pay for the costs of running the project. I don’t want to give anyone the impression I’m doing this for the money. If that’s what anyone thinks, they couldn’t have been further from the truth. Therefor I’d like to make an exception and return your donation. Please send me an email (michael at xonaymedia.nl) to confirm your PayPal adres and I’ll transfer the money.
In the future. I recommend you think before you call someone rude. Everyone is fighting their own battles. Calling names won’t make things magically better. Especially not at times like these.
Kind regards, Michael.
@khassel I understand what you are saying, en indeed the pull count is impressive. But docker isn’t something beginners start with. For me personally I value the simplicity of a simple js project more than the sheer amount of users that simply install and run the script. If that was the case, I would just distribute a ready to use raspberry pi image.
If you take a look at the list of contributors, a lot of them made their fist ever GitHub contribution in the MagicMirror² project. This is what sets the project apart. This is what drives me.
If we slink MagicMirror² down to a simple js project that can either be start as a simple electron app or as a server only process, wouldn’t it be easy for someone else to make and distribute a nice docker wrapper?
In that case we can focus on the quality of the core, while others focus on the ease of use via a docker image.
This would also allow multiple approaches: docker, installer apps, ready to use images, etc.