Cycling74 / min-devkit

Tools, documentation, and reference implementation of a Max Package built using the Min-API.
MIT License
163 stars 31 forks source link

"Hello World" Tutorials #83

Open tap opened 7 years ago

tap commented 7 years ago

The ReadMe currently lays out a logical approach to understanding the Min ecosystem but it is also potentially overwhelming and requires some nominal amount of patience. Thus it doesn't offer an ideal on-boarding experience.

The tutorial experience should go from zero to having your own Max Package with a "Hello World" quickly and directly. Thus we probably have 4 "Step 1" tutorials to create:

Question: Should we be cloning from Github or downloading from the Package Manager? I suspect that the later. We could add a "Step 0" Tutorial to deal with the Github part separately...

One thing to be sure and hit is getting to the project for the individual object -- not just global project that contains all of the clutter of all of the projects.

Also want emphasize throughout the underlying world-view: We are making a Package and it must be in your Packages folder. None of Min will make sense or work naturally without that presupposition.

tap commented 7 years ago

Also need to link to it up at the top of the ReadMe. And Maybe consider moving the other links to documentation up to the top too?

diablodale commented 7 years ago

@tap, you ask how to distribute Min... I believe Min should not be distributed by Package Manager. Why? Because it is not a package of Max. Max does not use Min's .h and .lib files. Instead, Min is a library to be used in Visual Studio, Clang, objectiveC, etc. I believe the better question to ask is "How do we distribute Min to Visual Studio? How do we distribute Min to ObjectiveC?"

I very much want to see Min distributed through NuGet. I also want to see the existing Max 6/7 SDK distributed via NuGet. NuGet is the now-generation way for libraries like Min to be used for C++ development in Visual Studio. It handles versioning of the library, include paths, library paths, linker settings for libraries, library dependencies in a project and across projects, etc. Not using this wonderful standard ecosystem would be a disservice. I regularly use NuGet in Visual Studio to manage all my 3rd party libraries. Max is only one of my 3rd party libraries.

As a helpful-intending proactive desire for clarification...it is not yet clear to me if @tap above is writing that Min (the SDK/headers/lib itself) or an external-created-by-Min has a package world-view.

As you are working through this, please continue to consider the following case. It is important to me (external dev) and a set of professional patch authors (a different set of your customers) to have externals that will not be installed in the Packages folder. Today, I have customers (professional patch authors) who need dp.kinect2 external to live in a collection/exe. It requires specific work to enable this, e.g. https://github.com/Cycling74/max-sdk/issues/6

Real-world Scenario

A patch author (not C++ dev though still a Max customer) uses an external written by me (a C++ dev) to create an exhibition for a museum. This is a fixed, locked-down computer using a fixed locked-down patch. The patch is distributed/installed as a collective or application/exe. All the files/directories are secured with ACLs to be read-only for this collective/exe. The collective nor any externals in it can write to the hard drive except for settings/appdata/temp locations. The patch author sells many of these exhibitions to museums.

Every morning, the museum's non-technical staff boots this computer. The patch author has setup the computer to automatically start the collective/application/exe on boot. The same patch author has also setup a way to distribute new copies of the exhibition for any super-critical updates. It is a simple file copy replacing the old collective/exe.

diablodale commented 7 years ago

Oh, forgot a really important thing on using NuGet. versioning

Dev use multiple versions of libraries. For example, one project might use Max SDK v6, another project Max SDK v7, another project Min v1, another project Min v1.5. I already have this scenario today. Min adds another version of a library. Therefore, I need to have multiple versions of Min simultaneously installed. This is all handled automatically by systems like NuGet.

tap commented 7 years ago

Regarding Packages, all external objects are encouraged to be distributed using Packages. Internal to Max most of the new objects developed are in fact packages.

Objects from packages that are used in a standalone or collective will still be bundled into the standalone and collective as they always have so there is no conflict.