In the setting of collaborative live coding, there emerges a number of issues: (1) the need for communication, (2) issues of conflicts in sharing program state space, and (3) remote control of code execution. This project proposes solutions to these problems. In the recent extension of UrMus - a programming environment for mobile music application development- we introduce a paradigm of shared and individual namespaces safeguarded against conflicts in parallel coding activities. We also develop a live variable view that communicates live changes in state among live coders. Lastly, we integrate collaborative aspects of programming execution into built-in live chat, which enables not only communication with others, but also distributed execution of code.

Live Variable View

Live variable view is similar to other programming environments (e.g., Eclipse) that show you a list of variables and functions except that it shows the value of each variable at the moment. It is also similar to the debugging mode in a programming environment where you can see the state of the program at a certain point, except that you do not need to stop at a breakpoint. The live variable view displays variables, functions available in the state space at the moment, and expressions a programmer is interested in. In the Figure above, the live variable view is located in the top left corner of the editor.

If a variable is abstract data typed (e.g., array, urMus GUI widgets), it shows all the elements inside the container in a hierarchical tree structure. An expression can be any code text that can be interpreted and returns a value such that you are able to evaluate any information you are interested in during the live coding session.

The state space in live coding can change over time for many reasons, including code execution on-the-fly, time-varying variables such as audio data, and user interaction influencing the program (such as pressing a button). The view updates, by default, any value changed by code execution. The live button right next to each entry can be used if a programmer wants to see the value of the associated entry in real time. For example, if there is a variable that contains audio sample data, you can see the actual sample value in real time.

Shared/Individual NameSpace

Imagine a case where two programmers are working on a one program state. What if someone else creates a variable named str without realizing a variable with such a name already exists? For the collaborative live coding environment with a centralized approach (one program state), it is desirable to control this risk, otherwise a collaborator may accidentally overwrite the state that someone created.

One non-technological solution to this problem is live coders continually paying attention to other peoples’ code text and being careful not to make conflicts as a part of live coding practice. This introduces extra cognitive loads for live coders and limits the improvisational aspects of live coding. Another naive solution to this is to make each live coder have individual state space which will prevent conflicts. However, this solution obstructs basic ways to collaborate by isolating a live coder from the centralized state space.

Our solution to this issue is to give each individual live coder his/her own namespace and to create a shared namespace separately that everyone has access to. Each live coder can selectively transfer any program state (e.g., variables, functions) of his/her own to the shared space. In this way, live coders need not worry about someone else corrupting their code by mistake. Note that this approach requires additional user input to select a set of state to be shared, hence facilitating communication between coders.

Related Video


Papers

  • Models and Opportunities for Networked Live Coding (paper).
    Sang Won Lee, Georg Essl.
    In Proceedings of The Live Coding and Collaboration symposium 2014, Birmingham, United Kingdom
  • Communication, Control, and State Sharing in Networked Collaborative Live Coding (paper).
    Sang Won Lee, Georg Essl.
    In Proceedings of the New Instruments for Musical Expression (NIME) 2014, London, United Kingdom