Giter Site home page Giter Site logo

jackaudio / new-session-manager Goto Github PK

View Code? Open in Web Editor NEW
78.0 14.0 11.0 11.98 MB

Assists music production by grouping standalone programs into sessions. Community version of "Non Session Manager".

Home Page: https://new-session-manager.jackaudio.org

License: GNU General Public License v3.0

C++ 64.14% C 17.53% Meson 1.37% Python 16.89% Shell 0.06%
linuxaudio nsm session-management jackaudio midi

new-session-manager's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

new-session-manager's Issues

Query Client List and Preview Session

Currently there is no nsmd/OSC way to ask for a client list if the session is not loaded. Even within a loaded session only the single registered /nsm/gui/announce_gui program must parse client announce and status messages in realtime and save them internally.

Proposed is a new OSC message that would instruct the server to send a list of clients to the requesting osc-address (or more information about the session, see below). This is a change in the API and requires a MINOR version increment, because it doesn't change existing behaviour and only adds new message.

With this addition all requesting clients, not only the single registered GUI, could work with the client list. This is a requirement for non-music-clients that want to watch the session-state: For example JACK-connection savers, display manager position savers, statistical loggers for professional musicians (how much time spent, which software is used the most) and more.

Ideally this message would be available at any time, no matter if a session is currently loaded. Getting information about sessions without starting all clients can provide a GUI with information for overviews.

As a proof of concept I programmed my Argodejo GUI to open all session.nsm files itself for a preview, check the timestamp of session.nms and in a running session, since it is the announced GUI, mirror that data to internal memory.
This is incompatible with networked sessions, especially distributed, because the GUI does not have access to the above files.

In network-sessions the different nsmd-servers could exchange and relay these information internally.

NSM URL and liblo shortcomings

At the moment it is not possible to let nsmd run under an url of the users choice.
@SpotlightKid researched the following

  • liblo with IPv6 does not work reliably. nsmd/libo-server started with ipv6 will only listen on ipv6. Clients that connect with ipv4 will not connect (e.g. jackpatch. but the pynsm clients will. This can lead to confusion because it seems like it is partially working)
  • liblo OSC server cannot be instructed to bind to a specific hostname or network interface. It binds to all available interfaces.
  • you cannot get nsmd to only listen on/to localhost, only 0.0.0.0 etc.
  • the port can be chosen
    ** nsmd only offers --osc-port
    ** nsm-legacy-gui offers --nsm-url but that is only to connect to a running server. If not existent it will not start one
  • Unrelated, but also important: historically liblo was bad with tcp/ip, therefor nsmd chose UDP in 2012. It needs to be reviewed if this is still a problem because TCP is the better protocoll for session management.

Besides security issues (which may or may not be relevant for an audio-production system, that is not the question here) this may lead to problems with more advanced network setups

NSM-Proxy: Change "Start" button to "Save" when already in session

When editing an NSM-Proxy config through the GUI the button still says "Start" eventhough the program is already running. This creates the impression that a second instance might be started on click or the client restarted, but in reality only the window is closed.

Renamble client names / Pretty Names (Saved in the session)

This depends on #32 for saving additional data.

Proposal to let the user give names in the NSM GUI, to rename individual instances to keep them apart or rename them according to a role: I usually name my instrument-programs like Carla or Zyn "Melody", "Bass" etc.

This cannot be implemented by existing mechanisms: Clients can specificy their own name on announce, which are used to save the session.nsm so they cannot change (see API docs). Clients can give themselves a label. These are deleted when the client stops, or the session is closed. And they are already used for other purposes (for example Fluajho reports the loaded soundfont name via label).

Argodejo implemented this as a proof of concept through the non-music client "nsm-data" (together with session notes)
On the one hand this already works and prevents further complexity in the daemon, on the other hand this creates overhead both in broadcast messages, in the GUI and the mere existence of the speciality-client.

And for clients without NSM support this will never work on the client side.

Support XDG Base Directory Specification

new-session-manager should adhere to the XDG Base Directory Specification and eventually not support ~/NSM Sessions/ anymore.

