From 1a638db31ce20c26fe04889379fada4b716551af Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Sun, 8 Mar 2020 10:26:22 -0700 Subject: [PATCH 01/86] RegularPolygon example -- fix comment Closes #802 --- content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde b/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde index 09379230c..52d8f81af 100644 --- a/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde +++ b/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde @@ -24,7 +24,7 @@ void draw() { pushMatrix(); translate(width*0.5, height*0.5); rotate(frameCount / 50.0); - polygon(0, 0, 80, 20); // Icosahedron + polygon(0, 0, 80, 20); // Icosagon popMatrix(); pushMatrix(); From 868fa13a205e6c292a44364bfbd60cd84e1cbf13 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 31 Mar 2020 12:40:55 -0400 Subject: [PATCH 02/86] Update Ketai library URL. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 47e008191..61c739513 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -112,7 +112,7 @@ 024 \ https://github.com/firmata/processing/releases/download/latest/processing-arduino.txt 028 \ http://projects.formatlos.de/ambientlightsensor/download/AmbientLightSensor.txt # 064 \ http://www.muvium.com/frappuccino/frappuccino.txt -066 \ http://ketailibrary.org/ketai.txt +066 \ http://ketai.org/ketai.txt 071 \ http://motscousus.com/stuff/2011-01_dmxP512/dmxP512.txt 090 \ https://dl.dropbox.com/u/87680069/LeapMotion.txt # 102 \ http://s176381904.onlinehome.fr/processing/MoveLib/download/MoveLib.txt From bdd2a023a691cdd1b42b761d6a2816043281b0c7 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 17 Apr 2020 20:09:41 +0800 Subject: [PATCH 03/86] Add Sound library Waveform analyzer documentation Contributed by @mhamilt --- content/api_en/LIB_sound/Waveform.xml | 107 ++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 content/api_en/LIB_sound/Waveform.xml diff --git a/content/api_en/LIB_sound/Waveform.xml b/content/api_en/LIB_sound/Waveform.xml new file mode 100644 index 000000000..4251ddd60 --- /dev/null +++ b/content/api_en/LIB_sound/Waveform.xml @@ -0,0 +1,107 @@ + + + +Waveform + +Sound + +Analyzer + +Application + + + + + + + + + + + + + + + + +input() +Define the audio input for the analyzer + + + +analyze() +Gets the last nsamples captured from the connected input sound source, writes them + into this Waveform's `data` array, and returns it. + + + +stop() +Stop the analyzer + + + +data +`float[]` of length nsamples, with the sample amplitudes between `-1` and `1` + + + +Waveform(parent) + + + +parent +PApplet: typically use "this" + + + + + + + +Object + +Library + + From ba7c1a2423b5faae2802a1c1919bbc080506a1d7 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Fri, 1 May 2020 16:14:09 +0900 Subject: [PATCH 04/86] fix typo in noSmooth() docs --- content/api_en/noSmooth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/noSmooth.xml b/content/api_en/noSmooth.xml index aa1ceec8d..9c98dc192 100755 --- a/content/api_en/noSmooth.xml +++ b/content/api_en/noSmooth.xml @@ -38,7 +38,7 @@ void draw() { smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. +Draws all geometry and fonts with jagged (aliased) edges and images with hard edges between the pixels when enlarged rather than interpoloating pixels. Note that smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. ]]> From a046076ceebacfec50aa330e12e25cbc6cb54c57 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Fri, 1 May 2020 16:27:34 +0900 Subject: [PATCH 05/86] fix "interpolating" typo in noSmooth docs --- content/api_en/noSmooth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/noSmooth.xml b/content/api_en/noSmooth.xml index 9c98dc192..d40dd92e6 100755 --- a/content/api_en/noSmooth.xml +++ b/content/api_en/noSmooth.xml @@ -38,7 +38,7 @@ void draw() { smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. +Draws all geometry and fonts with jagged (aliased) edges and images with hard edges between the pixels when enlarged rather than interpolating pixels. Note that smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. ]]> From 744da894bbcb51d60ebbf760f70c1236324d0f4d Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 1 May 2020 10:34:36 -0400 Subject: [PATCH 06/86] Add ComposingForEveryone library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 61c739513..4626ac930 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 254 +# Next ID: 255 # Increment after assigning ID to new contribution [Library : 3D] @@ -219,6 +219,7 @@ 151 \ https://corajr.github.io/loom/download/loom.txt 170 \ https://github.com/shlomihod/cassette/releases/download/latest/cassette.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt +254 \ http://www.kramann.info/ComposingForEveryone.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From 342775674a927b06400cc44dbd91de79240d45bc Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 12 May 2020 10:31:30 -0400 Subject: [PATCH 07/86] Add UiBooster and LiveBrush contributions. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 4626ac930..041930fcc 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 255 +# Next ID: 257 # Increment after assigning ID to new contribution [Library : 3D] @@ -106,6 +106,7 @@ 180 \ http://interfascia.berg.industries/download/interfascia.txt 224 \ https://github.com/BillKujawa/meter/releases/download/latest/meter.txt 237 \ http://gicentre.org/handy/handy.txt +256 \ https://github.com/Milchreis/uibooster-for-processing/releases/latest/download/UiBooster.txt [Library : Hardware] 015 \ http://www.shiffman.net/p5/libraries/sms/sms.txt @@ -259,6 +260,7 @@ 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt 246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt +255 \ https://bdhont.net/LiveBrush.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From d34c5b027ca8a9e189bba8ab04b2cf17d2b2f886 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 12 May 2020 11:18:00 -0400 Subject: [PATCH 08/86] Add InfinidecimalCanvas library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 041930fcc..a8e524c5d 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 257 +# Next ID: 258 # Increment after assigning ID to new contribution [Library : 3D] @@ -261,6 +261,7 @@ 246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt 255 \ https://bdhont.net/LiveBrush.txt +257 \ https://rect.dev/processing/infinidecimal/GRInfinidecimalCanvas.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 734ef2c3ed09bfef36c045ac97711f304694a53d Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 13 May 2020 09:14:12 -0400 Subject: [PATCH 09/86] Add Grab library. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index a8e524c5d..4159127d1 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 258 +# Next ID: 259 # Increment after assigning ID to new contribution [Library : 3D] @@ -168,6 +168,7 @@ 232 \ https://github.com/haschdl/pLaunchController/releases/download/latest/pLaunchController.txt 239 \ http://skweezee.net/processing/download/SkweezeeForProcessing.txt 247 \ https://github.com/orgicus/image-sequence-player/releases/download/latest/ImageSequencePlayer.txt +258 \ https://github.com/Transmedia-Gx/grab/releases/latest/download/Grab.txt [Library : Language] 063 \ http://rednoise.org/rita/rita.txt @@ -262,6 +263,7 @@ 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt 255 \ https://bdhont.net/LiveBrush.txt 257 \ https://rect.dev/processing/infinidecimal/GRInfinidecimalCanvas.txt +258 \ https://github.com/Transmedia-Gx/grab/releases/latest/download/Grab.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 1c0437f26e7994347f5464a92d32fcfc2468ac45 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 19 May 2020 09:58:30 -0400 Subject: [PATCH 10/86] Update GazeTrack URL. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 4159127d1..e8ba0dba7 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -130,7 +130,7 @@ 218 \ https://github.com/cansik/sweep-processing/releases/download/latest/SweepProcessing.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt 224 \ https://github.com/BillKujawa/meter/releases/download/latest/meter.txt -225 \ http://hci.soc.napier.ac.uk/GazeTrack/GazeTrack.txt +225 \ http://web.tecnico.ulisboa.pt/augusto.esteves/GazeTrack/GazeTrack.txt 238 \ https://github.com/cansik/realsense-processing/releases/download/contributed/RealSenseProcessing.txt 239 \ http://skweezee.net/processing/download/SkweezeeForProcessing.txt From 67d6852577723a31bd358169172373291f8f05b5 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 19 May 2020 09:58:41 -0400 Subject: [PATCH 11/86] Add ShaderMode mode. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index e8ba0dba7..89f5bb071 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 259 +# Next ID: 260 # Increment after assigning ID to new contribution [Library : 3D] @@ -341,3 +341,4 @@ 169 \ https://py.processing.org/3/PythonMode.txt 199 \ https://github.com/fathominfo/processing-p5js-mode/releases/download/latest/p5jsMode.txt 220 \ https://github.com/processing-r/Processing.R/releases/latest/download/RLangMode.txt +250 \ https://github.com/Izza11/shader-mode/releases/download/latest/ShaderMode.txt From 5b74b1fd7512b11bee13ff78236495c1c2b88c0b Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 27 May 2020 20:39:35 -0400 Subject: [PATCH 12/86] Add procmod Library to list. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 89f5bb071..3e3d89eb8 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 260 +# Next ID: 261 # Increment after assigning ID to new contribution [Library : 3D] @@ -222,6 +222,7 @@ 170 \ https://github.com/shlomihod/cassette/releases/download/latest/cassette.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt 254 \ http://www.kramann.info/ComposingForEveryone.txt +260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From e349efaa358e03cadb1a65f05b4d422533c8fe23 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 2 Jun 2020 10:23:54 -0400 Subject: [PATCH 13/86] Add teilchen Library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 3e3d89eb8..c2426e881 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 261 +# Next ID: 262 # Increment after assigning ID to new contribution [Library : 3D] @@ -209,6 +209,7 @@ 201 \ https://github.com/diwi/PixelFlow/releases/download/latest/PixelFlow.txt 216 \ https://github.com/diwi/LiquidFunProcessing/releases/download/latest/LiquidFunProcessing.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt +261 \ https://github.com/dennisppaul/teilchen/releases/latest/download/teilchen.txt [Library : Sound] 153 \ https://github.com/processing/processing-sound/releases/download/latest/sound.txt From 9ddcc036f768f8ded949b8a183412711ea43270b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 12:08:24 -0700 Subject: [PATCH 14/86] Update textFont.xml --- content/api_en/textFont.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textFont.xml b/content/api_en/textFont.xml index 30b9bb236..ebf06c7d6 100755 --- a/content/api_en/textFont.xml +++ b/content/api_en/textFont.xml @@ -14,7 +14,7 @@ PFont mono; // The font "andalemo.ttf" must be located in the // current sketch's "data" directory to load successfully -mono = loadFont("andalemo.ttf", 32); +mono = createFont("andalemo.ttf", 32); background(0); textFont(mono); text("word", 12, 60); From 615e7550c7b7fe1ee2a0c1962607d72e428c8b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?aar=C3=B3n=20montoya-moraga?= Date: Tue, 2 Jun 2020 17:00:28 -0400 Subject: [PATCH 15/86] fix typo in reference page of filter() fixes PR #814 --- content/api_en/PImage_filter.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/PImage_filter.xml b/content/api_en/PImage_filter.xml index 30df9a9da..f30582ad1 100755 --- a/content/api_en/PImage_filter.xml +++ b/content/api_en/PImage_filter.xml @@ -156,7 +156,7 @@ POSTERIZE
Limits each channel of the image to the number of colors specified as the parameter. The parameter can be set to values between 2 and 255, but results are most noticeable in the lower ranges.

BLUR
-Executes a Guassian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Guassian blur of radius 1. Larger values increase the blur.
+Executes a Gaussian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Gaussian blur of radius 1. Larger values increase the blur.

ERODE
Reduces the light areas. No parameter is used.
From 77cdb242e03b70e78b3e31b829feb1644b4c29be Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 18:03:30 -0700 Subject: [PATCH 16/86] Update intconvert.xml Add String to the list of data that int() can convert --- content/api_en/include/intconvert.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/intconvert.xml b/content/api_en/include/intconvert.xml index f14376165..56ba6ddb8 100755 --- a/content/api_en/include/intconvert.xml +++ b/content/api_en/include/intconvert.xml @@ -20,7 +20,7 @@ println(c + " : " + i); // Prints "E : 69" boolean, byte, char, color, float, int, or long) to its integer representation.
+Converts any value of a primitive data type (boolean, byte, char, color, float, int, or long) or String to its integer representation.

When an array of values is passed in, then an int array of the same length is returned. ]]>
From 5bf93e09ed127f85e8981da947067de3c097a5cf Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 19:40:15 -0700 Subject: [PATCH 17/86] Update clientEvent.xml Update example to draw in the draw() and not in clientEvent() --- content/api_en/LIB_net/clientEvent.xml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/api_en/LIB_net/clientEvent.xml b/content/api_en/LIB_net/clientEvent.xml index b71892510..d831f37a4 100755 --- a/content/api_en/LIB_net/clientEvent.xml +++ b/content/api_en/LIB_net/clientEvent.xml @@ -19,25 +19,27 @@ int dataIn; void setup() { size(200, 200); myClient = new Client(this, "127.0.0.1", 5204); + noLoop(); } -void draw() { } // Empty draw keeps the program running +void draw() { + background(dataIn); +} -// ClientEvent message is generated when the server -// sends data to an existing client. +// ClientEvent message is generated when the +// server sends data to an existing client. void clientEvent(Client someClient) { print("Server Says: "); - dataIn = myClient.read(); + dataIn = someClient.read(); println(dataIn); - background(dataIn); - + redraw(); } ]]> From b5c0a287f78ab028ff8c05fbeef59833a5e07b18 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 19:41:03 -0700 Subject: [PATCH 18/86] Update equality.xml Small typo correction --- content/api_en/include/equality.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/api_en/include/equality.xml b/content/api_en/include/equality.xml index bbb16aa3a..a47eac505 100755 --- a/content/api_en/include/equality.xml +++ b/content/api_en/include/equality.xml @@ -20,9 +20,10 @@ if (a == b) { +Determines if two values are equivalent. Please note the equality operator (==) is different from the assignment operator (=) and although they look similar, they have a different use. If you're comparing two variables, the equality operator (==) only works with primitive data types like int, boolean, and char. It doesn't work with composite data types like Array, Table, and PVector.
+
+Note that when comparing String objects, you must use the equals() method instead of ==. See the reference for String or the troubleshooting note for more explanation.

