Commit ffb433a5 authored by Albert Gräf's avatar Albert Gräf

Minor text changes.

parent 5405f95a
......@@ -18,13 +18,13 @@ February 2017</p>
Permanent link: <a href="https://agraef.github.io/purr-data-intro/" class="uri">https://agraef.github.io/purr-data-intro/</a></p>
<p><strong>Purr Data</strong> a.k.a. <strong>Pd-l2ork</strong> 2.0 is an improved version of Miller Puckette’s interactive computer music and multimedia software <strong>Pd</strong>. This document provides new or prospective Purr Data users with a gentle introduction to the program and some helpful information to get started.</p>
<h2 id="what-is-purr-data">What is Purr Data?</h2>
<p><strong><a href="https://git.purrdata.net/jwilkes/purr-data">Purr Data</a></strong> is the latest (2.x) branch of Ivica Ico Bukvic’s Pd-l2ork. <strong><a href="http://l2ork.music.vt.edu/main/make-your-own-l2ork/software/">Pd-l2ork</a></strong> in turn is a fork of Hans-Christoph Steiner’s <strong><a href="http://puredata.info/downloads/pd-extended">Pd-extended</a></strong>, which has been the longest-running (and arguably the most popular) variant of Miller Puckette’s Pd. <strong><a href="http://puredata.info/">Pd</a></strong> a.k.a. <strong>Pure Data</strong>, the common basis of all these variants, is Miller Puckette’s interactive and graphical computer music and multimedia environment. Pd is also the premier open-source alternative to Cycling74’s well-known commercial <strong><a href="https://cycling74.com/">Max</a></strong> program (whose original version was also developed by Miller Puckette when he was at IRCAM in the 1980s). There are a few other popular applications in the realm of computer music and media art, most notably <a href="http://csound.github.io/">Csound</a> and <a href="http://supercollider.github.io/">SuperCollider</a>. Max and Pd’s special appeal is that you work in an intuitive graphical “patching” environment which allows you to put together advanced real-time signal processing applications without having to learn a “real” programming language.</p>
<p><strong><a href="https://git.purrdata.net/jwilkes/purr-data">Purr Data</a></strong> is the latest (2.x) branch of Ivica Ico Bukvic’s Pd-l2ork. <strong><a href="http://l2ork.music.vt.edu/main/make-your-own-l2ork/software/">Pd-l2ork</a></strong> in turn is a fork of Hans-Christoph Steiner’s <strong><a href="http://puredata.info/downloads/pd-extended">Pd-extended</a></strong>, which has been the longest-running (and arguably the most popular) variant of Miller Puckette’s Pd. <strong><a href="http://puredata.info/">Pd</a></strong> a.k.a. <strong>Pure Data</strong>, the common basis of all these variants, is Miller Puckette’s interactive and graphical computer music and multimedia environment. Pd is also the premier open-source alternative to Cycling74’s well-known commercial <strong><a href="https://cycling74.com/">Max</a></strong> program (whose original version was also developed by Miller Puckette when he was at IRCAM in the 1980s). There are a few other popular and very capable applications in the realm of computer music and media art, most notably <strong><a href="http://csound.github.io/">Csound</a></strong> and <strong><a href="http://supercollider.github.io/">SuperCollider</a></strong>. But Max and Pd’s special appeal is that you work in an intuitive graphical “patching” environment which allows you to put together advanced real-time signal processing applications without having to learn a “real” programming language.</p>
<p>Puckette’s version of the program is sometimes jokingly referred to as <strong>“vanilla”</strong> Pd, because it comes without any extras and thus provides the purest taste of Pd, you might say. In keeping with this metaphor, the other Pd variants are often called <strong>flavors</strong>.</p>
<p>While vanilla Pd, being the reference implementation, remains critically important for the development of Pd’s real-time engine, its Tcl/Tk-based graphical user interface has never been very pretty or convenient. Consequently there have been several attempts by the community to improve Pd’s user interface in various ways. Pd-extended is the earliest and the longest-running of these, which also includes a fairly complete selection of 3rd party add-ons. However, its development has stopped in 2013 due to lack of contributions, and thus it receives no more bugfixes and updates of the real-time engine.</p>
<p>Ico Bukvic introduced <strong>Pd-l2ork</strong> in 2010 as a fork of Pd-extended to be used by the “Linux Laptop Orchestra” (L2Ork) he founded at the School of Performing Arts at Virginia Tech. Although the original motivation was to create an improved version of Pd-extended to be used by the L2Ork (hence the name) as well as in education, on Linux it quickly became a more up-to-date alternative to Pd-extended offering a fair number of additional bug fixes and GUI improvements. This is mainly due to its more nimble development model which allows bugfixes and improvements to be deployed quickly even if this may have an impact on backwards compatibility. Vanilla Pd, on the other hand, necessarily has a much firmer outlook on backwards compatibility, so that it is still able to run <em>very</em> old patches created with ancient Pd versions.</p>
<p>Despite the many and substantial improvements it offers, Pd-l2ork’s GUI is still based on Tcl/Tk. This is both good and bad. The major advantage is compatibility with vanilla Pd. On the other hand, Tcl/Tk looks and feels outdated in this day and age, even when going to some lengths with theming, as Pd-l2ork does. Tcl is a rather basic programming language, and its libraries have been falling behind, making it hard to integrate the latest advancements in GUI, multimedia and web technologies. Also, Pd-l2ork’s adoption was hampered by the fact that it was essentially tied to Linux, and thus a cross-platform solution was needed.</p>
<p>In 2015 Jonathan Wilkes stepped in and started creating <strong>Purr Data</strong> to address these problems. In a nutshell, Purr Data is Pd-l2ork with the Tcl/Tk GUI part ripped out and replaced with modern web technology. To these ends, it uses an open-source framework called <a href="https://nwjs.io/">nw.js</a> a.k.a. “node-webkit”, which is essentially a stand-alone web browser engine (<a href="http://www.chromium.org/">Chromium</a>) combined with a JavaScript runtime (<a href="http://nodejs.org/">Node.js</a>). While the latter was originally invented for developing server-side web applications, frameworks like nw.js allow the two to be used in concert to create fully-fledged and portable desktop applications. Using nw.js ensures that Purr Data runs on Linux, Mac and Windows, looking the same on all supported platforms, and it paves the way to leverage standard web technologies such as <a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, <a href="https://www.w3.org/TR/html5/">HTML5</a>, <a href="https://www.w3.org/Style/CSS/">CSS3</a> and <a href="https://www.w3.org/TR/SVG/">SVG</a>.</p>
<p>Purr Data’s GUI is written entirely in JavaScript, which is much more advanced than Tcl, offering an abundance of libraries and support materials. This makes the further development of Purr Data’s graphical user interface a lot easier now that the initial GUI port is done. Patches are implemented as HTML5 SVG documents which offer better responsiveness and graphical capabilities than Tk windows. They can also be themed using CSS and zoomed like any browser window, improving usability. Purr Data also looks better and is easier on the eyes than Pd-l2ork, let alone vanilla Pd, especially on high-dpi displays (cf. fig. 1).</p>
<p>Purr Data’s GUI is written entirely in JavaScript, which is a much more advanced programming language than Tcl with an abundance of libraries and support materials. This makes the further development of Purr Data’s graphical user interface a lot easier now that the initial GUI port is done. Patches are implemented as HTML5 SVG documents which offer better responsiveness and graphical capabilities than Tk windows. They can also be themed using CSS and zoomed like any browser window, improving usability. Purr Data also looks better and is easier on the eyes than Pd-l2ork, let alone vanilla Pd, especially on high-dpi displays (cf. fig. 1).</p>
<div class="figure">
<img src="purr-data.png" alt="Figure 1: Purr Data running on macOS." id="fig:fig1" style="width:100.0%" />
<p class="caption">Figure 1: Purr Data running on macOS.</p>
......@@ -94,11 +94,12 @@ Permanent link: <a href="https://agraef.github.io/purr-data-intro/" class="uri">
<h2 id="pd-l2ork-and-purr-data-goodies">Pd-l2ork and Purr Data Goodies</h2>
<p>Compared to vanilla Pd, Pd-l2ork and Purr Data provide a comprehensive set of new and improved features, way too many to even just mention them all, so we refer the interested reader to the <a href="http://ico.bukvic.net/PDF/PdCon16_paper_84.pdf">PdCon 2016 paper</a> for details. The paper also covers the history and motivation of the Pd-l2ork project.</p>
<p>One of Pd-l2ork’s major advancements over vanilla Pd is its <em>infinite undo</em> capability, which makes it easy to revert accidental changes without having to worry about taking snapshots of patches while they’re under development. Many of the other new features are simply GUI and usability improvements which, if done right, quickly become second nature to the user, so that they aren’t even consciously noticed any more, such as the graphical improvements and the ability to resize the IEM GUI elements and “graph on parent” areas using the mouse. A helpful change also worth mentioning here is the improved <em>tidy up</em> option in the Edit menu, which first aligns objects and then spaces them equidistantly.</p>
<p>Another big time-saver is Pd-l2ork’s <em>intelligent patching</em> facility, which lets you select two or more objects in order to connect multiple outlets and inlets in one go. Intelligent patching offers a number of different modes, the most useful (or at least the easiest) of these are:</p>
<p>Another big time-saver is Pd-l2ork’s <em>intelligent patching</em> facility, which lets you select two or more objects in order to connect multiple outlets and inlets in one go. Intelligent patching offers a number of different modes:</p>
<ul>
<li><p>If you select <em>exactly</em> two objects A and B, say, and then connect one of the outlets from A to one of the inlets of B, then starting from the initial outlet-inlet pair the remaining outlets of A will be connected to the corresponding inlets of B.</p></li>
<li><p>If you select two (or more) objects B and C, say, and then connect an outlet of a third, unselected object A to an inlet of B, then the corresponding connection from A to C will be done automatically. Conversely, you can also connect an outlet of B to an inlet of A to have the corresponding C-A connection completed for you.</p></li>
<li><p>Also, pressing the shift key while doing connections will let you do multiple connections from the same outlet in one go.</p></li>
<li><p>If you select two (or more) objects B and C, say, and then connect an outlet of a third, <em>unselected</em> object A to an inlet of B, then the corresponding connection from A to C will be done automatically. Conversely, you can also connect an outlet of B to an inlet of A to have the corresponding C-A connection completed for you.</p></li>
<li><p>If you select two (or more) objects B and C, say, and then connect an outlet of a third, <em>selected</em> object A with multiple outlets to an inlet of B, then the <em>next</em> outlet of A will be connected to the corresponding inlet of C. Conversely, you can also connect an outlet of B to an inlet of A and have C connected to the next inlet of A. In principle, this works for an arbitrary number of source or target objects (considering the “other” objects in left-to-right, top-to-bottom order), provided that object A has enough inlets or outlets to connect to them all.<a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a></p></li>
<li><p>Finally, pressing the shift key while doing connections will let you do multiple connections from the same outlet in one go.</p></li>
</ul>
<p>It is worth practicing these so that you can amaze your vanilla-running friends with the speed at which you can construct rather complicated patches using these shortcuts. Unfortunately, neither Pd-l2ork nor Purr Data has a help patch for this incredibly useful facility, so I have provided a little <a href="intelligent-patching.pd" class="uri">intelligent-patching.pd</a> patch with this document for your amusement. In the comments, the patch also includes detailed explanations of all the different intelligent patching modes for your perusal.</p>
<p>Other features will be more useful for advanced users, like the reflection capabilities (see the <code>pdinfo</code>, <code>canvasinfo</code>, <code>classinfo</code> and <code>objectinfo</code> help patches) and the new SVG elements for data structure visualizations. The latter have been considerably enhanced in Purr Data, see the “Pd-L2Ork Data Structures” section in the help browser. They also make it possible to create your own custom GUI elements in plain Pd, without having to learn a “real” programming language.</p>
......@@ -137,5 +138,11 @@ Permanent link: <a href="https://agraef.github.io/purr-data-intro/" class="uri">
<p>Every so often you may run into warnings about “legacy Tcl commands” in Purr Data’s console window which typically look like this:</p>
<pre><code>legacy tcl command at 201 of ../shared/hammer/file.c: hammereditor_close .86439b0 0</code></pre>
<p>In most cases these should be harmless, but they may indicate a missing piece of GUI functionality due to Tcl code which has not been ported to Purr Data’s new nw.js GUI yet. In any case, feel free to report such messages at Purr Data’s <a href="https://git.purrdata.net/jwilkes/purr-data/issues">issue tracker</a>, so that hopefully someone from the development team can look into them. A proper bug report should at least include the message itself and the Pd object it relates to. If some special steps are needed to reproduce the message, you should report these as well. Also, please do make sure <em>first</em> that the specific message you’re seeing has not been reported in the issue tracker already.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn1"><p>This operation works best if the “other” objects only have a single out- or inlet. Otherwise Purr Data will often prefer creating outgoing connections, which might lead to unexpected results.<a href="#fnref1"></a></p></li>
</ol>
</div>
</body>
</html>
......@@ -13,7 +13,7 @@ Permanent link: <https://agraef.github.io/purr-data-intro/>
## What is Purr Data?
**[Purr Data](https://git.purrdata.net/jwilkes/purr-data)** is the latest (2.x) branch of Ivica Ico Bukvic's Pd-l2ork. **[Pd-l2ork](http://l2ork.music.vt.edu/main/make-your-own-l2ork/software/)** in turn is a fork of Hans-Christoph Steiner's **[Pd-extended](http://puredata.info/downloads/pd-extended)**, which has been the longest-running (and arguably the most popular) variant of Miller Puckette's Pd. **[Pd](http://puredata.info/)** a.k.a. **Pure Data**, the common basis of all these variants, is Miller Puckette's interactive and graphical computer music and multimedia environment. Pd is also the premier open-source alternative to Cycling74's well-known commercial **[Max](https://cycling74.com/)** program (whose original version was also developed by Miller Puckette when he was at IRCAM in the 1980s). There are a few other popular applications in the realm of computer music and media art, most notably [Csound](http://csound.github.io/) and [SuperCollider](http://supercollider.github.io/). Max and Pd's special appeal is that you work in an intuitive graphical "patching" environment which allows you to put together advanced real-time signal processing applications without having to learn a "real" programming language.
**[Purr Data](https://git.purrdata.net/jwilkes/purr-data)** is the latest (2.x) branch of Ivica Ico Bukvic's Pd-l2ork. **[Pd-l2ork](http://l2ork.music.vt.edu/main/make-your-own-l2ork/software/)** in turn is a fork of Hans-Christoph Steiner's **[Pd-extended](http://puredata.info/downloads/pd-extended)**, which has been the longest-running (and arguably the most popular) variant of Miller Puckette's Pd. **[Pd](http://puredata.info/)** a.k.a. **Pure Data**, the common basis of all these variants, is Miller Puckette's interactive and graphical computer music and multimedia environment. Pd is also the premier open-source alternative to Cycling74's well-known commercial **[Max](https://cycling74.com/)** program (whose original version was also developed by Miller Puckette when he was at IRCAM in the 1980s). There are a few other popular and very capable applications in the realm of computer music and media art, most notably **[Csound](http://csound.github.io/)** and **[SuperCollider](http://supercollider.github.io/)**. But Max and Pd's special appeal is that you work in an intuitive graphical "patching" environment which allows you to put together advanced real-time signal processing applications without having to learn a "real" programming language.
Puckette's version of the program is sometimes jokingly referred to as **"vanilla"** Pd, because it comes without any extras and thus provides the purest taste of Pd, you might say. In keeping with this metaphor, the other Pd variants are often called **flavors**.
......@@ -25,7 +25,7 @@ Despite the many and substantial improvements it offers, Pd-l2ork's GUI is still
In 2015 Jonathan Wilkes stepped in and started creating **Purr Data** to address these problems. In a nutshell, Purr Data is Pd-l2ork with the Tcl/Tk GUI part ripped out and replaced with modern web technology. To these ends, it uses an open-source framework called [nw.js](https://nwjs.io/) a.k.a. "node-webkit", which is essentially a stand-alone web browser engine ([Chromium](http://www.chromium.org/)) combined with a JavaScript runtime ([Node.js](http://nodejs.org/)). While the latter was originally invented for developing server-side web applications, frameworks like nw.js allow the two to be used in concert to create fully-fledged and portable desktop applications. Using nw.js ensures that Purr Data runs on Linux, Mac and Windows, looking the same on all supported platforms, and it paves the way to leverage standard web technologies such as [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [HTML5](https://www.w3.org/TR/html5/), [CSS3](https://www.w3.org/Style/CSS/) and [SVG](https://www.w3.org/TR/SVG/).
Purr Data's GUI is written entirely in JavaScript, which is much more advanced than Tcl, offering an abundance of libraries and support materials. This makes the further development of Purr Data's graphical user interface a lot easier now that the initial GUI port is done. Patches are implemented as HTML5 SVG documents which offer better responsiveness and graphical capabilities than Tk windows. They can also be themed using CSS and zoomed like any browser window, improving usability. Purr Data also looks better and is easier on the eyes than Pd-l2ork, let alone vanilla Pd, especially on high-dpi displays (cf. [@fig:fig1]).
Purr Data's GUI is written entirely in JavaScript, which is a much more advanced programming language than Tcl with an abundance of libraries and support materials. This makes the further development of Purr Data's graphical user interface a lot easier now that the initial GUI port is done. Patches are implemented as HTML5 SVG documents which offer better responsiveness and graphical capabilities than Tk windows. They can also be themed using CSS and zoomed like any browser window, improving usability. Purr Data also looks better and is easier on the eyes than Pd-l2ork, let alone vanilla Pd, especially on high-dpi displays (cf. [@fig:fig1]).
![Purr Data running on macOS.](purr-data.png){#fig:fig1 width=100%}
......@@ -134,13 +134,15 @@ Compared to vanilla Pd, Pd-l2ork and Purr Data provide a comprehensive set of ne
One of Pd-l2ork's major advancements over vanilla Pd is its *infinite undo* capability, which makes it easy to revert accidental changes without having to worry about taking snapshots of patches while they're under development. Many of the other new features are simply GUI and usability improvements which, if done right, quickly become second nature to the user, so that they aren't even consciously noticed any more, such as the graphical improvements and the ability to resize the IEM GUI elements and "graph on parent" areas using the mouse. A helpful change also worth mentioning here is the improved *tidy up* option in the Edit menu, which first aligns objects and then spaces them equidistantly.
Another big time-saver is Pd-l2ork's *intelligent patching* facility, which lets you select two or more objects in order to connect multiple outlets and inlets in one go. Intelligent patching offers a number of different modes, the most useful (or at least the easiest) of these are:
Another big time-saver is Pd-l2ork's *intelligent patching* facility, which lets you select two or more objects in order to connect multiple outlets and inlets in one go. Intelligent patching offers a number of different modes:
- If you select *exactly* two objects A and B, say, and then connect one of the outlets from A to one of the inlets of B, then starting from the initial outlet-inlet pair the remaining outlets of A will be connected to the corresponding inlets of B.
- If you select two (or more) objects B and C, say, and then connect an outlet of a third, unselected object A to an inlet of B, then the corresponding connection from A to C will be done automatically. Conversely, you can also connect an outlet of B to an inlet of A to have the corresponding C-A connection completed for you.
- If you select two (or more) objects B and C, say, and then connect an outlet of a third, *unselected* object A to an inlet of B, then the corresponding connection from A to C will be done automatically. Conversely, you can also connect an outlet of B to an inlet of A to have the corresponding C-A connection completed for you.
- Also, pressing the shift key while doing connections will let you do multiple connections from the same outlet in one go.
- If you select two (or more) objects B and C, say, and then connect an outlet of a third, *selected* object A with multiple outlets to an inlet of B, then the *next* outlet of A will be connected to the corresponding inlet of C. Conversely, you can also connect an outlet of B to an inlet of A and have C connected to the next inlet of A. In principle, this works for an arbitrary number of source or target objects (considering the "other" objects in left-to-right, top-to-bottom order), provided that object A has enough inlets or outlets to connect to them all.^[This operation works best if the "other" objects only have a single out- or inlet. Otherwise Purr Data will often prefer creating outgoing connections, which might lead to unexpected results.]
- Finally, pressing the shift key while doing connections will let you do multiple connections from the same outlet in one go.
It is worth practicing these so that you can amaze your vanilla-running friends with the speed at which you can construct rather complicated patches using these shortcuts. Unfortunately, neither Pd-l2ork nor Purr Data has a help patch for this incredibly useful facility, so I have provided a little [intelligent-patching.pd](intelligent-patching.pd) patch with this document for your amusement. In the comments, the patch also includes detailed explanations of all the different intelligent patching modes for your perusal.
......
No preview for this file type
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment