1 <!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8">
5 <meta http-equiv=
"Content-Style-Type" content=
"text/css">
7 <meta name=
"Generator" content=
"Cocoa HTML Writer">
8 <meta name=
"CocoaVersion" content=
"1038.29">
9 <style type=
"text/css">
10 p
.p1
{margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica
}
11 p
.p2
{margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica
; min-height: 14.0px}
12 p
.p3
{margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica
}
13 p
.p4
{margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica
}
14 p
.p5
{margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco
; min-height: 12.0px}
15 p
.p6
{margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco
; color: #737373}
16 p
.p7
{margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica
; min-height: 18.0px}
17 p
.p8
{margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica
; color: #0000ee}
18 p
.p9
{margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica
; color: #2b30fa}
19 p
.p10
{margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco
; color: #8e8a7e; min-height: 12.0px}
20 span
.s1
{font: 3.0px Helvetica
}
21 span
.s2
{color: #416bbd}
22 span
.s3
{text-decoration: underline
; color: #0041d4}
23 span
.s4
{color: #0047e4}
24 span
.s5
{color: #000000}
25 span
.s6
{color: #6378a5}
26 span
.s7
{font: 11.0px Georgia
}
27 span
.s8
{font: 12.0px Helvetica
; color: #6378a5}
28 span
.s9
{font: 12.0px Helvetica
; text-decoration: underline
}
29 span
.s10
{text-decoration: underline
; color: #0000ee}
30 span
.s11
{color: #476db9}
31 span
.s12
{color: #3465c5}
32 span
.s13
{text-decoration: underline
; color: #4266ac}
33 span
.s14
{color: #255ece}
34 span
.s15
{color: #2b30fa}
35 span
.s16
{text-decoration: underline
; color: #3d64af}
36 span
.s17
{text-decoration: underline
; color: #2b30fa}
37 span
.s18
{text-decoration: underline
}
38 span
.s19
{color: #4266ac}
39 span
.s20
{color: #1d59d3}
40 span
.s21
{color: #1454d8}
41 span
.s22
{color: #0024f8}
42 span
.Apple-tab-span
{white-space:pre
}
46 <p class=
"p1"><b>Just In Time Programming
</b></p>
47 <p class=
"p2"><br></p>
48 <p class=
"p3"><i>"Passenger to taxtidriver: take me to number 37. I'll give you the street name when we are there."<span class=
"Apple-converted-space"> </span></i></p>
49 <p class=
"p3"><i><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(an austrian math teacher's joke)
</i></p>
50 <p class=
"p2"><br></p>
51 <p class=
"p2"><br></p>
52 <p class=
"p4">Disclaimer: there is no time, really; punctuality is your personal responsibility though.
</p>
53 <p class=
"p2"><br></p>
54 <p class=
"p2"><br></p>
55 <p class=
"p4"><i>Just in time programming
</i> (or:
<i>conversational programming, live coding
</i><span class=
"s1"><i><sup>1</sup></i></span><i>, on-the fly-programming, interactive programming
</i>) is a paradigm that includes the programming activity itself in the program's operation. This means a program is not taken as a tool that is made first, then to be productive, but a dynamic construction process of description and conversation – writing code thus becoming a closer part of musical or experimental practice. SuperCollider, being a dynamic programming language, provides several possibilities for modification of a running program - this library attempts to extend, simplify and develop them, mainly by providing abstract placeholders
<i> (
</i><b><i>proxies
</i></b><i>)
</i> that can be modified and used in calculations while playing. There is some specific networking classes which are made to simplify the distribution of
<span class=
"Apple-converted-space"> </span>live coding activity.
</p>
56 <p class=
"p2"><br></p>
57 <p class=
"p4">JITLib simplifies and unifies some orthogonal aspects of SuperCollider.
<span class=
"Apple-converted-space"> </span></p>
58 <p class=
"p4">It consists of a number of
<b><i>placeholders
</i></b> (server side and client side) and
<b><i>schemes of access
</i></b>.
</p>
59 <p class=
"p4">These two aspects of space corresponding to
<i>inclusion
</i> and
<i>reference,
</i> depend on their context - here the placeholders are like roles which have a certain behaviour and can be fulfilled by certain objects.
</p>
60 <p class=
"p4">It is useful to be aware of the three aspects of such a placeholder: a certain set of elements can be their
<b>source
</b>, they can be used in a set of
<b>contexts
</b> and have a default source, if none is given.
</p>
61 <p class=
"p2"><br></p>
62 <p class=
"p2"><br></p>
63 <p class=
"p4">Frequently used classes:
</p>
64 <p class=
"p4"><span class=
"s2"><span class=
"Apple-tab-span"> </span><a href=
"Patterns/Tdef.html"><span class=
"s3">Tdef
</span></a></span> (for tasks),
<a href=
"environments/ProxySpace.html"><span class=
"s2">ProxySpace
</span></a><span class=
"s2">,
<a href=
"nodeproxy/NodeProxy.html"><span class=
"s4">NodeProxy
</span></a></span> and
<a href=
"nodeproxy/Ndef.html"><span class=
"s2">Ndef
</span></a> (for synths),
<a href=
"Patterns/Pdef.html"><span class=
"s2">Pdef
</span></a> and
<a href=
"Patterns/Pdefn.html"><span class=
"s2">Pdefn
</span></a> (for patterns).
</p>
65 <p class=
"p2"><br></p>
66 <p class=
"p2"><br></p>
67 <p class=
"p5"><br></p>
68 <p class=
"p4">For additional functionality, see also
<b>JITLib extensions
</b> <b>Quark
</b>. To install it, evaluate:
</p>
69 <p class=
"p6">"JITLib extensions"<span class=
"s5">.include;
</span></p>
70 <p class=
"p2"><br></p>
71 <p class=
"p2"><br></p>
72 <p class=
"p4"><b>Tutorial: Interactive Programming with SuperCollider and jitlib
</b></p>
73 <p class=
"p7"><br></p>
74 <p class=
"p4">This tutorial focusses on some basic concepts used in JITLib. There are many possibilities,
</p>
75 <p class=
"p4">such as server messaging and pattern proxies which are not covered in tutorial form presently.
</p>
76 <p class=
"p2"><br></p>
77 <p class=
"p2"><br></p>
78 <p class=
"p4">content:
</p>
79 <p class=
"p2"><br></p>
80 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>placeholders in sc
</b> <span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"tutorials/jitlib_basic_concepts_01.html"><span class=
"s6">jitlib_basic_concepts_01
</span></a></p>
81 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>referencing and environments
</b> <span class=
"Apple-tab-span"> </span><a href=
"tutorials/jitlib_basic_concepts_02.html"><span class=
"s6">jitlib_basic_concepts_02
</span></a></p>
82 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>internal structure of node proxy
</b><span class=
"s7"><b> <span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/jitlib_basic_concepts_03.html"><span class=
"s8">jitlib_basic_concepts_03
</span></a></span></p>
83 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>timing in node proxy
</b> <span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"tutorials/jitlib_basic_concepts_04.html"><span class=
"s6">jitlib_basic_concepts_04
</span></a></p>
84 <p class=
"p2"><br></p>
85 <p class=
"p2"><br></p>
86 <p class=
"p2"><br></p>
87 <p class=
"p2"><br></p>
88 <p class=
"p4"><b>Overview of the different classes and techniques:
</b></p>
89 <p class=
"p2"><br></p>
90 <p class=
"p2"><br></p>
91 <p class=
"p4">• One way or style of access is the
<b> <i>'def'
</i>classes
</b>(Pdef, Ndef etc.)
</p>
92 <p class=
"p4"><span class=
"Apple-tab-span"> </span>it binds a symbol to an object in a specific way:
</p>
93 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>Pdef(\name)
</b> returns the proxy
</p>
94 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>Pdef(\name, object)
</b> sets the source and returns the proxy.
</p>
95 <p class=
"p4"><span class=
"Apple-tab-span"> </span>the rest of the behaviour depends on its use.
</p>
96 <p class=
"p2"><span class=
"Apple-tab-span"> </span></p>
97 <p class=
"p8"><span class=
"s5"><span class=
"Apple-tab-span"> </span>client side:
<span class=
"Apple-tab-span"> </span><a href=
"Patterns/Pdef.html"><span class=
"s9">Pdef
</span></a>,
<a href=
"Patterns/Pdefn.html"><span class=
"s9">Pdefn
</span></a>,
<a href=
"Patterns/Tdef.html"><span class=
"s9">Tdef
</span></a>,
<a href=
"Patterns/Pbindef.html"><span class=
"s9">Pbindef
</span></a>,
<a href=
"Patterns/Psym.html"><span class=
"s9">Psym
</span></a>,
<a href=
"Patterns/Pnsym.html"><span class=
"s9">Pnsym
</span></a>,
<a href=
"Patterns/Fdef.html"><span class=
"s9">Fdef
</span></a></span></p>
98 <p class=
"p4"><span class=
"Apple-tab-span"> </span>server side:
<span class=
"Apple-tab-span"> </span><a href=
"nodeproxy/Ndef.html"><span class=
"s6">Ndef
</span></a></p>
99 <p class=
"p2"><b><span class=
"Apple-tab-span"> </span></b></p>
100 <p class=
"p4">• Another way, for server side NodeProxies, is an
<b><i>environment
</i></b> that returns placeholders on demand:
</p>
101 <p class=
"p4"><span class=
"Apple-tab-span"> </span>ProxySpace.push
</p>
102 <p class=
"p4"><span class=
"Apple-tab-span"> </span>~out = { ...}
</p>
103 <p class=
"p4"><span class=
"Apple-tab-span"> </span>helpfile:
<span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"environments/ProxySpace.html"><span class=
"s6">ProxySpace
</span></a><b> </b>for the use together with other environments, see
<a href=
"tutorials/jitlib_basic_concepts_02.html"><span class=
"s6">jitlib_basic_concepts_02
</span></a></p>
104 <p class=
"p2"><b><span class=
"Apple-tab-span"> </span></b></p>
105 <p class=
"p4">• There is also direct access
<b><i>without
</i> using the access schemes
</b>: NodeProxy, TaskProxy etc. provide it.
</p>
106 <p class=
"p4"><span class=
"Apple-tab-span"> </span>internally the former use these as base classes.
</p>
107 <p class=
"p2"><br></p>
108 <p class=
"p8"><span class=
"s5"><span class=
"Apple-tab-span"> </span>client side:
<span class=
"Apple-tab-span"> </span><a href=
"Patterns/PatternProxy.html"><span class=
"s9">PatternProxy
</span></a><b>,
</b><a href=
"Patterns/EventPatternProxy.html"><span class=
"s9">EventPatternProxy
</span></a>,
<a href=
"Patterns/TaskProxy.html"><span class=
"s9">TaskProxy
</span></a>,
<a href=
"Patterns/PbindProxy.html"><span class=
"s9">PbindProxy
</span></a><b>,
</b><a href=
"Patterns/Pdict.html"><span class=
"s9">Pdict
</span></a></span></p>
109 <p class=
"p4"><span class=
"Apple-tab-span"> </span>server side:
<span class=
"Apple-tab-span"> </span><a href=
"nodeproxy/NodeProxy.html"><span class=
"s10">NodeProxy
</span></a></p>
110 <p class=
"p2"><br></p>
111 <p class=
"p4">• To record all textual changes,
<a href=
"extras/History.html"><span class=
"s11">History
</span></a> is provides navigation and a memory of code.
</p>
112 <p class=
"p2"><br></p>
113 <p class=
"p4">• For playing back on multichannel systems,
<a href=
"nodeproxy/Monitor.html"><span class=
"s12">Monitor
</span></a> (used internally) has a
<a href=
"nodeproxy/playN.html"><span class=
"s12">playN
</span></a> method.
</p>
114 <p class=
"p2"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></p>
115 <p class=
"p4">• GUI classes:
<span class=
"Apple-tab-span"> </span>overviews and mixers:
<a href=
"extras/ProxyMixer.html"><span class=
"s13">ProxyMixer
</span></a>,
<a href=
"extras/TdefAllGui.html"><span class=
"s2">TdefAllGui
</span></a>,
<a href=
"extras/PdefAllGui.html"><span class=
"s2">PdefAllGui
</span></a>,
<a href=
"extras/NdefMixer.html"><span class=
"s14">NdefMixer
</span></a></p>
116 <p class=
"p9"><span class=
"s5"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(for separate use:
<a href=
"GUI/TdefGui.html"><span class=
"s9">TdefGui
</span></a></span><span class=
"s11">,
<a href=
"GUI/PdefGui.html"><span class=
"s15">PdefGui
</span></a></span>,
<a href=
"extras/ProxyMonitorGui.html"><span class=
"s16">MonitorGui
</span></a><span class=
"s11">,
<a href=
"GUI/NdefGui.html"><span class=
"s17">NdefGui
</span></a>,
</span><span class=
"s18">NdefParamGui
</span><span class=
"s5">)
<b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b></span></p>
117 <p class=
"p2"><br></p>
118 <p class=
"p2"><br></p>
119 <p class=
"p2"><br></p>
120 <p class=
"p4"><b>Tutorials
</b>:
</p>
121 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><b><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/proxyspace_examples.html"><span class=
"s13">proxyspace_examples
</span></a> <span class=
"Apple-tab-span"> </span>(a broad variety of inputs and uses)
</p>
122 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/jitlib_efficiency.html"><span class=
"s13">jitlib_efficiency
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(optimising code)
</p>
123 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/the_lazy_proxy.html"><span class=
"s13">the_lazy_proxy
</span></a><span class=
"s19"><span class=
"Apple-tab-span"> </span></span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(how the initialisation works)
</p>
124 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/jitlib_fading.html"><span class=
"s13">jitlib_fading
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(how crossfade of code works)
</p>
125 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/jitlib_asCompileString.html"><span class=
"s13">jitlib_asCompileString
</span></a><span class=
"Apple-tab-span"> </span>(storing and reproducing proxies)
</p>
126 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/recursive_phrasing.html"><span class=
"s13">recursive_phrasing
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(a specific use of Pdef)
</p>
127 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"tutorials/jitlib_asCompileString.html"><span class=
"s20">jitlib_asCompileString
</span></a><span class=
"Apple-tab-span"> </span>(how to reproduce source code from objects)
</p>
128 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/jitlib_networking.html"><span class=
"s13">jitlib_networking
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(how to collaborative live code with JITLib)
</p>
129 <p class=
"p4"><b><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></b><a href=
"tutorials/basic_live_coding_techniques.html"><span class=
"s6">basic_live_coding_techniques
</span></a><span class=
"s6"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></span>(live coding without jitlib)
</p>
130 <p class=
"p2"><br></p>
131 <p class=
"p2"><br></p>
132 <p class=
"p4"><b>Networking:
</b></p>
133 <p class=
"p2"><br></p>
134 <p class=
"p4">• in remote and local networks thanks to sc-architecture node proxies can be
<b>used on any server
</b>,
<span class=
"Apple-converted-space"> </span></p>
135 <p class=
"p4"><span class=
"Apple-tab-span"> </span>as long as it notifies the client and has a correctly initialized default node.
</p>
136 <p class=
"p4"><span class=
"Apple-tab-span"> </span><b>note that the client id should be set.
</b></p>
137 <p class=
"p2"><br></p>
138 <p class=
"p4"><b>Internal classes / abstract classes:
</b></p>
139 <p class=
"p2"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></p>
140 <p class=
"p2"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span></p>
141 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"nodeproxy/BusPlug.html"><span class=
"s12">BusPlug
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(listener on a bus)
</p>
142 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"extras/SkipJack.html"><span class=
"s12">SkipJack
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(a task that keeps awake across cmd-period)
</p>
143 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"environments/LazyEnvir.html"><span class=
"s12">LazyEnvir
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(and environment that returns proxies)
</p>
144 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"environments/EnvironmentRedirect.html"><span class=
"s12">EnvironmentRedirect
</span></a><span class=
"s12"> </span>(abstract superclass for redirecting environments)
</p>
145 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"nodeproxy/EnvGate.html"><span class=
"s21">EnvGate
</span></a><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span>(singleton fade envelope)
</p>
146 <p class=
"p4"><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><span class=
"Apple-tab-span"> </span><a href=
"nodeproxy/NodeProxy_roles.html"><span class=
"s22">NodeProxy_roles
</span></a> (adverbial syntax for NodeProxy sources)
</p>
147 <p class=
"p5"><br></p>
148 <p class=
"p5"><br></p>
149 <p class=
"p5"><br></p>
150 <p class=
"p5"><br></p>
151 <p class=
"p5"><br></p>
152 <p class=
"p5"><br></p>
153 <p class=
"p5"><br></p>
154 <p class=
"p4">for suggestions / comments contact me
</p>
155 <p class=
"p4">Julian Rohrhuber,
<span class=
"Apple-converted-space"> </span>rohrhuber@uni-hamburg.de.
</p>
156 <p class=
"p2"><br></p>
157 <p class=
"p4">History and GUI classes are written by Alberto de Campo.
</p>
158 <p class=
"p2"><br></p>
159 <p class=
"p4">Thanks a lot for all the feedback and ideas!
</p>
160 <p class=
"p2"><br></p>
161 <p class=
"p2"><br></p>
162 <p class=
"p2"><br></p>
163 <p class=
"p4">_____________________________________________________________
</p>
164 <p class=
"p4">The research for this project is funded by:
<i>German Research Foundation (DFG)
<span class=
"Apple-converted-space"> </span></i></p>
165 <p class=
"p4">and the
<i>Future Funds of Styria, Austria.
</i></p>
166 <p class=
"p2"><br></p>
167 <p class=
"p4"><i>For Live Coding see: http://toplap.org
</i></p>
168 <p class=
"p2"><br></p>
169 <p class=
"p10"><br></p>
170 <p class=
"p5"><br></p>
171 <p class=
"p5"><br></p>