You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
(1) |
Aug
|
Sep
(15) |
Oct
(32) |
Nov
(35) |
Dec
(48) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(46) |
Feb
(22) |
Mar
(65) |
Apr
(49) |
May
(22) |
Jun
(29) |
Jul
(51) |
Aug
(34) |
Sep
(32) |
Oct
(46) |
Nov
(30) |
Dec
(32) |
2002 |
Jan
(48) |
Feb
(4) |
Mar
(20) |
Apr
(28) |
May
(13) |
Jun
(34) |
Jul
(51) |
Aug
(15) |
Sep
(15) |
Oct
(35) |
Nov
(15) |
Dec
(20) |
2003 |
Jan
(31) |
Feb
(111) |
Mar
(41) |
Apr
(28) |
May
(36) |
Jun
(29) |
Jul
(27) |
Aug
(29) |
Sep
(47) |
Oct
(28) |
Nov
(7) |
Dec
(26) |
2004 |
Jan
(44) |
Feb
(9) |
Mar
(17) |
Apr
(26) |
May
(58) |
Jun
(13) |
Jul
(44) |
Aug
(64) |
Sep
(30) |
Oct
(11) |
Nov
(21) |
Dec
(28) |
2005 |
Jan
(29) |
Feb
(11) |
Mar
(11) |
Apr
(22) |
May
(85) |
Jun
(46) |
Jul
(17) |
Aug
(18) |
Sep
(14) |
Oct
(22) |
Nov
(1) |
Dec
(45) |
2006 |
Jan
(20) |
Feb
(36) |
Mar
(18) |
Apr
(24) |
May
(21) |
Jun
(48) |
Jul
(23) |
Aug
(20) |
Sep
(10) |
Oct
(41) |
Nov
(46) |
Dec
(40) |
2007 |
Jan
(40) |
Feb
(20) |
Mar
(13) |
Apr
(6) |
May
(24) |
Jun
(31) |
Jul
(30) |
Aug
(11) |
Sep
(11) |
Oct
(10) |
Nov
(56) |
Dec
(64) |
2008 |
Jan
(64) |
Feb
(22) |
Mar
(63) |
Apr
(28) |
May
(25) |
Jun
(36) |
Jul
(11) |
Aug
(9) |
Sep
(14) |
Oct
(41) |
Nov
(46) |
Dec
(130) |
2009 |
Jan
(95) |
Feb
(41) |
Mar
(24) |
Apr
(35) |
May
(53) |
Jun
(67) |
Jul
(48) |
Aug
(48) |
Sep
(86) |
Oct
(75) |
Nov
(64) |
Dec
(52) |
2010 |
Jan
(57) |
Feb
(31) |
Mar
(28) |
Apr
(40) |
May
(25) |
Jun
(42) |
Jul
(79) |
Aug
(31) |
Sep
(49) |
Oct
(66) |
Nov
(38) |
Dec
(25) |
2011 |
Jan
(29) |
Feb
(18) |
Mar
(44) |
Apr
(6) |
May
(28) |
Jun
(31) |
Jul
(36) |
Aug
(24) |
Sep
(30) |
Oct
(23) |
Nov
(21) |
Dec
(27) |
2012 |
Jan
(14) |
Feb
(11) |
Mar
(2) |
Apr
(48) |
May
(7) |
Jun
(32) |
Jul
(22) |
Aug
(25) |
Sep
(31) |
Oct
(32) |
Nov
(21) |
Dec
(17) |
2013 |
Jan
(44) |
Feb
(27) |
Mar
(3) |
Apr
(1) |
May
|
Jun
|
Jul
(3) |
Aug
(4) |
Sep
(1) |
Oct
(7) |
Nov
(5) |
Dec
(5) |
2014 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
(2) |
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2017 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Aaron T. <hpu...@gm...> - 2009-09-15 20:30:47
|
That was going to be my suggestion. Remember, with Snow Leopard, Mac will now use file extensions to associate files with applications. Aaron On Sep 15, 2009, at 3:51 PM, Lenore Horner wrote: > Have you tried changing the file association on .py files to something > different? > > Lenore > > On Sep 15, 2009, at 13:52 , Joe Heafner wrote: > >> Okay I really "fixed" something now. Today I noticed that I can drag >> and drop a VPython script onto the VIDLE icon in my Dock and VIDLE >> opens the file for editing. Double clicking on the VPython script >> loads it in IDLE, not VIDLE. I thought I'd fix this by changing the >> file association, so I set Python scripts to open in what I thought >> was VIDLE. Now when the VIDLE application launches, the menu bar says >> Python rather than VIDLE; same thing happens when I launch IDLE. I've >> reinstalled Python2.6.2 and VPython and I can't fix what I've broken, >> and I don't even know what I've broken! >> >> Joe Heafner (follow me on Twitter: twitter.com/heafnerj) >> email: heafnerj(at)gmail(dot)com URL: www(dot)SticksAndShadows(dot) >> com >> |
From: Lenore H. <lh...@si...> - 2009-09-15 19:51:46
|
Have you tried changing the file association on .py files to something different? Lenore On Sep 15, 2009, at 13:52 , Joe Heafner wrote: > Okay I really "fixed" something now. Today I noticed that I can drag > and drop a VPython script onto the VIDLE icon in my Dock and VIDLE > opens the file for editing. Double clicking on the VPython script > loads it in IDLE, not VIDLE. I thought I'd fix this by changing the > file association, so I set Python scripts to open in what I thought > was VIDLE. Now when the VIDLE application launches, the menu bar says > Python rather than VIDLE; same thing happens when I launch IDLE. I've > reinstalled Python2.6.2 and VPython and I can't fix what I've broken, > and I don't even know what I've broken! > > Joe Heafner (follow me on Twitter: twitter.com/heafnerj) > email: heafnerj(at)gmail(dot)com URL: www(dot)SticksAndShadows(dot)com > > > > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart > your > developing skills, take BlackBerry mobile applications to market and > stay > ahead of the curve. Join us from November 9-12, 2009. Register > now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Bruce S. <Bru...@nc...> - 2009-09-15 18:58:01
|
I'm not sure I follow all your twists and turns, but a minor side effect of making a more robust VIDLE launcher for the latest VPython is that you see Python rather than VIDLE in the menu bar. Dunno how to fix that. Bruce Joe Heafner wrote: > Okay I really "fixed" something now. Today I noticed that I can drag > and drop a VPython script onto the VIDLE icon in my Dock and VIDLE > opens the file for editing. Double clicking on the VPython script > loads it in IDLE, not VIDLE. I thought I'd fix this by changing the > file association, so I set Python scripts to open in what I thought > was VIDLE. Now when the VIDLE application launches, the menu bar says > Python rather than VIDLE; same thing happens when I launch IDLE. I've > reinstalled Python2.6.2 and VPython and I can't fix what I've broken, > and I don't even know what I've broken! > > Joe Heafner (follow me on Twitter: twitter.com/heafnerj) > email: heafnerj(at)gmail(dot)com URL: www(dot)SticksAndShadows(dot)com |
From: Joe H. <hea...@gm...> - 2009-09-15 18:52:55
|
Okay I really "fixed" something now. Today I noticed that I can drag and drop a VPython script onto the VIDLE icon in my Dock and VIDLE opens the file for editing. Double clicking on the VPython script loads it in IDLE, not VIDLE. I thought I'd fix this by changing the file association, so I set Python scripts to open in what I thought was VIDLE. Now when the VIDLE application launches, the menu bar says Python rather than VIDLE; same thing happens when I launch IDLE. I've reinstalled Python2.6.2 and VPython and I can't fix what I've broken, and I don't even know what I've broken! Joe Heafner (follow me on Twitter: twitter.com/heafnerj) email: heafnerj(at)gmail(dot)com URL: www(dot)SticksAndShadows(dot)com |
From: Bruce S. <Bru...@nc...> - 2009-09-14 22:49:33
|
Right on all counts. I shouldn't try being analytical when I've got the flu! Bruce Sherwood Craig Struble wrote: > Hi Bruce, > > Ah, you're getting into the strangeness of objects. The expression 3*A > creates a new object and assigns it to the name A you're using. That > won't be the same object assigned to axis. > > In order to do the updates, assuming vectors are mutable, the code > should be > > A.x = 3*A.x > A.y = 3*A.y > A.z = 3*A.z > > I tried this, however, and it also didn't work because of axis=A > behaving like axis=vector(A); that is, arrow creates a copy of the > passed in object. > > Creating a copy of the vector is a design decision that's appropriate > for the intended audience of VPython. Doing it the other way, using only > the object reference, would cause all kinds of side effects that would > be difficult to debug. > > This is, however, inconsistent with the general behavior of Python. If I > wrote the code > > A = vector(0,1,0) > b = arrow(pos=(0,0,0)) > c = arrow(pos=(0,1,0)) > b.axis = A > c.axis = A > A.x = 1 > > As a Python programmer, I expect b and c to use the same vector object > for their axis, and changes to that object (A.x = 1), should update the > axis for both arrows referred to by b and c. If I intended to treat b > and c differently, but to start with the same axis, I would explicitly > write > > b.axis = vector(A) > c.axis = vector(A) > > This all gets back to the intended audience, but making it clear where > VPython might not behave exactly like Python in all cases. I can work > around each approach, I just need to know my limits. > > Craig > > On Sep 14, 2009, at 10:38 AM, Bruce Sherwood wrote: > >> Thanks for the additional background, Craig. It's good to have a >> card-carrying >> computer scientist commenting on the issues! >> >> Your point about updating a bunch of Visual objects however doesn't work, >> because the setters for Visual vector attributes like pos or axis make >> new >> vectors. This explains for example why you can write as a shorthand >> pos=(1,0,0) >> instead of pos=vector(1,0,0); a vector is constructed out of the triple. >> >> Here is a routine that shows the (non)effect: >> >> A = vector(0,1,0) >> arrow(pos=(0,0,0), axis=A) >> arrow(pos=(1,0,0), axis=A) >> scene.mouse.getclick() >> A = 3*A >> >> After clicking, the arrows don't get longer, because axis=A is basically >> axis=vector(A). >> >> In any case, it would be a rare circumstance where you wanted some vector >> attribute of lots of objects to be the same, and to change together. >> >> Bruce Sherwood >> >> Craig Struble wrote: >>> It should be pointed out that many object oriented languages share >>> this behavior. Java behaves the same way, for example. Many others >>> have pointed out the difficulties in copying objects (deep vs. shallow >>> copies) and bigger problems for copying arise when there are circular >>> references, which are common for complex data structures (e.g. general >>> graphs). >>> >>> The object reference behavior is useful when implementing some kinds >>> of data structures when you need a "trailing pointer" for updates. >>> Lots of linked list implementations use this approach. It's atypical >>> to do this in Python since it has a very rich collection of data >>> structures already implemented, but it can be useful. >>> >>> I would guess in VPython, this behavior could make it easier to update >>> the positions or movements of a large group of visual objects. If they >>> all refer to the same point or vector, change that vector and all the >>> objects change accordingly. It would be nice to make a single update >>> instead of having to looping over each object, which would probably be >>> slower. >>> >>> Craig >>> >> >> ------------------------------------------------------------------------------ >> >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and >> focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > -- > Craig A. Struble, Ph.D. | 369 Cudahy Hall | Marquette University > Associate Professor of Computer Science | (414)288-3783 > Director, Master of Bioinformatics Program | (414)288-5472 (fax) > http://www.mscs.mu.edu/~cstruble | cra...@ma... > > > |
From: Robert X. <nne...@gm...> - 2009-09-14 17:38:12
|
However, A=3*A creates a new vector (0,3,0) and binds that to A, leaving the original unchanged. What happens of you use A*=3 or A.y=3? Robert 在 2009-9-14,上午11:38,Bruce Sherwood <Bru...@nc...> 写到: > Thanks for the additional background, Craig. It's good to have a > card-carrying > computer scientist commenting on the issues! > > Your point about updating a bunch of Visual objects however doesn't > work, > because the setters for Visual vector attributes like pos or axis > make new > vectors. This explains for example why you can write as a shorthand > pos=(1,0,0) > instead of pos=vector(1,0,0); a vector is constructed out of the > triple. > > Here is a routine that shows the (non)effect: > > A = vector(0,1,0) > arrow(pos=(0,0,0), axis=A) > arrow(pos=(1,0,0), axis=A) > scene.mouse.getclick() > A = 3*A > > After clicking, the arrows don't get longer, because axis=A is > basically > axis=vector(A). > > In any case, it would be a rare circumstance where you wanted some > vector > attribute of lots of objects to be the same, and to change together. > > Bruce Sherwood > > Craig Struble wrote: >> It should be pointed out that many object oriented languages share >> this behavior. Java behaves the same way, for example. Many others >> have pointed out the difficulties in copying objects (deep vs. >> shallow >> copies) and bigger problems for copying arise when there are circular >> references, which are common for complex data structures (e.g. >> general >> graphs). >> >> The object reference behavior is useful when implementing some kinds >> of data structures when you need a "trailing pointer" for updates. >> Lots of linked list implementations use this approach. It's atypical >> to do this in Python since it has a very rich collection of data >> structures already implemented, but it can be useful. >> >> I would guess in VPython, this behavior could make it easier to >> update >> the positions or movements of a large group of visual objects. If >> they >> all refer to the same point or vector, change that vector and all the >> objects change accordingly. It would be nice to make a single update >> instead of having to looping over each object, which would probably >> be >> slower. >> >> Craig >> > > --- > --- > --- > --------------------------------------------------------------------- > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Craig S. <cra...@ma...> - 2009-09-14 17:29:53
|
Hi Bruce, Ah, you're getting into the strangeness of objects. The expression 3*A creates a new object and assigns it to the name A you're using. That won't be the same object assigned to axis. In order to do the updates, assuming vectors are mutable, the code should be A.x = 3*A.x A.y = 3*A.y A.z = 3*A.z I tried this, however, and it also didn't work because of axis=A behaving like axis=vector(A); that is, arrow creates a copy of the passed in object. Creating a copy of the vector is a design decision that's appropriate for the intended audience of VPython. Doing it the other way, using only the object reference, would cause all kinds of side effects that would be difficult to debug. This is, however, inconsistent with the general behavior of Python. If I wrote the code A = vector(0,1,0) b = arrow(pos=(0,0,0)) c = arrow(pos=(0,1,0)) b.axis = A c.axis = A A.x = 1 As a Python programmer, I expect b and c to use the same vector object for their axis, and changes to that object (A.x = 1), should update the axis for both arrows referred to by b and c. If I intended to treat b and c differently, but to start with the same axis, I would explicitly write b.axis = vector(A) c.axis = vector(A) This all gets back to the intended audience, but making it clear where VPython might not behave exactly like Python in all cases. I can work around each approach, I just need to know my limits. Craig On Sep 14, 2009, at 10:38 AM, Bruce Sherwood wrote: > Thanks for the additional background, Craig. It's good to have a > card-carrying > computer scientist commenting on the issues! > > Your point about updating a bunch of Visual objects however doesn't > work, > because the setters for Visual vector attributes like pos or axis > make new > vectors. This explains for example why you can write as a shorthand > pos=(1,0,0) > instead of pos=vector(1,0,0); a vector is constructed out of the > triple. > > Here is a routine that shows the (non)effect: > > A = vector(0,1,0) > arrow(pos=(0,0,0), axis=A) > arrow(pos=(1,0,0), axis=A) > scene.mouse.getclick() > A = 3*A > > After clicking, the arrows don't get longer, because axis=A is > basically > axis=vector(A). > > In any case, it would be a rare circumstance where you wanted some > vector > attribute of lots of objects to be the same, and to change together. > > Bruce Sherwood > > Craig Struble wrote: >> It should be pointed out that many object oriented languages share >> this behavior. Java behaves the same way, for example. Many others >> have pointed out the difficulties in copying objects (deep vs. >> shallow >> copies) and bigger problems for copying arise when there are circular >> references, which are common for complex data structures (e.g. >> general >> graphs). >> >> The object reference behavior is useful when implementing some kinds >> of data structures when you need a "trailing pointer" for updates. >> Lots of linked list implementations use this approach. It's atypical >> to do this in Python since it has a very rich collection of data >> structures already implemented, but it can be useful. >> >> I would guess in VPython, this behavior could make it easier to >> update >> the positions or movements of a large group of visual objects. If >> they >> all refer to the same point or vector, change that vector and all the >> objects change accordingly. It would be nice to make a single update >> instead of having to looping over each object, which would probably >> be >> slower. >> >> Craig >> > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users -- Craig A. Struble, Ph.D. | 369 Cudahy Hall | Marquette University Associate Professor of Computer Science | (414)288-3783 Director, Master of Bioinformatics Program | (414)288-5472 (fax) http://www.mscs.mu.edu/~cstruble | cra...@ma... |
From: Bruce S. <Bru...@nc...> - 2009-09-14 15:38:40
|
Thanks for the additional background, Craig. It's good to have a card-carrying computer scientist commenting on the issues! Your point about updating a bunch of Visual objects however doesn't work, because the setters for Visual vector attributes like pos or axis make new vectors. This explains for example why you can write as a shorthand pos=(1,0,0) instead of pos=vector(1,0,0); a vector is constructed out of the triple. Here is a routine that shows the (non)effect: A = vector(0,1,0) arrow(pos=(0,0,0), axis=A) arrow(pos=(1,0,0), axis=A) scene.mouse.getclick() A = 3*A After clicking, the arrows don't get longer, because axis=A is basically axis=vector(A). In any case, it would be a rare circumstance where you wanted some vector attribute of lots of objects to be the same, and to change together. Bruce Sherwood Craig Struble wrote: > It should be pointed out that many object oriented languages share > this behavior. Java behaves the same way, for example. Many others > have pointed out the difficulties in copying objects (deep vs. shallow > copies) and bigger problems for copying arise when there are circular > references, which are common for complex data structures (e.g. general > graphs). > > The object reference behavior is useful when implementing some kinds > of data structures when you need a "trailing pointer" for updates. > Lots of linked list implementations use this approach. It's atypical > to do this in Python since it has a very rich collection of data > structures already implemented, but it can be useful. > > I would guess in VPython, this behavior could make it easier to update > the positions or movements of a large group of visual objects. If they > all refer to the same point or vector, change that vector and all the > objects change accordingly. It would be nice to make a single update > instead of having to looping over each object, which would probably be > slower. > > Craig > |
From: Craig S. <cra...@ma...> - 2009-09-14 14:10:28
|
It should be pointed out that many object oriented languages share this behavior. Java behaves the same way, for example. Many others have pointed out the difficulties in copying objects (deep vs. shallow copies) and bigger problems for copying arise when there are circular references, which are common for complex data structures (e.g. general graphs). The object reference behavior is useful when implementing some kinds of data structures when you need a "trailing pointer" for updates. Lots of linked list implementations use this approach. It's atypical to do this in Python since it has a very rich collection of data structures already implemented, but it can be useful. I would guess in VPython, this behavior could make it easier to update the positions or movements of a large group of visual objects. If they all refer to the same point or vector, change that vector and all the objects change accordingly. It would be nice to make a single update instead of having to looping over each object, which would probably be slower. Craig On Sep 12, 2009, at 12:17 PM, Bruce Sherwood wrote: > It may be useful to read the discussion "How Python is different > from languages > you may know" found in the documentation section of vpython.org. The > most common > trap for experienced programmers who are new to Python is precisely > this issue. > > Bruce Sherwood > > Lenore Horner wrote: >> So a vector is a list which also has strange properties. I still >> want >> to know why it is more useful to have two names for the same thing >> than >> it is to copy the values from one thing to another thing. >> >> Granted, I have since found out I can work around this problem with >> the >> following clumsy process (the least clumsy of the three I have >> found). >>>>> from visual import * >>>>> a = vector(0,0,1) >>>>> b = vector(a.x,a.y,a.z) >>>>> print a,b >> <0, 0, 1> <0, 0, 1> >>>>> b.x=1 >>>>> print a,b >> <0, 0, 1> <1, 0, 1> >> >> Lenore >> >> >> On Sep 12, 2009, at 10:12 , Robert Xiao wrote: >> >>> Vector objects are mutable, which means they get passed by reference >>> instead of by value. It also means that statements like "a=b" do not >>> copy the value, but they copy the reference (making a and b point to >>> the same vector). So, >>> >>> a = vector(1,2,3) >>> b = a >>> b.x = 3 >>> print a >>> >>> yields >>> <3, 2, 3> >>> >>> as expected, because a and b refer to the same vector. The same >>> thing >>> happens with list objects in Python. >>> >>> Numbers, tuples and strings are immutable in Python, so they are >>> passed by value. >>> >>> Robert >>> >>> 2009/9/12 Lenore Horner <lh...@si... <mailto:lh...@si...>> >>> >>> (Sorry, forgot to cc the list.) >>> >>> Hi Steve, >>> >>> You're saying the following? >>> a = 1 >>> b = a >>> b = 3 >>> Now print a would give 3? >>> >>> I could almost understand if the following were true. >>> air.acceleration = gravity >>> gravity = gravity + (1,0,1) >>> print acceleration gives (1,-9.8,1) >>> >>> That would mean the assignment was somehow permanent, which is >>> to my >>> mind quite weird but potentially useful. >>> >>> But it sounds like you're saying that assignment in python >>> makes two >>> variables identical rather than giving the one on the left the >>> current >>> value of the one on the right? That seems to me to be incredibly >>> awkward. How is one supposed to initialize several things >>> identically >>> (no possibility of typos or slider misadjustments) and then let >>> them >>> evolve differently? >>> >>> ----- >>> Testing: >>> Nope, that's not true. >>>>>> a = 1 >>>>>> print a >>> 1 >>>>>> b = a >>>>>> print a, b >>> 1 1 >>>>>> b = 3 >>>>>> print a, b >>> 1 3 >>> >>> Well maybe vectors behave differently than scalars. >>> Nope. >>>>>> a = (0,0,1) >>>>>> b = a >>>>>> print b >>> (0, 0, 1) >>>>>> b = (1,0,0) >>>>>> print a, b >>> (0, 0, 1) (1, 0, 0) >>> >>> Maybe a vector is different than a tuple. >>> Nope. >>> from visual import * >>>>>> a = vector(0,0,1) >>>>>> b = a >>>>>> b = vector(1,0,0) >>>>>> print a, b >>> <0, 0, 1> <1, 0, 0> >>> >>> But the above isn't quite what I'm doing in my code. Maybe >>> component >>> assignment works differently than all other types of assignment. >>> Yup! >>>>>> a = vector(0,0,1) >>>>>> b = a >>>>>> c = a >>>>>> print a, b, c >>> <0, 0, 1> <0, 0, 1> <0, 0, 1> >>>>>> c.y = 5 >>>>>> print a, b, c >>> <0, 5, 1> <0, 5, 1> <0, 5, 1> >>> >>> Ok, that's just plain spooky. >>> >>> Can someone give me an example where that would be helpful? >>> >>> Now I have to go figure out how to dodge this bullet. >>> >>> Lenore >>> >>> >>> On Sep 12, 2009, at 06:36 , Steve Spicklemire wrote: >>> >>>> Hi Lenore, >>>> >>>> It's about python assignments. You are assigning the *same* >>>> acceleration vector to both objects, then changing the y component >>>> of the same vector. >>> No. I did not change the y component of the vector which was >>> assigned >>> to both of them. >>>> >>>> Instead of assigning both accelerations to the same vector >>>> (gravity) >>>> try initializing them with different vectors: >>>> >>>> pixie.acceleration = vector(0,-9.8,0) >>>> air.acceleration = vector(0,-9.8,0) >>>> >>>> then when you fiddle with the y components, it will be the y >>>> components of different vector objects. >>>> >>>> That should work! >>>> -steve >>>> >>>> On Sep 12, 2009, at 7:26 AM, Lenore Horner wrote: >>>> >>>>> Sorry. I was in too big a hurry and forgot to paste the code. >>> Here >>>>> it is. I've put arrows off to the right indicating the lines >>>>> where >>>>> both air.acceleration and pixie.acceleration are being changed >>>>> despite >>>>> the fact that only air.acceleration appears in the code. I've >>>>> included all of the while loop. I don't see anywhere that I'm >>>>> reassigning pixie.acceleration from its original value of >>> gravity but >>>>> it changes as soon as it hits those to statements (and not >>>>> before). >>>>> >>>>> Thanks, >>>>> Lenore >>>>> >>>>> >>>>> angle = math.pi/4 >>>>> speed = 13.0 >>>>> >>>>> power = 2 >>>>> constant = 1 >>>>> >>>>> gravity = vector(0,-9.8,0) >>>>> >>>>> launch_velocity = >>>>> vector(speed*math.cos(angle),speed*math.sin(angle),0) >>>>> >>>>> pixie = sphere(pos=vector(-9,-3.55,0), radius=0.2, >>>>> color=color.red) >>>>> pixie.velocity = launch_velocity >>>>> pixie.acceleration = gravity >>>>> >>>>> air = sphere(pos=vector(-9,-3.55,0.3), radius=0.15, >>> color=color.blue) >>>>> air.velocity = launch_velocity >>>>> air.acceleration = gravity >>>>> >>>>> scene.mouse.getclick() # Don't launch until we're watching >>>>> >>>>> dt = 0.01 >>>>> while 1: >>>>> rate(100) >>>>> air.pos = air.pos + air.velocity*dt >>>>> if air.y < -3.55: >>>>> air.velocity = vector(0,0,0) >>>>> else: >>>>> air.velocity = air.velocity + air.acceleration*dt >>>>> air.acceleration.y = gravity.y - sign(air.velocity.y) * >>>>> constant * air.radius * air.velocity.y**power <----- >>>>> print "5", air.acceleration, pixie.acceleration >>>>> air.acceleration.x = -sign(air.velocity.x) * constant * >>>>> air.radius * air.velocity.x**power <------- >>>>> print "6", air.acceleration, pixie.acceleration >>>>> >>>>> pixie.pos = pixie.pos + pixie.velocity*dt >>>>> if pixie.y < -3.55: >>>>> pixie.velocity = vector(0,0,0) >>>>> else: >>>>> pixie.velocity = pixie.velocity + pixie.acceleration*dt >>>>> >>>>> >>>>> On Sep 11, 2009, at 18:20 , Bruce Sherwood wrote: >>>>> >>>>>> Can you explain the context of your question? I have no idea what >>>>>> program or >>>>>> documentation you're referring to. >>>>>> >>>>>> Bruce Sherwood >>>>>> >>>>>> Lenore Horner wrote: >>>>>>> Perhaps I'm just blind, but I can't figure out why the >>>>>>> assignment >>>>>>> statements above print "5" and print "6" affect both >>>>>>> acceleration >>>>>>> vectors, but they do. How do I change the acceleration vector >>>>>>> of >>>>>>> one >>>>>>> object without touching the vector of other objects? >>>>>>> >>>>>>> Thanks, >>>>>>> Lenore >>>>>> >>>>>> >>> >>> ------------------------------------------------------------------------------ >>>>>> Let Crystal Reports handle the reporting - Free Crystal >>> Reports 2008 >>>>>> 30-Day >>>>>> trial. Simplify your report design, integration and deployment >>> - and >>>>>> focus on >>>>>> what you do best, core application coding. Discover what's new >>> with >>>>>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>>>>> _______________________________________________ >>>>>> Visualpython-users mailing list >>>>>> Vis...@li... >>> <mailto:Vis...@li...> >>>>>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>>>> >>>>> >>>>> >>> >>> ------------------------------------------------------------------------------ >>>>> Let Crystal Reports handle the reporting - Free Crystal Reports >>>>> 2008 30-Day >>>>> trial. Simplify your report design, integration and deployment - >>>>> and focus on >>>>> what you do best, core application coding. Discover what's new >>>>> with >>>>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>>>> _______________________________________________ >>>>> Visualpython-users mailing list >>>>> Vis...@li... >>> <mailto:Vis...@li...> >>>>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Let Crystal Reports handle the reporting - Free Crystal Reports >>> 2008 30-Day >>> trial. Simplify your report design, integration and deployment - >>> and focus on >>> what you do best, core application coding. Discover what's new >>> with >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>> _______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> <mailto:Vis...@li...> >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>> >>> >>> ------------------------------------------------------------------------------ >>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >>> 30-Day >>> trial. Simplify your report design, integration and deployment - and >>> focus on >>> what you do best, core application coding. Discover what's new with >>> Crystal Reports now. >>> http://p.sf.net/sfu/bobj-july_______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> <mailto:Vis...@li...> >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >> >> >> ------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports >> 2008 30-Day >> trial. Simplify your report design, integration and deployment - >> and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users -- Craig A. Struble, Ph.D. | 369 Cudahy Hall | Marquette University Associate Professor of Computer Science | (414)288-3783 Director, Master of Bioinformatics Program | (414)288-5472 (fax) http://www.mscs.mu.edu/~cstruble | cra...@ma... |
From: Lenore H. <lh...@si...> - 2009-09-13 18:15:40
|
Thanks for everyone's patience. My goal program for tomorrow afternoon's lecture works. I was evil and modified the controls.py file rather than rewriting the slider class in my own file. The rewrite lets the sliders be labeled with the current value of the slider (using the code in colorsliders.py). (I didn't try to fix the setting value thing or experiment any more with modifying the buttons.) The program itself launches three balls: no air resistance, air resistance proportional to v, air resistance proportional to v^2. Three sliders control launch angle, launch speed, and a constant of proportionality for the two experiencing air resistance. Hitting go a second time will overlay a new set of traces on the previous set. Hitting reset and then go gives a clean screen but does not change slider values. Many thanks to Bruce Sherwood for his help with the behavior of sliders and buttons. Tested on G4 OS X 10.5.8, VPython 5.12 (MacPython 2.6). |
From: Bruce S. <Bru...@nc...> - 2009-09-13 15:17:39
|
The bug in the controls module is that buttons and sliders etc. inherit from a class that takes care of setting several attributes common to all controls objects, including "value". Setting value implies executing an update routine which in the case of slider refers to an axis which hasn't been set yet. Some reorganization is in order. Bruce Sherwood |
From: Bruce S. <Bru...@nc...> - 2009-09-13 15:04:06
|
I haven't yet figured out why, but the problem arises only if you set "value" in the slider constructor. Remove it from the constructor, and then after creating the slider execute this: s1.value = 0.5 Bruce Sherwood Lenore Horner wrote: > I was being stupid and thought I could pull some of the color-sliders > tricks into the regular controls package and have them for everything > instead of having to copy and paste revised definitions all the time. > After all, I could always re-install the controls.py and controls.pyc > files if I mangled them irrepairably. Maybe not. > > I opened the package and just copied those to files back to the visual > folder in site packages - replacing my mangled ones. No dice. > > I've wiped out Vpython and MacPython and reinstalled both. Still no > good. Controls complains about a property not existing that I can > plainly see in the code is defined. > > Any suggestions for where the wrong definition continues to lurk? > > Here's the error message. > > s1 = slider(pos=(-50,0,0), width=2, length=10, min=0, max=pi/4, > value = 0.5, action=lambda: setangle(s1)) > File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ > python2.6/site-packages/visual/controls.py", line 245, in __init__ > ctrl.__init__(self, args) > File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ > python2.6/site-packages/visual/controls.py", line 85, in __init__ > self.value = args['value'] > File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ > python2.6/site-packages/visual/controls.py", line 283, in setvalue > self.update(self.pos+self.axis*val*self.length/(self.max-self.min)) > AttributeError: 'slider' object has no attribute 'axis' > > I've tried it both with and without an explicit axis in the slider > call to no avail. > > TIA, > Lenore > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Lenore H. <lh...@si...> - 2009-09-13 14:53:00
|
Ahah. I tried calling b.color not b.button.color. Thanks Lenore On Sep 13, 2009, at 09:27 , Bruce Sherwood wrote: > Sigh. That module definitely needs work. If you look at controls.py > you'll see that a button is constructed from 5 boxes and a label. > Until > and unless the controls module is improved, the only way to achieve > the > desired effect is to change these individual elements (e.g. > buttonname.button.color = something). Ugh. Obviously a better scheme > would be to change the button class to honor all desired changes, but > here's a specific example within the present framework: > > from visual.controls import * > > s = True > > def switch(): > global s > if s: > b.text = "Off" > b.button.color = color.cyan > else: > b.text = "On" > b.button.color = color.red > s = not s > > c = controls() > b = button(text="On", color=color.red, action=lambda: switch()) > while 1: > rate(100) > c.interact() > > Bruce Sherwood > > Lenore Horner wrote: >> I'd like my buttons to change colors when they've received a button >> press. I can get an apparent color change by recreating the button. >> However, if I change the text , I see both texts stacked on top of >> each other, so I think I'm just piling up the buttons. I've tried >> using >> >> buttonname.color=color.newcolor >> >> without success. I have tried >> >> buttonname.visible=False >> del buttonname >> >> and the button doesn't disappear. >> >> So in general it's looking to me like buttons don't behave the way >> ordinary objects do. Is this correct? >> >> Lenore >> >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports >> 2008 30-Day >> trial. Simplify your report design, integration and deployment - >> and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Tony R. <To...@br...> - 2009-09-13 14:43:36
|
This is my last measly nickel on the matter :-) : On Sep 12, 2009, at 11:09 PM, "Lenore Horner" <lh...@si...> wrote: > > On Sep 12, 2009, at 19:03 , Tony Risinger wrote: > >> Additionally, many objects that I'm used to working with contain open >> streams, database links, and other singular, resource type >> references. How does one copy these by value? > Sorry. Still baffled. How do you do anything at all with it if you > don't know what it is? However complicated your resource type, it is > at bottom still a string of 0s and 1s is it not? If you cannot read > the sequence to copy it somewhere else, then how can you read it to do > anything else with it? > > If you do > streamB = streamA > where streamB and streamA are now pointing at the same memory > location, > what can you now do that you couldn't do with streamA alone? Sure maybe some ones and zeros eventually, but maybe on a remote machine in a land far far away. A database link cannot be copied; you would either need too reuse the open link, or open a new connection consuming a second slot on the database. > Can someone give me an example where it is necessary to have two names > for the same thing. You are right you could do everything with stream b that you could do with a, since they are the same object. I can't think of a situation where you need to use multiple names in the same scope beyond what Bruce said about simplifying a long name, but, at least how I understand it, that's not the "pass by" part in pass by reference/ value. When you "pass" an object to a method/function, you are essentially giving it a local name/alias inside that method and it's scope. It is now called stream b, even though it's still stream a too, and still working on the same actual object instance. Hence you "passed by reference". > After cudgeling my brain over this for most of the day, the only > possible explanation I have come up with is that you want to scatter > the references around in the memory so that there is always a > reference near enough your other stuff to be read into the register > easily at the same time. In most (prob all) production apps Ive worked on, it's very rare that you would ever need a full copy; usually you create an object and pass it around, doing operations on it, extracting information from it, and so on. It seems that if you're routinely deep copying objects, there might be a better way to think about your problem, but I could be wrong. I'm not super savvy with python, but on other lists I've seen some good explanations. For example, I once read that in python there really isn't "variables"... there are only objects and name bindings/ name spaces. Once you get pass that Python isn't language X, it really does work quite consistently. > > >> >> I am most experienced with php, and since 5.x, all objects are passed >> by reference; one must use the "copy" keyword which would invoke the >> __copy__() special method. >> >> I used the pass stuff around by reference all the time in php, so >> python makes perfect sense to me. Also, pretty much all systems have >> a "copy on write" policy anyway, so your not really passing by value >> until you modify the new reference. > Fine - as long as when I modify the new reference it doesn't change > the original - and vice versa. >> Most new references created are >> read only, and of they are not, I like the python way of making it >> obvious in the code by explicity creating a new object, as in the >> >> b = vector(a) >> >> examples. > Whereas almost everything I do it makes sense only to pass by value > and I expect passage by reference to have a different syntax than > passage by value. Python, however, uses identical syntax whose effect > is object dependent. I would at the very least expect that > a=b > would have the same effect (or complain that the command is invalid) > regardless of what types a and b might be. > >> >> On Sep 12, 2009, at 4:06 PM, "Jacob Schmidt" <schmidjw@rose- >> hulman.edu> wrote: >> >>> There are many reasons for this type of behavior. >>> >>> And there are two sides to this coin. >>> >>> A) Why would you want the names to be references of an object? >>> >>> Imagine you want to pass a custom object into a function. Python >>> doesn't >>> know how to pass it in by value -> it is a distinct instance. >>> >>> For example -> you make a Rational class that you can use for >>> rational >>> number arithmetic. What are you supposed to do when you add two of >>> them >>> together? Change the first one? Change the second one? Make a new >>> one? >>> Alright. That's simple enough. Make a new one. But what if you go >>> deeper, make more complex functions, more complex objects? You can't >>> make a new one every time you want to change something. That's time >>> consuming AND memory consuming. >>> >>> >>> B) Why can't you just copy and pass everything by value? >>> >>> How do you copy an object? Maybe for integers, it is a simple matter >>> of >>> copying the bits into a new object and you're done. How do you >>> copy a >>> list? Do you copy the references of all the items in the list to the >>> new >>> list, or do you try to copy recursively all the items in the list? >>> How >>> do you copy a custom object? What if that object is based on dynamic >>> data? Each object should have a unique identifier, right? But that >>> sometimes defeats the point of the copy. You want the two objects to >>> be >>> identical. >>> >>> Python was written in such a way that it balances these arguments. >>> Tuples and lists are separate entities because they behave >>> differently >>> and are used in the situations for which they are best suited. >>> >>> Assignment just creates a new reference because it is the cheapest >>> quickest way to do it, and in most situations it works. >>> >>> >>> >>> On Sat, 2009-09-12 at 15:07 -0400, Bruce Sherwood wrote: >>>> None of us readers of this mailing list participated in the >>>> creation of Python, >>>> so I doubt that anyone here can tell you why Python is built that >>>> way, nor argue >>>> the merits of the case. Nor was the intent of the experienced.html >>>> article to >>>> explain this behavior, only to alert you to it. >>>> >>>> As for utility of this behavior: It's a bit of a stretch for me, >>>> but I can >>>> imagine a situation where you want to refer to some very long name >>>> by using a >>>> short name, as in >>>> >>>> s = the_sphere_whose_outer_surface_represents_Earth = sphere() >>>> s.pos = vector(10,20,30) >>>> >>>> I tried a little googling to find some history and found this >>>> laconic comment: >>>> >>>> "It is not weird in Python. Implicit copies are never made, partly >>>> because it's very hard to implement it correctly for every object." >>>> >>>> Also, http://merd.sourceforge.net/inoutness.html seems to summarize >>>> these issues >>>> for diverse programming languages. >>>> >>>> Bruce Sherwood >>>> >>>> Lenore Horner wrote: >>>>> >>>>>> http://vpython.org/contents/experienced.html >>>>> >>>>> I'm sorry to say that it was entirely unenlightening. The only >>>>> relevant >>>>> statement seems to be this "Making a second, independent copy of >>>>> an >>>>> object is a fairly unusual thing to do in Python, but there exist >>>>> special methods for doing this." But there is zilch explanation >>>>> of why >>>>> this is so. I repeat: why ever would I want two identical >>>>> objects that >>>>> _must remain so forever_ ? I completely fail to grasp the utility >>>>> of >>>>> this concept. I cannot think of a single thing that I can >>>>> accomplish >>>>> with two identical objects that I cannot accomplish with only one >>>>> of them. >>>>> >>>>> Sorry to be so boneheaded about this, but I just don't get it. >>>>> >>>>> Lenore >>>> >>>> --- >>>> --- >>>> --- >>>> --- >>>> ------------------------------------------------------------------ >>>> Let Crystal Reports handle the reporting - Free Crystal Reports >>>> 2008 30-Day >>>> trial. Simplify your report design, integration and deployment - >>>> and focus on >>>> what you do best, core application coding. Discover what's new with >>>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>>> _______________________________________________ >>>> Visualpython-users mailing list >>>> Vis...@li... >>>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>>> >>> >>> >>> --- >>> --- >>> --- >>> --- >>> ------------------------------------------------------------------ >>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >>> 30-Day >>> trial. Simplify your report design, integration and deployment - and >>> focus on >>> what you do best, core application coding. Discover what's new with >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>> _______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>> >>> >> >> >> Tony Risinger >> Application Development Specialist >> Tel: 507-535-7563 | Fax: 507-292-5747 | Toll Free: 866-241-0639 >> >> To...@Br... >> >> http://www.brokerbin.com/ >> >> CONFIDENTIAL INFORMATION: This electronic mail message and any >> attached files contain information intended for the exclusive use of >> the specific individual(s) or entity(s) to whom it is addressed and >> may contain information that is propriety, privileged or >> confidential or otherwise exempt from disclosure. If you are not the >> intended recipient, please notify the sender immediately, by reply >> electronic mail or by telephone, of any unintended recipients so we >> may correct our records. Also, delete the original electronic mail >> and any attachments without making any copies of the electronic mail >> message or attachments. >> >> --- >> --- >> --- >> --------------------------------------------------------------------- >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and >> focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users > > Tony Risinger Application Development Specialist Tel: 507-535-7563 | Fax: 507-292-5747 | Toll Free: 866-241-0639 To...@Br... http://www.brokerbin.com/ CONFIDENTIAL INFORMATION: This electronic mail message and any attached files contain information intended for the exclusive use of the specific individual(s) or entity(s) to whom it is addressed and may contain information that is propriety, privileged or confidential or otherwise exempt from disclosure. If you are not the intended recipient, please notify the sender immediately, by reply electronic mail or by telephone, of any unintended recipients so we may correct our records. Also, delete the original electronic mail and any attachments without making any copies of the electronic mail message or attachments. |
From: Bruce S. <Bru...@nc...> - 2009-09-13 14:41:40
|
I think I might see why multiple symbols can reference a single object in Python. I think it's related to the "call by reference" mechanism used in Python for passing arguments to a subroutine. See this brief discussion: http://bogdan.org.ua/2008/02/11/python-passing-by-value-vs-passing-by-reference.html Bruce Sherwood |
From: Bruce S. <Bru...@nc...> - 2009-09-13 14:28:15
|
Sigh. That module definitely needs work. If you look at controls.py you'll see that a button is constructed from 5 boxes and a label. Until and unless the controls module is improved, the only way to achieve the desired effect is to change these individual elements (e.g. buttonname.button.color = something). Ugh. Obviously a better scheme would be to change the button class to honor all desired changes, but here's a specific example within the present framework: from visual.controls import * s = True def switch(): global s if s: b.text = "Off" b.button.color = color.cyan else: b.text = "On" b.button.color = color.red s = not s c = controls() b = button(text="On", color=color.red, action=lambda: switch()) while 1: rate(100) c.interact() Bruce Sherwood Lenore Horner wrote: > I'd like my buttons to change colors when they've received a button > press. I can get an apparent color change by recreating the button. > However, if I change the text , I see both texts stacked on top of > each other, so I think I'm just piling up the buttons. I've tried using > > buttonname.color=color.newcolor > > without success. I have tried > > buttonname.visible=False > del buttonname > > and the button doesn't disappear. > > So in general it's looking to me like buttons don't behave the way > ordinary objects do. Is this correct? > > Lenore > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Lenore H. <lh...@si...> - 2009-09-13 14:21:35
|
I was being stupid and thought I could pull some of the color-sliders tricks into the regular controls package and have them for everything instead of having to copy and paste revised definitions all the time. After all, I could always re-install the controls.py and controls.pyc files if I mangled them irrepairably. Maybe not. I opened the package and just copied those to files back to the visual folder in site packages - replacing my mangled ones. No dice. I've wiped out Vpython and MacPython and reinstalled both. Still no good. Controls complains about a property not existing that I can plainly see in the code is defined. Any suggestions for where the wrong definition continues to lurk? Here's the error message. s1 = slider(pos=(-50,0,0), width=2, length=10, min=0, max=pi/4, value = 0.5, action=lambda: setangle(s1)) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ python2.6/site-packages/visual/controls.py", line 245, in __init__ ctrl.__init__(self, args) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ python2.6/site-packages/visual/controls.py", line 85, in __init__ self.value = args['value'] File "/Library/Frameworks/Python.framework/Versions/2.6/lib/ python2.6/site-packages/visual/controls.py", line 283, in setvalue self.update(self.pos+self.axis*val*self.length/(self.max-self.min)) AttributeError: 'slider' object has no attribute 'axis' I've tried it both with and without an explicit axis in the slider call to no avail. TIA, Lenore |
From: Bruce S. <Bru...@nc...> - 2009-09-13 14:09:03
|
Thanks much to both of you for posting these comments on references. Crossing paths, I also posted a comment about this with a pointer to some discussion on the web. Bruce Sherwood Tony Risinger wrote: > Additionally, many objects that I'm used to working with contain open > streams, database links, and other singular, resource type > references. How does one copy these by value? > > I am most experienced with php, and since 5.x, all objects are passed > by reference; one must use the "copy" keyword which would invoke the > __copy__() special method. > > I used the pass stuff around by reference all the time in php, so > python makes perfect sense to me. Also, pretty much all systems have > a "copy on write" policy anyway, so your not really passing by value > until you modify the new reference. Most new references created are > read only, and of they are not, I like the python way of making it > obvious in the code by explicity creating a new object, as in the > > b = vector(a) > > examples. > > On Sep 12, 2009, at 4:06 PM, "Jacob Schmidt" <schmidjw@rose- > hulman.edu> wrote: > >> There are many reasons for this type of behavior. >> >> And there are two sides to this coin. >> >> A) Why would you want the names to be references of an object? >> >> Imagine you want to pass a custom object into a function. Python >> doesn't >> know how to pass it in by value -> it is a distinct instance. >> >> For example -> you make a Rational class that you can use for rational >> number arithmetic. What are you supposed to do when you add two of >> them >> together? Change the first one? Change the second one? Make a new one? >> Alright. That's simple enough. Make a new one. But what if you go >> deeper, make more complex functions, more complex objects? You can't >> make a new one every time you want to change something. That's time >> consuming AND memory consuming. >> >> >> B) Why can't you just copy and pass everything by value? >> >> How do you copy an object? Maybe for integers, it is a simple matter >> of >> copying the bits into a new object and you're done. How do you copy a >> list? Do you copy the references of all the items in the list to the >> new >> list, or do you try to copy recursively all the items in the list? How >> do you copy a custom object? What if that object is based on dynamic >> data? Each object should have a unique identifier, right? But that >> sometimes defeats the point of the copy. You want the two objects to >> be >> identical. >> >> Python was written in such a way that it balances these arguments. >> Tuples and lists are separate entities because they behave differently >> and are used in the situations for which they are best suited. >> >> Assignment just creates a new reference because it is the cheapest >> quickest way to do it, and in most situations it works. >> >> >> >> On Sat, 2009-09-12 at 15:07 -0400, Bruce Sherwood wrote: >>> None of us readers of this mailing list participated in the >>> creation of Python, >>> so I doubt that anyone here can tell you why Python is built that >>> way, nor argue >>> the merits of the case. Nor was the intent of the experienced.html >>> article to >>> explain this behavior, only to alert you to it. >>> >>> As for utility of this behavior: It's a bit of a stretch for me, >>> but I can >>> imagine a situation where you want to refer to some very long name >>> by using a >>> short name, as in >>> >>> s = the_sphere_whose_outer_surface_represents_Earth = sphere() >>> s.pos = vector(10,20,30) >>> >>> I tried a little googling to find some history and found this >>> laconic comment: >>> >>> "It is not weird in Python. Implicit copies are never made, partly >>> because it's very hard to implement it correctly for every object." >>> >>> Also, http://merd.sourceforge.net/inoutness.html seems to summarize >>> these issues >>> for diverse programming languages. >>> >>> Bruce Sherwood >>> >>> Lenore Horner wrote: >>>>> http://vpython.org/contents/experienced.html >>>> I'm sorry to say that it was entirely unenlightening. The only >>>> relevant >>>> statement seems to be this "Making a second, independent copy of an >>>> object is a fairly unusual thing to do in Python, but there exist >>>> special methods for doing this." But there is zilch explanation >>>> of why >>>> this is so. I repeat: why ever would I want two identical >>>> objects that >>>> _must remain so forever_ ? I completely fail to grasp the utility >>>> of >>>> this concept. I cannot think of a single thing that I can >>>> accomplish >>>> with two identical objects that I cannot accomplish with only one >>>> of them. >>>> >>>> Sorry to be so boneheaded about this, but I just don't get it. >>>> >>>> Lenore >>> --- >>> --- >>> --- >>> --------------------------------------------------------------------- >>> Let Crystal Reports handle the reporting - Free Crystal Reports >>> 2008 30-Day >>> trial. Simplify your report design, integration and deployment - >>> and focus on >>> what you do best, core application coding. Discover what's new with >>> Crystal Reports now. http://p.sf.net/sfu/bobj-july >>> _______________________________________________ >>> Visualpython-users mailing list >>> Vis...@li... >>> https://lists.sourceforge.net/lists/listinfo/visualpython-users >>> >> >> --- >> --- >> --- >> --------------------------------------------------------------------- >> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 >> 30-Day >> trial. Simplify your report design, integration and deployment - and >> focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users >> >> > > > Tony Risinger > Application Development Specialist > Tel: 507-535-7563 | Fax: 507-292-5747 | Toll Free: 866-241-0639 > > To...@Br... > > http://www.brokerbin.com/ > > CONFIDENTIAL INFORMATION: This electronic mail message and any attached files contain information intended for the exclusive use of the specific individual(s) or entity(s) to whom it is addressed and may contain information that is propriety, privileged or confidential or otherwise exempt from disclosure. If you are not the intended recipient, please notify the sender immediately, by reply electronic mail or by telephone, of any unintended recipients so we may correct our records. Also, delete the original electronic mail and any attachments without making any copies of the electronic mail message or attachments. > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users |
From: Tony R. <To...@br...> - 2009-09-13 00:03:27
|
Additionally, many objects that I'm used to working with contain open streams, database links, and other singular, resource type references. How does one copy these by value? I am most experienced with php, and since 5.x, all objects are passed by reference; one must use the "copy" keyword which would invoke the __copy__() special method. I used the pass stuff around by reference all the time in php, so python makes perfect sense to me. Also, pretty much all systems have a "copy on write" policy anyway, so your not really passing by value until you modify the new reference. Most new references created are read only, and of they are not, I like the python way of making it obvious in the code by explicity creating a new object, as in the b = vector(a) examples. On Sep 12, 2009, at 4:06 PM, "Jacob Schmidt" <schmidjw@rose- hulman.edu> wrote: > There are many reasons for this type of behavior. > > And there are two sides to this coin. > > A) Why would you want the names to be references of an object? > > Imagine you want to pass a custom object into a function. Python > doesn't > know how to pass it in by value -> it is a distinct instance. > > For example -> you make a Rational class that you can use for rational > number arithmetic. What are you supposed to do when you add two of > them > together? Change the first one? Change the second one? Make a new one? > Alright. That's simple enough. Make a new one. But what if you go > deeper, make more complex functions, more complex objects? You can't > make a new one every time you want to change something. That's time > consuming AND memory consuming. > > > B) Why can't you just copy and pass everything by value? > > How do you copy an object? Maybe for integers, it is a simple matter > of > copying the bits into a new object and you're done. How do you copy a > list? Do you copy the references of all the items in the list to the > new > list, or do you try to copy recursively all the items in the list? How > do you copy a custom object? What if that object is based on dynamic > data? Each object should have a unique identifier, right? But that > sometimes defeats the point of the copy. You want the two objects to > be > identical. > > Python was written in such a way that it balances these arguments. > Tuples and lists are separate entities because they behave differently > and are used in the situations for which they are best suited. > > Assignment just creates a new reference because it is the cheapest > quickest way to do it, and in most situations it works. > > > > On Sat, 2009-09-12 at 15:07 -0400, Bruce Sherwood wrote: >> None of us readers of this mailing list participated in the >> creation of Python, >> so I doubt that anyone here can tell you why Python is built that >> way, nor argue >> the merits of the case. Nor was the intent of the experienced.html >> article to >> explain this behavior, only to alert you to it. >> >> As for utility of this behavior: It's a bit of a stretch for me, >> but I can >> imagine a situation where you want to refer to some very long name >> by using a >> short name, as in >> >> s = the_sphere_whose_outer_surface_represents_Earth = sphere() >> s.pos = vector(10,20,30) >> >> I tried a little googling to find some history and found this >> laconic comment: >> >> "It is not weird in Python. Implicit copies are never made, partly >> because it's very hard to implement it correctly for every object." >> >> Also, http://merd.sourceforge.net/inoutness.html seems to summarize >> these issues >> for diverse programming languages. >> >> Bruce Sherwood >> >> Lenore Horner wrote: >>> >>>> http://vpython.org/contents/experienced.html >>> >>> I'm sorry to say that it was entirely unenlightening. The only >>> relevant >>> statement seems to be this "Making a second, independent copy of an >>> object is a fairly unusual thing to do in Python, but there exist >>> special methods for doing this." But there is zilch explanation >>> of why >>> this is so. I repeat: why ever would I want two identical >>> objects that >>> _must remain so forever_ ? I completely fail to grasp the utility >>> of >>> this concept. I cannot think of a single thing that I can >>> accomplish >>> with two identical objects that I cannot accomplish with only one >>> of them. >>> >>> Sorry to be so boneheaded about this, but I just don't get it. >>> >>> Lenore >> >> --- >> --- >> --- >> --------------------------------------------------------------------- >> Let Crystal Reports handle the reporting - Free Crystal Reports >> 2008 30-Day >> trial. Simplify your report design, integration and deployment - >> and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Visualpython-users mailing list >> Vis...@li... >> https://lists.sourceforge.net/lists/listinfo/visualpython-users >> > > > --- > --- > --- > --------------------------------------------------------------------- > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users > > Tony Risinger Application Development Specialist Tel: 507-535-7563 | Fax: 507-292-5747 | Toll Free: 866-241-0639 To...@Br... http://www.brokerbin.com/ CONFIDENTIAL INFORMATION: This electronic mail message and any attached files contain information intended for the exclusive use of the specific individual(s) or entity(s) to whom it is addressed and may contain information that is propriety, privileged or confidential or otherwise exempt from disclosure. If you are not the intended recipient, please notify the sender immediately, by reply electronic mail or by telephone, of any unintended recipients so we may correct our records. Also, delete the original electronic mail and any attachments without making any copies of the electronic mail message or attachments. |
From: Robert X. <nne...@gm...> - 2009-09-13 00:01:30
|
In this particular case, vector() will accept another vector as an argument, creating a copy of the vector. This allows you to dispense with the copy module (which you should still know about): >>> from visual import * >>> v1 = vector(1,2,3) >>> v2 = vector(v1) >>> v1 vector(1, 2, 3) >>> v2 vector(1, 2, 3) >>> v1.x = 3 >>> v1 vector(3, 2, 3) >>> v2 vector(1, 2, 3) Robert 2009/9/12 Parker Swanson <Par...@li...> > Hi Lenore (& Robert & the list), > > If you're used to passing parameters by value (as in languages like C), it > can seem strange to pass them by reference (as with mutable objects in > Python). You can dig into the Python docs to find out more about it. > > Python provides for copying mutable objects by value by its copy (and > deepcopy) functions: > > >>> from copy import * > >>> from visual import * > >>> vector1=vector(1,2,3) > >>> vector2=vector1 {copy by reference: vector2 > and vector1 are two names referring to the same object} > >>> vector2 > vector(1, 2, 3) > >>> vector2.y=4 > >>> vector2 > vector(1, 4, 3) > >>> vector1 > vector(1, 4, 3) > but: > >>> vector3=vector(copy(vector1)) {copy by value: vector3 is a new > vector: each of its components is a copy of the corresponding component of > vector1} > >>> vector3 > vector(1, 4, 3) > >>> vector1.y=5 > >>> vector1 > vector(1, 5, 3) > >>> vector3 > vector(1, 4, 3) > > The "clumsy process" you mention accomplishes the same thing in a piecewise > fashion. > > Hope this helps! And I hope you enjoy using Python as much as thousands of > the rest of us do. Best regards, > Parker > > > ---------------------------------------------------------------------------- > > Message: 2 > Date: Sat, 12 Sep 2009 10:56:58 -0500 > From: Lenore Horner <lh...@si...> > Subject: Re: [Visualpython-users] strange math > > So a vector is a list which also has strange properties. I still want > to know why it is more useful to have two names for the same thing > than it is to copy the values from one thing to another thing. > > Granted, I have since found out I can work around this problem with > the following clumsy process (the least clumsy of the three I have > found). > >>> from visual import * > >>> a = vector(0,0,1) > >>> b = vector(a.x,a.y,a.z) > >>> print a,b > <0, 0, 1> <0, 0, 1> > >>> b.x=1 > >>> print a,b > <0, 0, 1> <1, 0, 1> > > Lenore > > On Sep 12, 2009, at 10:12 , Robert Xiao wrote: > > > Vector objects are mutable, which means they get passed by reference > > instead of by value. It also means that statements like "a=b" do not > > copy the value, but they copy the reference (making a and b point to > > the same vector). So, > > > > a = vector(1,2,3) > > b = a > > b.x = 3 > > print a > > > > yields > > <3, 2, 3> > > > > as expected, because a and b refer to the same vector. The same > > thing happens with list objects in Python. > > > > Numbers, tuples and strings are immutable in Python, so they are > > passed by value. > > > > Robert > > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus > on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users > |
From: Lenore H. <lh...@si...> - 2009-09-12 22:56:32
|
I'd like my buttons to change colors when they've received a button press. I can get an apparent color change by recreating the button. However, if I change the text , I see both texts stacked on top of each other, so I think I'm just piling up the buttons. I've tried using buttonname.color=color.newcolor without success. I have tried buttonname.visible=False del buttonname and the button doesn't disappear. So in general it's looking to me like buttons don't behave the way ordinary objects do. Is this correct? Lenore |
From: Jacob S. <sch...@ro...> - 2009-09-12 21:05:01
|
There are many reasons for this type of behavior. And there are two sides to this coin. A) Why would you want the names to be references of an object? Imagine you want to pass a custom object into a function. Python doesn't know how to pass it in by value -> it is a distinct instance. For example -> you make a Rational class that you can use for rational number arithmetic. What are you supposed to do when you add two of them together? Change the first one? Change the second one? Make a new one? Alright. That's simple enough. Make a new one. But what if you go deeper, make more complex functions, more complex objects? You can't make a new one every time you want to change something. That's time consuming AND memory consuming. B) Why can't you just copy and pass everything by value? How do you copy an object? Maybe for integers, it is a simple matter of copying the bits into a new object and you're done. How do you copy a list? Do you copy the references of all the items in the list to the new list, or do you try to copy recursively all the items in the list? How do you copy a custom object? What if that object is based on dynamic data? Each object should have a unique identifier, right? But that sometimes defeats the point of the copy. You want the two objects to be identical. Python was written in such a way that it balances these arguments. Tuples and lists are separate entities because they behave differently and are used in the situations for which they are best suited. Assignment just creates a new reference because it is the cheapest quickest way to do it, and in most situations it works. On Sat, 2009-09-12 at 15:07 -0400, Bruce Sherwood wrote: > None of us readers of this mailing list participated in the creation of Python, > so I doubt that anyone here can tell you why Python is built that way, nor argue > the merits of the case. Nor was the intent of the experienced.html article to > explain this behavior, only to alert you to it. > > As for utility of this behavior: It's a bit of a stretch for me, but I can > imagine a situation where you want to refer to some very long name by using a > short name, as in > > s = the_sphere_whose_outer_surface_represents_Earth = sphere() > s.pos = vector(10,20,30) > > I tried a little googling to find some history and found this laconic comment: > > "It is not weird in Python. Implicit copies are never made, partly > because it's very hard to implement it correctly for every object." > > Also, http://merd.sourceforge.net/inoutness.html seems to summarize these issues > for diverse programming languages. > > Bruce Sherwood > > Lenore Horner wrote: > > > >> http://vpython.org/contents/experienced.html > > > > I'm sorry to say that it was entirely unenlightening. The only relevant > > statement seems to be this "Making a second, independent copy of an > > object is a fairly unusual thing to do in Python, but there exist > > special methods for doing this." But there is zilch explanation of why > > this is so. I repeat: why ever would I want two identical objects that > > _must remain so forever_ ? I completely fail to grasp the utility of > > this concept. I cannot think of a single thing that I can accomplish > > with two identical objects that I cannot accomplish with only one of them. > > > > Sorry to be so boneheaded about this, but I just don't get it. > > > > Lenore > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Visualpython-users mailing list > Vis...@li... > https://lists.sourceforge.net/lists/listinfo/visualpython-users > |
From: Bruce S. <Bru...@nc...> - 2009-09-12 19:07:11
|
None of us readers of this mailing list participated in the creation of Python, so I doubt that anyone here can tell you why Python is built that way, nor argue the merits of the case. Nor was the intent of the experienced.html article to explain this behavior, only to alert you to it. As for utility of this behavior: It's a bit of a stretch for me, but I can imagine a situation where you want to refer to some very long name by using a short name, as in s = the_sphere_whose_outer_surface_represents_Earth = sphere() s.pos = vector(10,20,30) I tried a little googling to find some history and found this laconic comment: "It is not weird in Python. Implicit copies are never made, partly because it's very hard to implement it correctly for every object." Also, http://merd.sourceforge.net/inoutness.html seems to summarize these issues for diverse programming languages. Bruce Sherwood Lenore Horner wrote: > >> http://vpython.org/contents/experienced.html > > I'm sorry to say that it was entirely unenlightening. The only relevant > statement seems to be this "Making a second, independent copy of an > object is a fairly unusual thing to do in Python, but there exist > special methods for doing this." But there is zilch explanation of why > this is so. I repeat: why ever would I want two identical objects that > _must remain so forever_ ? I completely fail to grasp the utility of > this concept. I cannot think of a single thing that I can accomplish > with two identical objects that I cannot accomplish with only one of them. > > Sorry to be so boneheaded about this, but I just don't get it. > > Lenore |
From: Parker S. <Par...@li...> - 2009-09-12 18:56:36
|
Hi Lenore (& Robert & the list), If you're used to passing parameters by value (as in languages like C), it can seem strange to pass them by reference (as with mutable objects in Python). You can dig into the Python docs to find out more about it. Python provides for copying mutable objects by value by its copy (and deepcopy) functions: >>> from copy import * >>> from visual import * >>> vector1=vector(1,2,3) >>> vector2=vector1 {copy by reference: vector2 and vector1 are two names referring to the same object} >>> vector2 vector(1, 2, 3) >>> vector2.y=4 >>> vector2 vector(1, 4, 3) >>> vector1 vector(1, 4, 3) but: >>> vector3=vector(copy(vector1)) {copy by value: vector3 is a new vector: each of its components is a copy of the corresponding component of vector1} >>> vector3 vector(1, 4, 3) >>> vector1.y=5 >>> vector1 vector(1, 5, 3) >>> vector3 vector(1, 4, 3) The "clumsy process" you mention accomplishes the same thing in a piecewise fashion. Hope this helps! And I hope you enjoy using Python as much as thousands of the rest of us do. Best regards, Parker ---------------------------------------------------------------------------- Message: 2 Date: Sat, 12 Sep 2009 10:56:58 -0500 From: Lenore Horner <lh...@si...> Subject: Re: [Visualpython-users] strange math So a vector is a list which also has strange properties. I still want to know why it is more useful to have two names for the same thing than it is to copy the values from one thing to another thing. Granted, I have since found out I can work around this problem with the following clumsy process (the least clumsy of the three I have found). >>> from visual import * >>> a = vector(0,0,1) >>> b = vector(a.x,a.y,a.z) >>> print a,b <0, 0, 1> <0, 0, 1> >>> b.x=1 >>> print a,b <0, 0, 1> <1, 0, 1> Lenore On Sep 12, 2009, at 10:12 , Robert Xiao wrote: > Vector objects are mutable, which means they get passed by reference > instead of by value. It also means that statements like "a=b" do not > copy the value, but they copy the reference (making a and b point to > the same vector). So, > > a = vector(1,2,3) > b = a > b.x = 3 > print a > > yields > <3, 2, 3> > > as expected, because a and b refer to the same vector. The same > thing happens with list objects in Python. > > Numbers, tuples and strings are immutable in Python, so they are > passed by value. > > Robert > |
From: Lenore H. <lh...@si...> - 2009-09-12 17:59:12
|
> http://vpython.org/contents/experienced.html I'm sorry to say that it was entirely unenlightening. The only relevant statement seems to be this "Making a second, independent copy of an object is a fairly unusual thing to do in Python, but there exist special methods for doing this." But there is zilch explanation of why this is so. I repeat: why ever would I want two identical objects that _must remain so forever_ ? I completely fail to grasp the utility of this concept. I cannot think of a single thing that I can accomplish with two identical objects that I cannot accomplish with only one of them. Sorry to be so boneheaded about this, but I just don't get it. Lenore |