-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
last night hans and me finally setup a replacement machine for apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Linux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist server, courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
On 27/09/12 15:13, IOhannes m zmoelnig wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
last night hans and me finally setup a replacement machine for apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Linux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist server, courtesy of iem.
Wow cool, Thanks! Lorenzo
On 09/27/2012 10:02 AM, Lorenzo Sutton wrote:
On 27/09/12 15:13, IOhannes m zmoelnig wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
last night hans and me finally setup a replacement machine for apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Linux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist server, courtesy of iem.
Wow cool, Thanks! Lorenzo
The aim is to have packages for all Debian/Ubuntu/Mint releases in both i386 and and amd64 (i.e. 32-bit and 64-bit), then hopefully some other architectures for Debian (armel, armhf, etc).
.hc
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr size("array-name")] which works out of the box for Pd Extended, Pd Vanilla, and Pd-l2ork."
-Jonathan
----- Original Message -----
From: IOhannes m zmoelnig zmoelnig@iem.at To: pd-announce@iem.at Cc: Sent: Thursday, September 27, 2012 9:13 AM Subject: [PD] [PD-announce] apt.puredata.info is back!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
last night hans and me finally setup a replacement machine for apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Linux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist server, courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlBkUPcACgkQkX2Xpv6ydvQbWACgz3R2G1E16kEgWJYYreEYiTTe 3OIAn3pGIKY4rvuVGVNkHjgShDloTi4G =5vNI -----END PGP SIGNATURE-----
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
IMHO, arraysize is very useful because it has a memorable name. "I need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr size("array-name")] which works out of the box for Pd Extended, Pd Vanilla, and Pd-l2ork."
-Jonathan
----- Original Message -----
From: IOhannes m zmoelnig zmoelnig@iem.at To: pd-announce@iem.at Cc: Sent: Thursday, September 27, 2012 9:13 AM Subject: [PD] [PD-announce] apt.puredata.info is back!
last night hans and me finally setup a replacement machine for apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Li fgmasdfnux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist server, courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's encourage use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is back!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
IMHO, arraysize is very useful because it has a memorable name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr size("array-name")] which works out of the box for Pd Extended, Pd Vanilla, and Pd-l2ork."
-Jonathan
----- Original Message -----
From: IOhannes m zmoelnig zmoelnig@iem.at To: pd-announce@iem.at Cc: Sent: Thursday, September 27, 2012 9:13 AM Subject: [PD] [PD-announce] apt.puredata.info is back!
last night hans and me finally setup a replacement machine
for
apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Li fgmasdfnux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist
server,
courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBCAAGBQJQZJnMAAoJEJ8P5Yc3S76Bt68P/RwhBXzxgPmmXgY2eAyuRaaK +dbEWqikut4AMnVTzd4Yam9+1WqQgH6DPyc1z68etJNAnv8S94g6sRpg74Tk15mi tT4IY+HQqc7ocozeO/PDRZp8EFVyXGnJIRkuKBhX0b1G6gGL7UFF/soZkuJqRtAe 0YZYsVMGZaXBCyIsiPMnXU0c9hLzgCKT8nbjZgwTb37CthqncWdmlKdY2TOPmJkt ryrDY26RW+rAx4boKSxzs+1BlNBlfTjdmZFC7++RcnzPl6SJ66KVOTzL7VbrZb0+ 5aVEnI2FJpl7bL0L2eWkAACF4Kzlab5ZEeBvlYkywQTd4zn8UixxX/Y7ZBb7glvf dPLpt5TrpJzSafuMJIiaSvCeIUFIsgDCUOWB/zvg6kiIWMQOsYZa6AeoxqnRSpbT v3w3GLDzJBfbfhyo5gJ1AtOoG8z6yy9TWMysoe8WKQJNhsqrBFaHB7DkE2jnq8A+ +gdAqKq/a1Bwbv1LQuhsrdrdPPkttvolzCXyCtRrv8nB/Qx2Dq5LFXAhm729UxjL AQpIVNNDBlSTcjPbJYSkM7ypjZNLB6Vn3oss9C8f0WtA/+IFcp/T8ppIgNKKfLt5 ZjzQgfmFfsnFcFnPO11JVw99/fD/CEkjzdSHUAv+I9+4AGFTKhFSHAvYTCRbesk2 WhO4fqLPIBfPxz9vZRKb =Jo01 -----END PGP SIGNATURE-----
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
If someone wants to write patches that work on vanilla anywhere, then there is a point. If people are already using Pd-extended or Debian then I honestly don't see the point, arraysize is already there, like many other externals.
For me, apt-get install pd-arraysize is far easier than trying to remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's encourage use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is back!
IMHO, arraysize is very useful because it has a memorable name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr size("array-name")] which works out of the box for Pd Extended, Pd Vanilla, and Pd-l2ork."
-Jonathan
----- Original Message -----
From: IOhannes m zmoelnig zmoelnig@iem.at To: pd-announce@iem.at Cc: Sent: Thursday, September 27, 2012 9:13 AM Subject: [PD] [PD-announce] apt.puredata.info is back!
last night hans and me finally setup a replacement machine
for
apt.puredata.info[1], the ultimate source for Pd-extended on Debian-based systems (Debian, Ubuntu, Li fgmasdfnux/Mint,...)[2].
it is now hosted on the puredata.info portal/mailinglist
server,
courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
If someone wants to write patches that work on vanilla anywhere,
then there is a point.
_Everybody_ wants to write patches that work on vanilla everywhere.
When we can't we try to figure out a course of action, but when we can (without employing wild hacks) we should.
If people are already using Pd-extended or
Debian then I honestly don't see the point, arraysize is already there, like many other externals.
It's like you wrote above. People _do_ want patches to be as cross-platform as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is a standard operator for [expr] that's been there for ages and is clearly documented.
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's
encourage
use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is
back!
IMHO, arraysize is very useful because it has a memorable
name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr
size("array-name")]
which works out of the box for Pd Extended, Pd
Vanilla,
and Pd-l2ork."
-Jonathan
----- Original Message -----
From: IOhannes m zmoelnig zmoelnig@iem.at To: pd-announce@iem.at Cc: Sent: Thursday, September 27, 2012 9:13 AM Subject: [PD] [PD-announce]
apt.puredata.info is back!
last night hans and me finally setup a
replacement machine
for
apt.puredata.info[1], the ultimate source for
Pd-extended on
Debian-based systems (Debian, Ubuntu, Li fgmasdfnux/Mint,...)[2].
it is now hosted on the puredata.info
portal/mailinglist
server,
courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian
_______________________________________________
Pd-announce mailing list Pd-announce@iem.at http://lists.puredata.info/listinfo/pd-announce
_______________________________________________
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBCAAGBQJQZKLqAAoJEJ8P5Yc3S76BpMwP/ipER+0Af2ZQ+ruexNeN0KUq /giclGGz9Gg7yUmKYcrW369ko9UqRXmxQGAY2HHbBUWuWo6lWQ2XD+RKEVkUN9lz w78S/gXb28FHzyiiRAtibL6Q2pYtyb8VebUW+iiLTtWnkzjbIKO6iPE3lsIsSYzK x4y6cwTRNYcWM7UO7Ja0DpZie7/sAgkUNYlCMwzfugFZRZ91bW9Xf9rNovxZu9lH py7mVFJ9iUI2h6Nyzpvdvp95ukfDneQK4JgmbXLWEdYhMGZd2uokeLgsohfP89Sf e60Pv1s9YuiarA1MBBudm15egWHLbhLVU1vb3VH4uOpZXh3Uf5u3z/luo73T+udx RzInWh0Su0WSmnWYU4yABo+F0eFAGNDH+AxdEdtxsKm0X3AP7RFZaqUmdut96NE9 NMMd7UKytG8zKs+a6hCOLqqL/DrBxpYmwrxAhPNRd8hMA+WmWxISyhrBoHsgOjb+ oHIccb6xUVmg5wafyuQMqTaPtTtDt2y3DCyb4gcOGEoHTXJcztA7nd2RYGnf0eZ5 0jfix5ykyP/Wau4dlyNT4J569BgS0XQkZw0RlP2mIAJose6pGpDtKpwvzSEZrleE i6ZvCbC3NGzfY4HFhS6XcXzXWDTmHFLb17gvQNyzjQwKTgvzxJ58YEswUTM5LXVD Q8VO11kW70gDLmPU/GnL =uAcd -----END PGP SIGNATURE-----
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array" for pd vanilla that would allow one to say [array size] and use "table" or "data structure" arrays intercahngeably.
I think though, that rather than marking arraysize as "obsolete" one could simply note that it has an equivalent available in Pd vanilla - that need carry no value judgement as to whether people should be using vanilla or extended.
cheers M
On Thu, Sep 27, 2012 at 12:23:35PM -0700, Jonathan Wilkes wrote:
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
If someone wants to write patches that work on vanilla anywhere,
    then there is a point.
_Everybody_ wants to write patches that work on vanilla everywhere.
When we can't we try to figure out a course of action, but when we can (without employing wild hacks) we should.
If people are already using Pd-extended or
    Debian then I honestly don't see the point, arraysize is already     there, like many other externals.
It's like you wrote above. People _do_ want patches to be as cross-platform as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
    remember that [expr] trick. And thankfully we can write externals,     so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is a standard operator for [expr] that's been there for ages and is clearly documented.
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's
      encourage
use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is
      back!
IMHO, arraysize is very useful because it has a memorable
      name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
Please change the description for the package "pd-arraysize"
"This object is deprecated. Use [expr
      size("array-name")]
which works out of the box for Pd Extended, Pd
      Vanilla,
and Pd-l2ork."
-Jonathan
----- Original Message ----- > From: IOhannes m zmoelnig zmoelnig@iem.at > To: pd-announce@iem.at > Cc: > Sent: Thursday, September 27, 2012 9:13 AM > Subject: [PD] [PD-announce]
      apt.puredata.info is back!
> last night hans and me finally setup a
      replacement machine
for
apt.puredata.info[1], the ultimate source for
      Pd-extended on
Debian-based systems (Debian, Ubuntu, Li fgmasdfnux/Mint,...)[2].
it is now hosted on the puredata.info
      portal/mailinglist
server,
courtesy of iem.
fgmasdf IOhannes
[1] http://apt.puredata.info/ [2] http://puredata.info/docs/faq/debian > > >
      _______________________________________________
> Pd-announce mailing list > Pd-announce@iem.at > http://lists.puredata.info/listinfo/pd-announce > >
      _______________________________________________
> Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management -> > http://lists.puredata.info/listinfo/pd-list >
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBCAAGBQJQZKLqAAoJEJ8P5Yc3S76BpMwP/ipER+0Af2ZQ+ruexNeN0KUq /giclGGz9Gg7yUmKYcrW369ko9UqRXmxQGAY2HHbBUWuWo6lWQ2XD+RKEVkUN9lz w78S/gXb28FHzyiiRAtibL6Q2pYtyb8VebUW+iiLTtWnkzjbIKO6iPE3lsIsSYzK x4y6cwTRNYcWM7UO7Ja0DpZie7/sAgkUNYlCMwzfugFZRZ91bW9Xf9rNovxZu9lH py7mVFJ9iUI2h6Nyzpvdvp95ukfDneQK4JgmbXLWEdYhMGZd2uokeLgsohfP89Sf e60Pv1s9YuiarA1MBBudm15egWHLbhLVU1vb3VH4uOpZXh3Uf5u3z/luo73T+udx RzInWh0Su0WSmnWYU4yABo+F0eFAGNDH+AxdEdtxsKm0X3AP7RFZaqUmdut96NE9 NMMd7UKytG8zKs+a6hCOLqqL/DrBxpYmwrxAhPNRd8hMA+WmWxISyhrBoHsgOjb+ oHIccb6xUVmg5wafyuQMqTaPtTtDt2y3DCyb4gcOGEoHTXJcztA7nd2RYGnf0eZ5 0jfix5ykyP/Wau4dlyNT4J569BgS0XQkZw0RlP2mIAJose6pGpDtKpwvzSEZrleE i6ZvCbC3NGzfY4HFhS6XcXzXWDTmHFLb17gvQNyzjQwKTgvzxJ58YEswUTM5LXVD Q8VO11kW70gDLmPU/GnL =uAcd -----END PGP SIGNATURE-----
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at; "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:59 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array" for pd vanilla that would allow one to say [array size] and use "table" or "data structure" arrays intercahngeably.
Interesting. Will this allow a data structure array to be used by [tab*~] objects? That's one thing that would make ds arrays very valuable (think of all the queries to the list about how to get different colored arrays, for example) but I never figured out an easy way to do it.
BTW, I've got a patch somewhere that did mouseover/mouseout notifications to [struct] but I can't seem to find it now. I also tried outputting pointer x/y location with "click" events to [struct] but couldn't get it working right for GOP stuff.
-Jonathan
I think though, that rather than marking arraysize as "obsolete" one could simply note that it has an equivalent available in Pd vanilla - that need carry no value judgement as to whether people should be using vanilla or extended.
I don't use Pd Vanilla, but that's irrelevant because [expr] is available in both Vanilla and Extended.
Actually I think "obsolete" and "deprecated" are ill-suited-- it's an object that was designed because someone either didn't know you could already do that in Pd or ignored that fact for some reason.
-Jonathan
cheers M
On Thu, Sep 27, 2012 at 12:23:35PM -0700, Jonathan Wilkes wrote:
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
If someone wants to write patches that work on vanilla anywhere,
then there is a point.
_Everybody_ wants to write patches that work on vanilla everywhere.
When we can't we try to figure out a course of action, but when we can (without employing wild hacks) we should.
If people are already using Pd-extended or
Debian then I honestly don't see the point, arraysize is already there, like many other externals.
It's like you wrote above. People _do_ want patches to be as cross-platform as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is a standard operator for [expr] that's been there for ages and is clearly documented.
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's
encourage
use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is
back!
IMHO, arraysize is very useful because it has a memorable
name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
> Please change the description for the package > "pd-arraysize" > > "This object is deprecated. Use [expr
size("array-name")]
> which works out of the box for Pd Extended, Pd
Vanilla,
> and Pd-l2ork." > > -Jonathan > > > > ----- Original Message ----- >> From: IOhannes m zmoelnig zmoelnig@iem.at >> To: pd-announce@iem.at >> Cc: >> Sent: Thursday, September 27, 2012 9:13 AM >> Subject: [PD] [PD-announce]
apt.puredata.info is back!
>> > last night hans and me finally setup a
replacement machine
for
> apt.puredata.info[1], the ultimate source for
Pd-extended on
> Debian-based systems (Debian, Ubuntu, Li > fgmasdfnux/Mint,...)[2]. > > it is now hosted on the puredata.info
portal/mailinglist
server,
> courtesy of iem. > > fgmasdf > IOhannes > > > > [1] http://apt.puredata.info/ > [2] http://puredata.info/docs/faq/debian >> >> >>
_______________________________________________
>> Pd-announce mailing list >> Pd-announce@iem.at >> http://lists.puredata.info/listinfo/pd-announce >> >>
_______________________________________________
>> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management -> >> http://lists.puredata.info/listinfo/pd-list >> > > _______________________________________________ > Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBCAAGBQJQZKLqAAoJEJ8P5Yc3S76BpMwP/ipER+0Af2ZQ+ruexNeN0KUq /giclGGz9Gg7yUmKYcrW369ko9UqRXmxQGAY2HHbBUWuWo6lWQ2XD+RKEVkUN9lz w78S/gXb28FHzyiiRAtibL6Q2pYtyb8VebUW+iiLTtWnkzjbIKO6iPE3lsIsSYzK x4y6cwTRNYcWM7UO7Ja0DpZie7/sAgkUNYlCMwzfugFZRZ91bW9Xf9rNovxZu9lH py7mVFJ9iUI2h6Nyzpvdvp95ukfDneQK4JgmbXLWEdYhMGZd2uokeLgsohfP89Sf e60Pv1s9YuiarA1MBBudm15egWHLbhLVU1vb3VH4uOpZXh3Uf5u3z/luo73T+udx RzInWh0Su0WSmnWYU4yABo+F0eFAGNDH+AxdEdtxsKm0X3AP7RFZaqUmdut96NE9 NMMd7UKytG8zKs+a6hCOLqqL/DrBxpYmwrxAhPNRd8hMA+WmWxISyhrBoHsgOjb+ oHIccb6xUVmg5wafyuQMqTaPtTtDt2y3DCyb4gcOGEoHTXJcztA7nd2RYGnf0eZ5 0jfix5ykyP/Wau4dlyNT4J569BgS0XQkZw0RlP2mIAJose6pGpDtKpwvzSEZrleE i6ZvCbC3NGzfY4HFhS6XcXzXWDTmHFLb17gvQNyzjQwKTgvzxJ58YEswUTM5LXVD Q8VO11kW70gDLmPU/GnL =uAcd -----END PGP SIGNATURE-----
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On Thu, Sep 27, 2012 at 01:42:51PM -0700, Jonathan Wilkes wrote:
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at; "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:59 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array" for pd vanilla that would allow one to say [array size] and use "table" or "data structure" arrays intercahngeably.
Interesting. Will this allow a data structure array to be used by [tab*~] objects? That's one thing that would make ds arrays very valuable (think of all the queries to the list about how to get different colored arrays, for example) but I never figured out an easy way to do it.
BTW, I've got a patch somewhere that did mouseover/mouseout notifications to [struct] but I can't seem to find it now. I also tried outputting pointer x/y location with "click" events to [struct] but couldn't get it working right for GOP stuff.
-Jonathan
Yeah, I'm hoping to completely unify arrays in structs with "table" arrays - wish me luck :)
Good idea about the mouseovers - I think Pd is doing all teh work anyhow so it should be made available. The whole data thing needs lots and lots more thinking.
cheers Miller
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at; "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 5:54 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On Thu, Sep 27, 2012 at 01:42:51PM -0700, Jonathan Wilkes wrote:
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at;
"pd-list@iem.at" pd-list@iem.at
Sent: Thursday, September 27, 2012 3:59 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array"
for pd
vanilla that would allow one to say [array size] and use
"table" or
"data structure" arrays intercahngeably.
Interesting. Will this allow a data structure array to be used by [tab*~] objects? That's one thing that would make ds arrays very valuable (think of all the queries to the list about how to get different colored arrays, for example) but I never figured out an easy way to do it.
BTW, I've got a patch somewhere that did mouseover/mouseout notifications to [struct] but I can't seem to find it now. I also
tried
outputting pointer x/y location with "click" events to [struct]
but
couldn't get it working right for GOP stuff.
-Jonathan
Yeah, I'm hoping to completely unify arrays in structs with "table" arrays - wish me luck :)
Sounds great.
Good idea about the mouseovers - I think Pd is doing all teh work anyhow so it should be made available.
That's true.
The whole data thing needs lots and lots more thinking.
cheers Miller
Sounds like a good complication :). I think a general array toolkit would be very useful. I'm not a fan of expanding the use of Tcl syntax in Pd tho (i.e. commands with subcommands).
Pd syntax is nice and simple with always the first word being the command and the rest being the args. [list ...] is the only except to this that I can think of, and certainly the only exception included in pd-vanilla.
How about just naming them like [tabsize], [tabfoo], etc since there already are lots of [tab...] objects. Or anything to minimize the confusion between the 'array', 'table', and 'tab*' objects. Since there is [table] and [tab*], the menu item Put -> Array could be renamed to "Put visual table (array)" or something like that, then the word table/tab would be pretty consistent throughout Pd.
It may seem trivial, but I've spent a lot of time explaining why the objects for reading arrays all start with 'tab'.
.hc
On 09/27/2012 03:59 PM, Miller Puckette wrote:
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array" for pd vanilla that would allow one to say [array size] and use "table" or "data structure" arrays intercahngeably.
I think though, that rather than marking arraysize as "obsolete" one could simply note that it has an equivalent available in Pd vanilla - that need carry no value judgement as to whether people should be using vanilla or extended.
cheers M
On Thu, Sep 27, 2012 at 12:23:35PM -0700, Jonathan Wilkes wrote:
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
If someone wants to write patches that work on vanilla anywhere,
then there is a point.
_Everybody_ wants to write patches that work on vanilla everywhere.
When we can't we try to figure out a course of action, but when we can (without employing wild hacks) we should.
If people are already using Pd-extended or
Debian then I honestly don't see the point, arraysize is already there, like many other externals.
It's like you wrote above. People _do_ want patches to be as
cross-platform
as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is a standard
operator for
[expr] that's been there for ages and is clearly documented.
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's
encourage
use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Sent: Thursday, September 27, 2012 2:24 PM Subject: Re: [PD] [PD-announce] apt.puredata.info is
back!
IMHO, arraysize is very useful because it has a memorable
name. "I
need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote:
>> Please change the description for the package >> "pd-arraysize" >> >> "This object is deprecated. Use [expr
size("array-name")]
>> which works out of the box for Pd Extended, Pd
Vanilla,
>> and Pd-l2ork." >> >> -Jonathan >> >> >> >> ----- Original Message ----- >>> From: IOhannes m zmoelnig zmoelnig@iem.at >>> To: pd-announce@iem.at >>> Cc: >>> Sent: Thursday, September 27, 2012 9:13 AM >>> Subject: [PD] [PD-announce]
apt.puredata.info is back!
>>> >> last night hans and me finally setup a
replacement machine
for >> apt.puredata.info[1], the ultimate source for
Pd-extended on
>> Debian-based systems (Debian, Ubuntu, Li >> fgmasdfnux/Mint,...)[2]. >> >> it is now hosted on the puredata.info
portal/mailinglist
server, >> courtesy of iem. >> >> fgmasdf >> IOhannes >> >> >> >> [1] http://apt.puredata.info/ >> [2] http://puredata.info/docs/faq/debian >>> >>> >>>
>>> Pd-announce mailing list >>> Pd-announce@iem.at >>> http://lists.puredata.info/listinfo/pd-announce >>> >>>
>>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management -> >>> http://lists.puredata.info/listinfo/pd-list >>> >> >> _______________________________________________ >> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
This is also mixed up in my trying to design a new [text] that would replace and vastly extend [textfile] - so the three multifarious object names would then be [list] [tab]/[array] and [text].
The [table] object could be vastly extended: [table foo] would be equivalent to [tab define foo] and you could say for instance, [tab define foo -struct my-struct -save -range 0 100]
(But, oops, that use of 'tab' would really be what I've been tring to use 'array' for in that it would presumably not be an array of floats.)
Too much to think about... that's why it takes so many years to get the thing written...
cheers Miller
On Thu, Sep 27, 2012 at 06:19:40PM -0400, Hans-Christoph Steiner wrote:
Sounds like a good complication :). I think a general array toolkit would be very useful. I'm not a fan of expanding the use of Tcl syntax in Pd tho (i.e. commands with subcommands).
Pd syntax is nice and simple with always the first word being the command and the rest being the args. [list ...] is the only except to this that I can think of, and certainly the only exception included in pd-vanilla.
How about just naming them like [tabsize], [tabfoo], etc since there already are lots of [tab...] objects. Or anything to minimize the confusion between the 'array', 'table', and 'tab*' objects. Since there is [table] and [tab*], the menu item Put -> Array could be renamed to "Put visual table (array)" or something like that, then the word table/tab would be pretty consistent throughout Pd.
It may seem trivial, but I've spent a lot of time explaining why the objects for reading arrays all start with 'tab'.
.hc
On 09/27/2012 03:59 PM, Miller Puckette wrote:
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array" for pd vanilla that would allow one to say [array size] and use "table" or "data structure" arrays intercahngeably.
I think though, that rather than marking arraysize as "obsolete" one could simply note that it has an equivalent available in Pd vanilla - that need carry no value judgement as to whether people should be using vanilla or extended.
cheers M
On Thu, Sep 27, 2012 at 12:23:35PM -0700, Jonathan Wilkes wrote:
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
If someone wants to write patches that work on vanilla anywhere,
then there is a point.
_Everybody_ wants to write patches that work on vanilla everywhere.
When we can't we try to figure out a course of action, but when we can (without employing wild hacks) we should.
If people are already using Pd-extended or
Debian then I honestly don't see the point, arraysize is already there, like many other externals.
It's like you wrote above. People _do_ want patches to be as
cross-platform
as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is a standard
operator for
[expr] that's been there for ages and is clearly documented.
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
That feature comes at the expense of compatibility, which normally wouldn't be an issue _except_ that Pd Vanilla already has the same functionality. So let's
encourage
use of the more compatible way using [expr], which is clearly documented and supports the _exact_ same features as arraysize.
-Jonathan
> ________________________________ > From: Hans-Christoph Steiner hans@at.or.at > To: pd-list@iem.at > Sent: Thursday, September 27, 2012 2:24 PM > Subject: Re: [PD] [PD-announce] apt.puredata.info is
back!
> > >
IMHO, arraysize is very useful because it has a memorable
name. "I
> need to find the size of an array... oh, [arraysize]".
.hc
On 09/27/2012 02:13 PM, Jonathan Wilkes wrote: >>> Please change the description for the package >>> "pd-arraysize" >>> >>> "This object is deprecated. Use [expr
size("array-name")]
>>> which works out of the box for Pd Extended, Pd
Vanilla,
>>> and Pd-l2ork." >>> >>> -Jonathan >>> >>> >>> >>> ----- Original Message ----- >>>> From: IOhannes m zmoelnig zmoelnig@iem.at >>>> To: pd-announce@iem.at >>>> Cc: >>>> Sent: Thursday, September 27, 2012 9:13 AM >>>> Subject: [PD] [PD-announce]
apt.puredata.info is back!
>>>> >>> last night hans and me finally setup a
replacement machine
> for >>> apt.puredata.info[1], the ultimate source for
Pd-extended on
>>> Debian-based systems (Debian, Ubuntu, Li >>> fgmasdfnux/Mint,...)[2]. >>> >>> it is now hosted on the puredata.info
portal/mailinglist
> server, >>> courtesy of iem. >>> >>> fgmasdf >>> IOhannes >>> >>> >>> >>> [1] http://apt.puredata.info/ >>> [2] http://puredata.info/docs/faq/debian >>>> >>>> >>>>
>>>> Pd-announce mailing list >>>> Pd-announce@iem.at >>>> http://lists.puredata.info/listinfo/pd-announce >>>> >>>>
>>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management -> >>>> http://lists.puredata.info/listinfo/pd-list >>>> >>> >>> _______________________________________________ >>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
> > > _______________________________________________ > Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
> > >
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Hans-Christoph Steiner hans@at.or.at Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 8:01 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
This is also mixed up in my trying to design a new [text] that would replace and vastly extend [textfile] - so the three multifarious object names would then be [list] [tab]/[array] and [text].
The [table] object could be vastly extended: [table foo] would be equivalent to [tab define foo] and you could say for instance, [tab define foo -struct my-struct -save -range 0 100]
If you're not requiring the user to name the array "z" and requiring "z" to have a float field "y" then you would need
[tab define foo -struct my-struct -array z -y y]
where "-y" defines which field to use as the independent variable in the table (similar to "-y" in [plot]).
(But, oops, that use of 'tab' would really be what I've been tring to use 'array' for in that it would presumably not be an array of floats.)
Too much to think about... that's why it takes so many years to get the thing written...
cheers Miller
On Thu, Sep 27, 2012 at 06:19:40PM -0400, Hans-Christoph Steiner wrote:
Sounds like a good complication :). I think a general array toolkit would be very useful. I'm not a fan of expanding the use of Tcl syntax in Pd tho (i.e. commands with subcommands).
Pd syntax is nice and simple with always the first word being the command and the rest being the args. [list ...] is the only except to this that I can think of, and certainly the only exception included in pd-vanilla.
How about just naming them like [tabsize], [tabfoo], etc since there already are lots of [tab...] objects. Or anything to minimize the confusion between the 'array', 'table', and 'tab*'
objects. Since there
is [table] and [tab*], the menu item Put -> Array could be renamed to "Put visual table (array)" or something like that, then the word table/tab would be pretty consistent throughout Pd.
It may seem trivial, but I've spent a lot of time explaining why the objects for reading arrays all start with 'tab'.
.hc
On 09/27/2012 03:59 PM, Miller Puckette wrote:
Sorry to further complicate this -
I'm now trying to design a multipurpose object "array"
for pd
vanilla that would allow one to say [array size] and use
"table" or
"data structure" arrays intercahngeably.
I think though, that rather than marking arraysize as
"obsolete" one
could simply note that it has an equivalent available in Pd vanilla - that need carry no value judgement as to whether people should be
using
vanilla or extended.
cheers M
On Thu, Sep 27, 2012 at 12:23:35PM -0700, Jonathan Wilkes wrote:
From: Hans-Christoph Steiner hans@at.or.at To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 3:03 PM Subject: arraysize WAS apt.puredata.info is back!
If someone wants to write patches that work on vanilla anywhere,
then there is a point.
_Everybody_ wants to write patches that work on vanilla
everywhere.
When we can't we try to figure out a course of action,
but when we
can (without employing wild hacks) we should.
If people are already using Pd-extended or
Debian then I honestly don't see the point, arraysize is
already
there, like many other externals.
It's like you wrote above. People _do_ want patches to be
as
cross-platform
as possible. (Not if.)
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write
externals,
so we can have choice. :-)
If it were a wild hack I'd agree, but it's not. It is
a standard
operator for
[expr] that's been there for ages and is clearly
documented.
And who is this mythical user that looks to the Debian
repositories
to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up
Synaptic and search
20,000 mostly non-related packages for a solution...)
-Jonathan
.hc
On 09/27/2012 03:00 PM, Jonathan Wilkes wrote:
> That feature comes at the expense of compatibility,
which
> normally wouldn't be an issue _except_ that Pd > Vanilla already has the same functionality. So
let's
encourage
> use of the more compatible way using [expr], which is > clearly documented and supports the _exact_ same
features
> as arraysize. > > -Jonathan > > > > >> ________________________________ >> From: Hans-Christoph Steiner
>> To: pd-list@iem.at >> Sent: Thursday, September 27, 2012 2:24 PM >> Subject: Re: [PD] [PD-announce] apt.puredata.info
is
back!
>> >> >> > > IMHO, arraysize is very useful because it has a
memorable
name. "I
>> need to find the size of an array... oh,
[arraysize]".
> > .hc > > On 09/27/2012 02:13 PM, Jonathan Wilkes wrote: >>>> Please change the description for the
package
>>>> "pd-arraysize" >>>> >>>> "This object is deprecated. Use
[expr
size("array-name")]
>>>> which works out of the box for Pd
Extended, Pd
Vanilla,
>>>> and Pd-l2ork." >>>> >>>> -Jonathan >>>> >>>> >>>> >>>> ----- Original Message ----- >>>>> From: IOhannes m zmoelnig
>>>>> To: pd-announce@iem.at >>>>> Cc: >>>>> Sent: Thursday, September 27, 2012
9:13 AM
>>>>> Subject: [PD] [PD-announce]
apt.puredata.info is back!
>>>>> >>>> last night hans and me finally setup a
replacement machine
>> for >>>> apt.puredata.info[1], the ultimate source
for
Pd-extended on
>>>> Debian-based systems (Debian, Ubuntu, Li >>>> fgmasdfnux/Mint,...)[2]. >>>> >>>> it is now hosted on the puredata.info
portal/mailinglist
>> server, >>>> courtesy of iem. >>>> >>>> fgmasdf >>>> IOhannes >>>> >>>> >>>> >>>> [1] http://apt.puredata.info/ >>>> [2] http://puredata.info/docs/faq/debian >>>>> >>>>> >>>>>
>>>>> Pd-announce mailing list >>>>> Pd-announce@iem.at >>>>>
http://lists.puredata.info/listinfo/pd-announce
>>>>> >>>>>
>>>>> Pd-list@iem.at mailing list >>>>> UNSUBSCRIBE and account-management
->
>>>>>
http://lists.puredata.info/listinfo/pd-list
>>>>> >>>> >>>>
>>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
> >> >> >> _______________________________________________ >> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
>> >> >>
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
The [table] object could be vastly extended: [table foo] would be equivalent to [tab define foo] and you could say for instance, [tab define foo -struct my-struct -save -range 0 100]
If you're not requiring the user to name the array "z" and requiring "z" to have a float field "y" then you would need
[tab define foo -struct my-struct -array z -y y]
where "-y" defines which field to use as the independent variable in the table (similar to "-y" in [plot]).
I'm thinking in the above that foo would be an array of items of my-structs, not a struct with an array such as 'z' inside it.
Another way of invoking tab would allow you to attach a name temporarily or permanently to an array within a struct (provided via a pointer message). Then indeed you'd need the field name such as 'z'.
cheers M
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at; "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 10:27 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
The [table] object could be vastly extended: [table foo] would be
equivalent
to [tab define foo] and you could say for instance, [tab define foo -struct my-struct -save -range 0 100]
If you're not requiring the user to name the array "z" and
requiring
"z" to have a float field "y" then you would need
[tab define foo -struct my-struct -array z -y y
where "-y" defines which field to use as the independent variable in the table (similar to "-y" in [plot]).
I'm thinking in the above that foo would be an array of items of my-structs, not a struct with an array such as 'z' inside it.
In that case would [tab write foo] take an index number in the right inlet and a list of field values in the left?
Another way of invoking tab would allow you to attach a name temporarily or permanently to an array within a struct (provided via a pointer message). Then indeed you'd need the field name such as 'z'.
cheers M
On Thu, Sep 27, 2012 at 07:53:11PM -0700, Jonathan Wilkes wrote:
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Jonathan Wilkes jancsika@yahoo.com Cc: Hans-Christoph Steiner hans@at.or.at; "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 10:27 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
The [table] object could be vastly extended: [table foo] would be
equivalent
to [tab define foo] and you could say for instance, [tab define foo -struct my-struct -save -range 0 100]
If you're not requiring the user to name the array "z" and
requiring
"z" to have a float field "y" then you would need
[tab define foo -struct my-struct -array z -y y
where "-y" defines which field to use as the independent variable in the table (similar to "-y" in [plot]).
I'm thinking in the above that foo would be an array of items of my-structs, not a struct with an array such as 'z' inside it.
In that case would [tab write foo] take an index number in the right inlet and a list of field values in the left?
I haven't thought that one through yet. Perhaps it should just write a float or symbol to a field in the struct, i.e., [tab write foo a] would write to the field a, and the field name could default to 'y'.
One thing I'm struggling with is that the objects that access data structures are abstruse and hard to use. I think more and more that some sort of scripting facility would be the only way to make it easy to do tasks like simply counting the elements in a window that now require insane patches.
cheers Miller
On 09/28/2012 02:01 AM, Miller Puckette wrote:
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
i'm quite with hans here: what exactly do we gain from having an object [tab write], instead of [tabwrite]? and i totally fail to see how [tab size] is superior to [tabsize].
in terms of remembering the names, they see quite on par; it is made clear that those objects belong to the same family regardless of whether the prefix is "tab" "tab " or "tab_", as long as there is a common short prefix; in terms of typing there is one more character to type; and from the implementation side, it needlessly compilates the object-lookup mechanism, as can be seen in the current implementation of the "list" family of objects (where the objectcreator is made aware of an object named "list\ size", but this object is practically never requested from the objectmaker, and instead the constructor function of "list" has to re-implement the dispatching.
it's not that "foo bar" is bad by itself; i just don't see that it is anywhere better than what we already have.
fgmasdr IOhannes
On 09/28/2012 04:00 AM, IOhannes m zmölnig wrote:
On 09/28/2012 02:01 AM, Miller Puckette wrote:
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
i'm quite with hans here: what exactly do we gain from having an object [tab write], instead of [tabwrite]? and i totally fail to see how [tab size] is superior to [tabsize].
in terms of remembering the names, they see quite on par; it is made clear that those objects belong to the same family regardless of whether the prefix is "tab" "tab " or "tab_", as long as there is a common short prefix; in terms of typing there is one more character to type; and from the implementation side, it needlessly compilates the object-lookup mechanism, as can be seen in the current implementation of the "list" family of objects (where the objectcreator is made aware of an object named "list\ size", but this object is practically never requested from the objectmaker, and instead the constructor function of "list" has to re-implement the dispatching.
it's not that "foo bar" is bad by itself; i just don't see that it is anywhere better than what we already have.
And to hammer on this point some more, this subcommand syntax complicates the implementation, as IOhannes points out, and complicates the syntax. Its very nice to be able to say "Pd syntax is like sentences where the first word is the command and the rest of the words are data for that command." For all the newbies that I have taught from all sorts of realms, from 10 year olds to practicing architects, this is something that has really quickly clicked with basically everyone. In my intro teaching, I avoid [list] for exactly this reason, because I'd have to explain the exception to this simple "first word is the command" rule, and some people are always confused by it.
And from an advanced users point of view, the simpler the rules of the syntax are, the brain space is taken up managing all of the exceptions to nice, simple rules. And that means less brain space for far more interesting things.
.hc
Well, I'm persuadable on this front. I'm concerned with unduly hogging the object namespace - in general, every time I add an object name I potentially introduce incompatiblities with someone's abstraction that might have the same name. And there are 50 or so new classes (!) to provide. I don't even have a list yet (no pun intended)
cheers M
On Fri, Sep 28, 2012 at 10:01:40AM -0400, Hans-Christoph Steiner wrote:
On 09/28/2012 04:00 AM, IOhannes m zmölnig wrote:
On 09/28/2012 02:01 AM, Miller Puckette wrote:
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
i'm quite with hans here: what exactly do we gain from having an object [tab write], instead of [tabwrite]? and i totally fail to see how [tab size] is superior to [tabsize].
in terms of remembering the names, they see quite on par; it is made clear that those objects belong to the same family regardless of whether the prefix is "tab" "tab " or "tab_", as long as there is a common short prefix; in terms of typing there is one more character to type; and from the implementation side, it needlessly compilates the object-lookup mechanism, as can be seen in the current implementation of the "list" family of objects (where the objectcreator is made aware of an object named "list\ size", but this object is practically never requested from the objectmaker, and instead the constructor function of "list" has to re-implement the dispatching.
it's not that "foo bar" is bad by itself; i just don't see that it is anywhere better than what we already have.
And to hammer on this point some more, this subcommand syntax complicates the implementation, as IOhannes points out, and complicates the syntax. Its very nice to be able to say "Pd syntax is like sentences where the first word is the command and the rest of the words are data for that command." For all the newbies that I have taught from all sorts of realms, from 10 year olds to practicing architects, this is something that has really quickly clicked with basically everyone. In my intro teaching, I avoid [list] for exactly this reason, because I'd have to explain the exception to this simple "first word is the command" rule, and some people are always confused by it.
And from an advanced users point of view, the simpler the rules of the syntax are, the brain space is taken up managing all of the exceptions to nice, simple rules. And that means less brain space for far more interesting things.
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 28/09/12 16:23, Miller Puckette wrote:
Well, I'm persuadable on this front. I'm concerned with unduly hogging the object namespace - in general, every time I add an object name I potentially introduce incompatiblities with someone's abstraction that might have the same name. And there are 50 or so new classes (!) to provide. I don't even have a list yet (no pun intended)
Perhaps it would be better to refactor the object / abstraction / binary / loading / namespace mechanism first, something along the lines of an old discussion I had with HCS:
http://claudiusmaximus.goto10.org/cm/2010-07-16_pure-data_libraries_conversa...
Once that is fixed to something less baroque/crufty then it should be easier for everyone to go nuts and have their own namespaces without clobbering or hogging anything, and make patches more portable between Pd variants.
I have no time to work on this for the forseeable future, but it's something that needs doing sooner rather than later...
cheers M
Thanks,
On 09/28/2012 11:43 AM, Claude Heiland-Allen wrote:
On 28/09/12 16:23, Miller Puckette wrote:
Well, I'm persuadable on this front. I'm concerned with unduly hogging the object namespace - in general, every time I add an object name I potentially introduce incompatiblities with someone's abstraction that might have the same name. And there are 50 or so new classes (!) to provide. I don't even have a list yet (no pun intended)
Perhaps it would be better to refactor the object / abstraction / binary / loading / namespace mechanism first, something along the lines of an old discussion I had with HCS:
http://claudiusmaximus.goto10.org/cm/2010-07-16_pure-data_libraries_conversa...
Once that is fixed to something less baroque/crufty then it should be easier for everyone to go nuts and have their own namespaces without clobbering or hogging anything, and make patches more portable between Pd variants.
I have no time to work on this for the forseeable future, but it's something that needs doing sooner rather than later...
I totally agree with this. I think the easiest place to start would be to rework the load order, so that instead of going by file type, it goes by directory. Right now, the load order first looks for .pd_linux files in every dir in the path, then looks for .pd files in every dir in the path.
Instead it should start by searching or .pd_linux and .pd in the patch's own dir, then .pd_linux and .pd the canvas-local path, then .pd_linux and .pd in the global path, then .pd_linux and .pd in the built-in path.
Currently, if you don't know that there is a 'foo.pd_linux' installed in your path, and your project folder includes 'foo.pd', your project will always load 'foo.pd_linux'.
.hc
On 10/02/2012 10:56 AM, Hans-Christoph Steiner wrote:
On 09/28/2012 11:43 AM, Claude Heiland-Allen wrote:
On 28/09/12 16:23, Miller Puckette wrote:
Well, I'm persuadable on this front. I'm concerned with unduly hogging the object namespace - in general, every time I add an object name I potentially introduce incompatiblities with someone's abstraction that might have the same name. And there are 50 or so new classes (!) to provide. I don't even have a list yet (no pun intended)
Perhaps it would be better to refactor the object / abstraction / binary / loading / namespace mechanism first, something along the lines of an old discussion I had with HCS:
http://claudiusmaximus.goto10.org/cm/2010-07-16_pure-data_libraries_conversa...
Once that is fixed to something less baroque/crufty then it should be easier for everyone to go nuts and have their own namespaces without clobbering or hogging anything, and make patches more portable between Pd variants.
I have no time to work on this for the forseeable future, but it's something that needs doing sooner rather than later...
I totally agree with this. I think the easiest place to start would be to rework the load order, so that instead of going by file type, it goes by directory. Right now, the load order first looks for .pd_linux files in every dir in the path, then looks for .pd files in every dir in the path.
Instead it should start by searching or .pd_linux and .pd in the patch's own dir, then .pd_linux and .pd the canvas-local path, then .pd_linux and .pd in the global path, then .pd_linux and .pd in the built-in path.
Currently, if you don't know that there is a 'foo.pd_linux' installed in your path, and your project folder includes 'foo.pd', your project will always load 'foo.pd_linux'.
.hc
Here's a good sketch of the idea
(http://puredata.info/dev/PdSearchPath):
Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 2012-10-02 17:15, Miller Puckette wrote:
- the upsampling inlet~ by default zero-pads its input. This is
incorrect as its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
the default upsampling algorithm was chosen deliberately to alert people that there is something they should think about, before proceeding. the idea is, that people *should* select the upsampling method they want, rather than leave it at the default. i admit, this is a bit pedagogical.
so from my pov, i wouldn't care about a change in the default upsampling method.
fgmasdr IOhannes
in regards to (3), would there have ever been a case where someone would have deliberately used the zero padding of upsampled inlet as a 'feature' that their patch depended on????
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
But there's the trickier problem that static variables would be shared across all the versions - avan if you can somehow not get different functions ala sighip_setup() with the same names not to step all over each other (I'm not convinced that's possible).
Somehow the c library (libc) and the math library (libm) manage to exist on only one version - I think that's a modle we should try to follow here.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
Here's a good sketch of the idea (http://puredata.info/dev/PdSearchPath): Proposed Functionality
for path in paths do -- the core does this bit for loader in loaders do loader(path, library, object)
Existing Functionality
for loader in loaders do for path in paths do -- the loader does this bit loader(path, library, object)
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote:
This is in my long-range plan but hasn't yet risen to the level of "urgent". However, this migth be a good moment to get started on this because several other backward- and even forward-imcompatible needs are also rising to the fore:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1. "fixing" this will change the audio output of older patches, usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" flag or something to allow strict back compatibility;
- There's no place in the pre-0.43 file format to alow specifying individual
box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
- the upsampling inlet~ by default zero-pads its input. This is incorrect as
its DC gain is less than one. (Try using that as input to a phasor~ for instance - bad surprise!) I want to change the default so that it acts like a sample-and-hold, which I believe is an option now. To preserve back compatibility I'd keep all the "upsampling methods" in place but only change default behavior for patches with a 0.44 or later version stamped on them.
Each of these presents a different spin on the age-old issue of keeping total back compatibility in place, even when the compatibility is to preserve a big as in (1) and (3) - and arguably in the file searching too; I'm not sure whether to regard that as a bug or just over-hasty design.
cheers Miller
> Here's a good sketch of the idea > (http://puredata.info/dev/PdSearchPath): > > > Proposed Functionality > > for path in paths do -- the core does this bit > for loader in loaders do > loader(path, library, object) > > > Existing Functionality > > for loader in loaders do > for path in paths do -- the loader does this bit > loader(path, library, object) > > .hc > > > _______________________________________________ > Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote:
I think having a compatibility version stamp in the patch is a good idea. This ties in well with the experiments I've been doing with splitting out all of the objects from pd itself. If all of the core objects are a standard library, then that means its easy to choose which version of the standard library that a patch is using. In Pd-extended, this is called the 'vanilla' lib, and its been included in some form since 0.42.
Then if a patch has a compatibility version stamp in it, Pd can automatically look to see if it has a copy of that version of the standard library, and load it. Otherwise, it would load the version closest to that, and throw a warning, or optionally that could be considered an error.
To make this work well, the key missing feature is the ability to change which loaded library an object name maps to in the canvas-local namespace. Currently, once an object name is mapped to a loaded .pd_linux, that is a global association. This is needed so that patches using different standard libs can be open at the same time.
Then making the versioned standard libs would be pretty easy, mostly just bundling the right .c files into a lib.
.hc
On 10/02/2012 11:15 AM, Miller Puckette wrote: > This is in my long-range plan but hasn't yet risen to the level of "urgent". > However, this migth be a good moment to get started on this because several > other backward- and even forward-imcompatible needs are also rising to the > fore: > > 1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) > greater than 1. "fixing" this will change the audio output of older patches, > usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" > flag or something to allow strict back compatibility; > > 2. There's no place in the pre-0.43 file format to alow specifying individual > box widths and font sizes; I put an "f" (=format) message to the canvas > object in 0.43 so that in 0.44 I can make it set font size and box width and > perhaps leave an opening for other formatting info. > > 3. the upsampling inlet~ by default zero-pads its input. This is incorrect as > its DC gain is less than one. (Try using that as input to a phasor~ for > instance - bad surprise!) I want to change the default so that it acts like > a sample-and-hold, which I believe is an option now. To preserve back > compatibility I'd keep all the "upsampling methods" in place but only change > default behavior for patches with a 0.44 or later version stamped on them. > > Each of these presents a different spin on the age-old issue of keeping > total back compatibility in place, even when the compatibility is to preserve > a big as in (1) and (3) - and arguably in the file searching too; I'm not sure > whether to regard that as a bug or just over-hasty design. > > cheers > Miller > >> Here's a good sketch of the idea >> (http://puredata.info/dev/PdSearchPath): >> >> >> Proposed Functionality >> >> for path in paths do -- the core does this bit >> for loader in loaders do >> loader(path, library, object) >> >> >> Existing Functionality >> >> for loader in loaders do >> for path in paths do -- the loader does this bit >> loader(path, library, object) >> >> .hc >> >> >> _______________________________________________ >> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list _______________________________________________ Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to fix bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote:
I'm not sure that any of the Windows, MaacOS, and linux dynamic loading systems will support having multiple versions of a library loaded in the same address space. But here's a simpler way anyhow: libraries such as vanilla could maintain compatibility by querying the version number of the patch at run time.
In the case of hip~ I'm genuinely not sure whether the "correct" behavior would then be to revert to the old behavior for all old patches or only on request. The confusing scenario I worry about is that you have a patch with an old hip~ object in it, save it from 0.44, and then have it switch to the new behavior next time it's loaded.
I think I have found ad hoc ways to fix the other problems without breaking old patches.
cheers Miller
n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote: > I think having a compatibility version stamp in the patch is a good > idea. This ties in well with the experiments I've been doing with > splitting out all of the objects from pd itself. If all of the core > objects are a standard library, then that means its easy to choose which > version of the standard library that a patch is using. In Pd-extended, > this is called the 'vanilla' lib, and its been included in some form > since 0.42. > > Then if a patch has a compatibility version stamp in it, Pd can > automatically look to see if it has a copy of that version of the > standard library, and load it. Otherwise, it would load the version > closest to that, and throw a warning, or optionally that could be > considered an error. > > To make this work well, the key missing feature is the ability to change > which loaded library an object name maps to in the canvas-local > namespace. Currently, once an object name is mapped to a loaded > .pd_linux, that is a global association. This is needed so that patches > using different standard libs can be open at the same time. > > Then making the versioned standard libs would be pretty easy, mostly > just bundling the right .c files into a lib. > > .hc > > > On 10/02/2012 11:15 AM, Miller Puckette wrote: >> This is in my long-range plan but hasn't yet risen to the level of "urgent". >> However, this migth be a good moment to get started on this because several >> other backward- and even forward-imcompatible needs are also rising to the >> fore: >> >> 1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) >> greater than 1. "fixing" this will change the audio output of older patches, >> usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" >> flag or something to allow strict back compatibility; >> >> 2. There's no place in the pre-0.43 file format to alow specifying individual >> box widths and font sizes; I put an "f" (=format) message to the canvas >> object in 0.43 so that in 0.44 I can make it set font size and box width and >> perhaps leave an opening for other formatting info. >> >> 3. the upsampling inlet~ by default zero-pads its input. This is incorrect as >> its DC gain is less than one. (Try using that as input to a phasor~ for >> instance - bad surprise!) I want to change the default so that it acts like >> a sample-and-hold, which I believe is an option now. To preserve back >> compatibility I'd keep all the "upsampling methods" in place but only change >> default behavior for patches with a 0.44 or later version stamped on them. >> >> Each of these presents a different spin on the age-old issue of keeping >> total back compatibility in place, even when the compatibility is to preserve >> a big as in (1) and (3) - and arguably in the file searching too; I'm not sure >> whether to regard that as a bug or just over-hasty design. >> >> cheers >> Miller >> >>> Here's a good sketch of the idea >>> (http://puredata.info/dev/PdSearchPath): >>> >>> >>> Proposed Functionality >>> >>> for path in paths do -- the core does this bit >>> for loader in loaders do >>> loader(path, library, object) >>> >>> >>> Existing Functionality >>> >>> for loader in loaders do >>> for path in paths do -- the loader does this bit >>> loader(path, library, object) >>> >>> .hc >>> >>> >>> _______________________________________________ >>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list > _______________________________________________ > Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
hello,
since externals can override internals, why not leaving hip~ untouched, and providing a corrected hip~ that is installed in pd/extra/0.44 one can just remove path > 0.43 it pd preference (or even using start-up flag) to have the old hip~, or keeping path untouched to have latest version of pd objects.
cheers c
Le 03/10/2012 02:33, Miller Puckette a écrit :
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to fix bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote: > I'm not sure that any of the Windows, MaacOS, and linux dynamic loading > systems will support having multiple versions of a library loaded in the > same address space. But here's a simpler way anyhow: libraries such as > vanilla could maintain compatibility by querying the version number of > the patch at run time. > > In the case of hip~ I'm genuinely not sure whether the "correct" behavior > would then be to revert to the old behavior for all old patches or only on > request. The confusing scenario I worry about is that you have a patch with > an old hip~ object in it, save it from 0.44, and then have it switch to the > new behavior next time it's loaded. > > I think I have found ad hoc ways to fix the other problems without breaking > old patches. > > cheers > Miller > > n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote: >> I think having a compatibility version stamp in the patch is a good >> idea. This ties in well with the experiments I've been doing with >> splitting out all of the objects from pd itself. If all of the core >> objects are a standard library, then that means its easy to choose which >> version of the standard library that a patch is using. In Pd-extended, >> this is called the 'vanilla' lib, and its been included in some form >> since 0.42. >> >> Then if a patch has a compatibility version stamp in it, Pd can >> automatically look to see if it has a copy of that version of the >> standard library, and load it. Otherwise, it would load the version >> closest to that, and throw a warning, or optionally that could be >> considered an error. >> >> To make this work well, the key missing feature is the ability to change >> which loaded library an object name maps to in the canvas-local >> namespace. Currently, once an object name is mapped to a loaded >> .pd_linux, that is a global association. This is needed so that patches >> using different standard libs can be open at the same time. >> >> Then making the versioned standard libs would be pretty easy, mostly >> just bundling the right .c files into a lib. >> >> .hc >> >> >> On 10/02/2012 11:15 AM, Miller Puckette wrote: >>> This is in my long-range plan but hasn't yet risen to the level of "urgent". >>> However, this migth be a good moment to get started on this because several >>> other backward- and even forward-imcompatible needs are also rising to the >>> fore: >>> >>> 1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) >>> greater than 1. "fixing" this will change the audio output of older patches, >>> usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" >>> flag or something to allow strict back compatibility; >>> >>> 2. There's no place in the pre-0.43 file format to alow specifying individual >>> box widths and font sizes; I put an "f" (=format) message to the canvas >>> object in 0.43 so that in 0.44 I can make it set font size and box width and >>> perhaps leave an opening for other formatting info. >>> >>> 3. the upsampling inlet~ by default zero-pads its input. This is incorrect as >>> its DC gain is less than one. (Try using that as input to a phasor~ for >>> instance - bad surprise!) I want to change the default so that it acts like >>> a sample-and-hold, which I believe is an option now. To preserve back >>> compatibility I'd keep all the "upsampling methods" in place but only change >>> default behavior for patches with a 0.44 or later version stamped on them. >>> >>> Each of these presents a different spin on the age-old issue of keeping >>> total back compatibility in place, even when the compatibility is to preserve >>> a big as in (1) and (3) - and arguably in the file searching too; I'm not sure >>> whether to regard that as a bug or just over-hasty design. >>> >>> cheers >>> Miller >>> >>>> Here's a good sketch of the idea >>>> (http://puredata.info/dev/PdSearchPath): >>>> >>>> >>>> Proposed Functionality >>>> >>>> for path in paths do -- the core does this bit >>>> for loader in loaders do >>>> loader(path, library, object) >>>> >>>> >>>> Existing Functionality >>>> >>>> for loader in loaders do >>>> for path in paths do -- the loader does this bit >>>> loader(path, library, object) >>>> >>>> .hc >>>> >>>> >>>> _______________________________________________ >>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list >> _______________________________________________ >> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Problem is, it's a bug - I want to fix it :)
M
On Wed, Oct 03, 2012 at 11:44:47AM +0200, Cyrille Henry wrote:
hello,
since externals can override internals, why not leaving hip~ untouched, and providing a corrected hip~ that is installed in pd/extra/0.44 one can just remove path > 0.43 it pd preference (or even using start-up flag) to have the old hip~, or keeping path untouched to have latest version of pd objects.
cheers c
Le 03/10/2012 02:33, Miller Puckette a écrit :
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to fix bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote: >Since Pd manually loads the libraries (.pd_linux), it can also manually >map a given function address to the s_thing in the symbol table. There >is no need to load the symbols in a .pd_linux in the sense of a public >shared library, and therefore no nameclashes. Pd could get the address >of the new() function using dlsym() and store that wherever. This is >already happening for the setup() function, so we can do the same thing >to map the new() function to a symbol.. > >So for example, pd could map the new() function to the fully qualified >name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the >canvas_local namespace would the symbol "hip~" be mapped to the new() >function. > >.hc > >On 10/02/2012 05:09 PM, Miller Puckette wrote: >>I'm not sure that any of the Windows, MaacOS, and linux dynamic loading >>systems will support having multiple versions of a library loaded in the >>same address space. But here's a simpler way anyhow: libraries such as >>vanilla could maintain compatibility by querying the version number of >>the patch at run time. >> >>In the case of hip~ I'm genuinely not sure whether the "correct" behavior >>would then be to revert to the old behavior for all old patches or only on >>request. The confusing scenario I worry about is that you have a patch with >>an old hip~ object in it, save it from 0.44, and then have it switch to the >>new behavior next time it's loaded. >> >>I think I have found ad hoc ways to fix the other problems without breaking >>old patches. >> >>cheers >>Miller >> >> n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote: >>>I think having a compatibility version stamp in the patch is a good >>>idea. This ties in well with the experiments I've been doing with >>>splitting out all of the objects from pd itself. If all of the core >>>objects are a standard library, then that means its easy to choose which >>>version of the standard library that a patch is using. In Pd-extended, >>>this is called the 'vanilla' lib, and its been included in some form >>>since 0.42. >>> >>>Then if a patch has a compatibility version stamp in it, Pd can >>>automatically look to see if it has a copy of that version of the >>>standard library, and load it. Otherwise, it would load the version >>>closest to that, and throw a warning, or optionally that could be >>>considered an error. >>> >>>To make this work well, the key missing feature is the ability to change >>>which loaded library an object name maps to in the canvas-local >>>namespace. Currently, once an object name is mapped to a loaded >>>.pd_linux, that is a global association. This is needed so that patches >>>using different standard libs can be open at the same time. >>> >>>Then making the versioned standard libs would be pretty easy, mostly >>>just bundling the right .c files into a lib. >>> >>>.hc >>> >>> >>>On 10/02/2012 11:15 AM, Miller Puckette wrote: >>>>This is in my long-range plan but hasn't yet risen to the level of "urgent". >>>>However, this migth be a good moment to get started on this because several >>>>other backward- and even forward-imcompatible needs are also rising to the >>>>fore: >>>> >>>>1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) >>>>greater than 1. "fixing" this will change the audio output of older patches, >>>>usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" >>>>flag or something to allow strict back compatibility; >>>> >>>>2. There's no place in the pre-0.43 file format to alow specifying individual >>>>box widths and font sizes; I put an "f" (=format) message to the canvas >>>>object in 0.43 so that in 0.44 I can make it set font size and box width and >>>>perhaps leave an opening for other formatting info. >>>> >>>>3. the upsampling inlet~ by default zero-pads its input. This is incorrect as >>>>its DC gain is less than one. (Try using that as input to a phasor~ for >>>>instance - bad surprise!) I want to change the default so that it acts like >>>>a sample-and-hold, which I believe is an option now. To preserve back >>>>compatibility I'd keep all the "upsampling methods" in place but only change >>>>default behavior for patches with a 0.44 or later version stamped on them. >>>> >>>>Each of these presents a different spin on the age-old issue of keeping >>>>total back compatibility in place, even when the compatibility is to preserve >>>>a big as in (1) and (3) - and arguably in the file searching too; I'm not sure >>>>whether to regard that as a bug or just over-hasty design. >>>> >>>>cheers >>>>Miller >>>> >>>>> Here's a good sketch of the idea >>>>> (http://puredata.info/dev/PdSearchPath): >>>>> >>>>> >>>>> Proposed Functionality >>>>> >>>>> for path in paths do -- the core does this bit >>>>> for loader in loaders do >>>>> loader(path, library, object) >>>>> >>>>> >>>>> Existing Functionality >>>>> >>>>> for loader in loaders do >>>>> for path in paths do -- the loader does this bit >>>>> loader(path, library, object) >>>>> >>>>>.hc >>>>> >>>>> >>>>>_______________________________________________ >>>>>Pd-list@iem.at mailing list >>>>>UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list >>>_______________________________________________ >>>Pd-list@iem.at mailing list >>>UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Cyrille Henry ch@chnry.net Cc: pd-list@iem.at Sent: Wednesday, October 3, 2012 11:03 AM Subject: Re: [PD] array size (was Re: arraysize)
Problem is, it's a bug - I want to fix it :)
Please allow the users that want non-buggy behavior to get non-buggy behavior automatically, and require the other set to s/hip~/hip-pre-0.44~/ or whatever the name will be (and I'm assuming you're going to continue to support both versions). -Jonathan
M
On Wed, Oct 03, 2012 at 11:44:47AM +0200, Cyrille Henry wrote:
hello,
since externals can override internals, why not leaving hip~ untouched, and
providing a corrected hip~ that is installed in pd/extra/0.44
one can just remove path > 0.43 it pd preference (or even using start-up
flag) to have the old hip~, or keeping path untouched to have latest version of pd objects.
cheers c
Le 03/10/2012 02:33, Miller Puckette a écrit : >Right, the two demands I'm trying to reconcile are keeping the name >hip~ (so that old patches remain comprehensible) and yet making hip~ >work correctly -- it's a bug fix. Seems to me one ought to be able
to fix
>bugs without diving into library version confusion. > >I think namespaces are very useful to expert programmers but are likely
to
>be confusing to many Pd users -- and its not that much of a necessity
if
>indeed c (in which Pd and linux are implemented) didn't need to
have
>them. > >cheers >Miller > >On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote: >> >>If you think that's the preferrable approach, then
shouldn't it be
>>[newhip~]? One thing libc did not do is break backwards
compatibility
>>of functions. I think the libc example is a better approach than
the
>>-pre-0.44-hip flag or the aliasing to work around the existing
versions
>>of [pow]. >> >>My central point is that Pd should have a fully functioning
namespace
>>like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua,
Haskell,
>>etc. etc.) That's one lesson that we've learned from C.
Part of that
>>is having a standard library that can be overridden. Then if
people
>>want to have old versions of the standard library, they can easily
be
>>accomodated by adding the version number to the name of the
library.
>> >>.hc >> >>On 10/02/2012 07:02 PM, Miller Puckette wrote: >>>The libc way is just to have one libc and kludge your way
through
>>>compatibility problems. For instance, seek() had to be
replaced with lseek(),
>>>gets and fgets were left with not-quite-the-same behavior,
errno was
>>>magically adapted to become a macro that grabbed a thread
variable when
>>>threads appeared, etc. It's not pretty but way preferable
to having
>>>several versions of libc - what a nightmare that would have
been.
>>> >>>cheers >>>Miller >>> >>>On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph
Steiner wrote:
>>>>Is the static variable you are talking about the
"static t_class"
>>>>declaration in the class C files? >>>> >>>>What's the libc way? >>>> >>>>The -pre-0.44-hip way would be easy to implement, but it
has a number of
>>>>problems: >>>> >>>>- there will be many flags like this, -pre-0.42-pow, etc.
etc.
>>>> >>>>- there will be no way to specify in the patch that it
should use a
>>>>specific version of hip~, pow~, etc. That adds complexity
to the patch
>>>>setups since each patch will need an accompanying script
for launching
>>>>Pd properly and means Pd programmers have to learn non-Pd
things like
>>>>scripting to do this. >>>> >>>>.hc >>>> >>>>On 10/02/2012 06:39 PM, Miller Puckette wrote: >>>>>Actually I think my previous post was wrong - what I
was unable to do was
>>>>>get different sets of static variables for dlopen() -
ing the _same file
>>>>>twice_ -- which isn't what we're talking about
here.
>>>>> >>>>>But still, I think the libc way is much simpler and
likely to be much more
>>>>>robust. >>>>> >>>>>cheers >>>>>M >>>>> >>>>>On Tue, Oct 02, 2012 at 06:13:32PM -0400,
Hans-Christoph Steiner wrote:
>>>>>>Since Pd manually loads the libraries (.pd_linux),
it can also manually
>>>>>>map a given function address to the s_thing in the
symbol table. There
>>>>>>is no need to load the symbols in a .pd_linux in
the sense of a public
>>>>>>shared library, and therefore no nameclashes. Pd
could get the address
>>>>>>of the new() function using dlsym() and store that
wherever. This is
>>>>>>already happening for the setup() function, so we
can do the same thing
>>>>>>to map the new() function to a symbol.. >>>>>> >>>>>>So for example, pd could map the new() function to
the fully qualified
>>>>>>name in the symbol table, i.e
"vanilla-0.42.5/hip~", then only in the
>>>>>>canvas_local namespace would the symbol
"hip~" be mapped to the new()
>>>>>>function. >>>>>> >>>>>>.hc >>>>>> >>>>>>On 10/02/2012 05:09 PM, Miller Puckette wrote: >>>>>>>I'm not sure that any of the Windows,
MaacOS, and linux dynamic loading
>>>>>>>systems will support having multiple versions
of a library loaded in the
>>>>>>>same address space. But here's a simpler
way anyhow: libraries such as
>>>>>>>vanilla could maintain compatibility by
querying the version number of
>>>>>>>the patch at run time. >>>>>>> >>>>>>>In the case of hip~ I'm genuinely not sure
whether the "correct" behavior
>>>>>>>would then be to revert to the old behavior for
all old patches or only on
>>>>>>>request. The confusing scenario I worry about
is that you have a patch with
>>>>>>>an old hip~ object in it, save it from 0.44,
and then have it switch to the
>>>>>>>new behavior next time it's loaded. >>>>>>> >>>>>>>I think I have found ad hoc ways to fix the
other problems without breaking
>>>>>>>old patches. >>>>>>> >>>>>>>cheers >>>>>>>Miller >>>>>>> >>>>>>> n Tue, Oct 02, 2012 at 11:36:47AM -0400,
Hans-Christoph Steiner wrote:
>>>>>>>>I think having a compatibility version
stamp in the patch is a good
>>>>>>>>idea. This ties in well with the
experiments I've been doing with
>>>>>>>>splitting out all of the objects from pd
itself. If all of the core
>>>>>>>>objects are a standard library, then that
means its easy to choose which
>>>>>>>>version of the standard library that a
patch is using. In Pd-extended,
>>>>>>>>this is called the 'vanilla' lib,
and its been included in some form
>>>>>>>>since 0.42. >>>>>>>> >>>>>>>>Then if a patch has a compatibility version
stamp in it, Pd can
>>>>>>>>automatically look to see if it has a copy
of that version of the
>>>>>>>>standard library, and load it. Otherwise,
it would load the version
>>>>>>>>closest to that, and throw a warning, or
optionally that could be
>>>>>>>>considered an error. >>>>>>>> >>>>>>>>To make this work well, the key missing
feature is the ability to change
>>>>>>>>which loaded library an object name maps to
in the canvas-local
>>>>>>>>namespace. Currently, once an object name
is mapped to a loaded
>>>>>>>>.pd_linux, that is a global association.
This is needed so that patches
>>>>>>>>using different standard libs can be open
at the same time.
>>>>>>>> >>>>>>>>Then making the versioned standard libs
would be pretty easy, mostly
>>>>>>>>just bundling the right .c files into a
lib.
>>>>>>>> >>>>>>>>.hc >>>>>>>> >>>>>>>> >>>>>>>>On 10/02/2012 11:15 AM, Miller Puckette
wrote:
>>>>>>>>>This is in my long-range plan but
hasn't yet risen to the level of "urgent".
>>>>>>>>>However, this migth be a good moment to
get started on this because several
>>>>>>>>>other backward- and even
forward-imcompatible needs are also rising to the
>>>>>>>>>fore: >>>>>>>>> >>>>>>>>>1. there's a bug in hip~ - its DC
gain is slightly (and possibly considerably)
>>>>>>>>>greater than 1. "fixing"
this will change the audio output of older patches,
>>>>>>>>>usually much too slightly to matter,
but there will have to b a "-pre-0.44-hip"
>>>>>>>>>flag or something to allow strict back
compatibility;
>>>>>>>>> >>>>>>>>>2. There's no place in the pre-0.43
file format to alow specifying individual
>>>>>>>>>box widths and font sizes; I put an
"f" (=format) message to the canvas
>>>>>>>>>object in 0.43 so that in 0.44 I can
make it set font size and box width and
>>>>>>>>>perhaps leave an opening for other
formatting info.
>>>>>>>>> >>>>>>>>>3. the upsampling inlet~ by default
zero-pads its input. This is incorrect as
>>>>>>>>>its DC gain is less than one. (Try
using that as input to a phasor~ for
>>>>>>>>>instance - bad surprise!) I want to
change the default so that it acts like
>>>>>>>>>a sample-and-hold, which I believe is
an option now. To preserve back
>>>>>>>>>compatibility I'd keep all the
"upsampling methods" in place but only change
>>>>>>>>>default behavior for patches with a
0.44 or later version stamped on them.
>>>>>>>>> >>>>>>>>>Each of these presents a different spin
on the age-old issue of keeping
>>>>>>>>>total back compatibility in place, even
when the compatibility is to preserve
>>>>>>>>>a big as in (1) and (3) - and arguably
in the file searching too; I'm not sure
>>>>>>>>>whether to regard that as a bug or just
over-hasty design.
>>>>>>>>> >>>>>>>>>cheers >>>>>>>>>Miller >>>>>>>>> >>>>>>>>>> Here's a good sketch of
the idea
>>>>>>>>>>
(http://puredata.info/dev/PdSearchPath):
>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Proposed Functionality >>>>>>>>>> >>>>>>>>>> for path in paths do -- the
core does this bit
>>>>>>>>>> for loader in loaders do >>>>>>>>>> loader(path, library,
object)
>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Existing Functionality >>>>>>>>>> >>>>>>>>>> for loader in loaders do >>>>>>>>>> for path in paths do -- the
loader does this bit
>>>>>>>>>> loader(path, library,
object)
>>>>>>>>>> >>>>>>>>>>.hc >>>>>>>>>> >>>>>>>>>>
>>>>> _______________________________________________
>>>>>>>>>>Pd-list@iem.at mailing list >>>>>>>>>>UNSUBSCRIBE and account-management
-> http://lists.puredata.info/listinfo/pd-list
>>> _______________________________________________
>>>>>>>>Pd-list@iem.at mailing list >>>>>>>>UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
>> > >_______________________________________________ >Pd-list@iem.at mailing list >UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
>
_______________________________________________ Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 2012-10-03 17:43, Jonathan Wilkes wrote:
----- Original Message -----
From: Miller Puckette msp@ucsd.edu To: Cyrille Henry ch@chnry.net Cc: pd-list@iem.at Sent: Wednesday, October 3, 2012 11:03 AM Subject: Re: [PD] array size (was Re: arraysize)
Problem is, it's a bug - I want to fix it :)
Please allow the users that want non-buggy behavior to get non-buggy behavior automatically, and require the other set to s/hip~/hip-pre-0.44~/ or whatever the name will be (and I'm assuming you're going to continue to support both versions).
i'd rather create a library that provides a [hip~] with the old-and-buggy behaviour, and fix [hip~] in Pd-vanilla.
so if somebody wants the old behaviour, they simply load that library (which will override the built-in [hip~]) and will be happy.
fmgasdr IOhannes
PS: oops, on rereading your mail, i see that this is not a contradiction at all.
For the hip~ problem, I'm fine with just fixing it in 0.44, leaving it as hip~, and being done with it. I agree with Jonathan: the default behavior should be the non-buggy behavior.
The issue I am addressing is the -pre-0.44-hip idea and other ideas for providing backwards compatibility. Namespaces provide a nice, clean technique for doing this, on top of other advantages. And if we implement them right, people will only need to know about them if then need to do advanced things like running a patch in 0.44 while using a 0.42 compatibility mode.
Most users are just going to see the [import] or [declare] statement in a patch. I think that's proven to be a much more newbie-friendly way to load external libraries than command line flags, especially on Mac and Windows.
Namespaces are part of general programming, and are essential unless you are willing to greatly limit the domain the language is used for. I think we can implement namespaces that are simple and Pdish. I think we're close. Even C requires the use of a crufty form of namespaces. Try writing a C program without a single #include.
.hc
On 10/02/2012 08:33 PM, Miller Puckette wrote:
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to fix bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote:
Since Pd manually loads the libraries (.pd_linux), it can also manually map a given function address to the s_thing in the symbol table. There is no need to load the symbols in a .pd_linux in the sense of a public shared library, and therefore no nameclashes. Pd could get the address of the new() function using dlsym() and store that wherever. This is already happening for the setup() function, so we can do the same thing to map the new() function to a symbol..
So for example, pd could map the new() function to the fully qualified name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the canvas_local namespace would the symbol "hip~" be mapped to the new() function.
.hc
On 10/02/2012 05:09 PM, Miller Puckette wrote: > I'm not sure that any of the Windows, MaacOS, and linux dynamic loading > systems will support having multiple versions of a library loaded in the > same address space. But here's a simpler way anyhow: libraries such as > vanilla could maintain compatibility by querying the version number of > the patch at run time. > > In the case of hip~ I'm genuinely not sure whether the "correct" behavior > would then be to revert to the old behavior for all old patches or only on > request. The confusing scenario I worry about is that you have a patch with > an old hip~ object in it, save it from 0.44, and then have it switch to the > new behavior next time it's loaded. > > I think I have found ad hoc ways to fix the other problems without breaking > old patches. > > cheers > Miller > > n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote: >> I think having a compatibility version stamp in the patch is a good >> idea. This ties in well with the experiments I've been doing with >> splitting out all of the objects from pd itself. If all of the core >> objects are a standard library, then that means its easy to choose which >> version of the standard library that a patch is using. In Pd-extended, >> this is called the 'vanilla' lib, and its been included in some form >> since 0.42. >> >> Then if a patch has a compatibility version stamp in it, Pd can >> automatically look to see if it has a copy of that version of the >> standard library, and load it. Otherwise, it would load the version >> closest to that, and throw a warning, or optionally that could be >> considered an error. >> >> To make this work well, the key missing feature is the ability to change >> which loaded library an object name maps to in the canvas-local >> namespace. Currently, once an object name is mapped to a loaded >> .pd_linux, that is a global association. This is needed so that patches >> using different standard libs can be open at the same time. >> >> Then making the versioned standard libs would be pretty easy, mostly >> just bundling the right .c files into a lib. >> >> .hc >> >> >> On 10/02/2012 11:15 AM, Miller Puckette wrote: >>> This is in my long-range plan but hasn't yet risen to the level of "urgent". >>> However, this migth be a good moment to get started on this because several >>> other backward- and even forward-imcompatible needs are also rising to the >>> fore: >>> >>> 1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) >>> greater than 1. "fixing" this will change the audio output of older patches, >>> usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" >>> flag or something to allow strict back compatibility; >>> >>> 2. There's no place in the pre-0.43 file format to alow specifying individual >>> box widths and font sizes; I put an "f" (=format) message to the canvas >>> object in 0.43 so that in 0.44 I can make it set font size and box width and >>> perhaps leave an opening for other formatting info. >>> >>> 3. the upsampling inlet~ by default zero-pads its input. This is incorrect as >>> its DC gain is less than one. (Try using that as input to a phasor~ for >>> instance - bad surprise!) I want to change the default so that it acts like >>> a sample-and-hold, which I believe is an option now. To preserve back >>> compatibility I'd keep all the "upsampling methods" in place but only change >>> default behavior for patches with a 0.44 or later version stamped on them. >>> >>> Each of these presents a different spin on the age-old issue of keeping >>> total back compatibility in place, even when the compatibility is to preserve >>> a big as in (1) and (3) - and arguably in the file searching too; I'm not sure >>> whether to regard that as a bug or just over-hasty design. >>> >>> cheers >>> Miller >>> >>>> Here's a good sketch of the idea >>>> (http://puredata.info/dev/PdSearchPath): >>>> >>>> >>>> Proposed Functionality >>>> >>>> for path in paths do -- the core does this bit >>>> for loader in loaders do >>>> loader(path, library, object) >>>> >>>> >>>> Existing Functionality >>>> >>>> for loader in loaders do >>>> for path in paths do -- the loader does this bit >>>> loader(path, library, object) >>>> >>>> .hc >>>> >>>> >>>> _______________________________________________ >>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list >> _______________________________________________ >> Pd-list@iem.at mailing list >> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
When someone decides to implement this, please kill two birds with one stone by having a look at Tim Blechmann's "bindable objects" scope from Nova: http://tim.klingt.org/publications/tim_blechmann_nova.pdf (2.1.4, p. 16) In my limited understanding this is _exactly_ the system you want for namespaces-- that is, if you have [import lib2.0] on patch foo, and patch foo has abstraction [bar] inside which there is an [import lib1.0], you want [bar]'s environment to have lib1.0 and not lib2.0. That's how his bindable object system works (i.e., scope for send/receive-symbols). He overloaded the [declare] object in order to achieve this but it's not necessary to do that-- it could be a completely different class name in order to implement this functionality, I'm just saying that at the core of it these two are the same problem. BTW-- there are two revisions I'd make for his bindable objects that don't necessarily have to apply to library namespaces:
abstraction class, as opposed to an instance. Example: I want to send a message inside abstraction [bar] using [s blah] and have it sent to every "blah" receiver in every extant [bar] abstraction in this Pd instance. 2) the ability to define a receive-symbol in the scope of a libdir. Example: I want to send a message inside abstraction [bar] (which belongs to library "somelib") using [s blah] and have it sent to every "blah" receiver in every extant object that is part of the "somelib" library. A real world example is your GLOBAL_PDDP_DSP_STATUS thing in PDDP (which doesn't actually work because you can't query the current dsp status). Both #1/#2 are doable using iemguts (plus maybe a few other externals) OR my canvas get patch. I can make a demo patch for the latter if you'd like. -Jonathan
----- Original Message -----
From: Hans-Christoph Steiner hans@at.or.at To: Miller Puckette msp@ucsd.edu Cc: pd-list@iem.at Sent: Wednesday, October 3, 2012 2:45 PM Subject: Re: [PD] array size (was Re: arraysize)
For the hip~ problem, I'm fine with just fixing it in 0.44, leaving it as hip~, and being done with it. I agree with Jonathan: the default behavior should be the non-buggy behavior.
The issue I am addressing is the -pre-0.44-hip idea and other ideas for providing backwards compatibility. Namespaces provide a nice, clean technique for doing this, on top of other advantages. And if we implement them right, people will only need to know about them if then need to do advanced things like running a patch in 0.44 while using a 0.42 compatibility mode.
Most users are just going to see the [import] or [declare] statement in a patch. I think that's proven to be a much more newbie-friendly way to load external libraries than command line flags, especially on Mac and Windows.
Namespaces are part of general programming, and are essential unless you are willing to greatly limit the domain the language is used for. I think we can implement namespaces that are simple and Pdish. I think we're close. Even C requires the use of a crufty form of namespaces. Try writing a C program without a single #include.
A few questions:
patch foo has [import lib2.0] on it as well as abstraction [foo]. Inside [foo]
.hc
On 10/02/2012 08:33 PM, Miller Puckette wrote:
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to
fix
bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it
be
[newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part
of that
is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced
with lseek(),
gets and fgets were left with not-quite-the-same behavior, errno
was
magically adapted to become a macro that grabbed a thread variable
when
threads appeared, etc. It's not pretty but way preferable to
having
several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner
wrote:
Is the static variable you are talking about the "static
t_class"
declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a
number of
problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should
use a
specific version of hip~, pow~, etc. That adds complexity to
the patch
setups since each patch will need an accompanying script for
launching
Pd properly and means Pd programmers have to learn non-Pd
things like
scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was
unable to do was
get different sets of static variables for dlopen() - ing
the _same file
twice_ -- which isn't what we're talking about
here.
But still, I think the libc way is much simpler and likely
to be much more
robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph
Steiner wrote:
> Since Pd manually loads the libraries (.pd_linux), it
can also manually
> map a given function address to the s_thing in the
symbol table. There
> is no need to load the symbols in a .pd_linux in the
sense of a public
> shared library, and therefore no nameclashes. Pd could
get the address
> of the new() function using dlsym() and store that
wherever. This is
> already happening for the setup() function, so we can
do the same thing
> to map the new() function to a symbol.. > > So for example, pd could map the new() function to the
fully qualified
> name in the symbol table, i.e
"vanilla-0.42.5/hip~", then only in the
> canvas_local namespace would the symbol
"hip~" be mapped to the new()
> function. > > .hc > > On 10/02/2012 05:09 PM, Miller Puckette wrote: >> I'm not sure that any of the Windows, MaacOS,
and linux dynamic loading
>> systems will support having multiple versions of a
library loaded in the
>> same address space. But here's a simpler way
anyhow: libraries such as
>> vanilla could maintain compatibility by querying
the version number of
>> the patch at run time. >> >> In the case of hip~ I'm genuinely not sure
whether the "correct" behavior
>> would then be to revert to the old behavior for all
old patches or only on
>> request. The confusing scenario I worry about is
that you have a patch with
>> an old hip~ object in it, save it from 0.44, and
then have it switch to the
>> new behavior next time it's loaded. >> >> I think I have found ad hoc ways to fix the other
problems without breaking
>> old patches. >> >> cheers >> Miller >> >> n Tue, Oct 02, 2012 at 11:36:47AM -0400,
Hans-Christoph Steiner wrote:
>>> I think having a compatibility version stamp in
the patch is a good
>>> idea. This ties in well with the experiments
I've been doing with
>>> splitting out all of the objects from pd
itself. If all of the core
>>> objects are a standard library, then that means
its easy to choose which
>>> version of the standard library that a patch is
using. In Pd-extended,
>>> this is called the 'vanilla' lib, and
its been included in some form
>>> since 0.42. >>> >>> Then if a patch has a compatibility version
stamp in it, Pd can
>>> automatically look to see if it has a copy of
that version of the
>>> standard library, and load it. Otherwise, it
would load the version
>>> closest to that, and throw a warning, or
optionally that could be
>>> considered an error. >>> >>> To make this work well, the key missing feature
is the ability to change
>>> which loaded library an object name maps to in
the canvas-local
>>> namespace. Currently, once an object name is
mapped to a loaded
>>> .pd_linux, that is a global association. This
is needed so that patches
>>> using different standard libs can be open at
the same time.
>>> >>> Then making the versioned standard libs would
be pretty easy, mostly
>>> just bundling the right .c files into a lib. >>> >>> .hc >>> >>> >>> On 10/02/2012 11:15 AM, Miller Puckette wrote: >>>> This is in my long-range plan but
hasn't yet risen to the level of "urgent".
>>>> However, this migth be a good moment to get
started on this because several
>>>> other backward- and even
forward-imcompatible needs are also rising to the
>>>> fore: >>>> >>>> 1. there's a bug in hip~ - its DC gain
is slightly (and possibly considerably)
>>>> greater than 1. "fixing" this
will change the audio output of older patches,
>>>> usually much too slightly to matter, but
there will have to b a "-pre-0.44-hip"
>>>> flag or something to allow strict back
compatibility;
>>>> >>>> 2. There's no place in the pre-0.43
file format to alow specifying individual
>>>> box widths and font sizes; I put an
"f" (=format) message to the canvas
>>>> object in 0.43 so that in 0.44 I can make
it set font size and box width and
>>>> perhaps leave an opening for other
formatting info.
>>>> >>>> 3. the upsampling inlet~ by default
zero-pads its input. This is incorrect as
>>>> its DC gain is less than one. (Try using
that as input to a phasor~ for
>>>> instance - bad surprise!) I want to change
the default so that it acts like
>>>> a sample-and-hold, which I believe is an
option now. To preserve back
>>>> compatibility I'd keep all the
"upsampling methods" in place but only change
>>>> default behavior for patches with a 0.44 or
later version stamped on them.
>>>> >>>> Each of these presents a different spin on
the age-old issue of keeping
>>>> total back compatibility in place, even
when the compatibility is to preserve
>>>> a big as in (1) and (3) - and arguably in
the file searching too; I'm not sure
>>>> whether to regard that as a bug or just
over-hasty design.
>>>> >>>> cheers >>>> Miller >>>> >>>>> Here's a good sketch of the
idea
>>>>>
(http://puredata.info/dev/PdSearchPath):
>>>>> >>>>> >>>>> Proposed Functionality >>>>> >>>>> for path in paths do -- the core
does this bit
>>>>> for loader in loaders do >>>>> loader(path, library, object) >>>>> >>>>> >>>>> Existing Functionality >>>>> >>>>> for loader in loaders do >>>>> for path in paths do -- the loader
does this bit
>>>>> loader(path, library, object) >>>>> >>>>> .hc >>>>> >>>>> >>>>>
>>>>> Pd-list@iem.at mailing list >>>>> UNSUBSCRIBE and account-management
-> http://lists.puredata.info/listinfo/pd-list
>>> _______________________________________________ >>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
I think you can't fix a bug in a core object and retain complete backwards compatibility in terms of the audio result of old patches, unless you implement a "pre-0.44 mode" or something. But why would you want to do that? Perhaps a method can be used to switch between the two modes in hip~, but that might introduce a small overhead.
I think the integrity of the objects in terms of what they should do is more important than total backwards compatibilty - old patches will still load, but they may not sound _exactly_ the same. Personally I'd like hip~ to do highpass filtering properly, and so my expectation when I invoke hip~ is that it will do exactly that. Having a patch that "works like this but I don't know why" is a bad thing. I'd be sure to find the tiny DC component a nuisance at some point.
Ed
For the hip~ problem, I'm fine with just fixing it in 0.44, leaving it as hip~, and being done with it. I agree with Jonathan: the default behavior should be the non-buggy behavior.
The issue I am addressing is the -pre-0.44-hip idea and other ideas for providing backwards compatibility. Namespaces provide a nice, clean technique for doing this, on top of other advantages. And if we implement them right, people will only need to know about them if then need to do advanced things like running a patch in 0.44 while using a 0.42 compatibility mode.
Most users are just going to see the [import] or [declare] statement in a patch. I think that's proven to be a much more newbie-friendly way to load external libraries than command line flags, especially on Mac and Windows.
Namespaces are part of general programming, and are essential unless you are willing to greatly limit the domain the language is used for. I think we can implement namespaces that are simple and Pdish. I think we're close. Even C requires the use of a crufty form of namespaces. Try writing a C program without a single #include.
.hc
On 10/02/2012 08:33 PM, Miller Puckette wrote:
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able to fix bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely to be confusing to many Pd users -- and its not that much of a necessity if indeed c (in which Pd and linux are implemented) didn't need to have them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then shouldn't it be [newhip~]? One thing libc did not do is break backwards compatibility of functions. I think the libc example is a better approach than the -pre-0.44-hip flag or the aliasing to work around the existing versions of [pow].
My central point is that Pd should have a fully functioning namespace like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua, Haskell, etc. etc.) That's one lesson that we've learned from C. Part of that is having a standard library that can be overridden. Then if people want to have old versions of the standard library, they can easily be accomodated by adding the version number to the name of the library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way through compatibility problems. For instance, seek() had to be replaced with lseek(), gets and fgets were left with not-quite-the-same behavior, errno was magically adapted to become a macro that grabbed a thread variable when threads appeared, etc. It's not pretty but way preferable to having several versions of libc - what a nightmare that would have been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph Steiner wrote:
Is the static variable you are talking about the "static t_class" declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it has a number of problems:
there will be many flags like this, -pre-0.42-pow, etc. etc.
there will be no way to specify in the patch that it should use a
specific version of hip~, pow~, etc. That adds complexity to the patch setups since each patch will need an accompanying script for launching Pd properly and means Pd programmers have to learn non-Pd things like scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote:
Actually I think my previous post was wrong - what I was unable to do was get different sets of static variables for dlopen() - ing the _same file twice_ -- which isn't what we're talking about here.
But still, I think the libc way is much simpler and likely to be much more robust.
cheers M
On Tue, Oct 02, 2012 at 06:13:32PM -0400, Hans-Christoph Steiner wrote: > Since Pd manually loads the libraries (.pd_linux), it can also manually > map a given function address to the s_thing in the symbol table. There > is no need to load the symbols in a .pd_linux in the sense of a public > shared library, and therefore no nameclashes. Pd could get the address > of the new() function using dlsym() and store that wherever. This is > already happening for the setup() function, so we can do the same thing > to map the new() function to a symbol.. > > So for example, pd could map the new() function to the fully qualified > name in the symbol table, i.e "vanilla-0.42.5/hip~", then only in the > canvas_local namespace would the symbol "hip~" be mapped to the new() > function. > > .hc > > On 10/02/2012 05:09 PM, Miller Puckette wrote: >> I'm not sure that any of the Windows, MaacOS, and linux dynamic loading >> systems will support having multiple versions of a library loaded in the >> same address space. But here's a simpler way anyhow: libraries such as >> vanilla could maintain compatibility by querying the version number of >> the patch at run time. >> >> In the case of hip~ I'm genuinely not sure whether the "correct" behavior >> would then be to revert to the old behavior for all old patches or only on >> request. The confusing scenario I worry about is that you have a patch with >> an old hip~ object in it, save it from 0.44, and then have it switch to the >> new behavior next time it's loaded. >> >> I think I have found ad hoc ways to fix the other problems without breaking >> old patches. >> >> cheers >> Miller >> >> n Tue, Oct 02, 2012 at 11:36:47AM -0400, Hans-Christoph Steiner wrote: >>> I think having a compatibility version stamp in the patch is a good >>> idea. This ties in well with the experiments I've been doing with >>> splitting out all of the objects from pd itself. If all of the core >>> objects are a standard library, then that means its easy to choose which >>> version of the standard library that a patch is using. In Pd-extended, >>> this is called the 'vanilla' lib, and its been included in some form >>> since 0.42. >>> >>> Then if a patch has a compatibility version stamp in it, Pd can >>> automatically look to see if it has a copy of that version of the >>> standard library, and load it. Otherwise, it would load the version >>> closest to that, and throw a warning, or optionally that could be >>> considered an error. >>> >>> To make this work well, the key missing feature is the ability to change >>> which loaded library an object name maps to in the canvas-local >>> namespace. Currently, once an object name is mapped to a loaded >>> .pd_linux, that is a global association. This is needed so that patches >>> using different standard libs can be open at the same time. >>> >>> Then making the versioned standard libs would be pretty easy, mostly >>> just bundling the right .c files into a lib. >>> >>> .hc >>> >>> >>> On 10/02/2012 11:15 AM, Miller Puckette wrote: >>>> This is in my long-range plan but hasn't yet risen to the level of "urgent". >>>> However, this migth be a good moment to get started on this because several >>>> other backward- and even forward-imcompatible needs are also rising to the >>>> fore: >>>> >>>> 1. there's a bug in hip~ - its DC gain is slightly (and possibly considerably) >>>> greater than 1. "fixing" this will change the audio output of older patches, >>>> usually much too slightly to matter, but there will have to b a "-pre-0.44-hip" >>>> flag or something to allow strict back compatibility; >>>> >>>> 2. There's no place in the pre-0.43 file format to alow specifying individual >>>> box widths and font sizes; I put an "f" (=format) message to the canvas >>>> object in 0.43 so that in 0.44 I can make it set font size and box width and >>>> perhaps leave an opening for other formatting info. >>>> >>>> 3. the upsampling inlet~ by default zero-pads its input. This is incorrect as >>>> its DC gain is less than one. (Try using that as input to a phasor~ for >>>> instance - bad surprise!) I want to change the default so that it acts like >>>> a sample-and-hold, which I believe is an option now. To preserve back >>>> compatibility I'd keep all the "upsampling methods" in place but only change >>>> default behavior for patches with a 0.44 or later version stamped on them. >>>> >>>> Each of these presents a different spin on the age-old issue of keeping >>>> total back compatibility in place, even when the compatibility is to preserve >>>> a big as in (1) and (3) - and arguably in the file searching too; I'm not sure >>>> whether to regard that as a bug or just over-hasty design. >>>> >>>> cheers >>>> Miller >>>> >>>>> Here's a good sketch of the idea >>>>> (http://puredata.info/dev/PdSearchPath): >>>>> >>>>> >>>>> Proposed Functionality >>>>> >>>>> for path in paths do -- the core does this bit >>>>> for loader in loaders do >>>>> loader(path, library, object) >>>>> >>>>> >>>>> Existing Functionality >>>>> >>>>> for loader in loaders do >>>>> for path in paths do -- the loader does this bit >>>>> loader(path, library, object) >>>>> >>>>> .hc >>>>> >>>>> >>>>> _______________________________________________ >>>>> Pd-list@iem.at mailing list >>>>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list >>> _______________________________________________ >>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
----- Original Message -----
From: Ed Kelly morph_2016@yahoo.co.uk To: Hans-Christoph Steiner hans@at.or.at; Miller Puckette msp@ucsd.edu Cc: "pd-list@iem.at" pd-list@iem.at Sent: Wednesday, October 3, 2012 11:56 PM Subject: Re: [PD] array size (was Re: arraysize)
I think you can't fix a bug in a core object and retain complete backwards compatibility in terms of the audio result of old patches, unless you implement a "pre-0.44 mode" or something. But why would you want to do that? Perhaps a method can be used to switch between the two modes in hip~, but that might introduce a small overhead.
I think the integrity of the objects in terms of what they should do is more important than total backwards compatibilty - old patches will still load, but they may not sound _exactly_ the same. Personally I'd like hip~ to do highpass filtering properly, and so my expectation when I invoke hip~ is that it will do exactly that. Having a patch that "works like this but I don't know why" is a bad thing. I'd be sure to find the tiny DC component a nuisance at some point.
Did you?
Ed
For the hip~ problem, I'm fine with just fixing it in 0.44, leaving it as hip~, and being done with it. I agree with Jonathan: the default behavior should be the non-buggy behavior.
The issue I am addressing is the -pre-0.44-hip idea and other ideas for providing backwards compatibility. Namespaces provide a nice, clean technique for doing this, on top of other advantages. And if we implement them right, people will only need to know about them if then need to do advanced things like running a patch in 0.44 while using a 0.42 compatibility mode.
Most users are just going to see the [import] or [declare] statement in a patch. I think that's proven to be a much more newbie-friendly way to load external libraries than command line flags, especially on Mac and Windows.
Namespaces are part of general programming, and are essential unless you are willing to greatly limit the domain the language is used for. I think we can implement namespaces that are simple and Pdish. I think we're close. Even C requires the use of a crufty form of namespaces. Try writing a C program without a single #include.
.hc
On 10/02/2012 08:33 PM, Miller Puckette wrote:
Right, the two demands I'm trying to reconcile are keeping the name hip~ (so that old patches remain comprehensible) and yet making hip~ work correctly -- it's a bug fix. Seems to me one ought to be able
to fix
bugs without diving into library version confusion.
I think namespaces are very useful to expert programmers but are likely
to
be confusing to many Pd users -- and its not that much of a necessity
if
indeed c (in which Pd and linux are implemented) didn't need to
have
them.
cheers Miller
On Tue, Oct 02, 2012 at 08:24:19PM -0400, Hans-Christoph Steiner wrote:
If you think that's the preferrable approach, then
shouldn't it be
[newhip~]? One thing libc did not do is break backwards
compatibility
of functions. I think the libc example is a better approach than
the
-pre-0.44-hip flag or the aliasing to work around the existing
versions
of [pow].
My central point is that Pd should have a fully functioning
namespace
like modern languages do (C++, Obj-C, Java, Python, Ruby, Lua,
Haskell,
etc. etc.) That's one lesson that we've learned from C.
Part of that
is having a standard library that can be overridden. Then if
people
want to have old versions of the standard library, they can easily
be
accomodated by adding the version number to the name of the
library.
.hc
On 10/02/2012 07:02 PM, Miller Puckette wrote:
The libc way is just to have one libc and kludge your way
through
compatibility problems. For instance, seek() had to be
replaced with lseek(),
gets and fgets were left with not-quite-the-same behavior,
errno was
magically adapted to become a macro that grabbed a thread
variable when
threads appeared, etc. It's not pretty but way preferable
to having
several versions of libc - what a nightmare that would have
been.
cheers Miller
On Tue, Oct 02, 2012 at 06:48:46PM -0400, Hans-Christoph
Steiner wrote:
Is the static variable you are talking about the
"static t_class"
declaration in the class C files?
What's the libc way?
The -pre-0.44-hip way would be easy to implement, but it
has a number of
problems:
- there will be many flags like this, -pre-0.42-pow, etc.
etc.
- there will be no way to specify in the patch that it
should use a
specific version of hip~, pow~, etc. That adds complexity
to the patch
setups since each patch will need an accompanying script
for launching
Pd properly and means Pd programmers have to learn non-Pd
things like
scripting to do this.
.hc
On 10/02/2012 06:39 PM, Miller Puckette wrote: > Actually I think my previous post was wrong - what I
was unable to do was
> get different sets of static variables for dlopen() -
ing the _same file
> twice_ -- which isn't what we're talking about
here.
> > But still, I think the libc way is much simpler and
likely to be much more
> robust. > > cheers > M > > On Tue, Oct 02, 2012 at 06:13:32PM -0400,
Hans-Christoph Steiner wrote:
>> Since Pd manually loads the libraries (.pd_linux),
it can also manually
>> map a given function address to the s_thing in the
symbol table. There
>> is no need to load the symbols in a .pd_linux in
the sense of a public
>> shared library, and therefore no nameclashes. Pd
could get the address
>> of the new() function using dlsym() and store that
wherever. This is
>> already happening for the setup() function, so we
can do the same thing
>> to map the new() function to a symbol.. >> >> So for example, pd could map the new() function to
the fully qualified
>> name in the symbol table, i.e
"vanilla-0.42.5/hip~", then only in the
>> canvas_local namespace would the symbol
"hip~" be mapped to the new()
>> function. >> >> .hc >> >> On 10/02/2012 05:09 PM, Miller Puckette wrote: >>> I'm not sure that any of the Windows,
MaacOS, and linux dynamic loading
>>> systems will support having multiple versions
of a library loaded in the
>>> same address space. But here's a simpler
way anyhow: libraries such as
>>> vanilla could maintain compatibility by
querying the version number of
>>> the patch at run time. >>> >>> In the case of hip~ I'm genuinely not sure
whether the "correct" behavior
>>> would then be to revert to the old behavior for
all old patches or only on
>>> request. The confusing scenario I worry about
is that you have a patch with
>>> an old hip~ object in it, save it from 0.44,
and then have it switch to the
>>> new behavior next time it's loaded. >>> >>> I think I have found ad hoc ways to fix the
other problems without breaking
>>> old patches. >>> >>> cheers >>> Miller >>> >>> n Tue, Oct 02, 2012 at 11:36:47AM -0400,
Hans-Christoph Steiner wrote:
>>>> I think having a compatibility version
stamp in the patch is a good
>>>> idea. This ties in well with the
experiments I've been doing with
>>>> splitting out all of the objects from pd
itself. If all of the core
>>>> objects are a standard library, then that
means its easy to choose which
>>>> version of the standard library that a
patch is using. In Pd-extended,
>>>> this is called the 'vanilla' lib,
and its been included in some form
>>>> since 0.42. >>>> >>>> Then if a patch has a compatibility version
stamp in it, Pd can
>>>> automatically look to see if it has a copy
of that version of the
>>>> standard library, and load it. Otherwise,
it would load the version
>>>> closest to that, and throw a warning, or
optionally that could be
>>>> considered an error. >>>> >>>> To make this work well, the key missing
feature is the ability to change
>>>> which loaded library an object name maps to
in the canvas-local
>>>> namespace. Currently, once an object name
is mapped to a loaded
>>>> .pd_linux, that is a global association.
This is needed so that patches
>>>> using different standard libs can be open
at the same time.
>>>> >>>> Then making the versioned standard libs
would be pretty easy, mostly
>>>> just bundling the right .c files into a
lib.
>>>> >>>> .hc >>>> >>>> >>>> On 10/02/2012 11:15 AM, Miller Puckette
wrote:
>>>>> This is in my long-range plan but
hasn't yet risen to the level of "urgent".
>>>>> However, this migth be a good moment to
get started on this because several
>>>>> other backward- and even
forward-imcompatible needs are also rising to the
>>>>> fore: >>>>> >>>>> 1. there's a bug in hip~ - its DC
gain is slightly (and possibly considerably)
>>>>> greater than 1. "fixing"
this will change the audio output of older patches,
>>>>> usually much too slightly to matter,
but there will have to b a "-pre-0.44-hip"
>>>>> flag or something to allow strict back
compatibility;
>>>>> >>>>> 2. There's no place in the pre-0.43
file format to alow specifying individual
>>>>> box widths and font sizes; I put an
"f" (=format) message to the canvas
>>>>> object in 0.43 so that in 0.44 I can
make it set font size and box width and
>>>>> perhaps leave an opening for other
formatting info.
>>>>> >>>>> 3. the upsampling inlet~ by default
zero-pads its input. This is incorrect as
>>>>> its DC gain is less than one. (Try
using that as input to a phasor~ for
>>>>> instance - bad surprise!) I want to
change the default so that it acts like
>>>>> a sample-and-hold, which I believe is
an option now. To preserve back
>>>>> compatibility I'd keep all the
"upsampling methods" in place but only change
>>>>> default behavior for patches with a
0.44 or later version stamped on them.
>>>>> >>>>> Each of these presents a different spin
on the age-old issue of keeping
>>>>> total back compatibility in place, even
when the compatibility is to preserve
>>>>> a big as in (1) and (3) - and arguably
in the file searching too; I'm not sure
>>>>> whether to regard that as a bug or just
over-hasty design.
>>>>> >>>>> cheers >>>>> Miller >>>>> >>>>>> Here's a good sketch of
the idea
>>>>>>
(http://puredata.info/dev/PdSearchPath):
>>>>>> >>>>>> >>>>>> Proposed Functionality >>>>>> >>>>>> for path in paths do -- the core
does this bit
>>>>>> for loader in loaders do >>>>>> loader(path, library,
object)
>>>>>> >>>>>> >>>>>> Existing Functionality >>>>>> >>>>>> for loader in loaders do >>>>>> for path in paths do -- the
loader does this bit
>>>>>> loader(path, library, object) >>>>>> >>>>>> .hc >>>>>> >>>>>> >>>>>>
>>>>>> Pd-list@iem.at mailing list >>>>>> UNSUBSCRIBE and account-management
-> http://lists.puredata.info/listinfo/pd-list
>>>>
>>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
will do exactly that. Having a patch that "works like this but I don't know why" is a bad thing. I'd be sure to find the tiny DC component a nuisance at some point.
Did you?
Well...thanks for asking. I feel mildly stupid for suggesting that, but this has caused me to test my hypothesis and the result is enclosed. When Miller says tiny, I'm sure he means very tiny indeed. I've made a test patch to demonstrate - highpass filtering on a modulation signal to an [osc~] object. If there was a significant DC offset then the carrier frequency of the [osc~] would be offset slightly as the modulation index is increased. I can confirm that this is not the case...so I really don't think anyone will notice if it is fixed.
It's quite a nice modulation effect actually! I may use it.
Thank you for your time, Ed
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 2012-10-02 17:15, Miller Puckette wrote:
- There's no place in the pre-0.43 file format to alow specifying
individual box widths and font sizes; I put an "f" (=format) message to the canvas object in 0.43 so that in 0.44 I can make it set font size and box width and perhaps leave an opening for other formatting info.
should this be able to set the properties per-box? how would a patch look like?
<snip> #X obj 111 169 f; #X obj 111 192 +; #X f font-size 12 #X f font-face Helvetica </snip>
this has no idea of which objects to modify, so probably something like:
<snip> #X obj 111 169 f; #X obj 111 192 +; #X f 0 font-size 12 #X f 0 font-face Helvetica #X f 1 font-size 12 </snip>
how about borrowing from the "#A" idea to load arrays?
<snip> #X obj 111 169 f; #F font-size 12; #F font-face Helvetica; #F bbox 100 50; #X obj 111 192 +; #F font-size 8; </snip>
...where those "#F" lines are ordinary messages that are sent to a per-object "gui-proxy object" that controls the visual appearance of the object?
speaking of "#A": would it add any incompatibility, if the array-loading mechanism could be extended to _all_ objects. e.g. if an array is saved in-patch, we get something like
<snip> #X array array1 3 float 3; #A 0 -0.5 -0.3 -0.1; #X array array2 3 float 3; #A 0 0.5 0.3 0.1; </snip>
after the 1st line (that creates 'array1'), the receiver "#A" is bound to this newly created array. in the 2nd line a message is sent to array1 via this receiver. in the 3rd line (creating 'array2'), the "#A" is unbound from "array1" and bound to "array2".
it would be great if this could be extended to any object:
<snip> #X obj 100 100 print; #A foo bar; #X obj 200 200 f; </snip> would send [foo bar( to [print] before all loadbangs and stuff, even before [f] is created.
fgmasdr IOhannes
speaking of "#A": would it add any incompatibility, if the array-loading mechanism could be extended to _all_ objects. e.g. if an array is saved in-patch, we get something like
<snip> #X array array1 3 float 3; #A 0 -0.5 -0.3 -0.1; #X array array2 3 float 3; #A 0 0.5 0.3 0.1; </snip>
after the 1st line (that creates 'array1'), the receiver "#A" is bound to this newly created array. in the 2nd line a message is sent to array1 via this receiver. in the 3rd line (creating 'array2'), the "#A" is unbound from "array1" and bound to "array2".
it would be great if this could be extended to any object:
<snip> #X obj 100 100 print; #A foo bar; #X obj 200 200 f; </snip> would send [foo bar( to [print] before all loadbangs and stuff, even before [f] is created.
yep... I just hit this fixing up the new "text" object and have fixed the source to make this work for any object - search for #A in the newest git.
cheers M
On 02/10/12 16:15, Miller Puckette wrote:
- there's a bug in hip~ - its DC gain is slightly (and possibly considerably)
greater than 1.
Did you mean nyquist-frequency rather than DC here?
IIRC DC gain for hip~ should be 0 or very close to it and nyquist-frequency gain 1.
I did notice that delay loops with [hip~ 5] to leak DC do tend to explode without some [*~ 0.9] or [lop~ 10000] or whatever...
Claude
On 03/10/12 15:22, Claude Heiland-Allen wrote:
On 02/10/12 16:15, Miller Puckette wrote:
- there's a bug in hip~ - its DC gain is slightly (and possibly
considerably) greater than 1.
Did you mean nyquist-frequency rather than DC here?
See attached test patch that waits 10 seconds for settling to steady state (extreme overkill no doubt), at 48k sample rate the nyquist gain for hip~ goes up dramatically as you increase the cutoff...
IIRC DC gain for hip~ should be 0 or very close to it
verified.
and nyquist-frequency gain 1.
here is the bug, these get much louder than the -1 1 -1 1 input
hip10: -1.0007 1.0007 -1.0007 1.0007 -1.0007 1.0007 -1.0007 1.0007 hip100: -1.0066 1.0066 -1.0066 1.0066 -1.0066 1.0066 -1.0066 1.0066 hip1000: -1.07 1.07 -1.07 1.07 -1.07 1.07 -1.07 1.07 hip10000: -2 2 -2 2 -2 2 -2 2
hello,
i'm very concern about compatibility, but on the other hand :
so, if you introduce lot's of new objects, i'll be very happy, even if it break my patch.
cheers cyrille
Le 28/09/2012 17:23, Miller Puckette a écrit :
Well, I'm persuadable on this front. I'm concerned with unduly hogging the object namespace - in general, every time I add an object name I potentially introduce incompatiblities with someone's abstraction that might have the same name. And there are 50 or so new classes (!) to provide. I don't even have a list yet (no pun intended)
cheers M
On Fri, Sep 28, 2012 at 10:01:40AM -0400, Hans-Christoph Steiner wrote:
On 09/28/2012 04:00 AM, IOhannes m zmölnig wrote:
On 09/28/2012 02:01 AM, Miller Puckette wrote:
Hmm... I agree there's bad confusion between array and table in Pd nomenclature. I've tried to use "table" for a specifically floating-point array, and "array" for the more general thing, but I think I've been less than consistent (case in point, the "array" menu which creates what I would call a "table".
One idea might be to use the name [tab] instead of [array], as in [tab size] - then [tabwrite] could get a synonym, [tab write], etc.
i'm quite with hans here: what exactly do we gain from having an object [tab write], instead of [tabwrite]? and i totally fail to see how [tab size] is superior to [tabsize].
in terms of remembering the names, they see quite on par; it is made clear that those objects belong to the same family regardless of whether the prefix is "tab" "tab " or "tab_", as long as there is a common short prefix; in terms of typing there is one more character to type; and from the implementation side, it needlessly compilates the object-lookup mechanism, as can be seen in the current implementation of the "list" family of objects (where the objectcreator is made aware of an object named "list\ size", but this object is practically never requested from the objectmaker, and instead the constructor function of "list" has to re-implement the dispatching.
it's not that "foo bar" is bad by itself; i just don't see that it is anywhere better than what we already have.
And to hammer on this point some more, this subcommand syntax complicates the implementation, as IOhannes points out, and complicates the syntax. Its very nice to be able to say "Pd syntax is like sentences where the first word is the command and the rest of the words are data for that command." For all the newbies that I have taught from all sorts of realms, from 10 year olds to practicing architects, this is something that has really quickly clicked with basically everyone. In my intro teaching, I avoid [list] for exactly this reason, because I'd have to explain the exception to this simple "first word is the command" rule, and some people are always confused by it.
And from an advanced users point of view, the simpler the rules of the syntax are, the brain space is taken up managing all of the exceptions to nice, simple rules. And that means less brain space for far more interesting things.
.hc
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 28/09/12 03:23, Jonathan Wilkes wrote:
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and search 20,000 mostly non-related packages for a solution...)
they are at all not mythical, though not as numerous as those using apple, windows or a pre-assembled linux distribution.
once you get to know apt-get, apt-file, apt-cache and friends those 20,000 packages and their contents are very accessible, very well indexed in many useful ways and searching is incredibly quick and powerful ... then installing the result is usually painless, with all dependencies taken care of by the packagers. Running sid rather than stable you get a quite recent set of libraries all in sync version-wise, and sources available, to compile your own packages.
certainly not the typical pd user, but also certainly not a mythical one either, and since the work done for such a package is by one or other such user then that seems very reasonable to me.
Simon
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: pd-list@iem.at Cc: Sent: Thursday, September 27, 2012 10:33 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 28/09/12 03:23, Jonathan Wilkes wrote:
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and
search
20,000 mostly non-related packages for a solution...)
they are at all not mythical, though not as numerous as those using apple, windows or a pre-assembled linux distribution.
That's not what I'm talking about.
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
That implies that the user who needs to get an array size but can't figure out how to do it would either a) remember that one of the many pd-related packages they happened to see in a query does the job and decides to install it or, more likely, b) consider the Debian repo a good place to search for help on Pd. Neither is generally true, and typing "pd array" in Synaptic only works because that's a single object library that does the _exact_ thing the user wants. (Forget for the moment that its an unnecessary external and that "expr trick" is clearly documented.) Otherwise it's worse than the <ctrl-b> browser because you have to do the work of installing each lib just to see whether those are the correct objects you need, and whether they are actually in working order and don't crash your system (which is evidently not an obstacle to getting something included in the Debian repos, unfortunately-- just try opening ascwave-help.pd from the cxc library).
Also keep in mind that the ease of installing pd-arraysize in Debian doesn't translate to ease in non-Debian systems of users who may be trying to read/understand a patch.
I like Debian's repo system a lot-- in fact I think it's the most wildly successful model for distributing software in a stable and secure manner (one that unfortunately Google, Apple, and to some extent even Gnome with its extension system seem to ignore). But it's not a help system.
BTW-- if you type "array size" in my search gui-plugin the first result is all_about_arrays.pd, which indeed explains the "expr trick". No installation necessary. Granted I revised the patch to demonstrate the method that works across more flavors of Pd than the other one, but still... :)
-Jonathan
once you get to know apt-get, apt-file, apt-cache and friends those 20,000 packages and their contents are very accessible, very well indexed in many useful ways and searching is incredibly quick and powerful ... then installing the result is usually painless, with all dependencies taken care of by the packagers. Running sid rather than stable you get a quite recent set of libraries all in sync version-wise, and sources available, to compile your own packages.
certainly not the typical pd user, but also certainly not a mythical one either, and since the work done for such a package is by one or other such user then that seems very reasonable to me.
Simon
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 28/09/12 11:38, Jonathan Wilkes wrote:
----- Original Message -----
From: Simon Wisesimonzwise@gmail.com
And who is this mythical user that looks to the Debian repositories to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic and
search
20,000 mostly non-related packages for a solution...)
they are at all not mythical, though not as numerous as those using apple, windows or a pre-assembled linux distribution.
That's not what I'm talking about.
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
exactly ...
certainly not the typical pd user, but also certainly not a mythical one either, and since the work done for such a package is by one or other such user then that seems very reasonable to me.
Simon
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Thursday, September 27, 2012 11:52 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 28/09/12 11:38, Jonathan Wilkes wrote:
----- Original Message -----
From: Simon Wisesimonzwise@gmail.com
And who is this mythical user that looks to the Debian
repositories
to figure out how to do something in a programming language? (Hm, I'm not getting audio output, let's open up Synaptic
and
search
20,000 mostly non-related packages for a solution...)
they are at all not mythical, though not as numerous as those using
apple,
windows or a pre-assembled linux distribution.
That's not what I'm talking about.
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
exactly ...
Not exactly-- you were referring to using the Debian packaging system in a general sense to find packages, and you were saying that calling someone who uses it a mythical user is not inaccurate. But that's not what I wrote-- I'm referring to using the Debian packaging system to figure out how to solve a specific problem in the programming language, and that's not what the packaging system is for.
Anyway, it's easier to not install something than it is to install something. And it's a false choice between installing an external and memorizing the help patch for expr. But I think Hans is making that false choice because my revision of expr-help.pd, which has a comprehensive list of the expr operators, doesn't come up when you right-click expr.
Hans: what do I need to do to get the PDDP help patchs for the expr family to show up on right-clicking "Help"?
-Jonathan
certainly not the typical pd user, but also certainly not a mythical
one either,
and since the work done for such a package is by one or other such user
then
that seems very reasonable to me.
Simon
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 28/09/12 12:48, Jonathan Wilkes wrote:
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than trying to
remember that [expr] trick. And thankfully we can write externals, so we can have choice. :-)
exactly ...
Not exactly-- you were referring to using the Debian packaging system in a general sense to find packages, and you were saying that calling someone who uses it a mythical user is not inaccurate.
no .. I was saying that debian users who treat their debian repository as an extension of their system and the first place to look for something they need to do are not mythical at all, that if you are familiar with the debian tools it is very quick and easy to find which package has a file or functionality you are looking for, and that not surprisingly some of these users are able and willing to do the extra bit of work to make things they find useful available in the way they find convenient.
If some debian users find it convenient then it isn't obsolete and shouldn't be deprecated unless the maintainer is tired of keeping it there or it is becoming incompatible with other things in that system.
A huge number of non-debian users also benefit from the work done in debian maintaining dependency information, documenting licensing and building for a variety of hardware platforms ... they benefit via developers using that information to set up the systems that are widely used. A few extra bits and pieces that are mainly useful to a few debian users isn't a problem.
Simon
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Friday, September 28, 2012 7:32 AM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 28/09/12 12:48, Jonathan Wilkes wrote:
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than
trying to
remember that [expr] trick. And thankfully we can write
externals,
so we can have choice. :-)
exactly ...
Not exactly-- you were referring to using the Debian packaging system in a general sense to find packages, and you were saying that calling someone who uses it a mythical user is not inaccurate.
no .. I was saying that debian users who treat their debian repository as an extension of their system and the first place to look for something they need to do are not mythical at all, that if you are familiar with the debian tools it is very quick and easy to find which package has a file or functionality you are looking for, and that not surprisingly some of these users are able and willing to do the extra bit of work to make things they find useful available in the way they find convenient.
So if you think the debian repos are the first place to look, then you would agree that arraysize should tell the user they can get the same functionality with expr which is already installed with pd-extended, pd-l2ork, and pd vanilla and therefore more modular, right?
If some debian users find it convenient then it isn't obsolete and shouldn't be deprecated unless the maintainer is tired of keeping it there or it is becoming incompatible with other things in that system.
A huge number of non-debian users also benefit from the work done in debian maintaining dependency information, documenting licensing and building for a variety of hardware platforms ... they benefit via developers using that information to set up the systems that are widely used. A few extra bits and pieces that are mainly useful to a few debian users isn't a problem.
Simon
On 09/28/2012 12:57 PM, Jonathan Wilkes wrote:
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Friday, September 28, 2012 7:32 AM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 28/09/12 12:48, Jonathan Wilkes wrote:
I'm referring to what Hans wrote:
For me, apt-get install pd-arraysize is far easier than
trying to
remember that [expr] trick. And thankfully we can write
externals,
so we can have choice. :-)
exactly ...
Not exactly-- you were referring to using the Debian packaging system in a general sense to find packages, and you were saying that calling someone who uses it a mythical user is not inaccurate.
no .. I was saying that debian users who treat their debian repository as an extension of their system and the first place to look for something they need to do are not mythical at all, that if you are familiar with the debian tools it is very quick and easy to find which package has a file or functionality you are looking for, and that not surprisingly some of these users are able and willing to do the extra bit of work to make things they find useful available in the way they find convenient.
So if you think the debian repos are the first place to look, then you would agree that arraysize should tell the user they can get the same functionality with expr which is already installed with pd-extended, pd-l2ork, and pd vanilla and therefore more modular, right?
Add it to the arraysize-help.pd and it'll be included in the next release.
.hc
----- Original Message -----
From: Hans-Christoph Steiner hans@at.or.at To: pd-list@iem.at Cc: Sent: Friday, September 28, 2012 2:55 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 09/28/2012 12:57 PM, Jonathan Wilkes wrote:
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Friday, September 28, 2012 7:32 AM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 28/09/12 12:48, Jonathan Wilkes wrote:
I'm referring to what Hans wrote: > For me, apt-get install pd-arraysize is far easier
than
trying to
remember that [expr] trick. And thankfully we can
write
externals,
so we can have choice. :-)
exactly ...
Not exactly-- you were referring to using the Debian packaging system in a general sense to find packages, and you were saying
that
calling someone who uses it a mythical user is not inaccurate.
no .. I was saying that debian users who treat their debian repository
as an
extension of their system and the first place to look for something
they need to
do are not mythical at all, that if you are familiar with the debian
tools it is
very quick and easy to find which package has a file or functionality
you are
looking for, and that not surprisingly some of these users are able and
willing
to do the extra bit of work to make things they find useful available
in the way
they find convenient.
So if you think the debian repos are the first place to look, then you
would agree
that arraysize should tell the user they can get the same functionality
with
expr which is already installed with pd-extended, pd-l2ork, and pd vanilla
and
therefore more modular, right?
Add it to the arraysize-help.pd and it'll be included in the next release.
.hc
Alright.
How about the expr-help.pd problem I asked you about? I can't exactly ask the author to use the PDDP revised patches because they rely on pddplink and helplink, and expr ships with Pd vanilla which doesn't have those.
Any ideas?
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 29/09/12 00:57, Jonathan Wilkes wrote:
So if you think the debian repos are the first place to look, then you would agree
they are the first place I look for a file I am missing, so if someone referred to [arraysize] I'd check if I have it available by:
$ apt-file search arraysize.pd pd-arraysize: /usr/lib/pd/extra/arraysize/arraysize.pd_linux $
then apt-get install pd-arraysize or apt-cache show pd-arraysize if I wanted to see a description or dependency info first.
that arraysize should tell the user they can get the same functionality with expr which is already installed with pd-extended, pd-l2ork, and pd vanilla and therefore more modular, right?
yes .. that info is useful to include - perhaps in the arraysize help file, perhaps in the package description, and your expr example in help is the right one in that context. It is your suggestion that arraysize be deprecated that I do not like.
Simon
----- Original Message -----
From: Simon Wise simonzwise@gmail.com To: Jonathan Wilkes jancsika@yahoo.com Cc: "pd-list@iem.at" pd-list@iem.at Sent: Friday, September 28, 2012 11:11 PM Subject: Re: [PD] arraysize WAS apt.puredata.info is back!
On 29/09/12 00:57, Jonathan Wilkes wrote:
So if you think the debian repos are the first place to look, then you
would agree
they are the first place I look for a file I am missing, so if someone referred to [arraysize] I'd check if I have it available by:
$ apt-file search arraysize.pd pd-arraysize: /usr/lib/pd/extra/arraysize/arraysize.pd_linux $
then apt-get install pd-arraysize or apt-cache show pd-arraysize if I wanted to see a description or dependency info first.
that arraysize should tell the user they can get the same functionality
with
expr which is already installed with pd-extended, pd-l2ork, and pd vanilla
and
therefore more modular, right?
yes .. that info is useful to include - perhaps in the arraysize help file, perhaps in the package description, and your expr example in help is the right one in that context. It is your suggestion that arraysize be deprecated that I do not like.
You're right, because it isn't superseded by a new feature, but rather by an old one. There's probably not a term for that because the normal response is "please don't add bloat to the system".
-Jonathan
Simon
Hi list, I'm running Pd-extended 0.43.1 with Openbox on Debian Wheezy, and I'm experiencing some strange windows behaviours. If I create a new patch, the patch's window is displayed in the top-left corner, in a way that the window's decoration and the patch's menu are outside the screen (see the attached screenshot). Even if I open an existing patch, it is displayed about 60 pixels above the position where it should be.
In Gnome and xfce the patches are displayed correctly. Does someone know if there is a fix for that?
Thanks
p.s. every time I change the "vis" property of a patch, the window's position changes (x=x-1, y=y-1)