This can be implemented in two steps:

  • implement support for XDG Base Directory Specification, make a release, notify users about this change (and the future deprecation of ~/NSM Sessions/) and save any new sessions exclusively below $XDG_DATA_HOME/new-session-manager/ (or similar) while still supporting to load from the old location. Alternatively one could also do a simple migration from the old to the new location (e.g. similar to the way Ardour does it between major releases) and not allow loading from the old location right away.
  • drop support for ~/NSM Sessions/ in a release after that

README.md is badly worded

It is a community version of the "NON Session Manager" and free in every sense of the word: free of cost, free to share and use, free of spyware or ads, free-and-open-source.

The above statement from README.md gives a misleading impression, as it implies that Non Session Manager is non-free and contains spyware and ads. I think it could be worded better to avoid confusion.

Legacy-GUI: Sessions label smears out upon rescaling

When shrinking the window of the legacy GUI to a size not sufficient for the "Sessions" label to be fully displayed and enlarging the window again afterwards the label gets smeared. (Observed in i3 4.17.1)

smeared_session

Allow explicitly enabling/disabling compilation of optional components

Good job on moving this forward! 👍

Quick question: Can the compilation of the optional components which are currently behindt an automagic FLTK check be made explicit?

P.S. I noticed fluid is mentioned in the dependencies as well, I don't know what that is though, which package/application does that belong to?

Symlink stage does not take into account DESTDIR (for packaging)

Failing at:

   dh_auto_install -O-Smeson
        cd obj-x86_64-linux-gnu && DESTDIR=/Shared/Personal/FOSS/Repo/Debian-Apps/new-session-manager/debian/new-session-manager LC_ALL=C.UTF-8 ninja install
[0/1] Installing files.
ln: failed to create symbolic link '/usr/bin/non-session-manager': Permission denied

Ability to delete sessions?

Apparently this wasn't in the original nsm to avoid all moral hazard the UI might have toward a situation where a user accidentally deletes a project they really didn't want to.

But I keep clicking New when I really want to click Add Client to Session.

Maybe deleting could have a check like GitHub? And/or use a custom trash dir or ~/.local/share/Trash?

[Discussion] Remember client running status (running, stopped) in session save?

Consider this a discussion:

Several people asked for the option to save if a client was currently running or not. As a result when a session gets reloaded these programs should not start on their own.

This needs more investigation and actual user stories.
Is this actually needed or are all people thinking of the same usecase? Will something go wrong? break compatibility?

This feature is dependent on a decision how to handle saving additional data: #32

Legacy-GUI: Stop-Button does not hide when client stopped on its own (Window refresh problem)

In legeacy-gui.cpp class NSM_Client method void stopped ( bool b ) is _kill_button->hide(); which is the stop button. It should be hidden when a clients stops.

If the GUI/nsmd stopps the client the stop button will hide. If the client quit on its own (e.g. Qtractor) it will not hide immediately. (despite followed by redraw();) If you trigger a window update, my way was resizing the log-frame at the bottom of the window, everything will update and the button will hide.

This is a regression from the conversion to FLTK and is present in our 1.3 release already.

Legacy-GUI: problems when resizing application

Window manager: i3 4.16.1


When opening the nsm-legacy-gui

orig

And shrinking it by e.g. opening several terminals

shrunken

the tree holding the names of the different session disappears.

When enlarging the window again

enlarged

one can see that it disappeared for good.


The reason for this is the way the Fl_Tile containing both the tree and the content of the session was implemented. Due to the way it's content is marked as resizable it allows for the tree part to be reduced to size 0. Once there, it can not be enlarged anymore.

I'll try to provide a patch soon.

Reimplement nsm-proxy

To be a drop-in replacement nsm-proxy needs to be provided (as well as the binary nsm-proxy-gui).

However, that is a FLTK/NTK program. Therefore we need a tool with the same name, that does the same.

Brainstorming:
Maybe something with a self-contained, minimal GUI toolkit to not draw in dependencies.

nsmd: During load/timeout the session is not set yet and can be quit without any safeguards

AFAIK this is not a regression, but needs testing.

When a session is currently loading and takes very long, for example because the 5 second timeout is waiting for a non-nsm-capable client, during that time you can just Quit and do other commands that should normally check if a session is already open.

Internally the current session is only set after load, including the /nsm/gui/session/name message which indicates "session loaded" to a GUI.

To be fair, this is a corner case, which I only discovered because I was rapidly restarting and quitting during development.

