aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-04-13 05:04:52 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2006-04-13 05:04:52 +0000
commit54d61372a2c35f43df7ac398da1a5d7bd37da857 (patch)
treecb49a92d817603f0f26f290a9cbcc613ae7dbbf3 /doc
parentfbc1e03da8fa727349833e4ebb475dc2b7e06ade (diff)
got the start of a good intro tutorial, but its lacking some good, simple exercises
svn path=/trunk/; revision=4897
Diffstat (limited to 'doc')
-rw-r--r--doc/tutorials/intro/0.controlling_dsp_processing.pd30
-rw-r--r--doc/tutorials/intro/02.getting_help.pd2
-rw-r--r--doc/tutorials/intro/05.connections.pd25
-rw-r--r--doc/tutorials/intro/06.messages.pd42
-rw-r--r--doc/tutorials/intro/07.EXERCISE-make_your_first_patch.pd (renamed from doc/tutorials/intro/06.make_your_first_patch.pd)6
-rw-r--r--doc/tutorials/intro/08.bang.pd (renamed from doc/tutorials/intro/07.bang.pd)0
-rw-r--r--doc/tutorials/intro/09.event_driven_processing.pd74
-rw-r--r--doc/tutorials/intro/10.counters.pd44
-rw-r--r--doc/tutorials/intro/11.hot_and_cold_inlets.pd (renamed from doc/tutorials/intro/08.hot_and_cold_inlets.pd)2
-rw-r--r--doc/tutorials/intro/12.right_to_left_order.pd (renamed from doc/tutorials/intro/0.right_to_left_order.pd)24
-rw-r--r--doc/tutorials/intro/13.ordering_messages.pd (renamed from doc/tutorials/intro/ordering_messages.pd)10
-rw-r--r--doc/tutorials/intro/14.depth_first.pd (renamed from doc/tutorials/intro/depth_first.pd)0
-rw-r--r--doc/tutorials/intro/14.subpatches.pd1
-rw-r--r--doc/tutorials/intro/15.storage_objects.pd (renamed from doc/tutorials/intro/10.storage_objects.pd)0
-rw-r--r--doc/tutorials/intro/16.atoms.pd (renamed from doc/tutorials/intro/11.atoms.pd)0
-rw-r--r--doc/tutorials/intro/17.atomic_messages.pd (renamed from doc/tutorials/intro/12.atomic_messages.pd)0
-rw-r--r--doc/tutorials/intro/18.selectors.pd (renamed from doc/tutorials/intro/selectors.pd)0
-rw-r--r--doc/tutorials/intro/19.subpatches.pd26
-rw-r--r--doc/tutorials/intro/20.inlets_and_outlets.pd69
-rw-r--r--doc/tutorials/intro/21.outlet_order.pd32
-rw-r--r--doc/tutorials/intro/22.Example-all_just_data.pd (renamed from doc/tutorials/intro/0.all_just_data.pd)35
-rw-r--r--doc/tutorials/intro/23.EXERCISE-hmmm.pd (renamed from doc/tutorials/intro/0.exercise-template.pd)14
-rw-r--r--doc/tutorials/intro/24.guis.pd (renamed from doc/tutorials/intro/guis.pd)0
-rw-r--r--doc/tutorials/intro/25.gui_objects.pd (renamed from doc/tutorials/intro/gui_objects.pd)0
-rw-r--r--doc/tutorials/intro/26.nervous_guis.pd337
-rw-r--r--doc/tutorials/intro/Attic/trigger_conversion.pd49
-rw-r--r--doc/tutorials/intro/TEMPLATE.pd4
-rw-r--r--doc/tutorials/intro/TODO58
-rw-r--r--doc/tutorials/intro/counters.pd35
-rw-r--r--doc/tutorials/intro/determinism.pd5
-rw-r--r--doc/tutorials/intro/init_to_0.pd (renamed from doc/tutorials/intro/0.init_to_0.pd)0
-rw-r--r--doc/tutorials/intro/outlet_order.pd21
-rw-r--r--doc/tutorials/intro/pure_data_files.pd (renamed from doc/tutorials/intro/22.pure_data_files.pd)4
-rw-r--r--doc/tutorials/intro/right_to_left_order.pd17
-rw-r--r--doc/tutorials/intro/send_messages_to_pd.pd (renamed from doc/tutorials/intro/21.send_messages_to_pd.pd)2
-rw-r--r--doc/tutorials/intro/shell_sketch.pd (renamed from doc/tutorials/intro/0.shell_sketch.pd)0
-rw-r--r--doc/tutorials/intro/trigger_conversion.pd49
37 files changed, 792 insertions, 225 deletions
diff --git a/doc/tutorials/intro/0.controlling_dsp_processing.pd b/doc/tutorials/intro/0.controlling_dsp_processing.pd
deleted file mode 100644
index 7ce5147f..00000000
--- a/doc/tutorials/intro/0.controlling_dsp_processing.pd
+++ /dev/null
@@ -1,30 +0,0 @@
-#N canvas 361 163 475 498 10;
-#X text 117 189 (screenshot of main Pd window);
-#X msg 59 321 \; pd dsp 1;
-#X msg 126 321 \; pd dsp 0;
-#X text 19 252 As with most programming languages \, in Pd "1" means
-on \, and "0" means off.;
-#X obj 211 314 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X text 28 137 To see whether the DSP is on or off \, look at the checkbox
-on the main Pd window. You can also turn the DSP on and off using that
-checkbox.;
-#X obj 370 372 osc~ 250;
-#X obj 356 404 dac~;
-#X text 24 20 You can turn the processing of audio data on and off.
-In order for your patch to run \, you need to make sure that "compute
-audio" is turned on. This is also known as the "DSP". There are a couple
-ways of turning the "DSP" on and off.;
-#X text 23 100 - TODO: is Gem or PDP computation also controlled by
-the DSP?;
-#X text 23 407 There are also keyboard shortcuts:;
-#X text 34 459 (On MacOS X \, you can also use Cmd-. and Cmd-/);
-#X text 41 425 off: Ctrl-.;
-#X text 48 440 on: Ctrl-/;
-#X text 73 84 - TODO: messages are always processed;
-#X floatatom 211 339 5 0 0 0 - - -;
-#X obj 277 332 pddp/dsp;
-#X text 271 311 [pddp/dsp];
-#X connect 4 0 15 0;
-#X connect 6 0 7 0;
-#X connect 6 0 7 1;
diff --git a/doc/tutorials/intro/02.getting_help.pd b/doc/tutorials/intro/02.getting_help.pd
index 1c07f70b..62b30923 100644
--- a/doc/tutorials/intro/02.getting_help.pd
+++ b/doc/tutorials/intro/02.getting_help.pd
@@ -1,4 +1,4 @@
-#N canvas 111 50 650 395 12;
+#N canvas 111 50 654 399 12;
#X msg 179 150;
#X obj 61 150 trigger;
#X text 54 28 comment;
diff --git a/doc/tutorials/intro/05.connections.pd b/doc/tutorials/intro/05.connections.pd
index 2da16bbe..9401b7cf 100644
--- a/doc/tutorials/intro/05.connections.pd
+++ b/doc/tutorials/intro/05.connections.pd
@@ -1,23 +1,26 @@
-#N canvas 100 133 652 445 12;
-#X text 14 105 Pd patches are always running and changes take effect
+#N canvas 576 160 660 453 12;
+#X text 12 132 Pd patches are always running and changes take effect
immediately.;
#X floatatom 25 277 5 0 0 0 - - -;
#X floatatom 25 341 5 0 0 0 - - -;
-#X obj 24 165 tgl 30 0 empty empty start 2 15 1 12 -24198 -1 -1 0 1
+#X obj 24 179 tgl 30 0 empty empty start 2 15 1 12 -24198 -1 -1 1 1
;
-#X obj 24 209 metro 100;
-#X obj 24 240 random 100;
-#X text 70 169 <-- click here to start;
+#X obj 24 221 metro 100;
+#X obj 24 248 random 100;
+#X text 70 183 <-- click here to start;
#X text 66 299 connect by clicking on the outlet of the top number
box \, then drag and drop on the inlet of the bottom number box;
#X text 30 299 ^--;
-#X text 39 375 Disconnect the cable by clicking on it to highlight
-it \, then press the backspace key on your keyboard.;
#X obj 8 10 cnv 15 400 40 empty empty connections 20 12 0 24 -228992
-66577 0;
-#X text 15 66 Connections are always made from the inlet to the outlet
-since that always the direction that the data flows.;
-#X text 195 226 next \, make sure you are in edit mode;
+#X text 195 238 next \, make sure you are in edit mode;
+#X obj 39 418 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s2.6
+;
+#X text 34 372 Disconnect the cable by clicking on it to highlight
+it \, then press "backspace" on a PC \, or "delete" on a Mac.;
+#X text 11 53 One path for objects to communicate is thru connections
+\, called cords or cables. Connections are always made from the inlet
+to the outlet since that is the direction data flows in Pd.;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
diff --git a/doc/tutorials/intro/06.messages.pd b/doc/tutorials/intro/06.messages.pd
new file mode 100644
index 00000000..650f6ded
--- /dev/null
+++ b/doc/tutorials/intro/06.messages.pd
@@ -0,0 +1,42 @@
+#N canvas 364 149 628 453 12;
+#X obj 10 10 cnv 15 400 40 empty empty messages 20 12 0 24 -228992
+-66577 0;
+#X msg 354 162 say hello;
+#N canvas 0 22 466 316 myObject 0;
+#X obj 70 24 inlet;
+#X obj 68 243 outlet;
+#X obj 76 86 route say;
+#X obj 167 125 bang;
+#X obj 57 130 symbol;
+#X msg 167 152 symbol ?#$%!@$^!;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 2 1 3 0;
+#X connect 3 0 5 0;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X restore 354 250 pd myObject;
+#X symbolatom 355 306 10 0 0 0 - - -;
+#X obj 132 249 + 1;
+#X msg 131 161 1;
+#X floatatom 131 306 5 0 0 0 - - -;
+#X text 183 161 <-- messages -->;
+#X text 187 250 <-- objects -->;
+#X msg 370 197 do as I say!;
+#X obj 51 414 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s3
+;
+#X text 20 64 Objects respond to messages received on their inlets
+\, and output messages on their outlets. These messages can be anything
+from data to commands.;
+#X text 124 128 data;
+#X text 359 127 commands;
+#X text 18 394 For more on messages:;
+#X text 19 341 All communication within Pd is in the form of messages
+\, including when the user is controlling the program.;
+#X msg 143 189 2;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 0;
+#X connect 9 0 2 0;
+#X connect 16 0 4 0;
diff --git a/doc/tutorials/intro/06.make_your_first_patch.pd b/doc/tutorials/intro/07.EXERCISE-make_your_first_patch.pd
index 50987d70..02cdadcf 100644
--- a/doc/tutorials/intro/06.make_your_first_patch.pd
+++ b/doc/tutorials/intro/07.EXERCISE-make_your_first_patch.pd
@@ -1,6 +1,6 @@
-#N canvas 359 93 682 502 12;
-#X obj 8 10 cnv 15 400 40 empty empty make_your_first_patch 20 12 0
-24 -228992 -66577 0;
+#N canvas 359 93 686 506 12;
+#X obj 8 10 cnv 15 600 40 empty empty EXERCISE-make_your_first_patch
+20 12 0 24 -262131 -66577 0;
#X text 15 71 Its time to make your first patch. Follow the instructions
on the right:;
#X text 204 196 2- make a new object box \, in it \, type: symbol;
diff --git a/doc/tutorials/intro/07.bang.pd b/doc/tutorials/intro/08.bang.pd
index 1cc8ce8d..1cc8ce8d 100644
--- a/doc/tutorials/intro/07.bang.pd
+++ b/doc/tutorials/intro/08.bang.pd
diff --git a/doc/tutorials/intro/09.event_driven_processing.pd b/doc/tutorials/intro/09.event_driven_processing.pd
new file mode 100644
index 00000000..7b892c61
--- /dev/null
+++ b/doc/tutorials/intro/09.event_driven_processing.pd
@@ -0,0 +1,74 @@
+#N canvas 352 165 632 457 12;
+#X obj 10 10 cnv 15 400 40 empty empty event_driven_processing 20 12
+0 24 -228992 -66577 0;
+#X text 18 65 Message processing is driven by events \, nothing happens
+if there no events. There is nothing happening in the patches below
+until you click on the messages (the bangs at the bottom illustrate
+that):;
+#X obj 113 324 tgl 20 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
+;
+#X obj 113 372 float;
+#X obj 170 372 + 1;
+#X floatatom 113 397 5 0 0 0 - - -;
+#X obj 113 418 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 113 348 metro 1000;
+#X text 18 265 Pd is always ready to process messages \, you don't
+need to tell it to run. You can keep things running by sending a stream
+of events:;
+#X obj 384 316 bng 20 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 385 353 float;
+#X obj 442 353 + 1;
+#X floatatom 385 378 5 0 0 0 - - -;
+#X obj 385 399 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 54 145 cnv 15 80 30 empty empty empty 20 12 0 14 -225271 -66577
+0;
+#X obj 236 140 cnv 15 80 30 empty empty empty 20 12 0 14 -225271 -66577
+0;
+#X obj 399 132 cnv 15 80 30 empty empty empty 20 12 0 14 -225271 -66577
+0;
+#X obj 72 181 + 1;
+#X floatatom 72 207 5 0 0 0 - - -;
+#X msg 72 149 1;
+#X msg 237 147 convert;
+#X obj 237 178 symbol;
+#X symbolatom 237 206 10 0 0 0 - - -;
+#X obj 72 234 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 237 233 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 421 168 until;
+#X msg 421 137 100;
+#X obj 421 198 float;
+#X obj 478 198 + 1;
+#X floatatom 421 226 5 0 0 0 - - -;
+#X obj 421 247 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+-1;
+#X obj 277 364 delay 1000;
+#X connect 2 0 7 0;
+#X connect 3 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 1;
+#X connect 5 0 6 0;
+#X connect 7 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 10 1;
+#X connect 12 0 13 0;
+#X connect 13 0 31 0;
+#X connect 17 0 18 0;
+#X connect 18 0 23 0;
+#X connect 19 0 17 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 24 0;
+#X connect 25 0 27 0;
+#X connect 26 0 25 0;
+#X connect 27 0 28 0;
+#X connect 27 0 29 0;
+#X connect 28 0 27 1;
+#X connect 29 0 30 0;
+#X connect 31 0 10 0;
diff --git a/doc/tutorials/intro/10.counters.pd b/doc/tutorials/intro/10.counters.pd
new file mode 100644
index 00000000..30d3941a
--- /dev/null
+++ b/doc/tutorials/intro/10.counters.pd
@@ -0,0 +1,44 @@
+#N canvas 400 118 624 449 12;
+#X obj 10 10 cnv 15 400 40 empty empty counters 20 12 0 24 -228992
+-66577 0;
+#X obj 156 362 cnv 15 100 60 empty empty empty 20 12 0 14 -261681 -66577
+0;
+#X obj 174 382 f;
+#X obj 209 382 + 1;
+#X obj 157 219 float;
+#X floatatom 120 246 5 0 0 0 - - -;
+#X msg 121 137 1;
+#X obj 120 219 +;
+#X msg 157 189 0;
+#X msg 133 160 -1;
+#X text 167 138 increment;
+#X text 172 161 decrement;
+#X text 195 187 reset;
+#X floatatom 346 244 5 0 0 0 - - -;
+#X msg 404 180 0;
+#X text 395 137 increment;
+#X obj 346 216 float;
+#X obj 404 216 + 1;
+#X msg 347 138 bang;
+#X text 278 377 DANGER! infinite loop!;
+#X text 20 78 Counters are used a lot when programming Pd. Here are
+two examples of simple counters that you will see frequently.;
+#X text 442 180 reset;
+#X text 20 276 Pd is designed to be as flexible and open as possible.
+This means that it will let you crash your computer. For example \,
+never start a counter like this \, it will crash your computer!;
+#X connect 2 0 3 0;
+#X connect 3 0 2 0;
+#X connect 4 0 7 1;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
+#X connect 7 0 5 0;
+#X connect 8 0 4 0;
+#X connect 8 0 7 0;
+#X connect 9 0 7 0;
+#X connect 14 0 17 0;
+#X connect 14 0 16 0;
+#X connect 16 0 13 0;
+#X connect 16 0 17 0;
+#X connect 17 0 16 1;
+#X connect 18 0 16 0;
diff --git a/doc/tutorials/intro/08.hot_and_cold_inlets.pd b/doc/tutorials/intro/11.hot_and_cold_inlets.pd
index 06a8ac02..9f58000b 100644
--- a/doc/tutorials/intro/08.hot_and_cold_inlets.pd
+++ b/doc/tutorials/intro/11.hot_and_cold_inlets.pd
@@ -1,4 +1,4 @@
-#N canvas 205 66 679 541 12;
+#N canvas 205 66 683 545 12;
#X obj 19 243 +;
#X floatatom 19 272 5 0 0 0 - - -;
#X msg 19 179 1;
diff --git a/doc/tutorials/intro/0.right_to_left_order.pd b/doc/tutorials/intro/12.right_to_left_order.pd
index cb990c62..b746cbdc 100644
--- a/doc/tutorials/intro/0.right_to_left_order.pd
+++ b/doc/tutorials/intro/12.right_to_left_order.pd
@@ -1,7 +1,4 @@
-#N canvas 406 232 616 416 12;
-#X text 10 110 The [trigger] object is used to enforce execution order.
-If you need things to run in a certain order \, then you use a [trigger].
-;
+#N canvas 406 232 624 424 12;
#X obj 165 177 bng 25 250 50 0 empty empty empty -2 -8 1 10 -24198
-1 -1;
#X obj 165 217 trigger bang bang bang;
@@ -14,11 +11,16 @@ If you need things to run in a certain order \, then you use a [trigger].
#X text 212 180 <-- click here \,;
#X text 10 65 In Pd \, you read a patch from right to left \, from
top to bottom. Objects also output from right to left;
-#X text 89 380 then check the Pd window to see the order.;
-#X connect 1 0 2 0;
+#X text 89 361 then check the Pd window to see the order.;
+#X obj 43 386 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s3.3
+;
+#X text 10 110 The [trigger] object is used to enforce execution order.
+If you need things to run in a certain sequence \, then you use a [trigger].
+;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 3 0;
+#X connect 1 2 2 0;
#X connect 2 0 5 0;
-#X connect 2 1 4 0;
-#X connect 2 2 3 0;
-#X connect 3 0 6 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 0;
+#X connect 3 0 5 0;
+#X connect 4 0 5 0;
diff --git a/doc/tutorials/intro/ordering_messages.pd b/doc/tutorials/intro/13.ordering_messages.pd
index b7d454db..cbc193d7 100644
--- a/doc/tutorials/intro/ordering_messages.pd
+++ b/doc/tutorials/intro/13.ordering_messages.pd
@@ -1,5 +1,5 @@
#N canvas 542 117 623 439 12;
-#X obj -60 8 cnv 15 400 40 empty empty ordering_messages 20 12 0 24
+#X obj 10 10 cnv 15 400 40 empty empty ordering_messages 20 12 0 24
-228992 -66577 0;
#X msg 395 249 now;
#X msg 316 250 this;
@@ -9,14 +9,14 @@
#X msg 276 391 sense now this;
#X obj 157 292 symbol;
#X msg 159 151 bang;
-#X msg -27 177 bang;
+#X msg 10 177 bang;
#X msg 157 316 add2 \$1;
#X msg 478 248 set;
#X obj 160 178 trigger bang bang bang bang bang bang;
-#X text -18 393 look here for the result -->;
-#X text -50 62 Officially \, the execution order in Pd is undefined.
+#X text 10 393 look here for the result -->;
+#X text 10 62 Officially \, the execution order in Pd is undefined.
;
-#X text -50 88 The [trigger] object allows you to specify the order
+#X text 10 88 The [trigger] object allows you to specify the order
of messages are sent. If you need to make sure that one thing runs
before another \, use [trigger]:;
#X connect 1 0 7 0;
diff --git a/doc/tutorials/intro/depth_first.pd b/doc/tutorials/intro/14.depth_first.pd
index 14bb4062..14bb4062 100644
--- a/doc/tutorials/intro/depth_first.pd
+++ b/doc/tutorials/intro/14.depth_first.pd
diff --git a/doc/tutorials/intro/14.subpatches.pd b/doc/tutorials/intro/14.subpatches.pd
deleted file mode 100644
index 154bae2d..00000000
--- a/doc/tutorials/intro/14.subpatches.pd
+++ /dev/null
@@ -1 +0,0 @@
-#N canvas 0 22 454 304 12;
diff --git a/doc/tutorials/intro/10.storage_objects.pd b/doc/tutorials/intro/15.storage_objects.pd
index d5ca3016..d5ca3016 100644
--- a/doc/tutorials/intro/10.storage_objects.pd
+++ b/doc/tutorials/intro/15.storage_objects.pd
diff --git a/doc/tutorials/intro/11.atoms.pd b/doc/tutorials/intro/16.atoms.pd
index 8276758e..8276758e 100644
--- a/doc/tutorials/intro/11.atoms.pd
+++ b/doc/tutorials/intro/16.atoms.pd
diff --git a/doc/tutorials/intro/12.atomic_messages.pd b/doc/tutorials/intro/17.atomic_messages.pd
index b76ee863..b76ee863 100644
--- a/doc/tutorials/intro/12.atomic_messages.pd
+++ b/doc/tutorials/intro/17.atomic_messages.pd
diff --git a/doc/tutorials/intro/selectors.pd b/doc/tutorials/intro/18.selectors.pd
index 363971df..363971df 100644
--- a/doc/tutorials/intro/selectors.pd
+++ b/doc/tutorials/intro/18.selectors.pd
diff --git a/doc/tutorials/intro/19.subpatches.pd b/doc/tutorials/intro/19.subpatches.pd
new file mode 100644
index 00000000..fe73255c
--- /dev/null
+++ b/doc/tutorials/intro/19.subpatches.pd
@@ -0,0 +1,26 @@
+#N canvas 211 67 624 449 12;
+#X obj 10 10 cnv 15 400 40 empty empty subpatches 20 12 0 24 -228992
+-66577 0;
+#X text 12 69 Encapsulation is a key concept in Pd programming. Each
+object is an idea that is bundled up into an easy-to-use package. You
+should make encapsulated your ideas. Subpatches are the easiest way
+to do this.;
+#N canvas 394 144 474 324 what's 0;
+#X obj 140 91 loadbang;
+#X obj 139 149 float;
+#X obj 198 149 + 1;
+#X floatatom 139 221 5 0 0 0 - - -;
+#X obj 30 149 delay 1000;
+#X text 39 39 just counting away in here...;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 3 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 1;
+#X connect 4 0 1 0;
+#X restore 192 193 pd what's in here?;
+#X text 19 271 To make a subpatch \, create an object that started
+with the word "pd" \, then type anything after that to identify it.
+;
+#X text 17 325 A subpatch is part of the same file \, its just a way
+of organizing the logic of a program.;
diff --git a/doc/tutorials/intro/20.inlets_and_outlets.pd b/doc/tutorials/intro/20.inlets_and_outlets.pd
new file mode 100644
index 00000000..7f633d20
--- /dev/null
+++ b/doc/tutorials/intro/20.inlets_and_outlets.pd
@@ -0,0 +1,69 @@
+#N canvas 82 134 632 457 12;
+#X obj 10 10 cnv 15 400 40 empty empty inlets_and_outlets 20 12 0 24
+-228992 -66577 0;
+#X text 14 72 When making your own objects and subpatchs \, you can
+create inlets and outlets using [inlet] and [outlet].;
+#N canvas 0 22 707 378 look 0;
+#X obj 24 34 inlet;
+#X obj 238 47 inlet;
+#X obj 469 41 inlet;
+#X obj 251 304 outlet;
+#X msg 469 175 I am the third inlet;
+#X msg 242 145 I am the second inlet;
+#X msg 24 94 I am the first inlet;
+#X connect 0 0 6 0;
+#X connect 1 0 5 0;
+#X connect 2 0 4 0;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X restore 32 162 pd look inside me;
+#X obj 31 202 pddp/print_long;
+#X obj 32 129 bng 20 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 114 129 bng 20 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 197 129 bng 20 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#N canvas 120 60 711 382 look 0;
+#X obj 24 34 inlet;
+#X obj 334 33 inlet;
+#X obj 528 35 inlet;
+#X obj 253 309 outlet;
+#X msg 45 170 set;
+#X obj 286 179 prepend add2;
+#X msg 251 263;
+#X obj 21 120 trigger bang bang anything;
+#X connect 0 0 7 0;
+#X connect 1 0 5 0;
+#X connect 2 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 6 0;
+#X connect 6 0 3 0;
+#X connect 7 0 4 0;
+#X connect 7 1 6 0;
+#X connect 7 2 5 0;
+#X restore 199 376 pd look inside me;
+#X obj 198 416 pddp/print_long;
+#X msg 200 327 smokin!;
+#X msg 281 327 are;
+#X msg 363 327 you;
+#X text 17 259 The first inlet should be the hot inlet \, even in your
+own patches. There are times when you need to make other inlets hot
+\, but in general \, its a good rule to stick with.;
+#X obj 332 126 cnv 15 220 120 empty empty empty 20 12 0 14 -233017
+-66577 0;
+#X obj 347 132 inlet;
+#X obj 348 218 outlet;
+#X text 402 132 take in data;
+#X text 361 173 do some stuff here;
+#X text 418 217 output data;
+#X connect 2 0 3 0;
+#X connect 4 0 2 0;
+#X connect 5 0 2 1;
+#X connect 6 0 2 2;
+#X connect 7 0 8 0;
+#X connect 9 0 7 0;
+#X connect 10 0 7 1;
+#X connect 11 0 7 2;
+#X connect 14 0 15 0;
diff --git a/doc/tutorials/intro/21.outlet_order.pd b/doc/tutorials/intro/21.outlet_order.pd
new file mode 100644
index 00000000..5aaf5c8b
--- /dev/null
+++ b/doc/tutorials/intro/21.outlet_order.pd
@@ -0,0 +1,32 @@
+#N canvas 298 70 632 448 12;
+#X text 223 149 <-- click here \,;
+#X obj 8 10 cnv 15 400 40 empty empty outlet_order 20 12 0 24 -228992
+-66577 0;
+#X msg 153 149 3 2 1;
+#X obj 101 234 print último;
+#X obj 388 234 print first;
+#X obj 240 234 print nächste;
+#X text 19 374 There are occasional exceptions where it makes sense
+to break this convention. But you shouldn't do it unless it really
+is necessary. This will save you in the long run.;
+#X text 15 80 Just like the flow of programming in Pd \, the data should
+be output from right to left.;
+#N canvas 0 22 454 304 spread 0;
+#X obj 68 2 inlet;
+#X obj 38 235 outlet;
+#X obj 201 235 outlet;
+#X obj 345 235 outlet;
+#X obj 66 109 unpack float float float;
+#X connect 0 0 4 0;
+#X connect 4 0 1 0;
+#X connect 4 1 2 0;
+#X connect 4 2 3 0;
+#X restore 153 188 pd spread the love;
+#X text 18 310 While there is nothing forcing you to output data to
+the outlets in any order \, Pd has a very strong convention for how
+data should be output from an object.;
+#X text 175 259 now check the Pd window;
+#X connect 2 0 8 0;
+#X connect 8 0 3 0;
+#X connect 8 1 5 0;
+#X connect 8 2 4 0;
diff --git a/doc/tutorials/intro/0.all_just_data.pd b/doc/tutorials/intro/22.Example-all_just_data.pd
index 7dd958c6..aeb2c96c 100644
--- a/doc/tutorials/intro/0.all_just_data.pd
+++ b/doc/tutorials/intro/22.Example-all_just_data.pd
@@ -1,14 +1,14 @@
-#N canvas 585 87 498 434 10;
+#N canvas 585 87 502 438 10;
#X obj 180 406 import unauthorized Gem;
-#X obj 154 102 grid grid1 200 0 199 200 0 199 1 1 1 10 10 276 240;
+#X obj 154 102 grid grid1 200 0 199 200 0 199 1 1 1 10 10 113 347;
#X obj 25 39 pddp/dsp;
-#N canvas 446 285 646 466 guts 0;
+#N canvas 446 285 662 482 guts 0;
#X obj 20 10 inlet;
#X obj 275 14 inlet;
-#X obj 112 127 osc~;
-#X obj 112 156 *~;
-#X obj 149 98 / 200;
-#X obj 110 185 dac~;
+#X obj 78 108 osc~;
+#X obj 78 137 *~;
+#X obj 115 79 / 200;
+#X obj 76 166 dac~;
#X obj 444 54 receive pd;
#X msg 340 154 create;
#X msg 310 154 1;
@@ -34,19 +34,23 @@
#X obj 181 251 / 200;
#X obj 53 250 / 200;
#X msg 394 154 dimen 200 200;
-#X obj 112 51 + 250;
-#X obj 149 137 line~;
-#X msg 149 117 \$1 5;
+#X obj 77 56 + 250;
+#X obj 115 118 line~;
+#X obj 161 59 bang;
+#X msg 160 98 0 250;
+#X msg 115 98 \$1 25;
+#X obj 161 79 delay 200;
#X connect 0 0 4 0;
#X connect 0 0 27 0;
#X connect 0 0 29 0;
+#X connect 0 0 33 0;
#X connect 1 0 26 0;
#X connect 1 0 28 0;
#X connect 1 0 31 0;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 3 0 5 1;
-#X connect 4 0 33 0;
+#X connect 4 0 35 0;
#X connect 6 0 15 0;
#X connect 7 0 9 0;
#X connect 8 0 9 0;
@@ -76,14 +80,17 @@
#X connect 30 0 9 0;
#X connect 31 0 2 0;
#X connect 32 0 3 1;
-#X connect 33 0 32 0;
+#X connect 33 0 36 0;
+#X connect 34 0 32 0;
+#X connect 35 0 32 0;
+#X connect 36 0 34 0;
#X restore 256 320 pd guts;
#X text 102 9 Its all just data. Use it however you want!;
#X text 28 61 ^-- click here to turn it on and off;
#X obj 154 344 nbx 5 24 -1e+37 1e+37 0 0 empty empty X -15 12 1 18
--166441 -1 -1 121 256;
+-166441 -1 -1 0 256;
#X obj 348 343 nbx 5 24 -1e+37 1e+37 0 0 empty empty Y -15 12 1 18
--166441 -1 -1 61 256;
+-166441 -1 -1 0 256;
#X text 14 121 click and drag in;
#X text 14 137 this box ------->;
#X connect 1 0 3 0;
diff --git a/doc/tutorials/intro/0.exercise-template.pd b/doc/tutorials/intro/23.EXERCISE-hmmm.pd
index 6250c858..909899f8 100644
--- a/doc/tutorials/intro/0.exercise-template.pd
+++ b/doc/tutorials/intro/23.EXERCISE-hmmm.pd
@@ -1,4 +1,4 @@
-#N canvas 552 273 483 299 10;
+#N canvas 333 243 686 482 12;
#N canvas 414 102 546 555 guts 0;
#X msg 280 45 \; pd filename exercise-patch.pd /tmp \; #N canvas \;
#X pop 1 \;;
@@ -84,12 +84,14 @@
#X connect 20 0 1 0;
#X connect 21 0 22 0;
#X connect 22 0 8 0;
-#X restore 290 216 pd guts;
-#X msg 290 185 solve;
-#X text 53 28 In the exercise patch \, connect the existing objects
+#X restore 233 269 pd guts;
+#X msg 233 242 solve;
+#X text 32 64 In the exercise patch \, connect the existing objects
so that you can control the frequency of the oscillator and hear the
resulting sound.;
-#X text 84 88 If you want help \, click the solve message below.;
-#X msg 346 184 try again;
+#X text 35 131 If you want help \, click the solve message below.;
+#X msg 298 242 try again;
+#X obj 11 10 cnv 15 600 40 empty empty EXERCISE-make_your_first_patch
+20 12 0 24 -262131 -66577 0;
#X connect 1 0 0 0;
#X connect 4 0 0 1;
diff --git a/doc/tutorials/intro/guis.pd b/doc/tutorials/intro/24.guis.pd
index ca08bb3a..ca08bb3a 100644
--- a/doc/tutorials/intro/guis.pd
+++ b/doc/tutorials/intro/24.guis.pd
diff --git a/doc/tutorials/intro/gui_objects.pd b/doc/tutorials/intro/25.gui_objects.pd
index 8a75061f..8a75061f 100644
--- a/doc/tutorials/intro/gui_objects.pd
+++ b/doc/tutorials/intro/25.gui_objects.pd
diff --git a/doc/tutorials/intro/26.nervous_guis.pd b/doc/tutorials/intro/26.nervous_guis.pd
new file mode 100644
index 00000000..724fed59
--- /dev/null
+++ b/doc/tutorials/intro/26.nervous_guis.pd
@@ -0,0 +1,337 @@
+#N canvas 10 40 624 449 12;
+#X obj 10 10 cnv 15 400 40 empty empty nervous_guis 20 12 0 24 -228992
+-66577 0;
+#X obj 486 20 tgl 20 1 empty start_nervously1 start_it 8 -8 0 10 -24198
+-1 -250685 0 1;
+#X obj 127 179 bng 16 1200 50 0 empty nerv_bng bang 8 -8 0 10 -91120
+-252939 -113209;
+#X obj 112 346 hsl 116 29 0 127 0 0 empty nerv_hsl h-slider 8 -8 0
+10 -140002 -259981 -172176 2336 1;
+#X obj 400 211 tgl 70 1 empty nerv_tgl toggle 8 -8 0 10 -77819 -177692
+-11757 0 1;
+#X obj 370 329 vsl 8 81 0 127 0 0 empty nerv_vsl v-slider 8 -8 0 10
+-55101 -168903 -47444 1998 1;
+#N canvas 135 99 386 473 control 0;
+#X obj 19 21 inlet;
+#X obj 19 50 t b f;
+#X obj 19 153 del 900;
+#X obj 19 212 del 900;
+#X obj 19 93 del 100;
+#X obj 19 283 del 900;
+#X obj 33 125 f;
+#X obj 33 180 f;
+#X obj 33 245 f;
+#X obj 33 309 f;
+#N canvas 280 166 794 432 bng 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 234 368 pack 0 0 0;
+#X obj 250 29 metro 2000;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 145 % 120;
+#X obj 84 32 metro 100;
+#X obj 234 261 random 1.67772e+07;
+#X obj 266 283 random 1.67772e+07;
+#X obj 299 315 random 1.67772e+07;
+#X obj 84 11 inlet;
+#X msg 64 312 \; nerv_bng delta \$1 \$2;
+#X msg 234 390 \; nerv_bng color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_bng size \$1;
+#X msg 250 51 \; nerv_bng bang;
+#X obj 234 340 * -1;
+#X obj 266 316 * -1;
+#X obj 299 342 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 22 0;
+#X connect 11 0 3 0;
+#X connect 11 0 14 0;
+#X connect 11 0 18 0;
+#X connect 11 1 4 0;
+#X connect 11 1 19 0;
+#X connect 11 2 20 0;
+#X connect 12 0 23 0;
+#X connect 13 0 25 0;
+#X connect 14 0 16 0;
+#X connect 15 0 24 0;
+#X connect 16 0 15 0;
+#X connect 17 0 11 0;
+#X connect 18 0 26 0;
+#X connect 19 0 27 0;
+#X connect 20 0 28 0;
+#X connect 21 0 17 0;
+#X connect 21 0 13 0;
+#X connect 26 0 12 0;
+#X connect 27 0 12 1;
+#X connect 28 0 12 2;
+#X restore 114 143 pd bng;
+#N canvas 139 89 794 432 tgl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 445 168 + 8;
+#X obj 445 144 % 120;
+#X obj 85 31 metro 100;
+#X obj 264 28 metro 1000;
+#X obj 85 10 inlet;
+#X msg 64 312 \; nerv_tgl delta \$1 \$2;
+#X msg 226 322 \; nerv_tgl color \$1 \$2 \$3;
+#X msg 445 192 \; nerv_tgl size \$1;
+#X msg 264 51 \; nerv_tgl bang;
+#X obj 226 298 pack 0 0 0;
+#X obj 226 191 random 1.67772e+07;
+#X obj 258 213 random 1.67772e+07;
+#X obj 291 245 random 1.67772e+07;
+#X obj 226 270 * -1;
+#X obj 258 246 * -1;
+#X obj 291 272 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 18 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 23 0;
+#X connect 11 1 4 0;
+#X connect 11 1 24 0;
+#X connect 11 2 25 0;
+#X connect 12 0 14 0;
+#X connect 13 0 20 0;
+#X connect 14 0 13 0;
+#X connect 15 0 11 0;
+#X connect 16 0 21 0;
+#X connect 17 0 15 0;
+#X connect 17 0 16 0;
+#X connect 22 0 19 0;
+#X connect 23 0 26 0;
+#X connect 24 0 27 0;
+#X connect 25 0 28 0;
+#X connect 26 0 22 0;
+#X connect 27 0 22 1;
+#X connect 28 0 22 2;
+#X restore 114 198 pd tgl;
+#N canvas 322 99 794 432 hsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 188 + 8;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 561 155 % 30;
+#X obj 445 183 + 20;
+#X obj 446 149 % 110;
+#X obj 254 305 metro 1000;
+#X obj 254 327 random 846352;
+#X obj 254 350 % 130;
+#X obj 84 11 inlet;
+#X msg 64 321 \; nerv_hsl delta \$1 \$2;
+#X msg 254 373 \; nerv_hsl set \$1;
+#X msg 445 231 \; nerv_hsl size \$1 \$2;
+#X obj 245 202 pack 0 0 0;
+#X obj 245 95 random 1.67772e+07;
+#X obj 277 117 random 1.67772e+07;
+#X obj 310 149 random 1.67772e+07;
+#X obj 245 174 * -1;
+#X obj 277 150 * -1;
+#X obj 310 176 * -1;
+#X msg 245 229 \; nerv_hsl color \$1 \$2 \$3;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 24 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 28 0;
+#X connect 11 1 4 0;
+#X connect 11 1 14 0;
+#X connect 11 1 29 0;
+#X connect 11 2 30 0;
+#X connect 12 0 19 0;
+#X connect 13 0 15 1;
+#X connect 14 0 17 0;
+#X connect 15 0 26 0;
+#X connect 16 0 11 0;
+#X connect 17 0 13 0;
+#X connect 18 0 15 0;
+#X connect 18 0 22 1;
+#X connect 19 0 18 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 25 0;
+#X connect 23 0 16 0;
+#X connect 23 0 20 0;
+#X connect 27 0 34 0;
+#X connect 28 0 31 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 27 0;
+#X connect 32 0 27 1;
+#X connect 33 0 27 2;
+#X restore 112 263 pd hsl;
+#N canvas 148 132 794 432 vsl 0;
+#X obj 114 260 - 0;
+#X obj 148 258 f;
+#X obj 147 222 t f b;
+#X obj 79 122 random 56789;
+#X obj 150 165 random 9876;
+#X obj 47 236 - 0;
+#X obj 81 234 f;
+#X obj 80 198 t f b;
+#X obj 150 192 % 50;
+#X obj 79 145 % 50;
+#X obj 64 289 pack 0 0;
+#X obj 85 53 t b b b;
+#X obj 445 122 random 555666;
+#X obj 560 128 random 773322;
+#X obj 445 208 pack 0 0;
+#X obj 84 32 metro 100;
+#X obj 241 299 metro 1000;
+#X obj 240 325 random 846352;
+#X obj 241 352 % 130;
+#X obj 561 155 % 110;
+#X obj 560 188 + 20;
+#X obj 446 149 % 30;
+#X obj 445 183 + 3;
+#X obj 84 11 inlet;
+#X msg 239 227 \; nerv_vsl color \$1 \$2 \$3;
+#X msg 445 231 \; nerv_vsl size \$1 \$2;
+#X msg 64 310 \; nerv_vsl delta \$1 \$2;
+#X msg 241 376 \; nerv_vsl set \$1;
+#X obj 239 203 pack 0 0 0;
+#X obj 239 96 random 1.67772e+07;
+#X obj 271 118 random 1.67772e+07;
+#X obj 304 150 random 1.67772e+07;
+#X obj 239 175 * -1;
+#X obj 271 151 * -1;
+#X obj 304 177 * -1;
+#X connect 0 0 10 1;
+#X connect 1 0 0 1;
+#X connect 2 0 1 1;
+#X connect 2 0 0 0;
+#X connect 2 1 1 0;
+#X connect 3 0 9 0;
+#X connect 4 0 8 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 1;
+#X connect 7 0 6 1;
+#X connect 7 0 5 0;
+#X connect 7 1 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 7 0;
+#X connect 10 0 26 0;
+#X connect 11 0 3 0;
+#X connect 11 0 12 0;
+#X connect 11 0 29 0;
+#X connect 11 1 4 0;
+#X connect 11 1 13 0;
+#X connect 11 1 30 0;
+#X connect 11 2 31 0;
+#X connect 12 0 21 0;
+#X connect 13 0 19 0;
+#X connect 14 0 25 0;
+#X connect 15 0 11 0;
+#X connect 16 0 17 0;
+#X connect 17 0 18 0;
+#X connect 18 0 27 0;
+#X connect 19 0 20 0;
+#X connect 20 0 14 1;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 22 0 14 0;
+#X connect 23 0 15 0;
+#X connect 23 0 16 0;
+#X connect 28 0 24 0;
+#X connect 29 0 32 0;
+#X connect 30 0 33 0;
+#X connect 31 0 34 0;
+#X connect 32 0 28 0;
+#X connect 33 0 28 1;
+#X connect 34 0 28 2;
+#X restore 113 327 pd vsl;
+#X connect 0 0 1 0;
+#X connect 1 0 4 0;
+#X connect 1 1 6 1;
+#X connect 1 1 7 1;
+#X connect 1 1 8 1;
+#X connect 1 1 9 1;
+#X connect 2 0 3 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 3 0 8 0;
+#X connect 4 0 2 0;
+#X connect 4 0 6 0;
+#X connect 5 0 9 0;
+#X connect 6 0 10 0;
+#X connect 7 0 11 0;
+#X connect 8 0 12 0;
+#X connect 9 0 13 0;
+#X restore 486 46 pd control;
+#X text 17 88 You can dynamically control just about everything about
+most GUI objects.;
+#X connect 1 0 6 0;
diff --git a/doc/tutorials/intro/Attic/trigger_conversion.pd b/doc/tutorials/intro/Attic/trigger_conversion.pd
index 3a183963..2f610ff5 100644
--- a/doc/tutorials/intro/Attic/trigger_conversion.pd
+++ b/doc/tutorials/intro/Attic/trigger_conversion.pd
@@ -1,28 +1,29 @@
-#N canvas 227 116 643 459 12;
-#X obj -32 7 cnv 15 400 40 empty empty trigger_conversion 20 12 0 24
+#N canvas 227 116 647 463 12;
+#X obj 10 10 cnv 15 400 40 empty empty trigger_conversion 20 12 0 24
-228992 -66577 0;
#X obj 126 187 trigger anything float bang;
-#X text -21 80 [trigger] can also do conversions in addition to ordering.
-The keyword "anything" tells [trigger] to do no conversion.;
#X msg 125 142 float 45.234;
-#X floatatom 128 213 5 0 0 0 - - -;
-#X floatatom 263 212 5 0 0 0 - - -;
-#X obj 404 211 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X floatatom 126 223 5 0 0 0 - - -;
+#X floatatom 258 222 5 0 0 0 - - -;
+#X obj 391 221 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 10 296 12 45 blah;
-#X msg 131 295 blah;
-#X msg 189 296 123;
-#X msg 233 295 symbol test;
-#X obj 128 368 print bang;
-#X obj 128 342 trigger bang anything;
-#X obj 333 368 print anything;
-#X connect 1 0 4 0;
-#X connect 1 1 5 0;
-#X connect 1 2 6 0;
-#X connect 3 0 1 0;
-#X connect 7 0 12 0;
-#X connect 8 0 12 0;
-#X connect 9 0 12 0;
-#X connect 10 0 12 0;
-#X connect 12 0 11 0;
-#X connect 12 1 13 0;
+#X msg 42 298 12 45 blah;
+#X msg 163 297 blah;
+#X msg 221 298 123;
+#X msg 265 297 symbol test;
+#X obj 160 370 print bang;
+#X obj 160 344 trigger bang anything;
+#X obj 365 370 print anything;
+#X text 10 80 [trigger] can also do limited conversions in addition
+to ordering. The keyword "anything" tells [trigger] to do no conversion.
+;
+#X connect 1 0 3 0;
+#X connect 1 1 4 0;
+#X connect 1 2 5 0;
+#X connect 2 0 1 0;
+#X connect 6 0 11 0;
+#X connect 7 0 11 0;
+#X connect 8 0 11 0;
+#X connect 9 0 11 0;
+#X connect 11 0 10 0;
+#X connect 11 1 12 0;
diff --git a/doc/tutorials/intro/TEMPLATE.pd b/doc/tutorials/intro/TEMPLATE.pd
index 177b6f23..7f7dff3f 100644
--- a/doc/tutorials/intro/TEMPLATE.pd
+++ b/doc/tutorials/intro/TEMPLATE.pd
@@ -1,3 +1,3 @@
-#N canvas 21 40 639 455 12;
-#X obj -34 8 cnv 15 400 40 empty empty TEMPLATE 20 12 0 24 -228992
+#N canvas 10 40 620 445 12;
+#X obj 10 10 cnv 15 400 40 empty empty TEMPLATE 20 12 0 24 -228992
-66577 0;
diff --git a/doc/tutorials/intro/TODO b/doc/tutorials/intro/TODO
index 72bd2e8a..3f6d0141 100644
--- a/doc/tutorials/intro/TODO
+++ b/doc/tutorials/intro/TODO
@@ -12,7 +12,9 @@
- make looping sequence
-File Order:
+----------
+File Order
+----------
- hello world
- basic elements
@@ -21,40 +23,64 @@ File Order:
- objects
- connections
- messages
-- make your first Pd patch
+- EXERCISE: make your first Pd patch
- bang
+- event driven processing
+- counters
- hot and cold inlets
+- right-to-left order
+- ordering messages
+- depth first
- storage objects
- atoms
- atomic messages
+- selectors
+- subpatches
+- inlets and outlets
+- outlet order
+- Example: its all just data
+- guis
+- gui objects
+- nervous guis
-Unsorted topics
-
-- arguments
+- EXERCISE
-- guis
-- gui objects
-- Example: its all just data
-- Example: parazit
+---------------
+Unsorted topics
+---------------
-- right-to-left order
-- depth first
+- trigger conversions
+- symbol conversion
-- ordering messages
+- arguments
+- keywords
-- math objects
+- init to 0
+- math
- expr
-- subpatches
-- inlets and outlets
-- outlet order
+- number limitations
+
+- timing/metro
+
+- writing objects in Pd (abstractions)
- loading libraries
- namespaces
- import
+- selectors
+- multiple messages
+- sends and receives
+- sends in a message box
+
+- Example: parazit
- send messages to Pd
- pure data files
+
+
+
+data structures tutorial?
diff --git a/doc/tutorials/intro/counters.pd b/doc/tutorials/intro/counters.pd
deleted file mode 100644
index fcb19016..00000000
--- a/doc/tutorials/intro/counters.pd
+++ /dev/null
@@ -1,35 +0,0 @@
-#N canvas 0 22 458 308 10;
-#X obj 317 70 cnv 15 100 60 empty empty empty 20 12 0 14 -261681 -66577
-0;
-#X obj 338 90 f;
-#X obj 373 90 + 1;
-#X text 319 51 infinite loop!;
-#X obj 106 199 float;
-#X floatatom 74 227 5 0 0 0 - - -;
-#X msg 74 121 1;
-#X obj 73 199 +;
-#X msg 109 173 0;
-#X msg 86 144 -1;
-#X text 110 122 increment;
-#X text 115 145 decrement;
-#X text 137 171 reset;
-#X floatatom 254 267 5 0 0 0 - - -;
-#X msg 296 213 0;
-#X text 290 162 increment;
-#X text 328 213 reset;
-#X obj 253 239 float;
-#X obj 296 239 + 1;
-#X msg 254 161 bang;
-#X connect 1 0 2 0;
-#X connect 2 0 1 0;
-#X connect 4 0 7 1;
-#X connect 6 0 7 0;
-#X connect 7 0 4 0;
-#X connect 7 0 5 0;
-#X connect 8 0 4 0;
-#X connect 9 0 7 0;
-#X connect 14 0 18 0;
-#X connect 17 0 13 0;
-#X connect 17 0 18 0;
-#X connect 18 0 17 1;
-#X connect 19 0 17 0;
diff --git a/doc/tutorials/intro/determinism.pd b/doc/tutorials/intro/determinism.pd
new file mode 100644
index 00000000..ffa72d70
--- /dev/null
+++ b/doc/tutorials/intro/determinism.pd
@@ -0,0 +1,5 @@
+#N canvas 10 40 628 453 12;
+#X obj 10 10 cnv 15 400 40 empty empty determinism 20 12 0 24 -228992
+-66577 0;
+#X obj 31 229 pddp/pddplink http://crca.ucsd.edu/~msp/Pd_documentation/x2.htm#s5.3
+;
diff --git a/doc/tutorials/intro/0.init_to_0.pd b/doc/tutorials/intro/init_to_0.pd
index bc2573c8..bc2573c8 100644
--- a/doc/tutorials/intro/0.init_to_0.pd
+++ b/doc/tutorials/intro/init_to_0.pd
diff --git a/doc/tutorials/intro/outlet_order.pd b/doc/tutorials/intro/outlet_order.pd
deleted file mode 100644
index d13b1d40..00000000
--- a/doc/tutorials/intro/outlet_order.pd
+++ /dev/null
@@ -1,21 +0,0 @@
-#N canvas 298 70 628 444 12;
-#X text 198 212 <-- click here \,;
-#X obj 128 251 unpack float float float;
-#X obj 8 10 cnv 15 400 40 empty empty outlet_order 20 12 0 24 -228992
--66577 0;
-#X msg 128 212 3 2 1;
-#X obj 105 293 print último;
-#X obj 392 293 print first;
-#X obj 244 293 print nächste;
-#X text 18 363 There are occasional exceptions where it makes sense
-to break this convention. But you shouldn't do it unless it really
-is necessary. This will save you in the long run.;
-#X text 15 68 While there is nothing forcing you to output data to
-the outlets in any order \, Pd has a very strong convention for how
-data should be output from an object.;
-#X text 14 130 Just like the flow of programming in Pd \, the data
-should be output from right to left:;
-#X connect 1 0 4 0;
-#X connect 1 1 6 0;
-#X connect 1 2 5 0;
-#X connect 3 0 1 0;
diff --git a/doc/tutorials/intro/22.pure_data_files.pd b/doc/tutorials/intro/pure_data_files.pd
index 2061d910..f6a0d832 100644
--- a/doc/tutorials/intro/22.pure_data_files.pd
+++ b/doc/tutorials/intro/pure_data_files.pd
@@ -1,4 +1,4 @@
-#N canvas 615 56 576 539 10;
+#N canvas 615 56 580 543 10;
#X obj 191 249 textfile;
#X obj 111 279 print all;
#X msg 100 223 bang;
@@ -12,7 +12,7 @@
#X obj 51 394 unpack f f f f f;
#X obj 295 427 s pd-clone;
#X obj 191 274 route #N #X;
-#X obj 234 106 tgl 20 0 empty empty empty 0 -6 0 8 -24198 -1 -1 1 1
+#X obj 234 106 tgl 20 0 empty empty empty 0 -6 0 8 -24198 -1 -1 0 1
;
#X msg 294 338 vis 1 \, clear;
#X obj 142 174 + 1;
diff --git a/doc/tutorials/intro/right_to_left_order.pd b/doc/tutorials/intro/right_to_left_order.pd
deleted file mode 100644
index bd2522f2..00000000
--- a/doc/tutorials/intro/right_to_left_order.pd
+++ /dev/null
@@ -1,17 +0,0 @@
-#N canvas 298 70 636 452 12;
-#X text 196 193 <-- click here \,;
-#X obj 126 242 unpack float float float;
-#X obj 8 10 cnv 15 400 40 empty empty right_to_left_order 20 12 0 24
--228992 -66577 0;
-#X msg 126 193 3 2 1;
-#X text 14 94 Objects in Pd output there data in right-to-left order.
-In general \, the flow of data is from top to bottom \, from right
-to left.;
-#X text 100 356 now look in the Pd window for the output;
-#X obj 227 306 print nächste;
-#X obj 87 307 print último;
-#X obj 378 306 print first;
-#X connect 1 0 7 0;
-#X connect 1 1 6 0;
-#X connect 1 2 8 0;
-#X connect 3 0 1 0;
diff --git a/doc/tutorials/intro/21.send_messages_to_pd.pd b/doc/tutorials/intro/send_messages_to_pd.pd
index deb05501..f0961a6e 100644
--- a/doc/tutorials/intro/21.send_messages_to_pd.pd
+++ b/doc/tutorials/intro/send_messages_to_pd.pd
@@ -1,4 +1,4 @@
-#N canvas 476 37 651 588 12;
+#N canvas 476 37 655 592 12;
#X msg 134 485 menuclose;
#X obj 46 550 s pd-mon-nouveau-patch.pd;
#X obj 22 216 cnv 15 5 5 empty empty 1 5 0 0 20 -262144 -258699 0;
diff --git a/doc/tutorials/intro/0.shell_sketch.pd b/doc/tutorials/intro/shell_sketch.pd
index 31cffaa6..31cffaa6 100644
--- a/doc/tutorials/intro/0.shell_sketch.pd
+++ b/doc/tutorials/intro/shell_sketch.pd
diff --git a/doc/tutorials/intro/trigger_conversion.pd b/doc/tutorials/intro/trigger_conversion.pd
index 3a183963..2f610ff5 100644
--- a/doc/tutorials/intro/trigger_conversion.pd
+++ b/doc/tutorials/intro/trigger_conversion.pd
@@ -1,28 +1,29 @@
-#N canvas 227 116 643 459 12;
-#X obj -32 7 cnv 15 400 40 empty empty trigger_conversion 20 12 0 24
+#N canvas 227 116 647 463 12;
+#X obj 10 10 cnv 15 400 40 empty empty trigger_conversion 20 12 0 24
-228992 -66577 0;
#X obj 126 187 trigger anything float bang;
-#X text -21 80 [trigger] can also do conversions in addition to ordering.
-The keyword "anything" tells [trigger] to do no conversion.;
#X msg 125 142 float 45.234;
-#X floatatom 128 213 5 0 0 0 - - -;
-#X floatatom 263 212 5 0 0 0 - - -;
-#X obj 404 211 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
+#X floatatom 126 223 5 0 0 0 - - -;
+#X floatatom 258 222 5 0 0 0 - - -;
+#X obj 391 221 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
-#X msg 10 296 12 45 blah;
-#X msg 131 295 blah;
-#X msg 189 296 123;
-#X msg 233 295 symbol test;
-#X obj 128 368 print bang;
-#X obj 128 342 trigger bang anything;
-#X obj 333 368 print anything;
-#X connect 1 0 4 0;
-#X connect 1 1 5 0;
-#X connect 1 2 6 0;
-#X connect 3 0 1 0;
-#X connect 7 0 12 0;
-#X connect 8 0 12 0;
-#X connect 9 0 12 0;
-#X connect 10 0 12 0;
-#X connect 12 0 11 0;
-#X connect 12 1 13 0;
+#X msg 42 298 12 45 blah;
+#X msg 163 297 blah;
+#X msg 221 298 123;
+#X msg 265 297 symbol test;
+#X obj 160 370 print bang;
+#X obj 160 344 trigger bang anything;
+#X obj 365 370 print anything;
+#X text 10 80 [trigger] can also do limited conversions in addition
+to ordering. The keyword "anything" tells [trigger] to do no conversion.
+;
+#X connect 1 0 3 0;
+#X connect 1 1 4 0;
+#X connect 1 2 5 0;
+#X connect 2 0 1 0;
+#X connect 6 0 11 0;
+#X connect 7 0 11 0;
+#X connect 8 0 11 0;
+#X connect 9 0 11 0;
+#X connect 11 0 10 0;
+#X connect 11 1 12 0;