JITLib:
Filter:
Overviews | JITLib | Tutorials > JITLib | Live Coding

JITLib

An overview of the Just In Time programming library

Introduction

"Passenger to taxtidriver: take me to number 37. I'll give you the street name when we are there."1

Disclaimer: there is no time, really; punctuality, however, is your personal responsibility.

Just in time programming (or: conversational programming, live coding2 , on-the fly-programming, interactive programming) is a paradigm that includes the programming activity in the program's operation. Here, a program is not taken as a tool that is made first to be productive later, but instead as a dynamic construction process of description and conversation. Writing code becomes an integral part of musical or experimental practice.

Being a dynamic programming language, SuperCollider provides several possibilities for modification of a running program - this library extends, unifies and develops them, mainly by providing abstract placeholders, called proxies, which can be used in calculations and modified at runtime.

Overview

JITLib consists of a number of placeholders (server side and client side proxies) and schemes of access3 . These two aspects of space corresponding to inclusion and reference, depend on their context - here the placeholders are like roles which have a certain behaviour and can be fulfilled by certain objects. It is useful to be aware of the three aspects of such a placeholder: a certain set of elements can be their source, they can be used in a set of contexts and have a default source, if none is given.

Frequently used classes: Tdef (for tasks), ProxySpace, NodeProxy and Ndef (for synths), Pdef and Pdefn (for patterns).

NOTE: For some recent changes, see: JITLib Changes in 3.7

For additional functionality, see also JITLib extensions Quark. To install it, run the following:

Tutorial: Interactive Programming with SuperCollider and jitlib

This tutorial focusses on some basic concepts used in JITLib. There are many possibilities, such as server messaging and pattern proxies which are not covered in tutorial form presently.

content:
placeholders in SuperCollider
jitlib_basic_concepts_01
referencing and environments
jitlib_basic_concepts_02
internal structure of node proxy
jitlib_basic_concepts_03
timing in node proxy
jitlib_basic_concepts_04

Overview of the different classes and techniques

Tutorials

ProxySpace examples
(a broad variety of inputs and uses)
jitlib_efficiency
(optimising code)
the_lazy_proxy
(how the initialisation works)
jitlib_fading
(how crossfade of code works)
jitlib_asCompileString
(storing and reproducing proxies)
recursive_phrasing
(a specific use of Pdef)
jitlib_asCompileString
(how to reproduce source code from objects)
jitlib_networking
(how to collaborative live code with JITLib)
basic_live_coding_techniques
(live coding without jitlib)
NodeProxy roles
(adverbial syntax for NodeProxy sources)

Networking

See also these related useful classes:

BusPlug
(listener on a bus)
SkipJack
(a task that keeps awake across cmd-period)
LazyEnvir
(and environment that returns proxies)
EnvironmentRedirect
(abstract superclass for redirecting environments)
EnvGate
(singleton fade envelope)

History and GUI classes written by Alberto de Campo.

Thanks a lot for all the feedback and ideas!

_____________________________________________________________

The research for this project was funded by: German Research Foundation (DFG) and the Future Funds of Styria, Austria.

[1] - An austrian math teacher's joke
[2] - For Live Coding see: http://toplap.org
[3] - They have in common that they treat assignment as a method. In such a way, they are an extension of the assignment implementation in Smalltalk-72, which makes "=" a message sent to the receiving object.