But it could happen when a user loads the wrong session by accident and immediately tries to leave it. So far I don't see any consquences for the user because nothing will be saved here, especially not jackpatch (which would destroy all connectiongs because clients are only partially ready)

In summary: Not critical, but would be nice to fix one day. Be careful of side-effects and regressions.

Create (unit) tests

There is no testing and quality assurance at the moment.
Volunteers are needed that have experience in writing tests.

This is only for the daemon, not for any GUI.

Delete or clean client data

When a client is removed from a session it leaves data behind.

This is both needed and undesired.

  • It is needed because a removed client is not a final decision. If you close the session without save ("Abort") the client is still in the session and will be reloaded, with data, the next time.
  • Having knowledge about the the exact files of each client also opens up more options for GUIs (optional convenience features outside and on top of the NSM protocol). Example: Client duplicate.
  • The very nature of music production leads to lots of added and removed clients over time. This can lead to unwanted data, wasting space and the risk of the user losing overview and control.
    • @falkTX may comment on more problems through the not-so-random nature of client IDs

This is not a paradox. Cleaning up old clients need not be integrated into the existing remove functionality but could be an extra step with e.g. the option for the GUI to present a list of files and ask for confirmation. Or even cherry pick which old clients to delete.
However, that remains wishful thinking until there is a solution to figure out which files belong to which client.

Background information: Each client receives a name.ID combo to be used as name for the save-file. In an ideal world this will either be a single file or a directory with arbitrary content. Both variants make sure to find only the this clients data. However, it must be confirmed that these are indeed the only possible scenarios (according to the NSM API specs) and there is no chance of over-deleting.

Missing manpages for packaging in Fedora and Debian/Ubuntu.

Hi there! Per Debian packaging policy and Fedora packaging guidelines, any files installed to /usr/bin should also include a manpage. While these aren't blockers since you have existing documentation, it would be advisable to create proper manpages.

Thanks!

Create a .desktop entry specification to make NSM-client-support discovery reliable and fast

At the moment there is no programmatic way parse a system for installed NSM-capable clients.
Internal and IRC discussions about this have been going on for some time, hereby transferred to the public eye.

A proposed solution is a new entry in clients XDG .desktop files. It specifies the command that nsmd should call.
This will be added as a SHOULD-rule in the API docs and it is in the clients best interest.

Support in existent clients will be gained by spreading the word, asking nicely and submitting code-patches.

A GUI can also supplement the list of discovered programs through an internal database. However, this can only be a fallback because it is based on human knowledge.

This has interaction with a potential list of marketing-information on our potential website/documenation. If it is very easy and convenient for the public to inform us of nsm-capable clients, that we are unaware of, we can establish contact with the clients developers and lend a helping hand. (Same goes for an "official" NSM Wishlist)

Extension-Client for Hooks and Triggers

As wished by @unfa and https://github.com/original-male/non/issues/287 and others

Proposed solution for the requested behaviour: A client that can be added to a session which has slots for various NSM events. You can attach programs to be executed on these events, or save shell code directly in the client to execute.

Request 287 also wants these triggers to influce loading order and speed of nsmd itself, for example delay loading until certain programs ran through ( I can imagine mounting external drives with huge sample libraries, setting up JACK etc.).
While there may exist solutions for this completely external to NSM (why not start the complete session only after the setup is complete?) we do not want to deny this outright but assume there is a valid usecase: This needs further investigation, what can be done with existing OSC messages. For example there is "session is loaded", which the proposed extension-client can delay itself by not answering to the servers announce until is is done setting up.

Read more about extension clients that keep the session managers code-complexity low here: #32

Lockfiles not removed in several scenarios

Transferred from https://github.com/original-male/non/issues/270

If you load a session a .lock file gets created. If you close with /nsm/server/close the lockfile gets deleted. It also works with abort and with creating a new session.

However, if you choose to open a new session with /nsm/server/open the current sessions lockfile remains. Even when the new sessions gets closed, the first lockfile remains.

The lockfile also remains if you duplicate the current session, which closes the current one.

I believe in the case of duplication and switching this is a bug and the lockfile should be deleted.

If you create a new session, which NSM automatically opens, no lockfile gets created.