-Note that when comparing String objects, you must use the equals() method instead of == to compare their contents. See the reference for String or the troubleshooting note for more explanation. ]]>
From e545d663762dfef1287a8c841660aa5a6943ba29 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 16:39:24 -0700 Subject: [PATCH 19/86] Update examples_topics.xml Removing "spring" examples from Simulate topic --- content/examples_topics.xml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/content/examples_topics.xml b/content/examples_topics.xml index c46525d49..35e20f85f 100755 --- a/content/examples_topics.xml +++ b/content/examples_topics.xml @@ -75,15 +75,12 @@ Texture Cube - Spring - Springs - Chain - Soft Body - Flocking Simple Particle System Multiple Particle Systems Forces With Vectors Smoke Particle System + Flocking + Soft Body Bouncing Ball From 58615bda06a739dac6dda1a9c4cf07c29ccaca2c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 16:42:27 -0700 Subject: [PATCH 20/86] Removing Spring-related examples --- .../examples/Topics/Simulate/Chain/Chain.pde | 65 -------- .../Topics/Simulate/Spring/Spring.pde | 94 ----------- .../Topics/Simulate/Springs/Springs.pde | 151 ------------------ 3 files changed, 310 deletions(-) delete mode 100644 content/examples/Topics/Simulate/Chain/Chain.pde delete mode 100644 content/examples/Topics/Simulate/Spring/Spring.pde delete mode 100644 content/examples/Topics/Simulate/Springs/Springs.pde diff --git a/content/examples/Topics/Simulate/Chain/Chain.pde b/content/examples/Topics/Simulate/Chain/Chain.pde deleted file mode 100644 index 75b7ea36d..000000000 --- a/content/examples/Topics/Simulate/Chain/Chain.pde +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Chain. - * - * One mass is attached to the mouse position and the other - * is attached the position of the other mass. The gravity - * in the environment pulls down on both. - */ - - -Spring2D s1, s2; - -float gravity = 9.0; -float mass = 2.0; - -void setup() { - size(640, 360); - fill(255, 126); - // Inputs: x, y, mass, gravity - s1 = new Spring2D(0.0, width/2, mass, gravity); - s2 = new Spring2D(0.0, width/2, mass, gravity); -} - -void draw() { - background(0); - s1.update(mouseX, mouseY); - s1.display(mouseX, mouseY); - s2.update(s1.x, s1.y); - s2.display(s1.x, s1.y); -} - -class Spring2D { - float vx, vy; // The x- and y-axis velocities - float x, y; // The x- and y-coordinates - float gravity; - float mass; - float radius = 30; - float stiffness = 0.2; - float damping = 0.7; - - Spring2D(float xpos, float ypos, float m, float g) { - x = xpos; - y = ypos; - mass = m; - gravity = g; - } - - void update(float targetX, float targetY) { - float forceX = (targetX - x) * stiffness; - float ax = forceX / mass; - vx = damping * (vx + ax); - x += vx; - float forceY = (targetY - y) * stiffness; - forceY += gravity; - float ay = forceY / mass; - vy = damping * (vy + ay); - y += vy; - } - - void display(float nx, float ny) { - noStroke(); - ellipse(x, y, radius*2, radius*2); - stroke(255); - line(x, y, nx, ny); - } -} diff --git a/content/examples/Topics/Simulate/Spring/Spring.pde b/content/examples/Topics/Simulate/Spring/Spring.pde deleted file mode 100644 index 1e28a40b5..000000000 --- a/content/examples/Topics/Simulate/Spring/Spring.pde +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Spring. - * - * Click, drag, and release the horizontal bar to start the spring. - */ - -// Spring drawing constants for top bar -int springHeight = 32; // Height -int left; // Left position -int right; // Right position -int max = 200; // Maximum Y value -int min = 100; // Minimum Y value -boolean over = false; // If mouse over -boolean move = false; // If mouse down and over - -// Spring simulation constants -float M = 0.8; // Mass -float K = 0.2; // Spring constant -float D = 0.92; // Damping -float R = 150; // Rest position - -// Spring simulation variables -float ps = R; // Position -float vs = 0.0; // Velocity -float as = 0; // Acceleration -float f = 0; // Force - - -void setup() { - size(640, 360); - rectMode(CORNERS); - noStroke(); - left = width/2 - 100; - right = width/2 + 100; -} - -void draw() { - background(102); - updateSpring(); - drawSpring(); -} - -void drawSpring() { - - // Draw base - fill(0.2); - float baseWidth = 0.5 * ps + -8; - rect(width/2 - baseWidth, ps + springHeight, width/2 + baseWidth, height); - - // Set color and draw top bar - if(over || move) { - fill(255); - } else { - fill(204); - } - rect(left, ps, right, ps + springHeight); -} - - -void updateSpring() { - // Update the spring position - if(!move) { - f = -K * (ps - R); // f=-ky - as = f / M; // Set the acceleration, f=ma == a=f/m - vs = D * (vs + as); // Set the velocity - ps = ps + vs; // Updated position - } - if(abs(vs) < 0.1) { - vs = 0.0; - } - - // Test if mouse is over the top bar - if(mouseX > left && mouseX < right && mouseY > ps && mouseY < ps + springHeight) { - over = true; - } else { - over = false; - } - - // Set and constrain the position of top bar - if(move) { - ps = mouseY - springHeight/2; - ps = constrain(ps, min, max); - } -} - -void mousePressed() { - if(over) { - move = true; - } -} - -void mouseReleased() { - move = false; -} diff --git a/content/examples/Topics/Simulate/Springs/Springs.pde b/content/examples/Topics/Simulate/Springs/Springs.pde deleted file mode 100644 index 877e79e26..000000000 --- a/content/examples/Topics/Simulate/Springs/Springs.pde +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Springs. - * - * Move the mouse over one of the circles and click to re-position. - * When you release the mouse, it will snap back into position. - * Each circle has a slightly different behavior. - */ - - -int num = 3; -Spring[] springs = new Spring[num]; - -void setup() { - size(640, 360); - noStroke(); - springs[0] = new Spring(240, 260, 40, 0.98, 8.0, 0.1, springs, 0); - springs[1] = new Spring(320, 210, 120, 0.95, 9.0, 0.1, springs, 1); - springs[2] = new Spring(180, 170, 200, 0.90, 9.9, 0.1, springs, 2); -} - -void draw() { - background(51); - - for (Spring spring : springs) { - spring.update(); - spring.display(); - } -} - -void mousePressed() { - for (Spring spring : springs) { - spring.pressed(); - } -} - -void mouseReleased() { - for (Spring spring : springs) { - spring.released(); - } -} - -class Spring { - // Screen values - float xpos, ypos; - float tempxpos, tempypos; - int size = 20; - boolean over = false; - boolean move = false; - - // Spring simulation constants - float mass; // Mass - float k = 0.2; // Spring constant - float damp; // Damping - float rest_posx; // Rest position X - float rest_posy; // Rest position Y - - // Spring simulation variables - //float pos = 20.0; // Position - float velx = 0.0; // X Velocity - float vely = 0.0; // Y Velocity - float accel = 0; // Acceleration - float force = 0; // Force - - Spring[] friends; - int me; - - // Constructor - Spring(float x, float y, int s, float d, float m, - float k_in, Spring[] others, int id) { - xpos = tempxpos = x; - ypos = tempypos = y; - rest_posx = x; - rest_posy = y; - size = s; - damp = d; - mass = m; - k = k_in; - friends = others; - me = id; - } - - void update() { - if (move) { - rest_posy = mouseY; - rest_posx = mouseX; - } - - force = -k * (tempypos - rest_posy); // f=-ky - accel = force / mass; // Set the acceleration, f=ma == a=f/m - vely = damp * (vely + accel); // Set the velocity - tempypos = tempypos + vely; // Updated position - - force = -k * (tempxpos - rest_posx); // f=-ky - accel = force / mass; // Set the acceleration, f=ma == a=f/m - velx = damp * (velx + accel); // Set the velocity - tempxpos = tempxpos + velx; // Updated position - - - if ((overEvent() || move) && !otherOver() ) { - over = true; - } else { - over = false; - } - } - - // Test to see if mouse is over this spring - boolean overEvent() { - float disX = tempxpos - mouseX; - float disY = tempypos - mouseY; - if (sqrt(sq(disX) + sq(disY)) < size/2 ) { - return true; - } else { - return false; - } - } - - // Make sure no other springs are active - boolean otherOver() { - for (int i=0; i Date: Wed, 3 Jun 2020 20:46:36 -0700 Subject: [PATCH 21/86] New example for rotating text --- .../Typography/TextRotation/TextRotation.pde | 57 +++++++++++++++ .../data/SourceCodePro-Regular.ttf | Bin 0 -> 120548 bytes content/examples_basics.xml | 1 + .../Typography/TextRotation/TextRotation.js | 65 ++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 content/examples/Basics/Typography/TextRotation/TextRotation.pde create mode 100644 content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf create mode 100644 content/examples_p5/Basics/Typography/TextRotation/TextRotation.js diff --git a/content/examples/Basics/Typography/TextRotation/TextRotation.pde b/content/examples/Basics/Typography/TextRotation/TextRotation.pde new file mode 100644 index 000000000..b480c38d6 --- /dev/null +++ b/content/examples/Basics/Typography/TextRotation/TextRotation.pde @@ -0,0 +1,57 @@ +/** + * Text Rotation. + * + * Draws letters to the screen and rotates them at different angles. + */ + +PFont f; +float angleRotate = 0.0; + +void setup() { + size(640, 360); + background(0); + + pixelDensity(2); + + // Create the font from the .ttf file in the data folder + f = createFont("SourceCodePro-Regular.ttf", 18); + textFont(f); +} + +void draw() { + background(0); + + strokeWeight(1); + stroke(153); + + pushMatrix(); + float angle1 = radians(45); + translate(100, 180); + rotate(angle1); + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + pushMatrix(); + float angle2 = radians(270); + translate(200, 180); + rotate(angle2); + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + pushMatrix(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf b/content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b2cff928e42a31496c603d02b4605978eba66e59 GIT binary patch literal 120548 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 Letters Words + Text Rotation Embedded Links diff --git a/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js b/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js new file mode 100644 index 000000000..85f54e5ed --- /dev/null +++ b/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js @@ -0,0 +1,65 @@ +/** + * Text Rotation. + * + * Draws letters to the screen and rotates them at different angles. + */ + +var f; +var angleRotate = 0.0; + +function setup() { + var canvas = createCanvas(640, 360); + canvas.parent("p5container"); + background(0); + + // Create the font from the .ttf file in the data folder + textFont("Source Code Pro", 18); +} + +function draw() { + background(0); + + + push(); + var angle1 = radians(45); + translate(100, 180); + rotate(angle1); + noStroke(); + fill(255); + text("45 DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + push(); + var angle2 = radians(270); + translate(200, 180); + rotate(angle2); + noStroke(); + fill(255); + text("270 DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + push(); + translate(440, 180); + rotate(radians(angleRotate)); + noStroke(); + fill(255); + text(int(angleRotate) % 360 + " DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} \ No newline at end of file From 2a5abe4dbd216866ca5ad38f30f1e90b56dba5a5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 20:48:59 -0700 Subject: [PATCH 22/86] Fix error in new Text Rotation example --- .../examples/Basics/Typography/TextRotation/TextRotation.pde | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/examples/Basics/Typography/TextRotation/TextRotation.pde b/content/examples/Basics/Typography/TextRotation/TextRotation.pde index b480c38d6..8ed649178 100644 --- a/content/examples/Basics/Typography/TextRotation/TextRotation.pde +++ b/content/examples/Basics/Typography/TextRotation/TextRotation.pde @@ -10,8 +10,6 @@ float angleRotate = 0.0; void setup() { size(640, 360); background(0); - - pixelDensity(2); // Create the font from the .ttf file in the data folder f = createFont("SourceCodePro-Regular.ttf", 18); From bd1f0ce225bca78cbba01fa42761c1949734f3f5 Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 3 Jun 2020 21:09:13 -0700 Subject: [PATCH 23/86] Sound Tutorial - ex3-6 link sketches w/required MP3s, closes #714 --- content/static/tutorials/sound/index.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/content/static/tutorials/sound/index.html b/content/static/tutorials/sound/index.html index 20b03bc75..7f5b2ccd7 100644 --- a/content/static/tutorials/sound/index.html +++ b/content/static/tutorials/sound/index.html @@ -389,6 +389,9 @@

Example 3, 4: Sample playback

 * different octaves. The sequencer triggers an event every 200-1000   * milliseconds randomly. Each time a sound is played a colored   * rect with a random color is displayed. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Soundfile > Sampler   */ import processing.sound.*; @@ -484,6 +487,9 @@

Example 3, 4: Sample playback

 * Five soundfiles are mapped to the numbers on the keyboard.   * Numbers 1-5 are played back an octave lower and numbers  * 6-0 an octave higher. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Soundfile > Keyboard   */ import processing.sound.*; @@ -580,6 +586,9 @@

Example 5, 6: Audio analysis

 * of sound. Change the variable bands to get more or less   * spectral bands to work with. The smooth_factor variable determines   * how much the signal will be smoothed on a scale form 0-1. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Analysis > FFTSpectrum   */ import processing.sound.*; @@ -653,6 +662,9 @@

Example 5, 6: Audio analysis

 * stream of sound. In this case a sample is analyzed. The smoothFactor  * variable determines how much the signal will be smoothed on a scale  * from 0 - 1. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Analysis > PeakAmplitude   */ import processing.sound.*; From 58bcc561d9e32bce2e93f6598f669b4b6b8aaecc Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:37:47 -0700 Subject: [PATCH 24/86] Sound Tutorial code example update and cleanup --- content/static/tutorials/sound/index.html | 868 ++++++++++++---------- 1 file changed, 464 insertions(+), 404 deletions(-) diff --git a/content/static/tutorials/sound/index.html b/content/static/tutorials/sound/index.html index 7f5b2ccd7..e1fada6b0 100644 --- a/content/static/tutorials/sound/index.html +++ b/content/static/tutorials/sound/index.html @@ -233,140 +233,140 @@

Example 1, 2: Synthesizer

-/**
- * Processing Sound Library, Example 1
- * 
- * Five sine waves are layered to construct a cluster of frequencies. 
- * This method is called additive synthesis. Use the mouse position 
- * inside the display window to detune the cluster.
- */
-
-import processing.sound.*;
-
-SinOsc[] sineWaves; // Array of sines
-float[] sineFreq; // Array of frequencies
-int numSines = 5; // Number of oscillators to use
-
-void setup() {  
-  size(640, 360);
-  background(255);
-
-  sineWaves = new SinOsc[numSines]; // Initialize the oscillators
-  sineFreq = new float[numSines]; // Initialize array for Frequencies
-
-  for (int i = 0; i < numSines; i++) {
-    // Calculate the amplitude for each oscillator
-    float sineVolume = (1.0 / numSines) / (i + 1);
-    // Create the oscillators
-    sineWaves[i] = new SinOsc(this);
-    // Start Oscillators
-    sineWaves[i].play();
-    // Set the amplitudes for all oscillators
-    sineWaves[i].amp(sineVolume);
-  }
+/**
+ * Processing Sound Library, Example 1
+ * 
+ * Five sine waves are layered to construct a cluster of frequencies. 
+ * This method is called additive synthesis. Use the mouse position 
+ * inside the display window to detune the cluster.
+ */
+
+import processing.sound.*;
+
+SinOsc[] sineWaves; // Array of sines
+float[] sineFreq; // Array of frequencies
+int numSines = 5; // Number of oscillators to use
+
+void setup() {  
+  size(640, 360);
+  background(255);
+
+  sineWaves = new SinOsc[numSines]; // Initialize the oscillators
+  sineFreq = new float[numSines]; // Initialize array for Frequencies
+
+  for (int i = 0; i < numSines; i++) {
+    // Calculate the amplitude for each oscillator
+    float sineVolume = (1.0 / numSines) / (i + 1);
+    // Create the oscillators
+    sineWaves[i] = new SinOsc(this);
+    // Start Oscillators
+    sineWaves[i].play();
+    // Set the amplitudes for all oscillators
+    sineWaves[i].amp(sineVolume);
+  }
 }
 
-void draw() {
-  //Map mouseY from 0 to 1
-  float yoffset = map(mouseY, 0, height, 0, 1);
-  //Map mouseY logarithmically to 150 - 1150 to create a base frequency range
-  float frequency = pow(1000, yoffset) + 150;
-  //Use mouseX mapped from -0.5 to 0.5 as a detune argument
-  float detune = map(mouseX, 0, width, -0.5, 0.5);
-
-  for (int i = 0; i < numSines; i++) { 
-    sineFreq[i] = frequency * (i + 1 * detune);
-    // Set the frequencies for all oscillators
-    sineWaves[i].freq(sineFreq[i]);
-  }
+void draw() {
+  //Map mouseY from 0 to 1
+  float yoffset = map(mouseY, 0, height, 0, 1);
+  //Map mouseY logarithmically to 150 - 1150 to create a base frequency range
+  float frequency = pow(1000, yoffset) + 150;
+  //Use mouseX mapped from -0.5 to 0.5 as a detune argument
+  float detune = map(mouseX, 0, width, -0.5, 0.5);
+
+  for (int i = 0; i < numSines; i++) { 
+    sineFreq[i] = frequency * (i + 1 * detune);
+    // Set the frequencies for all oscillators
+    sineWaves[i].freq(sineFreq[i]);
+  }
 }
 	

-/**
- * Processing Sound Library, Example 2
- * 
- * This sketch shows how to use envelopes and oscillators. 
- * Envelopes describe to course of amplitude over time. 
- * The Sound library provides an ASR envelope which stands for 
- * attack, sustain, release. 
- * 
- *       .________
- *      .          ---
- *     .              --- 
- *    .                  ---
- *    A       S        R 
- */
-
-import processing.sound.*;
-
-// Oscillator and envelope 
-TriOsc triOsc;
-Env env; 
-
-// Times and levels for the ASR envelope
-float attackTime = 0.001;
-float sustainTime = 0.004;
-float sustainLevel = 0.2;
-float releaseTime = 0.2;
-
-// This is an octave in MIDI notes.
-int[] midiSequence = { 
-  60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72
-}; 
-
-// Set the duration between the notes
-int duration = 200;
-// Set the note trigger
-int trigger = 0; 
-
-// An index to count up the notes
-int note = 0; 
-
-void setup() {
-  size(640, 360);
-  background(255);
-
-  // Create triangle wave and envelope 
-  triOsc = new TriOsc(this);
-  env  = new Env(this);
+/**
+ * Processing Sound Library, Example 2
+ * 
+ * This sketch shows how to use envelopes and oscillators. 
+ * Envelopes describe to course of amplitude over time. 
+ * The Sound library provides an ASR envelope which stands for 
+ * attack, sustain, release. 
+ * 
+ *       .________
+ *      .          ---
+ *     .              --- 
+ *    .                  ---
+ *    A       S        R 
+ */
+
+import processing.sound.*;
+
+TriOsc triOsc;
+Env env; 
+
+// Times and levels for the ASR envelope
+float attackTime = 0.001;
+float sustainTime = 0.004;
+float sustainLevel = 0.3;
+float releaseTime = 0.2;
+
+// This is an octave in MIDI notes.
+int[] midiSequence = { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72 }; 
+
+// Play a new note every 200ms
+int duration = 200;
+
+// This variable stores the point in time when the next note should be triggered
+int trigger = millis(); 
+
+// An index to count up the notes
+int note = 0; 
+
+void setup() {
+  size(640, 360);
+  background(255);
+
+  // Create triangle wave and start it
+  triOsc = new TriOsc(this);
+
+  // Create the envelope 
+  env = new Env(this);
 }
 
-void draw() { 
+void draw() { 
 
-  // If value of trigger is equal to the computer clock and if not all 
-  // notes have been played yet, the next note gets triggered.
-  if ((millis() > trigger) && (note<midiSequence.length)) {
+  // If the determined trigger moment in time matches up with the computer clock and
+  // the sequence of notes hasn't been finished yet, the next note gets played.
+  if ((millis() > trigger) && (note<midiSequence.length)) {
 
-    // midiToFreq transforms the MIDI value into a frequency in Hz which we use 
-    //to control the triangle oscillator with an amplitute of 0.8
-    triOsc.play(midiToFreq(midiSequence[note]), 0.8);
+    // midiToFreq transforms the MIDI value into a frequency in Hz which we use to
+    // control the triangle oscillator with an amplitute of 0.5
+    triOsc.play(midiToFreq(midiSequence[note]), 0.5);
 
-    // The envelope gets triggered with the oscillator as input and the times and 
-    // levels we defined earlier
-    env.play(triOsc, attackTime, sustainTime, sustainLevel, releaseTime);
+    // The envelope gets triggered with the oscillator as input and the times and
+    // levels we defined earlier
+    env.play(triOsc, attackTime, sustainTime, sustainLevel, releaseTime);
 
-    // Create the new trigger according to predefined durations and speed
-    trigger = millis() + duration;
+    // Create the new trigger according to predefined duration
+    trigger = millis() + duration;
 
-    // Advance by one note in the midiSequence;
-    note++; 
+    // Advance by one note in the midiSequence;
+    note++; 
 
-    // Loop the sequence
-    if (note == 12) {
-      note = 0;
-    }
-  }
-} 
+    // Loop the sequence, notice the jitter
+    if (note == 12) {
+      note = 0;
+    }
+  }
+} 
 
-// This function calculates the respective frequency of a MIDI note
-float midiToFreq(int note) {
-  return (pow(2, ((note-69)/12.0)))*440;
+// This helper function calculates the respective frequency of a MIDI note
+float midiToFreq(int note) {
+  return (pow(2, ((note-69)/12.0))) * 440;
 }
 
-
+
@@ -380,100 +380,96 @@

Example 3, 4: Sample playback

-/**
- * Processing Sound Library, Example 3
- * 
- * This example shows how to make a simple sampler and sequencer 
- * with the Sound library. In this sketch, five different samples are 
- * loaded and played back at different pitches, in this case five 
- * different octaves. The sequencer triggers an event every 200-1000 
- * milliseconds randomly. Each time a sound is played a colored 
- * rect with a random color is displayed.
- * 
- Load this example with included MP3s from: 
-   Examples > Libraries > Sound > Soundfile > Sampler 
- */
-
-import processing.sound.*;
-
-SoundFile[] files;
-
-// Create an array of values which represent the octaves. 
-// 1.0 is playback at normal speed, 0.5 is half and therefore 
-// one octave down. 2.0 is double so one octave up.
-float[] octave = { 
-  0.25, 0.5, 1.0, 2.0, 4.0
-};
-
-// The playSound array is defining how many samples will be 
-// played at each trigger event
-int[] playSound = { 
-  1, 1, 1, 1, 1
-};
-
-// The trigger is an integer number in milliseconds so we 
-// can schedule new events in the draw loop
-int trigger=0;
-
-// This array holds the pixel positions of the rectangles 
-// that are drawn each event
-int[] posx = {
-  0, 128, 256, 384, 512
-};
-
-
-void setup() {
-  size(640, 360);
-  background(255);
-
-  // Create an array of 5 empty soundfiles
-  files = new SoundFile[5];
-
-  // Load 5 soundfiles from a folder in a for loop. By naming 
-  // the files 1., 2., 3., [...], n.aif it is easy to iterate 
-  // through the folder and load all files in one line of code.
-  for (int i = 0; i < files.length; i++) {
-    files[i] = new SoundFile(this, (i+1) + ".aif");
-  }
+/**
+ * Processing Sound Library, Example 3
+ * 
+ * This example shows how to make a simple sampler and sequencer 
+ * with the Sound library. In this sketch, five different samples are 
+ * loaded and played back at different pitches, in this case five 
+ * different octaves. The sequencer triggers an event every 200-1000 
+ * milliseconds randomly. Each time a sound is played a colored 
+ * rect with a random color is displayed.
+ * 
+ * Load this example with included sound files from the Processing Editor: 
+ * Examples > Libraries > Sound > Soundfile > Sampler 
+ */
+
+import processing.sound.*;
+
+SoundFile[] file;
+
+// Define the number of samples 
+int numsounds = 5;
+
+// Create an array of values which represent the octaves. 
+// 1.0 is playback at normal speed, 0.5 is half and 
+// therefore one octave down. 2.0 is double so one octave up.
+float[] octave = {0.25, 0.5, 1.0, 2.0, 4.0};
+
+// The playSound array is defining how many samples will 
+// be played at each trigger event
+int[] playSound = {1, 1, 1, 1, 1};
+
+// The trigger is an integer number in milliseconds so we 
+// can schedule new events in the draw loop
+int trigger;
+
+// This array holds the pixel positions of the rectangles 
+// which are drawn each event
+int[] posx = {0, 128, 256, 384, 512};
+
+
+void setup() {
+  size(640, 360);
+  background(255);
+
+  // Create an array of empty soundfiles
+  file = new SoundFile[numsounds];
+
+  // Load 5 soundfiles from a folder in a for loop. 
+  // By naming the files 1., 2., 3., n.aif it is easy to iterate
+  // through the folder and load all files in one line of code.
+  for (int i = 0; i < numsounds; i++) {
+    file[i] = new SoundFile(this, (i+1) + ".aif");
+  }
+
+  // Create a trigger which will be the basis for our random sequencer. 
+  trigger = millis();
 }
 
-void draw() {
-
-  // If the determined trigger moment in time matches up with 
-  // the computer clock events get triggered.
-  if (millis() > trigger) {
-
-    // Redraw the background every time to erase old rects
-    background(255);
-
-    // By iterating through the playSound array we check for 
-    // 1 or 0, 1 plays a sound and draws a rect, for 0 nothing happens
-
-    for (int i = 0; i < files.length; i++) {      
-      // Check which indexes are 1 and 0.
-      if (playSound[i] == 1) {
-        float rate;
-        // Choose a random color and get set to noStroke()
-        fill(int(random(255)), int(random(255)), int(random(255)));
-        noStroke();
-        // Draw the rect in the positions we defined earlier in posx
-        rect(posx[i], 50, 128, 260);
-        // Choose a random index of the octave array
-        rate = octave[int(random(0, 5))];
-        // Play the soundfile from the array with the respective 
-        // rate and loop set to false
-        files[i].play(rate, 1.0);
-      }
-
-      // Renew the indexes of playSound so that at the next event 
-      // the order is different and randomized.
-      playSound[i] = int(random(0, 2));
-    }
-
-    // Create a new triggertime in the future, with a random offset 
-    // between 200 and 1000 milliseconds
-    trigger = millis() + int(random(200, 1000));
-  }
+void draw() {
+
+  // If the determined trigger moment in time matches up with the 
+  // computer clock events get triggered.
+  if (millis() > trigger) {
+    // Redraw the background every time to erase old rects
+    background(255);
+
+    // By iterating through the playSound array we check for 1 or 0, 
+    // 1 plays a sound and draws a rect, for 0 nothing happens.
+
+    for (int i = 0; i < numsounds; i++) {      
+      // Check which indexes are 1 and 0.
+      if (playSound[i] == 1) {
+        float rate;
+        // Choose a random color and get set to noStroke()
+        fill(int(random(255)), int(random(255)), int(random(255)));
+        noStroke();
+        // Draw the rect in the positions we defined earlier in posx
+        rect(posx[i], 50, 128, 260);
+        // Choose a random index of the octave array
+        rate = octave[int(random(0, 5))];
+        // Play the soundfile from the array with the respective rate and loop set to false
+        file[i].play(rate, 1.0);
+      }
+
+      // Renew the indexes of playSound so that at the next event the order is different and randomized.
+      playSound[i] = int(random(0, 2));
+    }
+
+    // Create a new triggertime in the future, with a random offset between 200 and 1000 milliseconds
+    trigger = millis() + int(random(200, 1000));
+  }
 }
 
 
@@ -481,84 +477,150 @@

Example 3, 4: Sample playback


-/**
- * Processing Sound Library, Example 4
- * 
- * Five soundfiles are mapped to the numbers on the keyboard. 
- * Numbers 1-5 are played back an octave lower and numbers
- * 6-0 an octave higher.
- * 
- Load this example with included MP3s from: 
-   Examples > Libraries > Sound > Soundfile > Keyboard 
- */
-
-import processing.sound.*;
-
-AudioDevice device;
-SoundFile[] file;
-
-int red, green, blue;
-
-void setup() {
-  size(640, 360);
-  background(255);
-
-  // Create an AudioDevice with low buffer size 
-  // and create an array containing 5 empty soundfiles
-  device = new AudioDevice(this, 48000, 32);
-  file = new SoundFile[5];
-
-  // Load 5 soundfiles from a folder in a for loop. 
-  for (int i = 0; i < file.length; i++) {
-    file[i] = new SoundFile(this, (i+1) + ".aif");
-  }
+/**
+ * Processing Sound Library, Example 4
+ * 
+ * This example shows how to make a simple keyboard-triggered sampler with the Sound
+ * library. In this sketch 5 different short samples are loaded and played back at
+ * different speeds, which also changes their perceived pitch by one or two octaves.
+ * 
+ * Load this example with included sound files from the Processing Editor:  
+ * Examples > Libraries > Sound > Soundfile > Keyboard 
+ */
+
+import processing.sound.*;
+
+SoundFile[] file;
+
+// Define the number of samples 
+int numsounds = 5;
+
+// Define a variable to store the randomly generated background color in
+int backgroundColor[] = {255, 255, 255};
+
+void setup() {
+  size(640, 360);
+
+  // Create a Sound renderer and an array of empty soundfiles
+  file = new SoundFile[numsounds];
+
+  // Load 5 soundfiles from a folder in a for loop. By naming
+  // the files 1.aif, 2.aif, 3.aif, ..., n.aif it is easy to iterate
+  // through the folder and load all files in one line of code.
+  for (int i = 0; i < numsounds; i++) {
+    file[i] = new SoundFile(this, (i+1) + ".aif");
+  }
 }
 
-void draw() {
-  background(red, green, blue);
+void draw() {
+  background(backgroundColor[0], backgroundColor[1], backgroundColor[2]);
 }
 
-void keyPressed() {
-  // Set a random background color each time you hit then number keys
-  red=int(random(255));
-  green=int(random(255));
-  blue=int(random(255));
-
-  // Assign a sound to each number on your keyboard. 1-5 play at
-  // an octave below the original pitch of the file, 6-0 play at
-  // an octave above.
-  switch(key) {
-  case '1':
-    file[0].play(0.5, 1.0);
-    break;
-  case '2':
-    file[1].play(0.5, 1.0);
-    break;
-  case '3':
-    file[2].play(0.5, 1.0);
-    break;
-  case '4':
-    file[3].play(0.5, 1.0);
-    break;
-  case '5':
-    file[4].play(0.5, 1.0);
-    break;
-  case '6':
-    file[0].play(2.0, 1.0);
-    break;
-  case '7':
-    file[1].play(2.0, 1.0);
-    break;
-  case '8':
-    file[2].play(2.0, 1.0);
-    break;
-  case '9':
-    file[3].play(2.0, 1.0);
-    break;
-  case '0':
-    file[4].play(2.0, 1.0);
-    break;
-  }
+void keyPressed() {
+  // We use a boolean helper variable to determine whether one of the branches
+  // of the switch-statement was activated or not
+  boolean validKey = true;
+
+  switch(key) {
+  case 'a':
+    file[0].play(0.5, 1.0);
+    break;
+
+  case 's':
+    file[1].play(0.5, 1.0);
+    break;
+
+  case 'd':
+    file[2].play(0.5, 1.0);
+    break;
+
+  case 'f':
+    file[3].play(0.5, 1.0);
+    break;
+
+  case 'g':
+    file[4].play(0.5, 1.0);
+    break;
+
+  case 'h':
+    file[0].play(1.0, 1.0);
+    break;
+
+  case 'j':
+    file[1].play(1.0, 1.0);
+    break;
+
+  case 'k':
+    file[2].play(1.0, 1.0);
+    break;
+
+  case 'l':
+    file[3].play(1.0, 1.0);
+    break;
+
+  case ';':
+    file[4].play(1.0, 1.0);
+    break;
+
+  case '\'':
+    file[0].play(2.0, 1.0);
+    break;
+
+  case 'q':
+    file[1].play(2.0, 1.0);
+    break;
+
+  case 'w':
+    file[2].play(2.0, 1.0);
+    break;    
+
+  case 'e':
+    file[3].play(2.0, 1.0);
+    break;
+
+  case 'r':
+    file[4].play(2.0, 1.0);
+    break; 
+
+  case 't':
+    file[0].play(3.0, 1.0);
+    break;
+
+  case 'y':
+    file[1].play(3.0, 1.0);
+    break;
+
+  case 'u':
+    file[2].play(3.0, 1.0);
+    break;    
+
+  case 'i':
+    file[3].play(3.0, 1.0);
+    break;
+
+  case 'o':
+    file[4].play(3.0, 1.0);
+    break;
+
+  case 'p':
+    file[0].play(4.0, 1.0);
+    break;    
+
+  case '[':
+    file[1].play(4.0, 1.0);
+    break;
+
+    // no valid key was pressed, store that information
+  default:
+    validKey = false;
+  }
+
+  // If a new sample playback was triggered, change the background color
+  if (validKey) {
+    for (int i = 0; i < 3; i++) {
+      backgroundColor[i] = int(random(255));
+    }
+  }
 }
 
 
@@ -579,75 +641,74 @@

Example 5, 6: Audio analysis

-/**
- * Processing Sound Library, Example 5
- * 
- * This sketch shows how to use the FFT class to analyze a stream  
- * of sound. Change the variable bands to get more or less 
- * spectral bands to work with. The smooth_factor variable determines 
- * how much the signal will be smoothed on a scale form 0-1.
- * 
- Load this example with included MP3s from: 
-   Examples > Libraries > Sound > Analysis > FFTSpectrum 
- */
-
-import processing.sound.*;
-
-// Declare the processing sound variables 
-SoundFile sample;
-FFT fft;
-AudioDevice device;
-
-// Declare a scaling factor
-int scale = 5;
-
-// Define how many FFT bands we want
-int bands = 128;
-
-// declare a drawing variable for calculating rect width
-float r_width;
-
-// Create a smoothing vector
-float[] sum = new float[bands];
-
-// Create a smoothing factor
-float smooth_factor = 0.2;
-
-void setup() {
-  size(640, 360);
-  background(255);
-
-  // If the Buffersize is larger than the FFT Size, the FFT will fail
-  // so we set Buffersize equal to bands
-  device = new AudioDevice(this, 44000, bands);
-
-  // Calculate the width of the rects depending on how many bands we have
-  r_width = width/float(bands);
-
-  // Load and play a soundfile and loop it. This has to be called 
-  // before the FFT is created.
-  sample = new SoundFile(this, "beat.aiff");
-  sample.loop();
-
-  // Create and patch the FFT analyzer
-  fft = new FFT(this, bands);
-  fft.input(sample);
-}      
-
-void draw() {
-  // Set background color, noStroke and fill color
-  background(204);
-  fill(0, 0, 255);
-  noStroke();
-
-  fft.analyze();
-  for (int i = 0; i < bands; i++) {
-    // Smooth the FFT data by smoothing factor
-    sum[i] += (fft.spectrum[i] - sum[i]) * smooth_factor;
-
-    // Draw the rects with a scale factor
-    rect( i*r_width, height, r_width, -sum[i]*height*scale );
-  }
+/**
+ * Processing Sound Library, Example 5
+ * 
+ * This sketch shows how to use the FFT class to analyze a stream
+ * of sound. Change the number of bands to get more spectral bands
+ * (at the expense of more coarse-grained time resolution of the spectrum).
+ * 
+ * Load this example with included sound files from the Processing Editor: 
+ * Examples > Libraries > Sound > Analysis > FFTSpectrum 
+ */
+
+import processing.sound.*;
+
+// Declare the sound source and FFT analyzer variables
+SoundFile sample;
+FFT fft;
+
+// Define how many FFT bands to use (this needs to be a power of two)
+int bands = 128;
+
+// Define a smoothing factor which determines how much the spectrums of consecutive
+// points in time should be combined to create a smoother visualisation of the spectrum.
+// A smoothing factor of 1.0 means no smoothing (only the data from the newest analysis
+// is rendered), decrease the factor down towards 0.0 to have the visualisation update
+// more slowly, which is easier on the eye.
+float smoothingFactor = 0.2;
+
+// Create a vector to store the smoothed spectrum data in
+float[] sum = new float[bands];
+
+// Variables for drawing the spectrum:
+// Declare a scaling factor for adjusting the height of the rectangles
+int scale = 5;
+// Declare a drawing variable for calculating the width of the 
+float barWidth;
+
+public void setup() {
+  size(640, 360);
+  background(255);
+
+  // Calculate the width of the rects depending on how many bands we have
+  barWidth = width/float(bands);
+
+  // Load and play a soundfile and loop it.
+  sample = new SoundFile(this, "beat.aiff");
+  sample.loop();
+
+  // Create the FFT analyzer and connect the playing soundfile to it.
+  fft = new FFT(this, bands);
+  fft.input(sample);
+}
+
+public void draw() {
+  // Set background color, noStroke and fill color
+  background(125, 255, 125);
+  fill(255, 0, 150);
+  noStroke();
+
+  // Perform the analysis
+  fft.analyze();
+
+  for (int i = 0; i < bands; i++) {
+    // Smooth the FFT spectrum data by smoothing factor
+    sum[i] += (fft.spectrum[i] - sum[i]) * smoothingFactor;
+
+    // Draw the rectangles, adjust their height using the scale factor
+    rect(i*barWidth, height, barWidth, -sum[i]*height*scale);
+  }
 }
 
 
@@ -655,60 +716,59 @@

Example 5, 6: Audio analysis


-/**
- * Processing Sound Library, Example 6
- * 
- * This sketch shows how to use the Amplitude class to analyze a
- * stream of sound. In this case a sample is analyzed. The smoothFactor
- * variable determines how much the signal will be smoothed on a scale
- * from 0 - 1.
- * 
- Load this example with included MP3s from: 
-   Examples > Libraries > Sound > Analysis > PeakAmplitude 
- */
-
-import processing.sound.*;
-
-// Declare the processing sound variables 
-SoundFile sample;
-Amplitude rms;
-
-// Declare a scaling factor
-float scale = 5.0;
-
-// Declare a smooth factor
-float smoothFactor = 0.25;
-
-// Used for smoothing
-float sum;
-
-void setup() {
-  size(640, 360);
-
-  //Load and play a soundfile and loop it
-  sample = new SoundFile(this, "beat.aiff");
-  sample.loop();
-
-  // Create and patch the rms tracker
-  rms = new Amplitude(this);
-  rms.input(sample);
-}      
-
-void draw() {
-  // Set background color, noStroke and fill color
-  background(0, 0, 255);
-  noStroke();
-  fill(255, 0, 150);
-
-  // Smooth the rms data by smoothing factor
-  sum += (rms.analyze() - sum) * smoothFactor;  
-
-  // rms.analyze() return a value between 0 and 1. It's
-  // scaled to height/2 and then multiplied by a scale factor
-  float rmsScaled = sum * (height/2) * scale;
-
-  // Draw an ellipse at a size based on the audio analysis
-  ellipse(width/2, height/2, rmsScaled, rmsScaled);
+/**
+ * Processing Sound Library, Example 6
+ * 
+ * This sketch shows how to use the Amplitude class to analyze the changing
+ * "loudness" of a stream of sound. In this case an audio sample is analyzed.
+ * 
+ * Load this example with included sound files from the Processing Editor: 
+ * Examples > Libraries > Sound > Analysis > PeakAmplitude 
+ */
+
+import processing.sound.*;
+
+// Declare the processing sound variables 
+SoundFile sample;
+Amplitude rms;
+
+// Declare a smooth factor to smooth out sudden changes in amplitude.
+// With a smooth factor of 1, only the last measured amplitude is used for the
+// visualisation, which can lead to very abrupt changes. As you decrease the
+// smooth factor towards 0, the measured amplitudes are averaged across frames,
+// leading to more pleasant gradual changes
+float smoothingFactor = 0.25;
+
+// Used for storing the smoothed amplitude value
+float sum;
+
+public void setup() {
+  size(640, 360);
+
+  //Load and play a soundfile and loop it
+  sample = new SoundFile(this, "beat.aiff");
+  sample.loop();
+
+  // Create and patch the rms tracker
+  rms = new Amplitude(this);
+  rms.input(sample);
+}      
+
+public void draw() {
+  // Set background color, noStroke and fill color
+  background(125, 255, 125);
+  noStroke();
+  fill(255, 0, 150);
+
+  // smooth the rms data by smoothing factor
+  sum += (rms.analyze() - sum) * smoothingFactor;
+
+  // rms.analyze() return a value between 0 and 1. It's
+  // scaled to height/2 and then multiplied by a fixed scale factor
+  float rms_scaled = sum * (height/2) * 5;
+
+  // We draw a circle whose size is coupled to the audio analysis
+  ellipse(width/2, height/2, rms_scaled, rms_scaled);
 }
 
 
From 4618c60a0bb8140f56f0c28cfa76c72f8a5ddbe7 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:47:19 -0700 Subject: [PATCH 25/86] Removing Exhibition from site navigation --- templates/template.nav.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/template.nav.php b/templates/template.nav.php index 92ba0e37d..01dd329bd 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -8,9 +8,9 @@ 'Learning' => array('/learning/', 1), 'Tutorials' => array('/tutorials/', 2), - 'Examples' => array('/examples/', 2), - 'Books' => array('/books/', 2), - 'Handbook' => array('/handbook/', 2), + 'Examples' => array('/examples/', 2), + 'Books' => array('/books/', 2), + 'Handbook' => array('/handbook/', 2), 'Reference' => array('/reference/', 1), @@ -21,7 +21,7 @@ 'Environment' => array('/reference/environment/', 2), 'Download' => array('/download/', 1), - 'Donate' => array('/download/support.html', 1), + 'Donate' => array('/download/support.html', 1), 'Shop' => array('/shop/', 1), @@ -58,7 +58,7 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . l('Download', $section == 'Download') . "
\n"; $html .= "\t\t\t\t\t" . l('Donate', $section == 'Donate') . "

\n"; - $html .= "\t\t\t\t\t" . l('Exhibition', $section == 'Exhibition') . "

\n"; + #$html .= "\t\t\t\t\t" . l('Exhibition', $section == 'Exhibition') . "

\n"; $html .= "\t\t\t\t\t" . l('Reference', $section == 'Reference') . "
\n"; $html .= "\t\t\t\t\t" . l('Libraries', $section == 'Libraries') . "
\n"; @@ -82,7 +82,7 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . "»Wiki
\n"; $html .= "\t\t\t\t\t" . "»FAQ
\n"; $html .= "\t\t\t\t\t" . "»Twitter
\n"; - $html .= "\t\t\t\t\t" . "»Facebook
\n"; + #$html .= "\t\t\t\t\t" . "»Facebook
\n"; $html .= "\t\t\t\t\t" . "»Medium
\n"; $html .= "\t\t\t\t\n"; From 2b7c2e615069ff9100383aad62bdbc8691236bdd Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:52:21 -0700 Subject: [PATCH 26/86] Remove Exhibition from site navigation for the Reference --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index a754b73e7..cbe313cb0 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -4,7 +4,7 @@ Download
Donate

- Exhibition

+ Reference
Libraries
From ad8713cc8ec2f0b4d493bf0ba4bf7b657aa6ac6d Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:53:50 -0700 Subject: [PATCH 27/86] Update nav.web.template.html --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index cbe313cb0..3a6d60507 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -28,6 +28,6 @@ »Wiki
»FAQ
»Twitter
- »Facebook
+ »Medium \ No newline at end of file From abc68760856dc32e5c480942b711f24385c6d9ab Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 22:04:41 -0700 Subject: [PATCH 28/86] Update Creative Commons license embed on reference pages --- java_generate/templates/class.template.html | 31 +------------------ java_generate/templates/generic.template.html | 31 +------------------ 2 files changed, 2 insertions(+), 60 deletions(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 411377a94..908e61656 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -89,37 +89,8 @@ - diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 4d31c053a..901972be3 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -88,37 +88,8 @@ - From 8f77bd6545c648f248209835ed6d99648c41d3e5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 22:18:07 -0700 Subject: [PATCH 29/86] Attempt to get Creative Commons image to load by adding to Processing site --- img/cc.png | Bin 0 -> 1672 bytes java_generate/templates/class.template.html | 2 +- java_generate/templates/generic.template.html | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 img/cc.png diff --git a/img/cc.png b/img/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..4acf8c4ec36d493f16cdc812c3a318b96eaa9181 GIT binary patch literal 1672 zcmYk+X*Ane9|!Qi>FA=Q(P%AcC1aOXZKYKmq}KG5TFdC;p(Wbq85+h;D)xPus3o+h zQpX-iL=YrIRy0J@r)oTyXsMyp%vh&2fA8jdKKFj_@0|Pco}26L=B%Wkp#T7Y62`^B z6Kp?lA&wsbcki=%60nfLE}pIckf;j)Dd_;PdjR%F0EjUGfR!KsxJCj1Ra{9R*9pA) z?E|zc8UQFo_3l!(g=jP_# zNTpM6BoZlTa`H83VgfWJ7Eg&^NnX9093MY4CKijwC&tDOjgE;&M-PccUx`HHLg697 zsAyC$CJ>DA`J;TEh$j>Xcp@%W$QAJUT;a$FNWkF;I3s)xhd(^bA0Fbe*@sx{5f*D? zki{7s1Pu=i9O`GWSp7r&{X@)tc0ZHNWU~AESfJkCK~PW60E5xr-PhaO&7{-&y1M#k zUA;6~50%znFdG}hJE)z#M5)I6`Qt*x!8uC6Vwsv=dESC*GmmXgXVo{*jpONqoML}Kw_ zatm?`^74za^Ru(EGqN%=GBeUL(=t-i2&u^_DJhQ$csv20oPwYljf#%> zDJtS8Ttq~~qp+}t*wEm>dqF`#0sjv0_w{r4a0g@WU~gwg_*gj znW?FXiHWJvB_ksv6bfaCG6Z8_XaEMKuWz8Mr=z2zjX;7yz|X$UKp@trPc|qq5&lC>n^S%xO`shEc~)ee0H3jL{-Q(V8y4=t)So zU5-Xa*n%eBFT!P)(~uc5$T$>>ovJ!Ea%gb zlrX&kbu7~8>i1vS6U!QA^G?$3DNdw z-`qr3Fc`Lf0Y2tc#C)fyo%GoQ&CkZ2&tc{gDg{TU69jM?xjsaK_R$N8+~t!j0<5^w#> z#wB^TN}9~&koTIQoZ8hZTCiYovxD-dtDU)NL<5pAROTO7n4|Dk1(KAs4?hX3JUvqo zUa-8_9+=j$@q1tAh-w-3sPz1^YF}n4b>~-`2fpH7r#n#Mz1)j8yFOJ21>B0aKP#~Cwk)~uOBqcpqNS5X?`^8-6BOB6d}AHRdvMVClVY)(6! zx1x3iO=1eq@a(N4)u|GnHnn8dbm=8|vWms`@feka=GLWOHl89D0jsjo3%X05$+urT zVq8{ez%h2)-c3R*Ga3H~62Hu)dl5Evkj57p3Ou^)fGW*K=C)8+lcd4}_Z^ z1-qe{%;LNX_?bG=^2(>*P8GY}3MBn_Q;ngspo#P?`;O*s`O>&{nRGOQPhs^zOa-jclI>XiQ$xdOhGkANGqnUeS7LiWJ21v}pXJ9#tlJ zJnn5_2jiW`EC#=q5h_(*{ud#_(h^ZEl}*=GJqApY6UEc9DLA_S-2`+PA+9y_R<$w~ z-jpRZN}bw$^Czu@^C-^c0U0Od)lI7YFX>-J_D2>D_5&BpZ)3J`%*HUH+EZ8~_zwUW MM>mI#8$oG*16KD<`Tzg` literal 0 HcmV?d00001 diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 908e61656..96634b4c1 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -89,7 +89,7 @@ diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 901972be3..be8235926 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -88,7 +88,7 @@ From b7666866d9f8900a6020cf747cba01069e6acddd Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Thu, 4 Jun 2020 10:57:22 -0700 Subject: [PATCH 30/86] Updates to some of the oldest examples to fit with current style --- .../Structure/Coordinates/Coordinates.pde | 22 ++++++------- .../examples/Basics/Structure/Loop/Loop.pde | 20 ++++-------- .../Basics/Structure/NoLoop/NoLoop.pde | 32 +++++++------------ .../Basics/Structure/SetupDraw/SetupDraw.pde | 30 ++++++++--------- 4 files changed, 44 insertions(+), 60 deletions(-) diff --git a/content/examples/Basics/Structure/Coordinates/Coordinates.pde b/content/examples/Basics/Structure/Coordinates/Coordinates.pde index 222ab50d6..dce834d05 100644 --- a/content/examples/Basics/Structure/Coordinates/Coordinates.pde +++ b/content/examples/Basics/Structure/Coordinates/Coordinates.pde @@ -4,9 +4,9 @@ * All shapes drawn to the screen have a position that is * specified as a coordinate. All coordinates are measured * as the distance from the origin in units of pixels. - * The origin [0, 0] is the coordinate is in the upper left + * The origin (0, 0) is the coordinate is in the upper left * of the window and the coordinate in the lower right is - * [width-1, height-1]. + * (width-1, height-1). */ // Sets the screen to be 640 pixels wide and 360 pixels high @@ -16,11 +16,11 @@ size(640, 360); background(0); noFill(); -// The two parameters of the point() method each specify coordinates. -// The first parameter is the x-coordinate and the second is the Y +// The two parameters of the point() function define its location. +// The first parameter is the x-coordinate and the second is the y-coordinate stroke(255); -point(width * 0.5, height * 0.5); -point(width * 0.5, height * 0.25); +point(320, 180); +point(320, 90); // Coordinates are used for drawing all shapes, not just points. // Parameters for different functions are used for different purposes. @@ -28,10 +28,10 @@ point(width * 0.5, height * 0.25); // the coordinates of the first endpoint and the second two parameters // specify the second endpoint stroke(0, 153, 255); -line(0, height*0.33, width, height*0.33); +line(0, 120, 640, 120); -// By default, the first two parameters to rect() are the -// coordinates of the upper-left corner and the second pair -// is the width and height +// The first two parameters to rect() are the coordinates of the +// upper-left corner and the second pair is the width and height +// of the rectangle stroke(255, 153, 0); -rect(width*0.25, height*0.1, width * 0.5, height * 0.8); +rect(160, 36, 320, 288); diff --git a/content/examples/Basics/Structure/Loop/Loop.pde b/content/examples/Basics/Structure/Loop/Loop.pde index 1ad323f34..4c9ae5574 100644 --- a/content/examples/Basics/Structure/Loop/Loop.pde +++ b/content/examples/Basics/Structure/Loop/Loop.pde @@ -1,14 +1,13 @@ /** * Loop. * - * The loop() function causes draw() to execute - * continuously. If noLoop is called in setup() - * the draw() is only executed once. In this example - * click the mouse to execute loop(), which will - * cause the draw() the execute continuously. + * If noLoop() is run in setup(), the code in draw() + * is only run once. In this example, click the mouse + * to run the loop() function to cause the draw() the + * run continuously. */ -float y = 100; +float y = 180; // The statements in the setup() function // run once when the program begins @@ -16,18 +15,11 @@ void setup() { size(640, 360); // Size should be the first statement stroke(255); // Set stroke color to white noLoop(); - - y = height * 0.5; } -// The statements in draw() are run until the -// program is stopped. Each statement is run in -// sequence and after the last line is read, the first -// line is run again. void draw() { - background(0); // Set the background to black + background(0); // Set the background to black line(0, y, width, y); - y = y - 1; if (y < 0) { y = height; diff --git a/content/examples/Basics/Structure/NoLoop/NoLoop.pde b/content/examples/Basics/Structure/NoLoop/NoLoop.pde index 595de53ea..9fc29afcf 100644 --- a/content/examples/Basics/Structure/NoLoop/NoLoop.pde +++ b/content/examples/Basics/Structure/NoLoop/NoLoop.pde @@ -1,34 +1,26 @@ /** * No Loop. * - * The noLoop() function causes draw() to only - * execute once. Without calling noLoop(), the - * code inside draw() is run continually. + * The noLoop() function causes draw() to only run once. + * Without calling noLoop(), the code inside draw() is + * run continually. */ -float y; +float y = 180; -// The statements in the setup() function -// execute once when the program begins -void setup() -{ +// The statements in the setup() block +// run once when the program begins +void setup() { size(640, 360); // Size should be the first statement - stroke(255); // Set line drawing color to white + stroke(255); // Set line drawing color to white noLoop(); - - y = height * 0.5; } -// The statements in draw() are executed until the -// program is stopped. Each statement is executed in -// sequence and after the last line is read, the first -// line is executed again. -void draw() -{ +// In this example, the code in the draw() block +// runs only once because of the noLoop() in setup() +void draw() { background(0); // Set the background to black + line(0, y, width, y); y = y - 1; if (y < 0) { y = height; } - line(0, y, width, y); } - - diff --git a/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde b/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde index 5c46b53d3..53e73d576 100644 --- a/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde +++ b/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde @@ -2,28 +2,28 @@ * Setup and Draw. * * The code inside the draw() function runs continuously - * from top to bottom until the program is stopped. + * from top to bottom until the program is stopped. The + * code in setup() is run once when the program starts. */ -int y = 100; +int y = 180; -// The statements in the setup() function -// execute once when the program begins +// The statements in the setup() block run once +// when the program begins void setup() { size(640, 360); // Size must be the first statement - stroke(255); // Set line drawing color to white - frameRate(30); + stroke(255); // Set line drawing color to white } -// The statements in draw() are executed until the -// program is stopped. Each statement is executed in -// sequence and after the last line is read, the first -// line is executed again. + +// The statements in draw() are run until the program +// is stopped. Each statement is run in sequence from top +// to bottom and after the last line is read, the +// first line is run again. void draw() { - background(0); // Clear the screen with a black background + background(0); // Clear the screen with a black background + line(0, y, width, y); y = y - 1; if (y < 0) { - y = height; - } - line(0, y, width, y); + y = height; + } } - From dd55b55cad8b6f7e2f0bce2835badfc0ff21821c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Sat, 6 Jun 2020 19:00:06 -0700 Subject: [PATCH 31/86] Reference category adjustment for textWidth() --- content/api_en/textWidth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textWidth.xml b/content/api_en/textWidth.xml index 7d5db2aea..cdbe3afe2 100755 --- a/content/api_en/textWidth.xml +++ b/content/api_en/textWidth.xml @@ -4,7 +4,7 @@ Typography -Attributes +Metric From f5f107710196fd357c119a6faa24bf2c11235262 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Sat, 6 Jun 2020 19:01:28 -0700 Subject: [PATCH 32/86] Update textWidth.xml --- content/api_en/textWidth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textWidth.xml b/content/api_en/textWidth.xml index cdbe3afe2..b2adacc25 100755 --- a/content/api_en/textWidth.xml +++ b/content/api_en/textWidth.xml @@ -4,7 +4,7 @@ Typography -Metric +Metrics From 652ebd111c773fd8613ff6bc28533cd7af5bc43b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 11:53:20 -0700 Subject: [PATCH 33/86] Add Sponsor button to repository --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..f8c6bc52b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: processing From b81bef5bf297a0a6ade0ae2e8521fbce12d5f2a2 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 12:16:04 -0700 Subject: [PATCH 34/86] Add external sponsor link to Foundation --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index f8c6bc52b..2cf28e94b 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ github: processing +custom: https://processingfoundation.org/support From 45c96dfc5abd7cc722e81da2f3b1ee5e29710931 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 15:10:03 -0700 Subject: [PATCH 35/86] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2cf28e94b..93c4b27b4 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ github: processing -custom: https://processingfoundation.org/support +custom: https://processingfoundation.org/ From b660f465551f035577a5d9d0e9597f9e1b8aa77d Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:50:42 -0700 Subject: [PATCH 36/86] Add three new book to Books page --- content/static/books.html | 210 +++++++++++++++++++------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/content/static/books.html b/content/static/books.html index e935e82db..80b69c929 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -3,7 +3,6 @@

Books. Processing books cove

- @@ -38,7 +37,8 @@

Books. Processing books cove » Order Print/EBook from O'Reilly
» Order from Amazon.com
- This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help reader: +
+ This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help readers:
  • Quickly learn programming basics, from variables to objects
  • Understand the fundamentals of computer graphics
  • @@ -88,6 +88,7 @@

    Books. Processing books cove Published August 2015, Morgan Kaufmann. 564 pages. Paperback.
    » Order from Amazon.com
    +
    The second edition of Learning Processing has been updated for compatibility with Processing 3 and includes several new chapters of content including video, sound, data visualization, and networking. For more, visit the Learning Processing website.

    Dan Shiffman says, "This book tells a story. It's a story of liberation, of taking the first steps towards understanding the foundations of computing, writing your own code, and creating your own media without the bonds of existing software tools. This story is not reserved for computer scientists and engineers. This story is for you." @@ -97,7 +98,7 @@

    Books. Processing books cove

    If you are an educator, you can request a desk/exam copy from the Elsevier website.
    -

    +

@@ -120,9 +121,43 @@

Books. Processing books cove How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital worlds? This book focuses on a range of programming strategies and techniques behind computer simulations of natural systems, from elementary concepts in mathematics and physics to more advanced algorithms that enable sophisticated visual results. Readers will progress from building a basic physics engine to creating intelligent moving objects and complex systems, setting the foundation for further experiments in generative design. Subjects covered include forces, trigonometry, fractals, cellular automata, self-organization, and genetic algorithms. + +

+ + + - + + + + + + + + + + + + + + + + @@ -135,14 +170,13 @@

Books. Processing books cove Ben Fry.
Published December 2007, O'Reilly. 384 pages. Paperback.
» Order from Amazon.com -
+

The O'Reilly website says, "How you can take advantage of data that you might otherwise never use? With the help of a powerful new programming environment [Processing], this book helps you represent data accurately on the Web and elsewhere, complete with user interaction, animation, and more. You'll learn basic visualization principles, how to choose the right kind of display for your purposes, and how to provide interactive features to design entire interfaces around large, complex data sets."

Martin Wattenberg from the IBM Watson Research Center says, "This wonderfully detailed guide, by one of the masters of modern data graphics, tells you everything you need to know to code your own visualizations from scratch. Perhaps most valuable are the many examples where Fry demonstrates how to refine a bare-bones concept into a beautiful, effective finished piece. Read this book, and you'll never again be dependent on someone else's view of your data."
-

+ -

@@ -154,14 +188,14 @@

Books. Processing books cove

+ @@ -176,7 +210,7 @@

Books. Processing books cove Derek Runberg.
2015, No Starch Press. 232 pages. Paperback.
» Order from Amazon.com -
+

The publisher writes, "The SparkFun Guide to Processing teaches you to craft your own digital artwork and even combine it with hardware—no prior programming experience required. Over the course of the book, you’ll learn the basics by drawing simple shapes, move on to photo editing and video manipulation, and ultimately affect the physical world by using Processing with an Arduino."

The publisher lists: @@ -187,7 +221,7 @@

Books. Processing books cove
  • Fetch weather data from the Web and build a custom weather dashboard
  • Create visualizations that change based on sound, light, and temperature readings
  • -

    +

    @@ -197,14 +231,14 @@

    Books. Processing books cove

    + alt="Processing: An Introduction to Programming"/> + @@ -232,7 +266,7 @@

    Books. Processing books cove Published April 2013, friends of ED. 472 pages. Paperback.
    » Order Print from Apress
    » Order from Amazon.com -
    +

    The authors write, "If you’ve been curious about coding, but the thought of it also makes you nervous, this book is for you; if you consider yourself a creative person, maybe worried programming is too non-creative, this book is also for you; if you want to learn about the latest Processing 2.0 language release and also start making beautiful code art, this book is also definitely for you. Based on research funded by the National Science Foundation, this book brings together some of the most engaging and successful approaches from the digital arts and computer science classrooms:
    • Learn the latest features of Processing 2.0
    • Gain a solid understanding of coding concepts, such as design, analysis, and object-oriented programming
    • @@ -255,19 +289,17 @@

      Books. Processing books cove Andrew S. Glassner.
      Published August 2010, A K Peters. Paperback.
      » Order from Amazon.com -
      +

      The book description reads, "Learn how to create gorgeous and expressive imagery with the Processing programming language and environment... Walk with veteran author Andrew Glassner on a journey of shared discovery as he takes actual Processing projects from inspiration to reality. You'll closely follow every step he takes and see exactly how each project evolves, including big and small mistakes he's made along the way (and how to fix them!), and the times when he changed direction. Once you see the results, you'll understand why programming is such a powerful skill for self-expression."

      This book has a different perspective from the others because of Glassner's deep experience in computer graphics. His bio reads, "Dr. Andrew Glassner is a writer-director, and a consultant in story structure, interactive fiction, and computer graphics. He started working in 3D computer graphics in 1978, and has carried out research at the NYIT Computer Graphics Lab, Case Western Reserve University, the IBM TJ Watson Research Lab, the Delft University of Technology, Bell Communications Research, Xerox PARC, and Microsoft Research... He is also a well-known writer, and has published numerous technical papers and books on topics ranging from 3D modeling, rendering, and animation to digital sound synthesis. His book '3D Computer Graphics: A Handbook for Artists and Designers' has taught a generation of artists through two editions and three languages. Glassner created and edited the 'Graphics Gems' series and created and wrote several chapters in the book 'An Introduction to Ray Tracing'. He wrote the two-volume text 'Principles of Digital Image Synthesis'."

    - - - + - - - - - +

    + The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks." + + + @@ -335,7 +365,7 @@

    Books. Processing books cove Matt Pearson.
    Published March 2011, Manning Publications. 300 pages. Paperback.
    » Order from Amazon.com -
    +

    Matt provides a list of bullet points:
    • The complete guide to creating generative graphics for print, video and the web.
    • @@ -348,7 +378,6 @@

      Books. Processing books cove

    - @@ -365,19 +394,16 @@

    Books. Processing books cove Kostas Terzidis.
    Published May 2009, Wiley. 384 Pages. Hardcover.
    » Order from Amazon.com -
    +

    The Wiley website says, "this book offers a series of generic procedures that can function as building blocks and encourages you to then use those building blocks to experiment, explore, and channel your thoughts, ideas, and principles into potential solutions. The book covers such topics as structured shapes, solid geometry, networking and databases, physical computing, image processing, graphic user interfaces, and more."

    - - - - - - + - + @@ -441,12 +463,12 @@

    Books. Processing books cove Daniel Sauter.
    Published February 2013, The Pragmatic Programmers. ~300 pages. Paper and eBook.
    » Order from The Pragmatic Bookshelf
    -
    +

    The publisher writes, "Create mobile apps for Android phones and tablets faster and more easily than you ever imagined. Whether you’re a student, teacher, hobbyist, or experienced developer, Rapid Android Development puts the fast-growing market for Android phone and tablet applications within your reach. Without needing to master the complexities of Java, Eclipse, or the Android SDK, you’ll find yourself writing dazzling graphics displays and location-aware programs in no time. With more than 30 ready-to-run demos, applications, and games, you’ll find yourself diving deeper than you thought possible into the treasure trove of software and hardware packed into today’s Android devices." -

    + @@ -458,7 +480,7 @@

    Books. Processing books cove Jan Vantomme.
    Published September 2012, PACKT. 350 pages. Paperback and eBook.
    » Order from PACKT
    -
    +

    The publisher lists:
    • Explore the Processing language with a broad range of practical recipes for computational art and graphics
    • @@ -533,20 +555,40 @@

      Books. Processing books cove

    - + + + + + + + + + + + @@ -564,7 +606,7 @@

    Books. Processing books cove Text in German.

    The OReilly.de site writes, "Processing ist eine auf Grafik, Simulation und Animation spezialisierte objektorientierte Programmiersprache, die besonders für Menschen mit wenig Programmiererfahrung geeignet ist. Deshalb eignet sie sich vor allem für Künstler, Bastler und Programmiereinsteiger. Die aus Java abgeleitete Sprache wurde geschaffen, um schnell und effektiv mit relativ wenig Aufwand zu beeindruckenden Ergebnissen zu kommen. Processing führt den Leser zügig in die Programmieressentials ein und geht dann unmittelbar zur Programmierung grafisch anspruchsvoller Anwendungen über. Spielerisch wird dem Leser die 2D- und 3D-Programierung, Textrendering, die Bildbearbeitung und sogar die Videomanipulation nahe gebracht." -

    + @@ -636,7 +678,8 @@

    Books. Processing books cove During the 50‘s ”era of cybernetics“, computer entered into the history of art simultaneously in different parts of the world. Art and science were in great turmoil. Science, with its theories and experiments, was approaching artificially mimicking both natural phenomena, such as light and sound, and the human phenomena of language and communication. Art, with its aesthetic and exhibitions, had transcended the boundaries of the avant-garde. Now, with the computer, it was confronting a reality that challenged ”the where“ and ”the how“ of doing art and the very meaning of ”masterpiece“. Antonio Rollo takes us on a tour of these seminal works from his unique perspective of the artist, through the code!

    - There's additional information on the publisher's website. + There's additional information on the publisher's website. + @@ -656,7 +699,8 @@

    Books. Processing books cove
    Note from Casey: "I received a copy of this book from the authors on a recent trip to Japan. It's a beautifully produced full-color book with sections introducing Processing, featuring work created with Processing (many are from the Exhibition section of the Processing website), and introducing programming through progressively complicated examples. The majority of the book is an introduction to programming. There are many good examples and the code is color-coded like in the Processing Environment. This book is less comprehensive than the Greenberg and Reas/Fry books, but it appears to be a good, brief introduction."

    - There's additional information on the publisher's website. + There's additional information on the publisher's website. + @@ -686,49 +730,5 @@

    Books. Processing books cove - - -

    - - - - - - -
    Processing: A Programming Handbook for Visual Designers (Second Edition)

     

     

    Pro Processing for Images and Computer Vision with OpenCVPro Processing for Images and Computer Vision with OpenCV
    + Bryan WC Chung.
    + Published 2017, APress. Paperback, eBook.
    + » Order from APress +

    + The Publisher writes, "Pro Processing for Images and Computer Vision with OpenCV is a step-by-step training tool that guides you through a series of worked examples in linear order. Each chapter begins with a basic demonstration, including the code to recreate it on your own system. Then comes a creative challenge by which to engage and develop mastery of the chapter’s topic. The book also includes hints and tips relating to visual arts, interaction design, and industrial best practices. This book is intended for any developer of artistic and otherwise visual applications, such as in augmented reality and digital effects, with a need to manipulate images, and to recognize and manipulate objects within those images. The book is specifically targeted at those making use of the Processing language that is common in artistic fields, and to Java programmers because of Processing’s easy integration into the Java programming environment." +

     

     

    Programming 101: The How and Why of Programming Revealed Using the Processing Programming LanguageProgramming 101: The How and Why of Programming Revealed Using the Processing Programming Language
    + Jeanine Meyer.
    + Published 2018, APress. Paperback, eBook.
    + » Order from Apress +

    + The Publisher writes, "Understand the importance of programming, even if you’ve never programmed before! This book will teach you the basics of programming using the Processing programming language. You will create your own Processing sketches, using personal images, themes, or hobbies that you enjoy. The chapters in the book will demonstrate the process of programming, starting with formulating an idea, planning, building on past projects, and refining the work, similar to writing an essay or composing a song. This approach will guide you to make use of logic and mathematics to produce beautiful effects. The term for program in Processing is sketch, though the sketches featured in this book are far more than static drawings; they incorporate interaction, animation, video, audio, and accessing files on the local computer and on the Web. Technical features are introduced and explained in the context of complete examples: games (Snake, Hangman, jigsaw, slingshot), making a collage of family images and video clips, preparing directions for folding an origami model, rotating objects in 3D, and others." +

     

     

     

     

    Generative Design
    Hartmut Bohnacker, Benedikt Gross, Julia Laub, and Claudius Lazzeroni.
    August 2012, Princeton Architectural Press. 472 pages.
    - Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
    + Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
    » Order from Amazon.com -
    +

    This book is extraordinary; the design is clear and the production quality is fantastic. This is the design book about Processing that we've hoped for. Unlike most other Processing books, it doesn't discuss programming basics so it's free to start with exciting examples. The publisher promotes, "Generative design is a revolutionary new method of creating artwork, models, and animations from sets of rules, or algorithms. By using accessible programming languages such as Processing, artists and designers are producing extravagant, crystalline structures that can form the basis of anything from patterned textiles and typography to lighting, scientific diagrams, sculptures, films, and even fantastical buildings. Opening with a gallery of thirty-five illustrated case studies, Generative Design takes users through specific, practical instructions on how to create their own visual experiments by combining simple-to-use programming codes with basic design principles. A detailed handbook of advanced strategies provides visual artists with all the tools to achieve proficiency. Both a how-to manual and a showcase for recent work in this exciting new field, Generative Design is the definitive study and reference book that designers have been waiting for."

    More information about buying this book in German, as well as the complete source code for the examples, are at the book's website.

    -

    The SparkFun Guide to Processing Processing: An Introduction to Programming
    Jeffrey L. Nyhoff, Larry R. Nyhoff.
    Published May 2017, CRC Press. 544 pages. eBook, Paperback.
    » Order from CRC Press
    » Order from Amazon.com -
    +

    The publisher writes, "The book uses Processing’s capabilities for graphics and interactivity in order to create examples that are simple, illustrative, interesting, and fun. It is designed to appeal to a broad range of readers, including those who want to learn to program to create digital art, as well as those who seek to learn to program to process numerical information or data. It can be used by students and instructors in a first course on programming, as well as by anyone eager to teach them self to program."

    The publisher lists: @@ -215,7 +249,7 @@

    Books. Processing books cove
  • Covers all of the standard programming constructs
  • Presents the material in a fun, conversational, and approachable way
  • -

     

     

    Processing: Creative Coding and Computational Art (Foundation) Processing: Creative Coding and Computational Art (Foundation)
    @@ -279,11 +311,10 @@

    Books. Processing books cove
    The Friends of Ed website says, "This book is written especially for artists, designers, and other creative professionals and students exploring code art, graphics programming, and computational aesthetics. The book provides a solid and comprehensive foundation in programming, including object-oriented principles, and introduces you to the easy-to-grasp Processing language, so no previous coding experience is necessary. The book then goes through using Processing to code lines, curves, shapes, and motion, continuing to the point where you'll have mastered Processing and can really start to unleash your creativity with realistic physics, interactivity, and 3D! In the final chapter, you'll even learn how to extend your Processing skills by working directly with the powerful Java programming language, the language Processing itself is built with." (Quote from the Friends of Ed website)

    -

     

     

    + Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFrameworksProgramming Interactivity
    +
    Programming Interactivity
    Joshua Noble.
    Published January 2012, O'Reilly. 728 pages. Paperback.
    » Order from Amazon.com -
    - The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks."

     

     

     

     

    Data-driven Graphic Design: Creative Coding for Visual Communication @@ -387,20 +413,16 @@

    Books. Processing books cove Andrew Richardson.
    Published January 2016, Bloomsbury. 224 Pages. Paperback.
    » Order from Amazon.com -
    +

    The book description reads, "Data-driven Graphic Design introduces the creative potential of computational data and how it can be used to inform and create everything from typography, print and moving graphics to interactive design and physical installations. Using code as a creative environment allows designers to step outside the boundaries of commercial software tools, and create a set of unique, digitally informed pieces of work. The use of code offers a new way of thinking about and creating design for the digital environment."

     

     

     

     

     

    O Código Transcendente: Uma Introdução Prática à Programação e Arte GerativaO Código Transcendente: Uma Introdução Prática à Programação e Arte Gerativa
    + Mateus Berruezo.
    + Published December 2019. 270 pages. PDF, Web.
    + Text in Portuguese.
    + » Download
    + » Read online +
    +
    + Este livro é um guia de programação com enfoque prático considerando o contexto da arte gerativa e do pensamento computacional. Ele conta com explicações e exemplos visuais cuidadosamente projetados para serem de valor tanto para programadores quanto artistas. As aplicações e estudos de caso foram direcionados para a linguagem Processing cuja própria filosofia segue o princípio da exploração do artístico através do código. +

     

     

    Einführung ins Programmieren mit Processing Einführung ins Programmieren mit Processing
    - Matthias Wolf.
    - Published August 2013. 178 pages. PDF, Paperback.
    - Text in German.
    - » Order Print/EBook from lulu.com
    -
    -

    Die eigenständige Programmiersprache Processing basiert auf Java und ähnelt diesem sehr, verbirgt aber gleichzeitig viel von dessen Komplexität. Dadurch ist Processing für den Programmieranfänger ideal geeignet, um sich Konzepte des Programmierens zu erschließen und bewahrt gleichzeitig die Möglichkeit eines späteren Umstiegs. Dennoch ist die Sprache keineswegs nur für triviale Anfängeraufgaben geeignet: speziell im Bereich der graphischen Datenverarbeitung spielt Processing seine Stärken aus.

    -

    Dieses Buch richtet sich in erster Linie an den Einsteiger, den es an die Bewältigung auch komplexerer Aufgaben heranführt, wobei grundlegende Konzepte der imperativen und der objektorientierten Programmierung vorgestellt werden. Auch notwendige theoretische Hintergründe kommen dabei nicht zu kurz. Ausführlich kommentierter Beispielcode erschließt Konzepte und Sprache. Aber auch der routinierte Programmierer, der sich "nur" eine neue Sprache erschließen will, wird fündig!

    -

    Aus dem Inhalt: Datentypen — Variablen — Arrays (ein- und mehrdiomensional) — Flusssteuerung — Methoden — Objektorientiertes Programmieren — 2D-Graphik — 3D-Graphik — Dateizugriff — PDF — QuickTimeTM — Arduino®-Mikrocontroller — Alphabetischer Index + Matthias Wolf.
    + Published August 2013. 178 pages. PDF, Paperback.
    + Text in German.
    + » Order Print/EBook from lulu.com
    +
    +

    Die eigenständige Programmiersprache Processing basiert auf Java und ähnelt diesem sehr, verbirgt aber gleichzeitig viel von dessen Komplexität. Dadurch ist Processing für den Programmieranfänger ideal geeignet, um sich Konzepte des Programmierens zu erschließen und bewahrt gleichzeitig die Möglichkeit eines späteren Umstiegs. Dennoch ist die Sprache keineswegs nur für triviale Anfängeraufgaben geeignet: speziell im Bereich der graphischen Datenverarbeitung spielt Processing seine Stärken aus.

    +

    Dieses Buch richtet sich in erster Linie an den Einsteiger, den es an die Bewältigung auch komplexerer Aufgaben heranführt, wobei grundlegende Konzepte der imperativen und der objektorientierten Programmierung vorgestellt werden. Auch notwendige theoretische Hintergründe kommen dabei nicht zu kurz. Ausführlich kommentierter Beispielcode erschließt Konzepte und Sprache. Aber auch der routinierte Programmierer, der sich "nur" eine neue Sprache erschließen will, wird fündig!

    +

    Aus dem Inhalt: Datentypen — Variablen — Arrays (ein- und mehrdiomensional) — Flusssteuerung — Methoden — Objektorientiertes Programmieren — 2D-Graphik — 3D-Graphik — Dateizugriff — PDF — QuickTimeTM — Arduino®-Mikrocontroller — Alphabetischer Index

     

     

     

    - Processing is also discussed through examples and projects in the following books: - -
    - -
    - - 10 PRINT CHR$(205.5+RND(1)); : GOTO 10
    By Nick Montfort, Patsy Baudoin, John Bell, Ian Bogost, Jeremy Douglass, Mark C. Marino, Michael Mateas, Casey Reas, Mark Sample, Noah Vawter. Examples use Processing to explore a modern interpretation of a 1982 Commodore 64 program.
    - -
    - - Make: Getting Started with Arduino
    By Massimo Banzi. Examples use Processing to communicate with an Arduino board.
    - -
    - - Building Wireless Sensor Networks: with ZigBee, XBee, Arduino, and Processing
    By Robert Faludi. Network examples use Processing.
    - -
    - - Physical Computing: Sensing and Controlling the Physical World with Computers
    - By Dan O'Sullivan and Tom Igoe. Examples using Processing for RS-232 communication and - computer vision.
    - -
    - - Aesthetic Computing.
    - Edited by Paul Fishwick. Casey Reas and Ben Fry contributed a chapter entitled - "Processing Code: Programming within the Context of Visual Art and Design."
    - -
    - - Hacking Roomba: ExtremeTech
    By Tod E. Kurt. Processing is introduced and used to design an application to control a Roomba (a robot vacuum cleaner).
    - -
    - Analog In, Digital Out
    By Brendan Dawes. Numerous projects created with Processing are illustrated and discussed.

    From 8f7a93ebf6e0b9218b76549f74160ffbd4bdb1f8 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:53:27 -0700 Subject: [PATCH 37/86] Add images for three new books --- img/learning/books/o-codigo.jpg | Bin 0 -> 35213 bytes img/learning/books/pro-processing.jpg | Bin 0 -> 50551 bytes img/learning/books/programming-101.jpg | Bin 0 -> 40748 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/learning/books/o-codigo.jpg create mode 100644 img/learning/books/pro-processing.jpg create mode 100644 img/learning/books/programming-101.jpg diff --git a/img/learning/books/o-codigo.jpg b/img/learning/books/o-codigo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e70fad0e9313e36541d9489dec2d02a59dd63d60 GIT binary patch literal 35213 zcmeEvc|6qJ_xO9P*^4Cm63M>rA<3R(4_U`xEHh#T5h^WD8)aWYkv++t5h`nl>|2&X zcCs^=`Mrl!&+~bn&*$^{eqX=8zP)>Szt27Q+FiE0swt| zKo9_c0{}UM9v}uG2>1_xumGgHFaS6}SbxB-kQ3i&h(H<%0DJ@7;GY*nau+@f!V$OO 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 ws&O975(a27Buf%;;)4N0YtT?Q2+n{ literal 0 HcmV?d00001 diff --git a/img/learning/books/pro-processing.jpg b/img/learning/books/pro-processing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25e7f6863d1b823ef02489bc88ece2329367922f GIT binary patch literal 50551 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
    )ftm>>@MSdAzKRK{j6`n!v1AO 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 literal 0 HcmV?d00001 diff --git a/img/learning/books/programming-101.jpg b/img/learning/books/programming-101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3749c36a21a91c28425d10f5bdb38b9a1edf679d GIT binary patch literal 40748 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 AK>z>% literal 0 HcmV?d00001 From 2befa5461fef193cf52d53899d6d4e742a15b9ce Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:59:19 -0700 Subject: [PATCH 38/86] Small adjustments to Books page typesetting --- content/static/books.html | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/content/static/books.html b/content/static/books.html index 80b69c929..0092977ae 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -37,7 +37,6 @@

    Books. Processing books cove » Order Print/EBook from O'Reilly
    » Order from Amazon.com
    -
    This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help readers:
    • Quickly learn programming basics, from variables to objects
    • @@ -88,7 +87,6 @@

      Books. Processing books cove Published August 2015, Morgan Kaufmann. 564 pages. Paperback.
      » Order from Amazon.com
      -
      The second edition of Learning Processing has been updated for compatibility with Processing 3 and includes several new chapters of content including video, sound, data visualization, and networking. For more, visit the Learning Processing website.

      Dan Shiffman says, "This book tells a story. It's a story of liberation, of taking the first steps towards understanding the foundations of computing, writing your own code, and creating your own media without the bonds of existing software tools. This story is not reserved for computer scientists and engineers. This story is for you." @@ -170,7 +168,7 @@

      Books. Processing books cove Ben Fry.
      Published December 2007, O'Reilly. 384 pages. Paperback.
      » Order from Amazon.com -

      +
      The O'Reilly website says, "How you can take advantage of data that you might otherwise never use? With the help of a powerful new programming environment [Processing], this book helps you represent data accurately on the Web and elsewhere, complete with user interaction, animation, and more. You'll learn basic visualization principles, how to choose the right kind of display for your purposes, and how to provide interactive features to design entire interfaces around large, complex data sets."

      Martin Wattenberg from the IBM Watson Research Center says, "This wonderfully detailed guide, by one of the masters of modern data graphics, tells you everything you need to know to code your own visualizations from scratch. Perhaps most valuable are the many examples where Fry demonstrates how to refine a bare-bones concept into a beautiful, effective finished piece. Read this book, and you'll never again be dependent on someone else's view of your data."
      @@ -190,7 +188,7 @@

      Books. Processing books cove August 2012, Princeton Architectural Press. 472 pages.
      Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
      » Order from Amazon.com -

      +
      This book is extraordinary; the design is clear and the production quality is fantastic. This is the design book about Processing that we've hoped for. Unlike most other Processing books, it doesn't discuss programming basics so it's free to start with exciting examples. The publisher promotes, "Generative design is a revolutionary new method of creating artwork, models, and animations from sets of rules, or algorithms. By using accessible programming languages such as Processing, artists and designers are producing extravagant, crystalline structures that can form the basis of anything from patterned textiles and typography to lighting, scientific diagrams, sculptures, films, and even fantastical buildings. Opening with a gallery of thirty-five illustrated case studies, Generative Design takes users through specific, practical instructions on how to create their own visual experiments by combining simple-to-use programming codes with basic design principles. A detailed handbook of advanced strategies provides visual artists with all the tools to achieve proficiency. Both a how-to manual and a showcase for recent work in this exciting new field, Generative Design is the definitive study and reference book that designers have been waiting for."

      More information about buying this book in German, as well as the complete source code for the examples, are at the book's website.
      @@ -210,7 +208,7 @@

      Books. Processing books cove Derek Runberg.
      2015, No Starch Press. 232 pages. Paperback.
      » Order from Amazon.com -

      +
      The publisher writes, "The SparkFun Guide to Processing teaches you to craft your own digital artwork and even combine it with hardware—no prior programming experience required. Over the course of the book, you’ll learn the basics by drawing simple shapes, move on to photo editing and video manipulation, and ultimately affect the physical world by using Processing with an Arduino."

      The publisher lists: @@ -266,7 +264,7 @@

      Books. Processing books cove Published April 2013, friends of ED. 472 pages. Paperback.
      » Order Print from Apress
      » Order from Amazon.com -

      +
      The authors write, "If you’ve been curious about coding, but the thought of it also makes you nervous, this book is for you; if you consider yourself a creative person, maybe worried programming is too non-creative, this book is also for you; if you want to learn about the latest Processing 2.0 language release and also start making beautiful code art, this book is also definitely for you. Based on research funded by the National Science Foundation, this book brings together some of the most engaging and successful approaches from the digital arts and computer science classrooms:
      • Learn the latest features of Processing 2.0
      • Gain a solid understanding of coding concepts, such as design, analysis, and object-oriented programming
      • @@ -289,7 +287,7 @@

        Books. Processing books cove Andrew S. Glassner.
        Published August 2010, A K Peters. Paperback.
        » Order from Amazon.com -

        +
        The book description reads, "Learn how to create gorgeous and expressive imagery with the Processing programming language and environment... Walk with veteran author Andrew Glassner on a journey of shared discovery as he takes actual Processing projects from inspiration to reality. You'll closely follow every step he takes and see exactly how each project evolves, including big and small mistakes he's made along the way (and how to fix them!), and the times when he changed direction. Once you see the results, you'll understand why programming is such a powerful skill for self-expression."

        This book has a different perspective from the others because of Glassner's deep experience in computer graphics. His bio reads, "Dr. Andrew Glassner is a writer-director, and a consultant in story structure, interactive fiction, and computer graphics. He started working in 3D computer graphics in 1978, and has carried out research at the NYIT Computer Graphics Lab, Case Western Reserve University, the IBM TJ Watson Research Lab, the Delft University of Technology, Bell Communications Research, Xerox PARC, and Microsoft Research... He is also a well-known writer, and has published numerous technical papers and books on topics ranging from 3D modeling, rendering, and animation to digital sound synthesis. His book '3D Computer Graphics: A Handbook for Artists and Designers' has taught a generation of artists through two editions and three languages. Glassner created and edited the 'Graphics Gems' series and created and wrote several chapters in the book 'An Introduction to Ray Tracing'. He wrote the two-volume text 'Principles of Digital Image Synthesis'." @@ -344,7 +342,7 @@

        Books. Processing books cove Joshua Noble.
        Published January 2012, O'Reilly. 728 pages. Paperback.
        » Order from Amazon.com -

        +
        The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks." @@ -365,7 +363,7 @@

        Books. Processing books cove Matt Pearson.
        Published March 2011, Manning Publications. 300 pages. Paperback.
        » Order from Amazon.com -

        +
        Matt provides a list of bullet points:
        • The complete guide to creating generative graphics for print, video and the web.
        • @@ -394,7 +392,7 @@

          Books. Processing books cove Kostas Terzidis.
          Published May 2009, Wiley. 384 Pages. Hardcover.
          » Order from Amazon.com -

          +
          The Wiley website says, "this book offers a series of generic procedures that can function as building blocks and encourages you to then use those building blocks to experiment, explore, and channel your thoughts, ideas, and principles into potential solutions. The book covers such topics as structured shapes, solid geometry, networking and databases, physical computing, image processing, graphic user interfaces, and more." @@ -463,7 +461,7 @@

          Books. Processing books cove Daniel Sauter.
          Published February 2013, The Pragmatic Programmers. ~300 pages. Paper and eBook.
          » Order from The Pragmatic Bookshelf
          -

          +
          The publisher writes, "Create mobile apps for Android phones and tablets faster and more easily than you ever imagined. Whether you’re a student, teacher, hobbyist, or experienced developer, Rapid Android Development puts the fast-growing market for Android phone and tablet applications within your reach. Without needing to master the complexities of Java, Eclipse, or the Android SDK, you’ll find yourself writing dazzling graphics displays and location-aware programs in no time. With more than 30 ready-to-run demos, applications, and games, you’ll find yourself diving deeper than you thought possible into the treasure trove of software and hardware packed into today’s Android devices." @@ -480,7 +478,7 @@

          Books. Processing books cove Jan Vantomme.
          Published September 2012, PACKT. 350 pages. Paperback and eBook.
          » Order from PACKT
          -

          +
          The publisher lists:
          • Explore the Processing language with a broad range of practical recipes for computational art and graphics
          • From de63238262575e926e9d09fb563681753a531be8 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 7 Jul 2020 12:50:20 -0700 Subject: [PATCH 39/86] Minor HTML corrections --- content/static/overview.html | 6 +----- content/static/support.html | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/content/static/overview.html b/content/static/overview.html index aa6831a91..d5d3d30ff 100644 --- a/content/static/overview.html +++ b/content/static/overview.html @@ -7,16 +7,12 @@

            Overview. A short introducti

            For the past sixteen years, Processing has promoted software literacy, particularly within the visual arts, and visual literacy within technology. Initially created to serve as a software sketchbook and to teach programming fundamentals within a visual context, Processing has also evolved into a development tool for professionals. The Processing software is free and open source, and runs on the Mac, Windows, and GNU/Linux platforms. +

            Processing continues to be an alternative to proprietary software tools with restrictive and expensive licenses, making it accessible to schools and individual students. Its open source status encourages the community participation and collaboration that is vital to Processing’s growth. Contributors share programs, contribute code, and build libraries, tools, and modes to extend the possibilities of the software. The Processing community has written more than a hundred libraries to facilitate computer vision, data visualization, music composition, networking, 3D file exporting, and programming electronics.

            - -

            Education

            diff --git a/content/static/support.html b/content/static/support.html index 91cb0754f..7de71d1d5 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -26,7 +26,7 @@

            Education Institution

          • Fellowships
          • Community Advocacy and Events
          -

          +

          If membership isn't your thing, but you want to help, we love donations! From 7c27e106cfc52b1dc63d6b2e44c6d0c48c2e8b7a Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 7 Jul 2020 12:52:18 -0700 Subject: [PATCH 40/86] Update books.html --- content/static/books.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/books.html b/content/static/books.html index 0092977ae..3b4a22d0e 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -563,7 +563,7 @@

          Books. Processing books cove Published December 2019. 270 pages. PDF, Web.
          Text in Portuguese.
          » Download
          - » Read online + » Read online

          Este livro é um guia de programação com enfoque prático considerando o contexto da arte gerativa e do pensamento computacional. Ele conta com explicações e exemplos visuais cuidadosamente projetados para serem de valor tanto para programadores quanto artistas. As aplicações e estudos de caso foram direcionados para a linguagem Processing cuja própria filosofia segue o princípio da exploração do artístico através do código. From 9dd9f6193039a5a4bc04edb26b402c70992e7d41 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 1 Sep 2020 19:03:27 -0400 Subject: [PATCH 41/86] Add Squelized library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index c2426e881..50c300eab 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 262 +# Next ID: 263 # Increment after assigning ID to new contribution [Library : 3D] @@ -79,6 +79,7 @@ 230 \ https://github.com/cansik/artnet4j/releases/download/latest/artnet4j.txt 241 \ http://agathelenclen.fr/downloads/Squarify.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt +262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.zip [Library : Fabrication] # 078 \ http://s373.net/code/marchingcubes/download/marchingcubes.txt From 3a62e8484c813c209eb28c5782fa3d1398b0d24f Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 8 Sep 2020 09:02:25 -0400 Subject: [PATCH 42/86] Change extension for SQuelized contribution to TXT! Oops --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 50c300eab..193b96c88 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -79,7 +79,7 @@ 230 \ https://github.com/cansik/artnet4j/releases/download/latest/artnet4j.txt 241 \ http://agathelenclen.fr/downloads/Squarify.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt -262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.zip +262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.txt [Library : Fabrication] # 078 \ http://s373.net/code/marchingcubes/download/marchingcubes.txt From 5fb39318d2e57ad868a8faaf0c97bca42c10967f Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 24 Sep 2020 19:09:18 -0400 Subject: [PATCH 43/86] remove Thumbs.db files (Windows caches) --- exhibition/works/discom/Thumbs.db | Bin 17408 -> 0 bytes exhibition/works/superhero/img/Thumbs.db | Bin 42496 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 exhibition/works/discom/Thumbs.db delete mode 100755 exhibition/works/superhero/img/Thumbs.db diff --git a/exhibition/works/discom/Thumbs.db b/exhibition/works/discom/Thumbs.db deleted file mode 100644 index 93ae137dfc1f9bf4dad8a8bfd51ce394cf8ab32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 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 Vf868$)cfD%eXIW8^#8sZ_#eETcWD3s diff --git a/exhibition/works/superhero/img/Thumbs.db b/exhibition/works/superhero/img/Thumbs.db deleted file mode 100755 index 9f2257887f6e0ad56dc7c12e00761f43fa0c79b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42496 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 Date: Thu, 24 Sep 2020 19:09:36 -0400 Subject: [PATCH 44/86] add "var" for Java 11 (https://github.com/processing/processing4/issues/114) --- generate/keywords_base.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/generate/keywords_base.txt b/generate/keywords_base.txt index a88aa2737..7757bb46f 100755 --- a/generate/keywords_base.txt +++ b/generate/keywords_base.txt @@ -252,6 +252,7 @@ double KEYWORD5 double float KEYWORD5 float int KEYWORD5 int long KEYWORD5 long +var KEYWORD5 # Flow structures From 447ab9cb4140bace81748357a453d0456e6f798c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 9 Oct 2020 10:19:03 -0700 Subject: [PATCH 45/86] Update download.html Download for P4a2 --- content/static/download.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/content/static/download.html b/content/static/download.html index a684aaf5b..03f73d291 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -264,6 +264,16 @@

          Stable Releases

          Pre-Releases

            + +
          • + 4.0 alpha 2 + (15 September 2020) + Win 64 + Linux 64 + Mac OS X +
          • + + Please become a member today to help us continue to provide access to quality, free, open-source software. + ...

            -

            - If membership isn't your thing, but you want to help, we love donations! -

            - -

            - -

            -

            - -

            - -

            -

            - -

            - -

            -

            - -

            - -

            -

            -

            From 9e9777957ae5c5ef78468942b064f354582f1fa6 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 9 Oct 2020 11:01:15 -0700 Subject: [PATCH 49/86] Update support.html Improvements to the new Support page text --- content/static/support.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index b1ace80b0..670034980 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,12 +1,12 @@ -

            Processing is free, open-source software created by volunteers and through the support of the Processing Foundation. Your donation supports our worldwide community. We need your help!

            +

            Processing is free, open-source software created by volunteers and through the support of the non-profit Processing Foundation. Your donation supports our worldwide community.

            - ... + We believe software and the tools to create software should be accessible to everyone. The Processing Software has always been free and open-source and supported by its community. We're currently working on Processing 4 and we need your help! Donations of any amount help us to reach our goal of sharing and creating excellent software. We can't do this without your support.

            Your donation supports: @@ -27,8 +19,6 @@

            Education Institution

          -
          -

          The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus".

          diff --git a/css/style.css b/css/style.css index c392ef25a..65fd77ba4 100755 --- a/css/style.css +++ b/css/style.css @@ -1321,7 +1321,7 @@ div.examples-nav img { position: relative; top: 11px; } .donate-card h4 { line-height: 1.3; - margin: 0 0 0.5em 0; + margin: 0 0 0 0; color: #2c7bb5; } From 26d78a65ba3401bc138131efe399c064d60e928b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:39:26 -0700 Subject: [PATCH 51/86] Update support.html Embed the Donorbox on the page --- content/static/support.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index 9e2ef35e3..14b44d9be 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,6 +1,12 @@ -

          Processing is free, open-source software created by volunteers and through the support of the non-profit Processing Foundation. Your donation supports our worldwide community.

          + -

          +

          + We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. +

          + + + + -

          +

          The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". -

          +

          From a34aaa238bf21ee17a7d95c279039f69c4b4bff6 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:44:05 -0700 Subject: [PATCH 52/86] Update support.html --- content/static/support.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index 14b44d9be..b41d23d11 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,8 +1,8 @@ -

          +

          We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. -

          +

          @@ -24,7 +24,8 @@

          Donate

        • Community Advocacy and Events

        --> +

        -

        +

        The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". -

        +

        From ffb9f4f2cc9129333f9927e9815e3fcd3e272054 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:51:09 -0700 Subject: [PATCH 53/86] Update support.html --- content/static/support.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index b41d23d11..f54c48531 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -4,7 +4,9 @@

        We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        - +
        + +
        -

        - The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". + The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus."

        From 1bc42a220dffeb14b029b992e0d684c579159868 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 14 Oct 2020 11:08:51 -0700 Subject: [PATCH 54/86] Update support.html --- content/static/support.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index f54c48531..57fbbf8c3 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,7 +1,7 @@

        - We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. + We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        @@ -28,5 +28,5 @@

        Donate

        -->

        - The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus." + The Processing Foundation was established in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus."

        From 22b02c6eaad232274de7a0fdd7b1a2dc4c6254f1 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Nov 2020 09:18:09 -0500 Subject: [PATCH 55/86] Add Processing2JS tool to contributions. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 193b96c88..dcab8fff5 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 263 +# Next ID: 264 # Increment after assigning ID to new contribution [Library : 3D] @@ -332,6 +332,7 @@ 233 \ https://github.com/jaewhyun/GettingStarted/releases/download/latest/GettingStarted.txt 234 \ https://github.com/jaewhyun/ReferenceTool/releases/download/latest/ReferenceTool.txt 242 \ https://jwilder4690.github.io/tools/ArtStation/ArtStation.txt +263 \ http://jonathan.dahlberg.media/processing2js/Processing2JSTool.txt [Mode : ] 070 \ http://bezier.de/processing/modes/CoffeeScriptMode.txt From 4dfdd3543f123c18464f8b9128e47f6f547172c9 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 11:38:13 -0800 Subject: [PATCH 56/86] Update support.html Changes for 2020 fundraiser --- content/static/support.html | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/content/static/support.html b/content/static/support.html index 57fbbf8c3..bddd83072 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,12 +1,30 @@ -

        + + +

        + SupportP5 is a month-long online fundraising campaign to support and help sustain our software projects, our Fellowship program, Processing Community Day, and our other education initiatives. This campaign ends at midnight on December 31st Pacific Standard Time. +

        + +

        + Visit our SupportP5 page to learn more about the donation rewards.

        +

        + If you would like to give without receiving a reward, please use the Custom Amount form field. These donations are 100% tax-deductible in the US to the extent provided by law. +

        + +
        + +
        + + +
        diff --git a/templates/template.html b/templates/template.html index 334c27412..f97acc24c 100755 --- a/templates/template.html +++ b/templates/template.html @@ -44,13 +44,12 @@ - + From 392ccc4e8b5ca1085db2a7e39fb7474f8b4522a5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 13:21:19 -0800 Subject: [PATCH 58/86] Update style.css --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 65fd77ba4..a36d9542d 100755 --- a/css/style.css +++ b/css/style.css @@ -249,7 +249,7 @@ a.large-link:before { #header { width: 900px; height: 106px; - margin-bottom: 30px; /* was 30px, but changed to 0 when ribbon placed below header */ + margin-bottom: 0px; /* was 30px, but changed to 0 when ribbon placed below header */ overflow: hidden; background: #0c2033 url(../img/processing-web.png) center center no-repeat; background-position: bottom; From 797aee844714ff3ad894065916ff2f2ce5901e03 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 13:25:18 -0800 Subject: [PATCH 59/86] More fundraiser 2020 updates/corrections --- java_generate/templates/generic.template.html | 6 +++--- java_generate/templates/index.template.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index be8235926..77ee55efe 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -44,12 +44,12 @@

        - + From da459f462e5b20ae7030fa4ec861f2130952db1c Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 16 Dec 2020 10:49:19 -0500 Subject: [PATCH 60/86] Add wellen Library to sources. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index dcab8fff5..1fd6d3a20 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 264 +# Next ID: 265 # Increment after assigning ID to new contribution [Library : 3D] @@ -225,6 +225,7 @@ 219 \ https://teddavis.org/xyscope/download/XYscope.txt 254 \ http://www.kramann.info/ComposingForEveryone.txt 260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt +264 \ https://github.com/dennisppaul/wellen/releases/latest/download/wellen.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From ac7f2a500433402540d53ec3f3d45e1304f1e71e Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 28 Dec 2020 13:08:19 -0500 Subject: [PATCH 61/86] Add Coding Art book examples. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 1fd6d3a20..28887005e 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 265 +# Next ID: 266 # Increment after assigning ID to new contribution [Library : 3D] @@ -305,6 +305,7 @@ 165 \ https://processing.org/handbook/handbook_2e.txt 166 \ https://processing.org/books/gswp_2e.txt 205 \ http://mad4j.github.io/book-mdpc/book-mdpc.txt +265 \ https://codingart-book.github.io/examples/CodingArtBookExamples.txt [Examples : ] 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt From b997006733b64104938b918bce04ea12e3a999fc Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:26:30 -0800 Subject: [PATCH 62/86] Update support for end of 2020 fundraiser --- content/static/support.html | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index bddd83072..2a8f77f05 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,30 +1,28 @@ - -

        - SupportP5 is a month-long online fundraising campaign to support and help sustain our software projects, our Fellowship program, Processing Community Day, and our other education initiatives. This campaign ends at midnight on December 31st Pacific Standard Time. + We need your help! Please support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        -

        + + + -

        + -
        + - -
        + From be144f54b8b12d36dd1b8e4950d61cad2e5a547e Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:32:06 -0800 Subject: [PATCH 64/86] CSS adjust for ribbon removal --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index a36d9542d..65fd77ba4 100755 --- a/css/style.css +++ b/css/style.css @@ -249,7 +249,7 @@ a.large-link:before { #header { width: 900px; height: 106px; - margin-bottom: 0px; /* was 30px, but changed to 0 when ribbon placed below header */ + margin-bottom: 30px; /* was 30px, but changed to 0 when ribbon placed below header */ overflow: hidden; background: #0c2033 url(../img/processing-web.png) center center no-repeat; background-position: bottom; From 2ee5001399bb9674d2bd38e6db553b8d32d2ec02 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:35:03 -0800 Subject: [PATCH 65/86] Reference donate ribbon remove --- java_generate/templates/generic.template.html | 4 ++-- java_generate/templates/index.template.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 77ee55efe..d8858a537 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -44,12 +44,12 @@

        -
        + -
        + From b8f6f412087f288549f9264214c9d59fb4382f8b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:37:33 -0800 Subject: [PATCH 66/86] Update nav.web.template.html --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index 3a6d60507..43f41939c 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -13,7 +13,7 @@ Tutorials
        Examples
        - Books
        + Books

        Overview
        From b7c4a5a5723b6a5e99b9255fbc1a8e00c5cb9b82 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sun, 17 Jan 2021 22:05:21 -0500 Subject: [PATCH 67/86] add 4.0a3 to the download page --- content/static/download.html | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index ceaeea186..7b62c601e 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -263,14 +263,22 @@

        Stable Releases

        Pre-Releases

        The changes document covers incremental updates between 4.x releases, and is especially important to read for pre-releases.

        From 95deef51a6a12a9c1e928c2b608a84cac85e0fc9 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 21 Jun 2021 17:04:40 -0400 Subject: [PATCH 79/86] Add Pd4P3 contribution. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index aa5dd33b0..24dc54600 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 271 +# Next ID: 272 # Increment after assigning ID to new contribution [Library : 3D] @@ -231,6 +231,7 @@ 254 \ http://www.kramann.info/ComposingForEveryone.txt 260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt 264 \ https://github.com/dennisppaul/wellen/releases/latest/download/wellen.txt +271 \ https://www.robertesler.com/software/Pd4P3.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From f454a245eb0a3f59eae519257eb6ff7caaf0b30f Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 24 Jun 2021 17:52:32 -0400 Subject: [PATCH 80/86] updating the download page for 4.0a5 --- content/static/download.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/static/download.html b/content/static/download.html index d9b76b6ba..bd6d04d31 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -265,6 +265,14 @@

        Pre-Releases

        @@ -42,6 +42,13 @@

        Download Processing. Process

        Stable Releases

        +
      • + 4.0b1 + (9 August 2021) + Windows 64 + Linux 64 + macOS +
      • 3.5.4 (17 January 2020) @@ -273,6 +280,7 @@

        Pre-Releases

        Mac OS X
      • + + Processing Documentation ========== From 76be09a0f538ddad43cf758ba987b47a75d03ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20de=20Courville?= Date: Mon, 9 Jan 2023 14:12:50 +0100 Subject: [PATCH 86/86] Update README.md strikethrough readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b0e0bb8da..60a674da3 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ Processing Documentation ========== -This is the official source code for the Processing reference, examples, tutorials, and [processing.org](http://processing.org) web site. +~~This is the official source code for the Processing reference, examples, tutorials, and [processing.org](http://processing.org) web site.~~ -If you have found an error in the Processing reference, examples, tutorials, or website you can file it here under the ["issues" tab](https://github.com/processing/processing-docs/issues). +~~If you have found an error in the Processing reference, examples, tutorials, or website you can file it here under the ["issues" tab](https://github.com/processing/processing-docs/issues).~~ -The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.) +~~The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.)~~