Legacy-GUI: even with a lockfile present, the session will still open. There are no relevant tests for the lockfile.
It is very rare that I see the popup-dialog that a session is already locked. In fact I can't remember I have ever seen it except someone opened two non-session-manager GUIs by accident. Otherwise these are false-positives: If the files are write-protected or ( nsmd.cpp load_session_file() ) if session's folder doesn't exists, it answers "/error ERR_SESSION_LOCKED session is locked by another process.".

See also this PR where I discuss if lockfiles should be removed completely
#30

It is also possible to move the lockfiles out of the session dir and into a temporary directory that will get cleaned up by the OS. Then a real computer crash (no electricity) will not lock a session over a reboot.

A fixed and known outside location could also be used for server lookup. The lockfiles could contain NSM Urls so that external programs, scripts and launchers can look up if a session is currently running and under which OSC-URL.

Distribution Packages (Log)

Here a place to review and discuss packages in distributions and the process of getting them included.
Especially to comply with distributions standards, if there is anything wrong.
Also good for reminding distributions of new versions, if they don't have an automatic system.

[Dev-Log] API Version vs. Server/Client capabilities

This is not a bug report but a public "dev-log" with the option for anyone to comment.

The NSM API was always versioned. Now with our fork there is some progress which requires incrementing the minor version.
See also our own API document:

https://linuxaudio.github.io/new-session-manager/api/index.html#_api_versions_and_behaviour_changes

While fixing the code and adapting the API document over the last weeks I realized that there may be redundancy, or overlapping responsibilities, when it comes to API versions and so-called capabilities, which are tokens send while clients and server handshake to negotiate features.

Why announce (server) capabilities if there is already an API version?

For the client capabilities side there is no issue. Some features are just client-optional, like hiding/showing the GUI or the client sending progress-in-percent to the server.

But shouldn't the server always support all features described in the API anyway?

  1. The existinence of capabilities might imply that different server implementations with only subsets of features were a design-consideration by the original author from the start. The Non-SM manuals, website and API also indicate this. However, given how very negative the original authors reactions were concerning such server-implementations (RaySession, Carla, this fork) one can only deduce that this was not the case.

  2. The client has no way of knowing the server API version. It is not announced over OSC ( I might add this before the next release). Server capabilities might have been intended to be the version check, but indirectly. If that is the case it would make the API version not needed, except for documentation reasons.

  3. There is no plan to change the current scheme. The capabilities will stay in and the API-versioning will be taken seriously. Starting from this as a baseline my own brainstorming can see some usecases. For example: The server nsmd might get a command line switch that will remove :optional-gui: from the announced server-capabilities. This will create a mode where every client is always visible.

Maybe some of you have more ideas why having both, API Versions and Capabilities, is good to have. Maybe some of you have good reasons to deprecate one or the other, before too much development goes into that in the future?

/nsm/gui/session/name inconsistency

The GUI receives "/nsm/gui/session/name" when the session changes. It has two parameters, which are inconsistent at the moment and depend on the cirumstances how the session was opened.

For this example:
Session path is /home/user/NSM Sessions/myAlbum/mySong
Relative path is myAlbum/mySong
Session name is mySong

The parameters results are:

  • start new session: myAlbum/mySong , myAlbum/mySong (without leading slash!) (nsmd.cpp is jusing the same parameter twice here)
  • duplicate session: mySong-new , /myAlbum/mySong-new (with leading slash!)
  • load existing session: mySong, /myAlbum/mySong (with leading slash!)
  • attach GUI to running session: mySong, /home/user/NSM Sessions/myAlbum/mySong

This is an undocumented and unstable /nsm/gui function. There are no comments in the code and nothing in the API document.

Legacy-GUI uses the first parameter to display. Sometimes you see myAlbum/mySong as title, sometimes just mySong.

I will fix this to consistent behaviour:

  • First parameter is the short session name: mySong
  • Second parameter is the relative path with a leading slash: /myAlbum/mySong

Note to future self, when writing about /nsm/gui in the API docs:

  • The unique session name is the second parameter, /myAlbum/mySong
    • Unique Session name is WITH a leading slash
  • Session root /home/user/NSM Sessions is a different message and only send once during gui_announce.
    • Session root has NO trailing slash
  • The path on disc (where nsmd is running) is the combination of session root + unique session name (relative path)
  • A GUI could show the relative path without leading slash for the optimal information/presentation ratio for the main title and the short name for reduced display. (e.g. in Argodejo short name for quick view and tray icon)

Remove jackpatch compiler warnings

Jackpatch throws some compiler warnings. Those should be ironed out to create a trustworthy piece of software.

[10/22] Compiling C object 'jackpatch@exe/src_jackpatch.c.o'
../src/jackpatch.c: In function ‘snapshot’:
../src/jackpatch.c:487:13: warning: implicit declaration of function ‘asprintf’; did you mean ‘vsprintf’? [-Wimplicit-function-declaration]
  487 |             asprintf( &s, "%-40s |> %s\n", *port, *connection );
      |             ^~~~~~~~
      |             vsprintf
../src/jackpatch.c: In function ‘dequeue_new_port’:
../src/jackpatch.c:697:9: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
  697 |         if ( jack_ringbuffer_read_space( port_ringbuffer ) >= size );
      |         ^~
../src/jackpatch.c:698:9: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  698 |         {
      |         ^

NSM_SESSION_ROOT evar?

It would be handy to have a NSM_SESSION_ROOT path environment variable that can point to a custom session root directory for NSM control apps to use (if no argument for one is provided).

Read-Only sessions (currently not possible)

Read-only sessions are useful: Templates to use with the Dupliate command or a measure to prevent accidental changes including file access-timestamps ( sudo chattr -R +i SESSION-DIRECTORY )
They can also happen by real permission errors: Be it a network mount, files from another linux-user, FUSE mounts of an archived .tar session and more.

Currently nsmd will not load such sessions. The error message is a false-positive lockfile, because the lockfile function is testing with a write attempt.

There are several solutions to this. Some of the following ideas I consider already good, some are here only for completeness-sake. It is assumed that a save-attempt to a read-only resource will not be a problem for any client.

  • Remove lockfiles completely
  • On session load only test if the lockfile exists, not if writing it would work.
  • Test if write protected, if true do not test for lockfile (and possible further measures such as ignoring OSC-save messages)
  • An explicit read-only nsmd mode. Either global as commandline option or available as OSC-switch between sessions. This must delete all OSC save commands, but will still not prevent clients saving on their own. Meaning: this is NOT a solution of protecting your sessions against accidental saves.
  • Explicitly forbid read-only scenarios through the API document. Advice workarounds like copying a session manually before starting NSM or fancy linux solutions like virtual filesystems that automagically forget any written changes and do not touch the original data.

My favourites are

  • removing lockfiles complety. At the moment they are broken ( #31 ) and not used. I like it because it is a simple solution that offers the most flexibility for all kinds of future usecases. But it also burdens the user with preventing opening sessions twice with two different servers.
  • Test for write-permissions, switch into a more forgiving internal mode. This is a more complex and therefore a source for new bugs but allows keeping lockfiles. If implemented 100% correctly this is what a user would expect.

Fragile session lookup

Since a while I encountered the strange phenomena that sometimes all session are listed in the nsm-legacy-gui (as well as in non-session-manager) and sometimes only a small subset.

After some digging I found the problem to be some symbolic links created by the Non-Timeline. They are pointing to files located on a hard disk which is not mounted all the time. If missing, the dead links cause the ftw function in list_file in nsmd.cpp to abort and return a -1.

How about catching the return value and triggering another more elaborated and maybe less efficient search instead? I'm not a native C++ person and does not know which libraries do you intend to use, but I could give it a try myself.

provide non-session-manager executable

Do be a drop-in replacement this package would need to provide an executable called non-session-manager.
The question now is if this should be just the standard GUI, but reverted to FLKT or something entirely new that provides just the same amount of features in a similar workflow. But with a smaller GUI toolkit, like Xputty or so.

Nested sessions are either falsely reported by /nsm/server/list or not supported by the session manager GUI

This needs an API and rulebook decision.

If an actual project directory contains another project/session like so:

/projectOne/session.nsm
/projectOne/projectTwo/session.nsm
This will get reported by /nsm/server/list as two sessions.

Legacy-GUI will treat projectOne as just a subdirectory and present it as a [+]-entry in the tree-view.

In my opinion only allowing directory-"leafs" (a dir without further sessions beneath) in the tree to be real project would be the cleanest solution (and subsequently /nsm/server/list not reporting them anymore)

I reported this to the original NSM https://github.com/original-male/non/issues/269 and I would still like to have an answer from that end. But eventually this needs to be decided.

Legacy-GUI: Attaching to a running nsmd server does not show icons

This is not a regression. I have tested this with Non-Session-Manager v1.2 Arch release package and the bug is the same.

If a session inside nsmd is already running (with clients) and you connect the GUI to it it will not show the program Icon.
Some programs have their icons visible, some don't

For copy and paste convenience I will use a fixed OSC port here, but this was tested without.

Steps to reproduce:

in terminal 1:
nsmd --osc-port=12345

in terminal 2:
non-session-manager --nsm-url=osc.udp://0.0.0.0:12345/
Create a new session "test". Add one client (e.g. Patroneo) to session
Confirm that you see the icon
Quit the GUI via window manager or QUIT button. This will not quit the server but just detach.

Execute again, to attach to a running session:
non-session-manager --nsm-url=osc.udp://0.0.0.0:12345/
Icon is gone.
If you stop and resume Patroneo the icon will still be missing.

New logo?

Maybe someone will come up with something at some point?

Legacy-GUI: Dialog boxes need correct X11 flags, they are real windows at the moment (bad for tiling window managers)

In X11 "Add Client to Session", as well as the confirmation dialog for ABORT and the request to name a new sessions are actual windows, and do not have flags for dialogs.

On tiling window managers this results in a window as big as available space allows it, up to fullscreen.

Please change that to a dialog that is parented to the main window so it shows up within the NSM window and not positioned relative to the workspace.

X11 has flags for this, FLTK should let us set the window type.

Narrow repo to daemon only and change build system

The github mirror included everything from the NON repo.

new-session-manager is intended to only consist of the nsmd daemon.

First step is to git remove all unneeded files and create a build-process that fits the task.

Suggestions so far were: meson, writing a Makefile by hand.

Session template support

This is something that I always find useful to have.
I would say that most people end up using the same applications in similar ways when producing music, so having a read-to-go template would be great.

Note that I am not saying that NSM should ship with pre-made templates, but that the user should be allowed to create them.
Functionality-wise we already have everything that is needed to make this work (more or less).

Would be great that when clicking "new session" we are presented with the option of "empty" and any other templates we set up before. The SM just needs to take care to duplicate the template and load it.

Font is not visible

I'm not sure what has happened here, I don't think I have changed anything myself since the last time I used it and it worked;

image

README is not clear on what "New Session Manager" actually is

Looking at the README, there are many mentions of NSM, but nothing that actually explains what it is.
This makes it very confusing.
We should be focusing on what NSM provides in the README, rather than why this specific project exists. We could have a separate text file for that, linked from the README for those interested on learning more.

Users that read about the project and come here to find more info should not be subject to internal social problems surrounding it

General strategy to stay up- and downwards compatible with Non-Session-Manager sessions

Not only is New-Session-Manager a drop-in replacement for Non-Session-Manager but sessions must stay compatible in both directions. Obviously New-SM can load Non-SM sessions just fine, and currently the reverse is also true. And it shall stay this way.

However, if we want to save more this MUST not change the original session.nsm file format.

The file loading code is a straightforward line-by-line lookup with : delimters in a fixed order to parse values.
while ( fscanf( fp, "%m[^:]:%m[^:]:%m[^:\n]\n", &client_name, &client_executable, &client_id ) > 0 )

Adding or reordering fields is impossible and will not happen, period.

One strategy is to have a second save file. Original NSM never deletes or changes files that is doesn't know or control, which is good for multiple reasons (storing extra files in the session dir, such as an .odt with song lyrics etc.). This should be a format chosen and designed to be up- and downward compatible with past and future New-SM versions. This is another topic for discussion, so only briefly: Uncomplicated stable syntax, don't change or delete values you don't know but save them unchanged, API version saved in the file.

If that turns out to be impossible or impractical there is another route, which I tested in Argodejo: Extension-Clients that exist to store and read data, most likely to be read by the GUI. Communication and handshake with the environment is done over the existing broadcast channel. The nsmd server does not need to know anything about it, no changes to the API required. For the nsmd server these extension clients looks like any other client, thus the session can be loaded in any host, even if that does not support these additional features.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.