[issue29689] Asyncio-namespace helpers for async_generators

2017-03-01 Thread Scott Russ

Changes by Scott Russ <sc...@linuxjihad.com>:


--
nosy: +Scott Russ

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29689>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: More list building

2016-05-11 Thread louis . a . russ
On Wednesday, May 11, 2016 at 1:22:09 PM UTC-4, DFS wrote:
> Have:
> p1 = ['Now', 'the', 'for', 'good']
> p2 = ['is', 'time', 'all', 'men']
> 
> want
> [('Now','is','the','time'), ('for','all','good','men')]
> 
> This works:
> 
> p = []
> for i in xrange(0,len(p1),2):
>   p.insert(i,(p1[i],p2[i],p1[i+1],p2[i+1]))
> 
> 
> But it seems clunky.
> 
> Better way(s)?
> 
> Thanks

Would this work for you? Or do you need something more general?
t = list(zip(p1,p2))
p = [t[0]+t[1],t[2]+t[3]]
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: A Pragmatic Case for Static Typing

2013-09-02 Thread Russ P.
On Monday, September 2, 2013 1:10:34 AM UTC-7, Paul Rubin wrote:
 Russ P. writes:
 
  I just stumbled across this video and found it interesting:
 
  http://vimeo.com/72870631
 
  My apologies if it has been posted here already.
 
 
 
 The slides for it are here, so I didn't bother watching the 1 hour video:
 
 
 
   http://gbaz.github.io/slides/hurt-statictyping-07-2013.pdf
 
 
 
 I guess for Python programmers looking to expand their horizons a bit,
 
 it's worth at least looking at the slides.  But, it may overstate its
 
 case a little bit.  Haskell's type system is way cool but the language
 
 introduces other headaches into programming.

I thought the video was amusing, but I am probably easily amused. I noticed 
that he did not list my current main language, Scala, as statically typed. I am 
not sure why, but perhaps because it inherits null from Java. In any case, his 
main point was that static typing reduces time to working code. I have no doubt 
that is true for large-scale programming, but I doubt it is true for 
small-scale programming. The question is where the crossover point is.
-- 
http://mail.python.org/mailman/listinfo/python-list


A Pragmatic Case for Static Typing

2013-09-01 Thread Russ P.
I just stumbled across this video and found it interesting:

http://vimeo.com/72870631

My apologies if it has been posted here already.
-- 
http://mail.python.org/mailman/listinfo/python-list


[issue18358] update links to Apple Style Guide

2013-07-04 Thread Russ Webber

Russ Webber added the comment:

So it is. Sorry, should have searched first.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue18358
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Idea for key parameter in all() builting, would it be feasible?

2013-06-19 Thread russ . pobox
I was mucking around, trying to code a prime sieve in one line. I don't know 
about filters and bit shifting and stuff like that but I thought I could do it 
with builtins, albeit a very long one line. This is the part of my stupid trick 
in question that got me wondering about a key parameter for all() and the why 
is below that.

[n for n in xrange(3, int(pow(upper, 0.5) + 1), 2)
 if all(map(lambda d: n%d!=0, xrange(2, int(pow(n, 0.5) + 1]

Where upper is the upper bound for the sieve. That list comprehension will 
provide a list of prime numbers up to the square root of upper using trial 
division. Then that list was going to be used for the rest of the sieve using 
the set.difference method to remove multiples of all those primes.

That's when I realized that all() doesn't necessarily go through every item in 
the alterable. It's stops the moment it finds a false value. You can test that 
that's true with.

 all(xrange(10**9))

It's instant because 0 is the false value and so it stops and returns false 
after only checking the first value. Also because we're using xrange the 
generator function cousin of range.

The following on the other hand should take a while.

 all(xrange(1, 10**9))

And the following, although the same thing really as all(xrange(10**9)), is not 
as instant and will take even longer than the above.

 all(map(lambda x: bool(x), xrange(10**9)))

However if all by some chance (I don't know how this stuff works underneath) 
has a key parameter then we could do something like.

 all(xrange(10**9), key=lambda x: bool(x))

Which would return False instantly (ideally).
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Idea for key parameter in all() builting, would it be feasible?

2013-06-19 Thread russ . pobox
All you need is the iterator version of map(). In Python 3, that's the
normal map(); in Python 2, use this:

 from itertools import imap
 all(imap(lambda x: bool(x), xrange(10**9)))
False

It's roughly instant, like you would expect.

ChrisA

This probably isn't the way to post a reply on your own thread (I added an 
angle bracket to every line above :P) but last time clicked reply to author not 
knowing that is email. Anyways...

Thanks, I like itertools but had no idea imap. Although I did suspect Python3 
would have something to say about this just to make me envious :D

It works like a charm!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: My son wants me to teach him Python

2013-06-13 Thread russ . pobox
I couldn't read every post here so don't know if this has been suggested, or if 
there is perhaps a better suggestion which I haven't read in this thread, but 
in as far as I've read I feel the need to recommend:
learnpythonthehardway.org

Knowing a little JavaScript and even allot of HTML doesn't take him out of the 
total noob category when it comes to programming (did someone say game 
programming? Hold your horses!). I took a visual basic course (which I dropped 
out of admittedly after 3 months) and still knew absolutely nothing, which 
isn't necessarily just because I'm dumb.

After eventually learning Python in incremental and sporadic episodes of free 
time, I did come across a few resources and by virtue of the frustration of 
having taken so long to learn to code in the easiest damn programming language 
to learn, I found myself scrutinizing allot of the tutorials I'd been passing 
by.

I noticed developers.google.com somewhere up there. That's just a no no. Sorry. 
Maybe some of the people here are more than pretty smart but there's a good 
chance it'll be over his head at first, and at first is a bad place to be in 
over your head when you're learning the fundamentals.

I also notice Invent with python. I personally would go for 2.x rather than 3 
but that aside, for reasons I'm too tired to word, I didn't find it a good fit 
for me. I takes a dive right in approach and well, I never did learn to swim.

Udacity was the third suggestion I noticed. This is also a no no. I completed 
the cs101 udacity course which I'm sure is the course in question here, and I 
loved it! Really I learn crap load from it, but at every step I asked myself, 
would this had helped if it was the first place I went to to learn to code? No. 
There were allot of gaps I noticed when looking from a complete beginners 
perspective and even though the course claims to has no prerequisites, I would 
have hated if I started with that. However that was last year and I think it 
was only a few months old, so it may be allot different now, I haven't checked.

I read How to think like a computer scientist, A byte of python, and even the 
official docs. The only one I came across that made me say *#! why didn't I 
google that? was learnpythonthehardway.

I do think it depends a great deal on the individual, and for me personally, 
that style of learning was just it. For one you learn from the bottom up. It's 
a compulsion for some to know that that know a thing before they're brave 
enough to move forward. In cases where a leap is the only way forward, the 
tutor pulls you across that divide by your ankles. You feel a sense of 
obligation to take to his instruction. And above all, it greatly emphasizes the 
learn by doing approach, in small steps, not big projects that you end up 
completing just to get through it but don't learn much from.

So that's my recommendation. But all that aside, my biggest point would be, 
just pick one do it. As you can see if you read that, my biggest flaw was 
simply the lack of devotion to one path.

Game programming if he still wants to do that is another question entirely I 
feel. Fundamentals are fundamentals. The only variable is how long it might 
take him to get passed it. Even with Python, some people just never get it.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Reply to post 'Tryign to add a valkue to a set'

2013-06-11 Thread russ . pobox
Just try this in the interpreter and see.

for key, value in sorted(months.items(), key=lambda x:x[1]):
print %s %s % (value, key)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Simple program question.

2013-06-11 Thread russ . pobox
input() is a function which returns a string. You can assign this return value 
to a variable. That's what variables are for.

option = input()

Now you can use the variable named option in place of all those calls to 
input().

i.e:

...instead of..

if input() == 'parry':
# etc

...do this...

option = input()
if option == 'parry':
# etc
elif option == 'whatever':
# etc
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Reply to post 'Tryign to add a valkue to a set'

2013-06-10 Thread russ . pobox
for key, value in sorted(months.items(), key=lambda x:x[1]):
print('\toption value%s%s/option'\n % (value, key))


Explanation:
- - - - - - 
dict.items is a method associated with dicts just like dict.keys or 
dict.values, and returns a list of (key, value) pairs.

sorted and some other builtin functions have an optional key argument, which 
tells the function what exactly to look at when sorting the sequence. (I say 
sequence because you can sort a string or tuple or dict and get a list back in 
return). In this case we use a simple lambda function to tell it to look at the 
value not the key (i.e. (key, value)[1] returns value)

Alternatively you could do this.

def get_value(item):
return item[1]

for key, value in sorted(months.items(), key=get_value):
...etc...

You might also wonder what this would do

for key, value in sorted(months.items()):
...etc...

Which becomes a question of what would something like this do

sorted([(1,3), (2,2), (3,1)])

Well sorted is a function that expects to get some iterable (sequence of some 
kinda items) to sort. If those items happens to be sequences themselves, like 
(key, value) which is a sequence of two items, then it's only going to care 
about the first item and ignore the rest (i.e ignore value).

So the above will return
[(1,3), (2,2), (3,1)] which as far as sorted() is concerned, is already sorted.


About the string being printed:
- - - - - - - - - - - - - - - - 
I'm not sure why or if you want a single quotation around the entire element to 
be printed as well but if so then that's how I'd do it. The \t is for a tab. 
You also don't have to worry about adding newlines because print will print 
each statement on a newline anyways by default unless you tell it otherwise by 
specifying the sep argument.

Sorry my first post, I said allot didn't I.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-06 Thread Russ P.
On Thursday, June 6, 2013 2:29:02 AM UTC-7, Steven D'Aprano wrote:
 On Thu, 06 Jun 2013 12:29:44 +1000, Chris Angelico wrote:
 
 
 
  On Thu, Jun 6, 2013 at 11:56 AM, Steven D'Aprano
 
  steve+comp.lang.pyt...@pearwood.info wrote:
 
  On Wed, 05 Jun 2013 14:59:31 -0700, Russ P. wrote:
 
  As for Python, my experience with it is that, as your application
 
  grows, you start getting confused about what the argument types are or
 
  are supposed to be.
 
 
 
  Whereas people never get confused about the arguments in static typed
 
  languages?
 
 
 
  The only difference is whether the compiler tells you that you've
 
  passed the wrong type, or your unit test tells you that you've passed
 
  the wrong type. What, you don't have unit tests? Then how do you know
 
  that the code does the right thing when passed data of the right type?
 
  Adding an extra couple of unit tests is not that big a burden.
 
  
 
  The valid type(s) for an argument can be divided into two categories:
 
  Those the compiler can check for, and those the compiler can't check
 
  for. Some languages have more in the first category than others, but
 
  what compiler can prove that a string is an
 
  HTML-special-characters-escaped string? In a very few languages, the
 
  compiler can insist that an integer be between 7 and 30, but there'll
 
  always be some things you can't demonstrate with a function signature.
 
  
 
  That said, though, I do like being able to make at least *some*
 
  declaration there. It helps catch certain types of error.
 
 
 
 *shrug*
 
 
 
 I don't terribly miss type declarations. Function argument declarations 
 
 are a bit simpler in Pascal, compared to Python:
 
 
 
 
 
 Function Add(A, B : Integer) : Integer; 
 
 Begin
 
  Add := A + B;
 
 End;
 
 
 
 
 
 versus
 
 
 
 
 
 def add(a, b):
 
 if not (isinstance(a, int) and isinstance(b, int)):
 
 raise TypeError
 
 return a + b
 

Scala also has isInstanceOf[Type] which allows you to do this sort of thing, 
but of course it would be considered terrible style in Scala.

 
 
 
 but not that much simpler. And while Python can trivially support 
 
 multiple types, Pascal cannot. (Some other static typed languages may.)
 
 
 
 Whatever benefit there is in declaring the type of a function is lost due 
 
 to the inability to duck-type or program to an interface. There's no type 
 
 that says any object with a 'next' method, for example. And having to 
 
 declare local variables is a PITA with little benefit.
 
 
 
 Give me a language with type inference, and a nice, easy way to keep duck-
 
 typing, and I'll reconsider. But until then, I don't believe the benefit 
 
 of static types comes even close to paying for the extra effort.


Scala has type inference. For example, you can write

val x = 1

and the compiler figures out that x is an integer. Scala also has something 
called structural typing, which I think is more or less equivalent to duck 
typing, although I don't think it is used very often.

Are you ready to try Scala yet? 8-)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Tuesday, June 4, 2013 8:44:11 AM UTC-7, Rick Johnson wrote:

 Yes, but the problem is not my approach, rather the lack
 
 of proper language design (my apologizes to the anointed
 
 one. ;-)

If you don't like implicit conversion to Boolean, then maybe you should be 
using another language -- and I mean that in a constructive sense. I'm not 
particularly fond of it either, but I switched from Python to another language 
a while back. The issue is not a lack of proper language design but rather a 
language design philosophy that values conciseness and simplicity over 
explicitness and rigor. 

Implicit conversion to Boolean is only one of many language features that are 
questionable for critical production software. Another is the convention of 
interpreting negative indices as counting backward from the end of a list or 
sequence. Yeah, I thought that was elegant... until it bit me. Is it a bad 
idea? Not necessarily. It certainly enhances programmer productivity, and it 
can be done correctly almost all the time. But that one time in a hundred or 
a thousand when you accidentally use a negative index can be a bitch.

But then, what would you expect of a language that allows you to write

x = 1
x = Hello

It's all loosey goosey -- which is fine for many applications but certainly not 
for critical ones.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Wednesday, June 5, 2013 12:15:57 AM UTC-7, Chris Angelico wrote:
 On Wed, Jun 5, 2013 at 4:11 PM, Russ P. wrote:
 
  On Tuesday, June 4, 2013 8:44:11 AM UTC-7, Rick Johnson wrote:
 
 
 
  Yes, but the problem is not my approach, rather the lack
 
 
 
  of proper language design (my apologizes to the anointed
 
 
 
  one. ;-)
 
 
 
  If you don't like implicit conversion to Boolean, then maybe you should be 
  using another language -- and I mean that in a constructive sense. I'm not 
  particularly fond of it either, but I switched from Python to another 
  language a while back. The issue is not a lack of proper language design 
  but rather a language design philosophy that values conciseness and 
  simplicity over explicitness and rigor.
 
 
 
 (Out of curiosity, which language? Feel free to not answer, or to
 
 answer off-list, as that's probably not constructive to the thread.)

No problem. I'm using Scala. It has a sophisticated type system. The language 
is not perfect, but it seems to suit my needs fairly well.

 
 
 I cannot name a single modern programming language that does NOT have
 
 some kind of implicit boolification. The only such language I know of
 
 is REXX, which has a single data type for everything, but insists on
 
 the exact strings 1 and 0 for True and False, anything else is an
 
 error. Every other language has some definition of these things are
 
 true, these are false; for instance:


Scala (and Java) don't do that. Nor does Ada. That's because Ada is designed 
for no-nonsense critical systems. It is the standard higher-order language for 
flight control systems, for example. 


  It's all loosey goosey -- which is fine for many applications but certainly 
  not for critical ones.
 
 
 
 The looseness doesn't preclude critical applications. It's all a
 
 question of what you're testing. Does your code care that this be a
 
 list, and not something else? Then test! You have that option. What
 
 happens if it isn't a list, and something is done that bombs with an
 
 exception? Maybe that's not a problem.
 
 
 
 Critical applications can often be built in layers. For instance, a
 
 network server might listen for multiple socket connections, and for
 
 each connection, process multiple requests. You would want to catch
 
 exceptions at the two boundaries there; if a request handler crashes,
 
 the connection should not be dropped, and if a connection handler
 
 crashes, the server should keep running. With some basic defenses like
 
 that, your code need no longer concern itself with trivialities - if
 
 something goes wrong, there'll be an exception in the log. (BTW, this
 
 is one of the places where a bare or very wide except clause is
 
 appropriate. Log and move on.)


Well, I don't really want to open the Pandora's box of static vs. dynamic 
typing. Yes, with enough testing, I'm sure you can get something good out of a 
dynamically typed language for small to medium-sized applications, but I have 
my doubts about larger applications. However, I don't claim to be an expert. 
Someone somewhere has probably developed a solid large application in Python. 
But I'll bet a dollar to a dime that it took more work than it would have taken 
in a good statically typed language. Yes, extensive testing can go a long way, 
but extensive testing combined with good static typing can go even further for 
the same level of effort.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Wednesday, June 5, 2013 1:59:01 AM UTC-7, Mark Lawrence wrote:
 On 05/06/2013 07:11, Russ P. wrote:
 
 
 
  But then, what would you expect of a language that allows you to write
 
 
 
  x = 1
 
  x = Hello
 
 
 
  It's all loosey goosey -- which is fine for many applications but certainly 
  not for critical ones.
 
 
 
 
 
 I want to launch this rocket with an expensive satellite on top.  I know 
 
 it's safe as the code is written in ADA.  Whoops :(


So Python would have been a better choice? Yeah, right. If you know anything 
about that rocket mishap, you should know that Ada was not the source of the 
problem. Ada won't keep airplane wings from breaking either, by the way. It's 
not magic.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Wednesday, June 5, 2013 9:59:07 AM UTC-7, Chris Angelico wrote:
 On Thu, Jun 6, 2013 at 2:15 AM, Russ P. wrote:
 
  On Wednesday, June 5, 2013 1:59:01 AM UTC-7, Mark Lawrence wrote:
 
  I want to launch this rocket with an expensive satellite on top.  I know
 
 
 
  it's safe as the code is written in ADA.  Whoops :(
 
 
 
 
 
  So Python would have been a better choice? Yeah, right. If you know 
  anything about that rocket mishap, you should know that Ada was not the 
  source of the problem. Ada won't keep airplane wings from breaking either, 
  by the way. It's not magic.
 
 
 
 Frankly, I don't think the language much matters. It's all down to the
 
 skill of the programmers and testers. Ada wasn't the source of the
 
 problem unless Ada has a bug in it... which is going to be true of
 
 pretty much any language. Maybe Python would be a better choice, maybe
 
 not; but let me tell you this, if the choice of language means the
 
 difference between testable in three months and testable code in three
 
 years, I'm going for the former.
 
 
 
 ChrisA

I'm not an Ada guy, but Ada advocates claim that it reduces development time by 
half in the long run compared to C and C++ due to reduced debugging time and 
simpler maintenance. Then again, I think Java people make a similar claim. As 
for Python, my experience with it is that, as your application grows, you start 
getting confused about what the argument types are or are supposed to be. That 
requires the developer to keep much more of the design in his head, and that 
undesirable. Of course, you can always put the argument types in comments, but 
that won't be verified by the compiler.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Wednesday, June 5, 2013 4:18:13 PM UTC-7, Michael Torrie wrote:
 On 06/05/2013 12:11 AM, Russ P. wrote:
 
  But then, what would you expect of a language that allows you to
 
  write
 
  
 
  x = 1 
 
  x = Hello
 
  
 
  It's all loosey goosey -- which is fine for many applications but
 
  certainly not for critical ones.
 
 
 
 This comment shows me that you don't understand the difference between
 
 names, objects, and variables.  May sound like a minor quibble, but
 
 there're actually major differences between binding names to objects
 
 (which is what python does) and variables (which is what languages like
 
 C have).  It's very clear Rick does not have an understanding of this
 
 either.

My comment shows you nothing about what I understand about names, objects, and 
variables. You have chosen to question my understanding apparently because my 
point bothered you but you don't have a good reply. Then you link me with Rick 
for good measure. That's two ad hominems in three sentences.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Bools and explicitness [was Re: PyWart: The problem with print]

2013-06-05 Thread Russ P.
On Wednesday, June 5, 2013 7:29:44 PM UTC-7, Chris Angelico wrote:
 On Thu, Jun 6, 2013 at 11:56 AM, Steven D'Aprano
 
 steve+comp.lang.pyt...@pearwood.info wrote:
 
  On Wed, 05 Jun 2013 14:59:31 -0700, Russ P. wrote:
 
  As for Python, my experience with it is that, as
 
  your application grows, you start getting confused about what the
 
  argument types are or are supposed to be.
 
 
 
  Whereas people never get confused about the arguments in static typed
 
  languages?
 
 
 
  The only difference is whether the compiler tells you that you've passed
 
  the wrong type, or your unit test tells you that you've passed the wrong
 
  type. What, you don't have unit tests? Then how do you know that the code
 
  does the right thing when passed data of the right type? Adding an extra
 
  couple of unit tests is not that big a burden.
 
 
 
 The valid type(s) for an argument can be divided into two categories:
 
 Those the compiler can check for, and those the compiler can't check
 
 for. Some languages have more in the first category than others, but
 
 what compiler can prove that a string is an
 
 HTML-special-characters-escaped string? In a very few languages, the
 
 compiler can insist that an integer be between 7 and 30, but there'll
 
 always be some things you can't demonstrate with a function signature.
 
 
 
 That said, though, I do like being able to make at least *some*
 
 declaration there. It helps catch certain types of error.

I recall reading a few years ago that Guido was thinking about adding optional 
type annotations. I don't know if that went anywhere or not, but I thought it 
was a good idea. Eventually I got tired of waiting, and I realized that I just 
wanted a statically typed language, so I started using one.

Steven's view on static vs. dynamic typing are interesting, but I think they 
are out of the mainstream, for whatever that's worth. Does that mean he is 
wrong? I don't know. But I do know that statically typed code just seems to me 
to fit together tighter and more solidly. Maybe it's a liberal/conservative 
thing. Do liberals tend to favor dynamic typing?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Controlling number of zeros of exponent in scientific notation

2013-03-06 Thread Russ P.
One possibility is to form the string as usual, split on the e, format each 
part separately, then rejoin with an e.

On Tuesday, March 5, 2013 12:09:10 PM UTC-8, fa...@squashclub.org wrote:
 Instead of:
 
 
 
 1.8e-04
 
 
 
 I need:
 
 
 
 1.8e-004
 
 
 
 So two zeros before the 4, instead of the default 1.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-03 Thread Russ P.
On May 3, 10:30 am, someone newsbo...@gmail.com wrote:
 On 05/02/2012 11:45 PM, Russ P. wrote:



  On May 2, 1:29 pm, someonenewsbo...@gmail.com  wrote:

  If your data starts off with only 1 or 2 digits of accuracy, as in your
  example, then the result is meaningless -- the accuracy will be 2-2
  digits, or 0 -- *no* digits in the answer can be trusted to be accurate.

  I just solved a FEM eigenvalue problem where the condition number of the
  mass and stiffness matrices was something like 1e6... Result looked good
  to me... So I don't understand what you're saying about 10 = 1 or 2
  digits. I think my problem was accurate enough, though I don't know what
  error with 1e6 in condition number, I should expect. How did you arrive
  at 1 or 2 digits for cond(A)=10, if I may ask ?

  As Steven pointed out earlier, it all depends on the precision you are
  dealing with. If you are just doing pure mathematical or numerical
  work with no real-world measurement error, then a condition number of
  1e6 may be fine. But you had better be using double precision (64-
  bit) floating point numbers (which are the default in Python, of
  course). Those have approximately 12 digits of precision, so you are
  in good shape. Single-precision floats only have 6 or 7 digits of
  precision, so you'd be in trouble there.

  For any practical engineering or scientific work, I'd say that a
  condition number of 1e6 is very likely to be completely unacceptable.

 So how do you explain that the natural frequencies from FEM (with
 condition number ~1e6) generally correlates really good with real
 measurements (within approx. 5%), at least for the first 3-4 natural
 frequencies?

 I would say that the problem lies with the highest natural frequencies,
 they for sure cannot be verified - there's too little energy in them.
 But the lowest frequencies (the most important ones) are good, I think -
 even for high cond number.

Did you mention earlier what FEM stands for? If so, I missed it. Is
it finite-element modeling? Whatever the case, note that I said, If
you are just doing pure mathematical or numerical work with no real-
world measurement error, then a condition number of
1e6 may be fine. I forgot much more than I know about finite-element
modeling, but isn't it a purely numerical method of analysis? If that
is the case, then my comment above is relevant.

By the way, I didn't mean to patronize you with my earlier explanation
of orthogonal transformations. They are fundamental to understanding
the SVD, and I thought it might be interesting to anyone who is not
familiar with the concept.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-03 Thread Russ P.
Yeah, I realized that I should rephrase my previous statement to
something like this:

For any *empirical* engineering or scientific work, I'd say that a
condition number of 1e6 is likely to be unacceptable.

I'd put finite elements into the category of theoretical and numerical
rather than empirical. Still, a condition number of 1e6 would bother
me, but maybe that's just me.

--Russ P.


On May 3, 3:21 pm, someone newsbo...@gmail.com wrote:
 On 05/03/2012 07:55 PM, Russ P. wrote:



  On May 3, 10:30 am, someonenewsbo...@gmail.com  wrote:
  On 05/02/2012 11:45 PM, Russ P. wrote:
  For any practical engineering or scientific work, I'd say that a
  condition number of 1e6 is very likely to be completely unacceptable.

  So how do you explain that the natural frequencies from FEM (with
  condition number ~1e6) generally correlates really good with real
  measurements (within approx. 5%), at least for the first 3-4 natural
  frequencies?

  I would say that the problem lies with the highest natural frequencies,
  they for sure cannot be verified - there's too little energy in them.
  But the lowest frequencies (the most important ones) are good, I think -
  even for high cond number.

  Did you mention earlier what FEM stands for? If so, I missed it. Is
  it finite-element modeling? Whatever the case, note that I said, If

 Sorry, yes: Finite Element Model.

  you are just doing pure mathematical or numerical work with no real-
  world measurement error, then a condition number of
  1e6 may be fine. I forgot much more than I know about finite-element
  modeling, but isn't it a purely numerical method of analysis? If that

 I'm not sure exactly, what is the definition of a purely numerical
 method of analysis? I would guess that the answer is yes, it's a purely
 numerical method? But I also thing it's a practical engineering or
 scientific work...

  is the case, then my comment above is relevant.

 Uh, I just don't understand the difference:

 1) For any practical engineering or scientific work, I'd say that a
 condition number of 1e6 is very likely to be completely unacceptable.

 vs.

 2) If you are just doing pure mathematical or numerical work with no
 real-world measurement error, then a condition number of, 1e6 may be fine.

 I would think that FEM is a practical engineering work and also pure
 numerical work... Or something...

  By the way, I didn't mean to patronize you with my earlier explanation
  of orthogonal transformations. They are fundamental to understanding
  the SVD, and I thought it might be interesting to anyone who is not
  familiar with the concept.

 Don't worry, I think it was really good and I don't think anyone
 patronized me, on the contrary, people was/is very helpful. SVD isn't my
 strongest side and maybe I should've thought a bit more about this
 singular matrix and perhaps realized what some people here already
 explained, a bit earlier (maybe before I asked). Anyway, it's been good
 to hear/read what you've (and others) have written.

 Yesterday and earlier today I was at work during the day so
 answering/replying took a bit longer than I like, considering the huge
 flow of posts in the matlab group. But now I'm home most of the time,
 for the next 3 days and will check for followup posts quite frequent, I
 think...

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-03 Thread Russ P.
On May 3, 4:59 pm, someone newsbo...@gmail.com wrote:
 On 05/04/2012 12:58 AM, Russ P. wrote:

  Yeah, I realized that I should rephrase my previous statement to
  something like this:

  For any *empirical* engineering or scientific work, I'd say that a
  condition number of 1e6 is likely to be unacceptable.

 Still, I don't understand it. Do you have an example of this kind of
 work, if it's not FEM?

  I'd put finite elements into the category of theoretical and numerical
  rather than empirical. Still, a condition number of 1e6 would bother
  me, but maybe that's just me.

 Ok, but I just don't understand what's in the empirical category, sorry...

I didn't look it up, but as far as I know, empirical just means based
on experiment, which means based on measured data. Unless I am
mistaken , a finite element analysis is not based on measured data.
Yes, the results can be *compared* with measured data and perhaps
calibrated with measured data, but those are not the same thing.

I agree with Steven D's comment above, and I will reiterate that a
condition number of 1e6 would not inspire confidence in me. If I had a
condition number like that, I would look for a better model. But
that's just a gut reaction, not a hard scientific rule.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-02 Thread Russ P.
On May 1, 11:03 pm, someone newsbo...@gmail.com wrote:
 On 05/02/2012 01:38 AM, Russ P. wrote:









  On May 1, 4:05 pm, Paul Rubinno.em...@nospam.invalid  wrote:
  someonenewsbo...@gmail.com  writes:
  Actually I know some... I just didn't think so much about, before
  writing the question this as I should, I know theres also something
  like singular value decomposition that I think can help solve
  otherwise illposed problems,

  You will probably get better advice if you are able to describe what
  problem (ill-posed or otherwise) you are actually trying to solve.  SVD
  just separates out the orthogonal and scaling parts of the
  transformation induced by a matrix.  Whether that is of any use to you
  is unclear since you don't say what you're trying to do.

  I agree with the first sentence, but I take slight issue with the word
  just in the second. The orthogonal part of the transformation is
  non-distorting, but the scaling part essentially distorts the space.
  At least that's how I think about it. The larger the ratio between the
  largest and smallest singular value, the more distortion there is. SVD
  may or may not be the best choice for the final algorithm, but it is
  useful for visualizing the transformation you are applying. It can
  provide clues about the quality of the selection of independent
  variables, state variables, or inputs.

 Me would like to hear more! :-)

 It would really appreciate if anyone could maybe post a simple SVD
 example and tell what the vectors from the SVD represents geometrically
 / visually, because I don't understand it good enough and I'm sure it's
 very important, when it comes to solving matrix systems...

SVD is perhaps the ultimate matrix decomposition and the ultimate tool
for linear analysis. Google it and take a look at the excellent
Wikipedia page on it. I would be wasting my time if I tried to compete
with that.

To really appreciate the SVD, you need some background in linear
algebra. In particular, you need to understand orthogonal
transformations. Think about a standard 3D Cartesian coordinate frame.
A rotation of the coordinate frame is an orthogonal transformation of
coordinates. The original frame and the new frame are both orthogonal.
A vector in one frame is converted to the other frame by multiplying
by an orthogonal matrix. The main feature of an orthogonal matrix is
that its transpose is its inverse (hence the inverse is trivial to
compute).

The SVD can be thought of as factoring any linear transformation into
a rotation, then a scaling, followed by another rotation. The scaling
is represented by the middle matrix of the transformation, which is a
diagonal matrix of the same dimensions as the original matrix. The
singular values can be read off of the diagonal. If any of them are
zero, then the original matrix is singular. If the ratio of the
largest to smallest singular value is large, then the original matrix
is said to be poorly conditioned.

Standard Cartesian coordinate frames are orthogonal. Imagine an x-y
coordinate frame in which the axes are not orthogonal. Such a
coordinate frame is possible, but they are rarely used. If the axes
are parallel, the coordinate frame will be singular and will basically
reduce to one-dimensional. If the x and y axes are nearly parallel,
the coordinate frame could still be used in theory, but it will be
poorly conditioned. You will need large numbers to represent points
fairly close to the origin, and small deviations will translate into
large changes in coordinate values. That can lead to problems due to
numerical roundoff errors and other kinds of errors.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-02 Thread Russ P.
On May 2, 1:29 pm, someone newsbo...@gmail.com wrote:

  If your data starts off with only 1 or 2 digits of accuracy, as in your
  example, then the result is meaningless -- the accuracy will be 2-2
  digits, or 0 -- *no* digits in the answer can be trusted to be accurate.

 I just solved a FEM eigenvalue problem where the condition number of the
 mass and stiffness matrices was something like 1e6... Result looked good
 to me... So I don't understand what you're saying about 10 = 1 or 2
 digits. I think my problem was accurate enough, though I don't know what
 error with 1e6 in condition number, I should expect. How did you arrive
 at 1 or 2 digits for cond(A)=10, if I may ask ?

As Steven pointed out earlier, it all depends on the precision you are
dealing with. If you are just doing pure mathematical or numerical
work with no real-world measurement error, then a condition number of
1e6 may be fine. But you had better be using double precision (64-
bit) floating point numbers (which are the default in Python, of
course). Those have approximately 12 digits of precision, so you are
in good shape. Single-precision floats only have 6 or 7 digits of
precision, so you'd be in trouble there.

For any practical engineering or scientific work, I'd say that a
condition number of 1e6 is very likely to be completely unacceptable.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-01 Thread Russ P.
On Apr 29, 5:17 pm, someone newsbo...@gmail.com wrote:
 On 04/30/2012 12:39 AM, Kiuhnm wrote:

  So Matlab at least warns about Matrix is close to singular or badly
  scaled, which python (and I guess most other languages) does not...

  A is not just close to singular: it's singular!

 Ok. When do you define it to be singular, btw?

  Which is the most accurate/best, even for such a bad matrix? Is it
  possible to say something about that? Looks like python has a lot more
  digits but maybe that's just a random result... I mean Element 1,1 =
  2.81e14 in Python, but something like 3e14 in Matlab and so forth -
  there's a small difference in the results...

  Both results are *wrong*: no inverse exists.

 What's the best solution of the two wrong ones? Best least-squares
 solution or whatever?

  With python, I would also kindly ask about how to avoid this problem in
  the future, I mean, this maybe means that I have to check the condition
  number at all times before doing anything at all ? How to do that?

  If cond(A) is high, you're trying to solve your problem the wrong way.

 So you're saying that in another language (python) I should check the
 condition number, before solving anything?

  You should try to avoid matrix inversion altogether if that's the case.
  For instance you shouldn't invert a matrix just to solve a linear system.

 What then?

 Cramer's rule?

If you really want to know just about everything there is to know
about a matrix, take a look at its Singular Value Decomposition (SVD).
I've never used numpy, but I assume it can compute an SVD.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-01 Thread Russ P.
On May 1, 11:52 am, someone newsbo...@gmail.com wrote:
 On 04/30/2012 03:35 AM, Nasser M. Abbasi wrote:

  On 04/29/2012 07:59 PM, someone wrote:
  I do not use python much myself, but a quick google showed that pyhton
  scipy has API for linalg, so use, which is from the documentation, the
  following code example

  X = scipy.linalg.solve(A, B)

  But you still need to check the cond(). If it is too large, not good.
  How large and all that, depends on the problem itself. But the rule of
  thumb, the lower the better. Less than 100 can be good in general, but I
  really can't give you a fixed number to use, as I am not an expert in
  this subjects, others who know more about it might have better
  recommendations.

 Ok, that's a number...

 Anyone wants to participate and do I hear something better than less
 than 100 can be good in general ?

 If I don't hear anything better, the limit is now 100...

 What's the limit in matlab (on the condition number of the matrices), by
 the way, before it comes up with a warning ???

The threshold of acceptability really depends on the problem you are
trying to solve. I haven't solved linear equations for a long time,
but off hand, I would say that a condition number over 10 is
questionable.

A high condition number suggests that the selection of independent
variables for the linear function you are trying to fit is not quite
right. For a poorly conditioned matrix, your modeling function will be
very sensitive to measurement noise and other sources of error, if
applicable. If the condition number is 100, then any input on one
particular axis gets magnified 100 times more than other inputs.
Unless your inputs are very precise, that is probably not what you
want.

Or something like that.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: numpy (matrix solver) - python vs. matlab

2012-05-01 Thread Russ P.
On May 1, 4:05 pm, Paul Rubin no.em...@nospam.invalid wrote:
 someone newsbo...@gmail.com writes:
  Actually I know some... I just didn't think so much about, before
  writing the question this as I should, I know theres also something
  like singular value decomposition that I think can help solve
  otherwise illposed problems,

 You will probably get better advice if you are able to describe what
 problem (ill-posed or otherwise) you are actually trying to solve.  SVD
 just separates out the orthogonal and scaling parts of the
 transformation induced by a matrix.  Whether that is of any use to you
 is unclear since you don't say what you're trying to do.

I agree with the first sentence, but I take slight issue with the word
just in the second. The orthogonal part of the transformation is
non-distorting, but the scaling part essentially distorts the space.
At least that's how I think about it. The larger the ratio between the
largest and smallest singular value, the more distortion there is. SVD
may or may not be the best choice for the final algorithm, but it is
useful for visualizing the transformation you are applying. It can
provide clues about the quality of the selection of independent
variables, state variables, or inputs.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: are int, float, long, double, side-effects of computer engineering?

2012-03-07 Thread Russ P.
On Mar 6, 7:25 pm, rusi rustompm...@gmail.com wrote:
 On Mar 6, 6:11 am, Xah Lee xah...@gmail.com wrote:

  some additional info i thought is relevant.

  are int, float, long, double, side-effects of computer engineering?

 It is a bit naive for computer scientists to club integers and reals
 as mathematicians do given that for real numbers, even equality is
 undecidable!
 Mostly when a system like mathematica talks of real numbers it means
 computable real numbers which is a subset of mathematical real numbers
 (and of course a superset of floats)

 Seehttp://en.wikipedia.org/wiki/Computable_number#Can_computable_numbers...

I might add that Mathematica is designed mainly for symbolic
computation, whereas IEEE floating point numbers are intended for
numerical computation. Those are two very different endeavors. I
played with Mathematica a bit several years ago, and I know it can do
numerical computation too. I wonder if it resorts to IEEE floating
point numbers when it does.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: are int, float, long, double, side-effects of computer engineering?

2012-03-06 Thread Russ P.
On Mar 5, 10:34 pm, Xah Lee xah...@gmail.com wrote:
 On Mar 5, 9:26 pm, Tim Roberts t...@probo.com wrote:

  Xah Lee xah...@gmail.com wrote:

  some additional info i thought is relevant.

  are int, float, long, double, side-effects of computer engineering?

  Of course they are.  Such concepts violate the purity of a computer
  language's abstraction of the underlying hardware.  We accept that
  violation because of performance reasons.  There are, as you point out,
  languages that do maintain the purity of the abstraction, but that purity
  is ALWAYS at the expense of performance.

  I would also point out pre-emptively that there is nothing inherently wrong
  with asking us to accept an impure abstraction in exchange for performance.
  It is a performance choice that we choose to make.

 while what you said is true, but the problem is that 99.99% of
 programers do NOT know this. They do not know Mathematica. They've
 never seen a language with such feature. The concept is alien. This is
 what i'd like to point out and spread awareness.

I seriously doubt that. I think most decent programmers are well aware
of the limitations of floating point math. If properly used, double-
precision arithmetic is more than adequate for the vast majority of
practical scientific and engineering problems.

 also, argument about raw speed and fine control vs automatic
 management, rots with time. Happened with auto memory management,
 managed code, compilers, auto type conversion, auto extension of
 array, auto type system, dynamic/scripting languages, etc.

First of all, dynamic/scripting languages are still a long, long way
from being fast enough for computationally intensive applications.

Secondly, nothing is stopping anyone from writing a library to
implement rational numbers or infinite-precision arithmetic in python
(or just about any other language). They are just not needed for most
applications.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: killing a script

2011-08-29 Thread Russ P.
On Aug 28, 8:16 pm, Chris Rebert c...@rebertia.com wrote:
 On Sun, Aug 28, 2011 at 8:08 PM, Russ P. russ.paie...@gmail.com wrote:
  On Aug 28, 7:51 pm, Chris Angelico ros...@gmail.com wrote:
  On Mon, Aug 29, 2011 at 12:41 PM, Russ P. russ.paie...@gmail.com wrote:
   On Aug 28, 6:52 pm, MRAB pyt...@mrabarnett.plus.com wrote:
   You could look at the return value of os.system, which may tell you the
   exit status of the process.

   Thanks for the suggestion. Yeah, I guess I could do that, but it seems
   that there should be a simpler way to just kill the whole enchilada.
   Hitting Control-C over and over is a bit like whacking moles.

  I believe the idea of this suggestion is for the outer script to
  notice that the inner script terminated via Ctrl-C, and would then
  immediately choose to terminate itself - thus avoiding the
  whack-a-mole effect.

  ChrisA

  Yes, but if I am not mistaken, that will require me to put a line or
  two after each os.system call.

 Er, just write a wrapper for os.system(), e.g.:

 def mysystem(cmd):
     if os.system(cmd):
         sys.exit()

 Also, you may want to switch to using the `subprocess` module instead.

 Cheers,
 Chris

I ended up with this:

def systemx(cmd):

if system(cmd): exit(\nERROR:  + cmd +  failed\n)

This is good enough for my purposes in this case. Thanks for all the
suggestions.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


killing a script

2011-08-28 Thread Russ P.
I have a Python (2.6.x) script on Linux that loops through many
directories and does processing for each. That processing includes
several os.system calls for each directory (some to other Python
scripts, others to bash scripts).

Occasionally something goes wrong, and the top-level script just keeps
running with a stack dump for each case. When I see that, I want to
just kill the whole thing and fix the bug. However, when I hit Control-
C, it apparently just just kills whichever script happens to be
running at that instant, and the top level script just moves to the
next line and keeps running. If I hit Control-C repeatedly, I
eventually get lucky and kill the top-level script. Is there a
simple way to ensure that the first Control-C will kill the whole darn
thing, i.e, the top-level script? Thanks.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: killing a script

2011-08-28 Thread Russ P.
On Aug 28, 6:52 pm, MRAB pyt...@mrabarnett.plus.com wrote:
 On 29/08/2011 02:15, Russ P. wrote: I have a Python (2.6.x) script on Linux 
 that loops through many
  directories and does processing for each. That processing includes
  several os.system calls for each directory (some to other Python
  scripts, others to bash scripts).

  Occasionally something goes wrong, and the top-level script just keeps
  running with a stack dump for each case. When I see that, I want to
  just kill the whole thing and fix the bug. However, when I hit Control-
  C, it apparently just just kills whichever script happens to be
  running at that instant, and the top level script just moves to the
  next line and keeps running. If I hit Control-C repeatedly, I
  eventually get lucky and kill the top-level script. Is there a
  simple way to ensure that the first Control-C will kill the whole darn
  thing, i.e, the top-level script? Thanks.

 You could look at the return value of os.system, which may tell you the
 exit status of the process.

Thanks for the suggestion. Yeah, I guess I could do that, but it seems
that there should be a simpler way to just kill the whole enchilada.
Hitting Control-C over and over is a bit like whacking moles.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: killing a script

2011-08-28 Thread Russ P.
On Aug 28, 7:51 pm, Chris Angelico ros...@gmail.com wrote:
 On Mon, Aug 29, 2011 at 12:41 PM, Russ P. russ.paie...@gmail.com wrote:
  On Aug 28, 6:52 pm, MRAB pyt...@mrabarnett.plus.com wrote:
  You could look at the return value of os.system, which may tell you the
  exit status of the process.

  Thanks for the suggestion. Yeah, I guess I could do that, but it seems
  that there should be a simpler way to just kill the whole enchilada.
  Hitting Control-C over and over is a bit like whacking moles.

 I believe the idea of this suggestion is for the outer script to
 notice that the inner script terminated via Ctrl-C, and would then
 immediately choose to terminate itself - thus avoiding the
 whack-a-mole effect.

 ChrisA

Yes, but if I am not mistaken, that will require me to put a line or
two after each os.system call. That's almost like whack-a-mole at the
code level rather than the Control-C level. OK, not a huge deal for
one script, but I was hoping for something simpler. I was hoping I
could put one line at the top of the script and be done with it.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: killing a script

2011-08-28 Thread Russ P.
On Aug 28, 8:16 pm, Chris Rebert c...@rebertia.com wrote:
 On Sun, Aug 28, 2011 at 8:08 PM, Russ P. russ.paie...@gmail.com wrote:
  On Aug 28, 7:51 pm, Chris Angelico ros...@gmail.com wrote:
  On Mon, Aug 29, 2011 at 12:41 PM, Russ P. russ.paie...@gmail.com wrote:
   On Aug 28, 6:52 pm, MRAB pyt...@mrabarnett.plus.com wrote:
   You could look at the return value of os.system, which may tell you the
   exit status of the process.

   Thanks for the suggestion. Yeah, I guess I could do that, but it seems
   that there should be a simpler way to just kill the whole enchilada.
   Hitting Control-C over and over is a bit like whacking moles.

  I believe the idea of this suggestion is for the outer script to
  notice that the inner script terminated via Ctrl-C, and would then
  immediately choose to terminate itself - thus avoiding the
  whack-a-mole effect.

  ChrisA

  Yes, but if I am not mistaken, that will require me to put a line or
  two after each os.system call.

 Er, just write a wrapper for os.system(), e.g.:

 def mysystem(cmd):
     if os.system(cmd):
         sys.exit()

 Also, you may want to switch to using the `subprocess` module instead.

 Cheers,
 Chris

Sounds like a good idea. I'll give it a try. Thanks.

--Russ P.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-19 Thread Thomas A. Russ
Pascal J. Bourguignon p...@informatimago.com writes:

 t...@sevak.isi.edu (Thomas A. Russ) writes:
 
  This will only work if there is a backpointer to the parent.
 
 No, you don't need backpointers; some cases have been mentionned in the
 other answer, but in general:
 
 (defun parent (tree node)
(if (member node (children tree))
   tree
   (some (lambda (child) (parent child node)) (children tree
 
 Yes, the question wasn't about time complexity.

 :-p

Um, this is a recursive function.  Inside PARENT, there is another call
to PARENT.

-- 
Thomas A. Russ,  USC/Information Sciences Institute











-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-19 Thread Thomas A. Russ
Hans Georg Schaathun h...@schaathun.net writes:

 [Followup-To: header set to comp.lang.python.]
Ignored, since I don't follow that group.

 On Wed, 18 May 2011 20:20:01 +0200, Raymond Wiker
   raw@RAWMBP-2.local wrote:
 : I don't think anybody mentioned *binary* trees. The context was
 :  directory traversal, in which case you would have nodes with an
 :  arbitrary (almost) number of children.
 
 If we are being specific, then directory trees do have parent pointers.
 My point was really that «standard tree representations» is not a
 well-defined concept, and having parent pointers is as standard as
 not having them.

I suppose that I just assumed the standard mathematical definition of a
tree as a directed, acyclic graph.  It seems that in the context of
computability that one would tend toward using the mathematical
definitions.

Certainly in a complex graph with labeled links or trees with
backpointers, you would have an alternate data structure that you could
follow.

So, to be more precise, then:

  For directed, acyclic graphs without backpointers, you cannot write an
  iterative tree walker without simulating a stack.

The larger point is that there are algorithms that are inherently
recursive and for which there is no natural iterative algorithm.

-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-18 Thread Thomas A. Russ
Pascal J. Bourguignon p...@informatimago.com writes:

 Roland Hutchinson my.spamt...@verizon.net writes:

  Tail recursion  can always be turned into an iteration when it is
  executed.  
 
 All recursions can be turned into iterations, before execution.

True, but only by simulating the call stack in the iterative code.  To
my mind that isn't really an iterative algorithm anymore if it ends up
simulating the call stack.

Tree walks are the canonical example of what can't be done in an
iterative fashion without the addition of an explicitly managed stack



-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: English Idiom in Unix: Directory Recursively

2011-05-18 Thread Thomas A. Russ
Hans Georg Schaathun h...@schaathun.net writes:

 [Followup-To: header set to comp.lang.python.]
 On 17 May 2011 23:42:20 -0700, Thomas A. Russ
   t...@sevak.isi.edu wrote:
 :  Tree walks are the canonical example of what can't be done in an
 :  iterative fashion without the addition of an explicitly managed stack
 
 Of course you can do it.  It isn't nice, but it is possible.
 I assume that you refer to depth first walks, as breadth first
 is more easily described by iteration on a queue in the first place.
 
 Depth first can be achieved by looping over the nodes, with a
 state keeping references to the current and the previous node
 considered.

Well, unless you have a tree with backpointers, you have to keep the
entire parent chain of nodes visited.  Otherwise, you won't be able to
find the parent node when you need to backtrack.  A standard tree
representation has only directional links.

Consider:

A--+---B+---D
   ||
   |+---E
   ||
   |+---F
   | 
   +---C

If all you keep is the current and previous node, then the only thing
you have reference do when doing the depth-first traverse is:
  1.  Current = A,  Previous = null
  2.  Current = B.  Previous = A
  3.  Current = D   Previous = B
  4.  Current = E   Previous = D
  5.  now what?  You can't get from E or D back to B.

 By comparing the previous node (pointer or ID) to the
 current node's parent and children one will know wherefrom the
 current node was entered, and can choose the next child in the
 list as the next node, or the parent if all children have been
 visited.  A visit action may be added in any or all times the
 node is visited.
 
 This node requires no stack.  The only state space is constant,
 regardless of the size of the tree, requiring just the two pointers
 to previous and current.

This will only work if there is a backpointer to the parent.

So you have to add one extra pointer for each node back to its parent.
This extra pointer will be the size of the graph, rather than (on
average) log of the size of the graph stack frames.


-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Strong typing vs. strong testing

2010-10-12 Thread Thomas A. Russ
torb...@diku.dk (Torben ŽÆgidius Mogensen) writes:

 Trigonometric functions do take arguments of particular units: radians
 or (less often) degrees, with conversion needed if you use the wrong
 unit.

But radians are dimensionless.

The definition of a radian is length/length (or m/m) which simplifies to
dimensionless.

In fact, the units package in Lisp that I worked on actually handles
this by making radian one of the dimensionless units precisely so
that one can use degrees and radians with appropriate conversion.  But
they remain dimensionless.  Interestingly, that also allows one to treat
percent (%) as a dimensionless unit with a conversion factor of 1/100.



-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Strong typing vs. strong testing

2010-10-12 Thread Thomas A. Russ
BartC b...@freeuk.com writes:

 Thomas A. Russ t...@sevak.isi.edu wrote in message
 news:ymi1v7vgyp8@blackcat.isi.edu...
  torb...@diku.dk (Torben ZÆgidius Mogensen) writes:
 
  Trigonometric functions do take arguments of particular units: radians
  or (less often) degrees, with conversion needed if you use the wrong
  unit.
 
  But radians are dimensionless.
 
 But they are still units, so that you can choose to use radians, degrees
 or gradians for literals, so that functions that take angle arguments
 can verify they are angles and not just numbers, and so that they can be
 displayed appropriately.
 
 You can't do all that if angles are just numbers.

But if you need to supply the units, that only really helps you when you
actually input them.  The problem comes when you have computed
quantities, such as you might get when trying to do more involved
computations.

If you have a system where 10m/1m = 10 then it means you couldn't have
a calculation like 100km*sin(10m/1m) and have it work, because the
dimensionless 10 that you get from the calculation would be incorrect.
You would have to know something else about the division in order to get
the correct dimensionless units.

This is also an issue in sorting out torque and work, since they also
have the same base units.  You can't really tell if N*m is supposed to
be a measure of work or of torque, which also means that you can't use
that to distinguish the results of such a multiplication just by using
dimensional analysis.  Often it works, but sometimes you just run into
ambiguity, so IMHO you have to live with that ambiguity in order to
build a computational system that really works.

-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Strong typing vs. strong testing

2010-09-29 Thread Thomas A. Russ
George Neuner gneun...@comcast.net writes:

 On Tue, 28 Sep 2010 12:15:07 -0700, Keith Thompson ks...@mib.org
 wrote:
 He didn't say it was.  Internal calculations are done in SI units (in
 this case, m^3/sec); on output, the internal units can be converted to
 whatever is convenient.
 
 That's true.  But it is a situation where the conversion to SI units
 loses precision and therefore probably shouldn't be done.

I suppose that one has to choose between two fundamental designs for any
computational system of units.  One can either store the results
internally in a canonical form, which generally means an internal
representation in SI units.  Then all calculations are performed using
the interal units representation and conversion happens only on input or
output.

Or one can store the values in their original input form, and perform
conversions on the fly during calculations.  For calculations one will
still need to have some canonical representation for cases where the
result value doesn't have a preferred unit provided.  For internal
calculations this will often be the case.

Now whether one will necessarily have a loss of precision depends on
whether the conversion factors are exact or approximations.  As long as
the factors are exact, one can have the internal representation be exact
as well.  One method would be to use something like the Commmon Lisp
rational numbers or the Gnu mp library.

And a representation where one preserves the preferred unit for
display purposes based on the original data as entered is also nice.
Roman Cunis' Common Lisp library does that, and with the use of rational
numbers for storing values and conversion factors allows one to do nice
things like make sure that

30mph * 3h = 90mi

even when the internal representation is in SI units (m/s, s, m).


-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Strong typing vs. strong testing

2010-09-29 Thread Thomas A. Russ
RG rnospa...@flownet.com writes:
 
 More power to you.  What are you doing here on cll then?

This thread is massively cross-posted.

-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Strong typing vs. strong testing

2010-09-28 Thread Thomas A. Russ
Malcolm McLean malcolm.mcle...@btinternet.com writes:

 I'd like to design a language like this. If you add a quantity in
 inches to a quantity in centimetres you get a quantity in (say)
 metres. If you multiply them together you get an area, if you divide
 them you get a dimeionless scalar. If you divide a quantity in metres
 by a quantity in seconds you get a velocity, if you try to subtract
 them you get an error.

Done in 1992.

See 
 
http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/syntax/measures/0.html
 citation at http://portal.acm.org/citation.cfm?id=150168

and my extension to it as part of the Loom system:
   http://www.isi.edu/isd/LOOM/documentation/loom4.0-release-notes.html#Units

-- 
Thomas A. Russ,  USC/Information Sciences Institute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-23 Thread Russ P.
On Aug 23, 7:46 pm, alex23 wuwe...@gmail.com wrote:
 Russ P. russ.paie...@gmail.com wrote:
  However, I've switched from Python to
  Scala, so I really don't care.

 Really? Your endless whining in this thread would seem to indicate
 otherwise.

Yes, I guess I care some, but not much. I still use Python for some
things, and I still have lots of legacy Python code that I still
use. I just like to whine about zero-based indexing (but Scala is no
different in that regard). It's my number one gripe. (My number zero
gripe is semicolons after each statement -- but both Python and Scala
got that one right, thank goodness.)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-22 Thread Russ P.
On Aug 21, 1:33 am, Steven D'Aprano st...@remove-this-
cybersource.com.au wrote:
 On Fri, 20 Aug 2010 11:01:42 -0700, Russ P. wrote:
  Most programmers probably never use vectors and matrices, so they don't
  care about the inconsistency with standard mathematical notation.

 Perhaps you should ask the numpy programmers what they think about that.

Why would I care in the least about something called numpy?

 Vectors and matrices are just arrays, and the suggestion that most
 programmers don't use arrays (or array-like objects like lists) is
 ludicrous.

But the vast majority of arrays are not vectors or matrices in the
mathematical sense. And the vast majority of programmers who use
arrays have no clue about vectors and matrices in the mathematical
sense. Ask your typical programmer what an SVD is.

  And yes, I understand that zero-based indexing can be slightly more
  efficient. That's why I think it's appropriate for low-level languages
  such as C. However, I think one-based indexing is more appropriate for
  high-level languages.

 Only if your aim is to reduce the learning curve for newbies and non-
 programmers, at the expense of making it easier for them to produce buggy
 code.

If you're suggesting that one-based indexing makes it easier to
produce buggy code, I think you must be smoking something.

 That's a defensible choice. I'm a great fan of Apple's Hypercard from the
 late 80s and early 90s, and it used one-based indexing, as well as
 English-like syntax like:

Python is a high level language, and high-level languages have many
features that make it easier for newbies as well as experienced
programmers at the expense of extreme efficiency. But the array
indexing in Python is a throwback to C: it is zero-based and uses
square brackets. Say what you will, but both of those aspects just
seem wrong and awkward to me. However, I've switched from Python to
Scala, so I really don't care. You guys can have it.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-22 Thread Russ P.
On Aug 22, 12:47 am, Chris Rebert c...@rebertia.com wrote:
 On Sun, Aug 22, 2010 at 12:23 AM, Russ P. russ.paie...@gmail.com wrote:
  On Aug 21, 1:33 am, Steven D'Aprano st...@remove-this-
  cybersource.com.au wrote:
  On Fri, 20 Aug 2010 11:01:42 -0700, Russ P. wrote:
   Most programmers probably never use vectors and matrices, so they don't
   care about the inconsistency with standard mathematical notation.

  Perhaps you should ask the numpy programmers what they think about that.

  Why would I care in the least about something called numpy?

 Because it's a popular matrix math package for Python. Its users are
 thus a subset of programmers which by definition don't fall into the
 most programmers group you describe.

Yes, I know what numpy is, and I'm sure it's great. I was just taking
a light-hearted jab at the name.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-20 Thread Russ P.
On Aug 20, 1:23 am, Martin Braun martin.br...@kit.edu wrote:

 I find this thread extremely interesting, but what surprised me that
 everyone seems to agree that mathematics is 1-based, but we Pythoneers
 should stick to zero-based. I disagree. To make sure I'm not going
 crazy, I took the top five books lying on my desk, which were the DSP
 book by Oppenheim/Schafer, two books by Stephen M. Kay (Spectral
 Estimation and Estimation Theory) and the Channel Coding book by Lin 
 Costello. This is isn't pure mathematics (as in proving the Goldbach
 conjecture), but nevertheless, this is serious mathematics and,
 surprise, they most exclusively use zero-based notation.
 You probably don't have those books in grabbing distance, so here's some
 examples for zero-based stuff:

That's interesting, but I think zero-based indexing is rare in the
literature of mathematics, applied math, science and engineering. All
the literature I've ever seen that uses vectors and matrices is one-
based, and that includes text books and technical papers.

It all boils down to personal preference, but I just find it strange
that we would not try to make programming as consistent as possible
with notational conventions in the literature. If I try to implement
some algorithm I find in a technical book or paper, why should I have
to mentally offset every index by one? That's very error prone, and I
have more important things to think about. Then again, I don't do that
very often, so maybe it's not a big deal.

The zero-based indexing just seemed wrong to me when I first saw it.
I'm used to it by now, but it still doesn't seem quite right to me.
It's almost right -- but it's off by one. I still have a habit of
taking the 1 element when I really want the 0 element.

Most programmers probably never use vectors and matrices, so they
don't care about the inconsistency with standard mathematical
notation.

And yes, I understand that zero-based indexing can be slightly more
efficient. That's why I think it's appropriate for low-level languages
such as C. However, I think one-based indexing is more appropriate for
high-level languages.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-20 Thread Russ P.
On Aug 20, 11:19 am, geremy condra debat...@gmail.com wrote:

 Not sure what you read, but for me (mostly number theory, numerical
 analysis, and abstract algebra) zero-based indexing is quite common.

My background is in aerospace control engineering. I am certainly not
familiar with the literature in pure mathematics, but I assume that
the math textbooks I used on college used standard mathematical
notation.

If one-based indexing is becoming more common in the literature, I'll
bet that is only because it is so widely used in computer programming
-- not because the writers decided independently that it is a better
notation. But that's just a guess on my part.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.
On Aug 19, 9:07 am, J.B. Brown jbbr...@sunflower.kuicr.kyoto-
u.ac.jp wrote:
 2010/8/9 MRAB pyt...@mrabarnett.plus.com:

  Default User wrote:

  Not to prolong a good food fight, but IIRC, many years ago in QBasic,
  one could choose

  OPTION BASE 0

  or

  OPTION BASE 1

 When I wrote my own C++ 2-D matrix class, I wrote a member function
 which did exactly this - allow you to specify the initial index value.
 Then users of my class (mainly my research lab coworkers) could
 specify whichever behavior they wanted.

 In terms of providing readable code and removing beginning programmer
 confusion, why not extend python lists by using something similar to
 (but not necessarily identical to)  the C++ STL containers:

 C++
 int myX[ ]  = { 1,2,3,4,5 };
 std::vectorint vectorX( myX, myX[  sizeof( myX ) - 1 ] );
 std::cout  vectorX.begin()  std::endl;
 std::cout  vectorX.end()  std::endl;

 Python
 x = [ 1 , 2 , 3 , 4 , 5 ]
 print x.first()
 print x.last()    ,

Many years ago I wrote a fairly comprehensive vector/matrix class in C+
+. (It was an exercise to learn the intricacies of C++, and I also
really needed it.) I used a system of offset pointers to realize
indexing that starts with 1.

Years later, after I had quit using it, I decided that I should have
just bit the bullet and let the indexing start with zero for
simplicity. I believe that zero-based indexing is a mistake, but
attempts to fix it require additional boilerplate that is prone to
error and inefficiency. Short of a major language overhaul, we are
essentially stuck with zero-based indexing.

But that doesn't mean we should pretend that it was the right choice.

For those who insist that zero-based indexing is a good idea, why you
suppose mathematical vector/matrix notation has never used that
convention? I have studied and used linear algebra extensively, and I
have yet to see a single case of vector or matrix notation with zero-
based indexing in a textbook or a technical paper. Also, mathematical
summation is traditionally shown as 1 to N, not 0 to N-1. Are
mathematicians just too simple-minded and unsophisticated to
understand the value of zero-based indexing? Or have you perhaps been
mislead?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.
On Aug 19, 11:04 am, Steven D'Aprano st...@remove-this-
cybersource.com.au wrote:
 On Tue, 17 Aug 2010 19:15:54 -0700, Russ P. wrote:
  The convention of starting with zero may have had some slight
  performance advantage in the early days of computing, but the huge
  potential for error that it introduced made it a poor choice in the long
  run, at least for high-level languages.

 People keep saying this, but it's actually the opposite. Signpost errors
 and off-by-one errors are more common in languages that count from one.

 A simple example: Using zero-based indexing, suppose you want to indent
 the string spam so it starts at column 4. How many spaces to you
 prepend?

 0123456789
     spam

 Answer: 4. Nice and easy and almost impossible to get wrong. To indent to
 position n, prepend n spaces.

 Now consider one-based indexing, where the string starts at column 5:

 1234567890
     spam

 Answer: 5-1 = 4. People are remarkably bad at remembering to subtract the
 1, hence the off-by-one errors.

 Zero-based counting doesn't entirely eliminate off-by-one errors, but the
 combination of that plus half-open on the right intervals reduces them as
 much as possible.

 The intuitive one-based closed interval notation used in many natural
 languages is terrible for encouraging off-by-one errors. Quick: how many
 days are there between Friday 20th September and Friday 27th September
 inclusive? If you said seven, you fail.

The error mode you refer to is much less common than the typical off-
by-one error mode. In the far more common error mode, zero-based
indexing is far more error prone.

 One-based counting is the product of human intuition. Zero-based counting
 is the product of human reason.

I suggest you take that up with mathematicians, who have used one-
based indexing all along. That's why it was used in Fortran and
Matlab, among other more mathematical and numerically oriented and
languages.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.

I just checked, and Mathematica uses one-based indexing. Apparently
they want their notation to look mathematical.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.
On Aug 19, 11:42 am, Steven D'Aprano st...@remove-this-
cybersource.com.au wrote:
 On Thu, 19 Aug 2010 11:03:53 -0700, Russ P. wrote:
  For those who insist that zero-based indexing is a good idea, why you
  suppose mathematical vector/matrix notation has never used that
  convention? I have studied and used linear algebra extensively, and I
  have yet to see a single case of vector or matrix notation with zero-
  based indexing in a textbook or a technical paper. Also, mathematical
  summation is traditionally shown as 1 to N, not 0 to N-1.

 In my experience, it's more likely to be 0 to N than either of the
 above, thus combining the worst of both notations.

  Are
  mathematicians just too simple-minded and unsophisticated to understand
  the value of zero-based indexing?

 No, mathematicians are addicted to tradition.

That is probably true. But computer languages are addicted to more
than tradition. They're addicted to compatibility and familiarity. I
don't know where zero-based indexing started, but I know that C used
it very early, probably for some minuscule performance advantage. When
C++ came along, it tried to be somewhat compatible with C, so it
continued using zero-based indexing. Then Java was loosely modeled
after C++, so the convention continued. Python was written in C, so
zero-based indexing was natural. So the whole thing is based on a
decision by some guy who was writing a language for operating systems,
not mathematics or application programming.

 Unlike computer scientists, who create new languages with radically
 different notation and syntax at the drop of a hat, mathematicians almost
 never change existing notation. Sometimes they *add* new notation, but
 more often they just re-use old notation in a new context. E.g. if you
 see (5, 8), does that mean a coordinate pair, a two-tuple, an open
 interval, or something else?

 Additionally, mathematical notation isn't chosen for its ability to
 encourage or discourage errors. It seems often to be chosen arbitrarily,
 or for convenience, but mostly out of tradition and convention. Why do we
 use x for unknown? Why do we use i for an integer value, but not r
 for a real or c for a complex value?

 Mathematicians are awfully lazy -- laziness is one of the cardinal
 virtues of the mathematician, as it is of programmers -- but they value
 brevity and conciseness over notation that improves readability and
 robustness. That's why they (e.g.) they use implicit multiplication, a
 plethora of line noise symbols that would boggle even Perl programmers,
 and two-dimensional syntax where the meaning of tokens depends on where
 they are written relative to some other token. (E.g. subscript,
 superscript, and related forms.)

 There is one slightly mainstream language that uses mathematical
 notation: APL. The result isn't pretty.

As I wrote above, the use of zero-based indexing in C++, Java, and
Python are all simply based on the fact that C used it.

I wouldn't have guessed that APL is a mainstream language. As I
wrote in recent posts, Fortran, Matlab, and Mathematica all used one-
based indexing. Maybe Basic too, but I haven't checked.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.
Yes, apparently Basic uses one-based indexing too.

As for Ada, apparently, the programmer needs to explicitly define the
index range for every array. Weird. But I get the impression that one-
based indexing is used much more than zero-based indexing.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-19 Thread Russ P.
On Aug 19, 12:13 pm, Steven D'Aprano st...@remove-

 While businesses are conservative in which languages they choose,
 language designers are not conservative in the design features they come
 up with. That there has been a gradual (although as yet incomplete)
 convergence towards zero-based indexing in languages aimed at
 programmers, and one-based indexing in languages aimed at non-
 programmers, tells you everything you need to know.

I beg to differ. I remember reading Bjarne Stroustrup's rationale for
adopting all sorts of junk from C that he really didn't want, just to
make C++ reasonably compatible with it. Had he not done that, C++
probably would have died on the vine. I'm sure the same was true of
Java and Python too.

In any case, I need to drop this discussion and move on. Mr. D'Aprano,
I usually find your posts enlightening and amusing,  but in this case
just don't seem to be converging.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-18 Thread Russ P.
On Aug 18, 2:01 pm, AK andrei@gmail.com wrote:
 On 08/17/2010 10:15 PM, Russ P. wrote:



  On Aug 7, 5:54 am, D'Arcy J.M. Cainda...@druid.net  wrote:

  Would said beginner also be surprised that a newborn baby is zero years
  old or would it be more natural to call them a one year old?  Zero
  based counting is perfectly natural.

  You're confusing continuous and discrete variables. Time is a
  continuous variable, but a list index is discrete.

  Take a look at any numbered list, such as the top ten football teams
  or the top ten software companies. Have you ever seen such a list
  start with zero? If so, where? I sure haven't.

  When I studied linear algebra way back, vector and matrix indices also
  always started with one, and I assume they still do.

  The convention of starting with zero may have had some slight
  performance advantage in the early days of computing, but the huge
  potential for error that it introduced made it a poor choice in the
  long run, at least for high-level languages.

 Besides that, the way things are now, it's almost an Abbot  Costello
 routine:

 - How many folders are there?
 - 5
 - Ok, give me the fourth one.
 - Here.
 - No, that's the last one!
 - That's what you said!
 - No, I said, fourth one!
 - That's what I did!
 - How many are there in all?
 - I already said, five!
 - You gave me the last one!!
 - Just like you said - fourth

Yes, it's confusing. Which element of a list is the first element?
Wait, first is sometimes abbreviated as 1st. So is the 1st element
the 0 element or the 1 element? I honestly don't know.

Is the top team in the league the number 1 team -- or the number 0
team? I have yet to hear anyone call the best team the number 0 team!

Unfortunately, we're stuck with this goofy numbering system in many
languages. Fortunately, the trend is away from explicit indexing and
toward for loops when possible.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-18 Thread Russ P.
On Aug 18, 7:58 pm, Steven D'Aprano steve-REMOVE-
t...@cybersource.com.au wrote:
 On Wed, 18 Aug 2010 14:47:08 -0700, Russ P. wrote:
  Is the top team in the league the number 1 team -- or the number 0 team?
  I have yet to hear anyone call the best team the number 0 team!

 Why is the top team the one with the lowest number?

How could it be otherwise? What is the highest number?

Here's a couple of things I'd like to see just once before I die:

1. The winner of the championship game chanting, We're number zero!
We're number zero!

2. The loser of the championship game chanting, We're number one!
We're number one!


  Unfortunately, we're stuck with this goofy numbering system in many
  languages. Fortunately, the trend is away from explicit indexing and
  toward for loops when possible.

 Agreed on the second sentence there, but not on the first. There's
 nothing goofy about indexing items from 0. Yes, it does lead to slight
 more difficulty when discussing which item you want in *human* languages,
 but not in *programming* languages. The nth item is always the nth item.
 The only difference is whether n starts at 0 or 1, and frankly, if you
 (generic you, not you personally) can't learn which to use, you have no
 business pretending to be a programmer.

Maybe goofy was too derogatory, but I think you are rationalizing a
bad decision, at least for high-level languages. I don't think
programming languages should always mimic human languages, but this is
one case where there is no advantage to doing otherwise.

Why do you think off by one errors are so common? Because the darn
indexing convention is off by one!

And I'd still like to know if the 1st element of aList is aList[0]
or aList[1].
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python why questions

2010-08-17 Thread Russ P.
On Aug 7, 5:54 am, D'Arcy J.M. Cain da...@druid.net wrote:

 Would said beginner also be surprised that a newborn baby is zero years
 old or would it be more natural to call them a one year old?  Zero
 based counting is perfectly natural.

You're confusing continuous and discrete variables. Time is a
continuous variable, but a list index is discrete.

Take a look at any numbered list, such as the top ten football teams
or the top ten software companies. Have you ever seen such a list
start with zero? If so, where? I sure haven't.

When I studied linear algebra way back, vector and matrix indices also
always started with one, and I assume they still do.

The convention of starting with zero may have had some slight
performance advantage in the early days of computing, but the huge
potential for error that it introduced made it a poor choice in the
long run, at least for high-level languages.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Usability, the Soul of Python

2010-03-30 Thread Russ P.
According to Wikipedia, this is called the Whitesmith style:

for(i = 99; i  0; ++i)
 {
 printf(%d slabs of spam in my mail!\n, i);
 printf(%d slabs of spam,\n, i);
 printf(Send one to abuse and Just Hit Delete,\n);
 printf(%d slabs of spam in my mail!\n\n, i + 1);
 }

I agree with the Mr. Hayward that it is preferable to the more common
KR style, because the braces do not violate and visually clutter the
logical indentation structure. It looks more like Python. The deeper
the level of nesting, the more this style reduces visual clutter
compared to the conventional style.

A slightly better style, in my opinion, is the Banner style:

for(i = 99; i  0; ++i) {
 // a blank line here is optional
 printf(%d slabs of spam in my mail!\n, i);
 printf(%d slabs of spam,\n, i);
 printf(Send one to abuse and Just Hit Delete,\n);
 printf(%d slabs of spam in my mail!\n\n, i + 1);
 }


On Mar 30, 4:40 am, Alf P. Steinbach al...@start.no wrote:
 * Jean-Michel Pichavant:

  John Nagle wrote:
  Jonathan Hayward wrote:
  I've posted Usability, the Soul of Python: An Introduction to the
  Python Programming Language Through the Eyes of Usability, at:

     http://JonathansCorner.com/python/

     No, it's just a rather verbose introduction to Python, in dark brown
  type on a light brown background.  One could write a good paper on this
  topic, but this isn't it.

                  John Nagle
  Why is it bad ?

 Consider

 quote
  From a usability standpoint, the braces go with the lines to print out the
 stanza rather than the for statement or the code after, so the following is 
 best:

 for(i = 99; i  0; ++i)
      {
      printf(%d slabs of spam in my mail!\n, i);
      printf(%d slabs of spam,\n, i);
      printf(Send one to abuse and Just Hit Delete,\n);
      printf(%d slabs of spam in my mail!\n\n, i + 1);
      }
 /quote

 This is just unsubstantiated opinion, but worse, it makes a tacit assumption
 that there is best way to do indentation. However, most programmers fall 
 into
 that trap, and I've done it myself. In fact, when I worked as a consultant 
 (then
 in Andersen Consulting, now Accenture) I used the style above. Petter
 Hesselberg, author of Industrial Strength Windows Programming (heh, I'm
 mentioned) asked my why on Earth I did that, like, nobody does that? It was a
 habit I'd picked up in Pascal, from very naïve considerations of parse nesting
 levels, a kind of misguided idealism instead of more practical pragmatism, but
 since I realized that that was an incredibly weak argument I instead answered 
 by
 pointing towards Charles Petzold's code in his Programming Windows books. 
 And
 amazingly I was allowed to continue using this awkward and impractical style.

 I may or may not have been responsible for the similarly impractical 
 compromise
 convention of using three spaces per indentation level. At least, in one big
 meeting the question about number of spaces was raised by the speaker, and I
 replied from the benches, just in jest, three!. And that was it (perhaps).

 Cheers,

 - Alf  (admitting to earlier mistakes)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: (a==b) ? 'Yes' : 'No'

2010-03-30 Thread Russ P.
On Mar 30, 10:08 am, John Nagle na...@animats.com wrote:
 Chris Rebert wrote:
  On Tue, Mar 30, 2010 at 8:40 AM, gentlestone tibor.b...@hotmail.com wrote:
  Hi, how can I write the popular C/JAVA syntax in Python?

  Java example:
     return (a==b) ? 'Yes' : 'No'

  My first idea is:
     return ('No','Yes')[bool(a==b)]

  Is there a more elegant/common python expression for this?

  Yes, Python has ternary operator-like syntax:
  return ('Yes' if a==b else 'No')

  Note that this requires a recent version of Python.

      Who let the dogs in?  That's awful syntax.

                                         John Nagle

Baloney. The Python ternary syntax is perfectly fine. The if could
have been put in front, as in Scala:

return if a == b yes else no

but either way is fine and perfectly readable as far as I am concerned.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: New syntax for blocks

2009-11-17 Thread Russ P.
On Nov 17, 7:28 am, Jonathan Saxton jsax...@appsecinc.com wrote:
 On Thu, 12 Nov 2009 21:27:31 +0100, Bruno Desthuilliers wrote:
  Congratulations, you just reinvented one of the most infamous source of
  bugs in C, C++, Java, PHP, javascript and quite a few other languages.
  Believe it or not, but not allowing this in Python was a very deliberate
  design choice.

  Oh, but those hundreds of thousands of man-hours lost to bugs caused by
  assignment-as-an-expression is nothing compared to the dozens of man-
  minutes saved by having one fewer line of code!

  *wink*

 And if I ever find the genius who had the brilliant idea of using = to mean 
 assignment then I have a particularly nasty dungeon reserved just for him.  
 Also a foul-smelling leech-infested swamp for those language designers and 
 compiler writers who followed his example.  (Come to think of it, 
 plagiarizing a bad idea is probably the worse evil.)

There is absolutely nothing wrong with using = for assignment. The
problem in C was allowing an assignment within a conditional
expression. Now *that* was a bonehead idea! (Hingsight is 20/20, of
course.) Python does not allow that, so there is no problem. Nor do
most other languages allow it.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Psyco on 64-bit machines

2009-11-14 Thread Russ P.
On Nov 14, 10:15 am, Diez B. Roggisch de...@nospam.web.de wrote:
 Russ P. schrieb:

  I have a Python program that runs too slow for some inputs. I would
  like to speed it up without rewriting any code. Psyco seemed like
  exactly what I need, until I saw that it only works on a 32-bit
  architecture. I work in an environment of Sun Ultras that are all 64-
  bit. However, the Psyco docs say this:

  Psyco does not support the 64-bit x86 architecture, unless you have a
  Python compiled in 32-bit compatibility mode.

  Would it make sense to compile Python in the 32-bit compatibility mode
  so I can use Psyco? What would I lose in that mode, if anything?
  Thanks.

 Isn't the SUN Ultra using an ULTRA-Sparc core? If so, the point is moot.

 Diez

No, it's Intel based.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Psyco on 64-bit machines

2009-11-14 Thread Russ P.
On Nov 12, 12:06 pm, Russ P. russ.paie...@gmail.com wrote:
 I have a Python program that runs too slow for some inputs. I would
 like to speed it up without rewriting any code. Psyco seemed like
 exactly what I need, until I saw that it only works on a 32-bit
 architecture. I work in an environment of Sun Ultras that are all 64-
 bit. However, the Psyco docs say this:

 Psyco does not support the 64-bit x86 architecture, unless you have a
 Python compiled in 32-bit compatibility mode.

 Would it make sense to compile Python in the 32-bit compatibility mode
 so I can use Psyco? What would I lose in that mode, if anything?
 Thanks.

I just stumbled across unladen swallow, a faster implementation of
Python. Is it ready for operational usage? How does it compare to
Psyco? I poked around their website a bit, but I don't see answers to
those questions. Thanks.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Psyco on 64-bit machines

2009-11-13 Thread Russ P.
On Nov 12, 12:06 pm, Russ P. russ.paie...@gmail.com wrote:
 I have a Python program that runs too slow for some inputs. I would
 like to speed it up without rewriting any code. Psyco seemed like
 exactly what I need, until I saw that it only works on a 32-bit
 architecture. I work in an environment of Sun Ultras that are all 64-
 bit. However, the Psyco docs say this:

 Psyco does not support the 64-bit x86 architecture, unless you have a
 Python compiled in 32-bit compatibility mode.

 Would it make sense to compile Python in the 32-bit compatibility mode
 so I can use Psyco? What would I lose in that mode, if anything?
 Thanks.

Has anyone tried this?
-- 
http://mail.python.org/mailman/listinfo/python-list


Psyco on 64-bit machines

2009-11-12 Thread Russ P.
I have a Python program that runs too slow for some inputs. I would
like to speed it up without rewriting any code. Psyco seemed like
exactly what I need, until I saw that it only works on a 32-bit
architecture. I work in an environment of Sun Ultras that are all 64-
bit. However, the Psyco docs say this:

Psyco does not support the 64-bit x86 architecture, unless you have a
Python compiled in 32-bit compatibility mode.

Would it make sense to compile Python in the 32-bit compatibility mode
so I can use Psyco? What would I lose in that mode, if anything?
Thanks.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The rap against while True: loops

2009-10-16 Thread Russ P.
On Oct 10, 1:15 pm, kj no.em...@please.post wrote:
 I'm coaching a group of biologists on basic Python scripting.  One
 of my charges mentioned that he had come across the advice never
 to use loops beginning with while True.  Of course, that's one
 way to start an infinite loop, but this seems hardly a sufficient
 reason to avoid the construct altogether, as long as one includes
 an exit that is always reached.  (Actually, come to think of it,
 there are many situations in which a bona fide infinite loops
 (typically within a try: block) is the required construct, e.g.
 when implementing an event loop.)

 I use while True-loops often, and intend to continue doing this
 while True, but I'm curious to know: how widespread is the
 injunction against such loops?  Has it reached the status of best
 practice?

Never, ever use while True. It's an abomination. The correct form is
while 1.

But seriously, folks ... while condition is nice when the desired
break is at the beginning or end of the block, but otherwise it forces
unnecessary contortions that can hamper readability.
-- 
http://mail.python.org/mailman/listinfo/python-list


IDLE Config Problems

2009-07-29 Thread Russ Davis
I am just getting started with Python and have installed v. 2.5.4  Idle version 
1.2.4  I can't seem to get the idle to display text.  It seems as if the 
install went fine.  I start up the idle and the screen is blank.  No text.  It 
seems as if I can type on the screen but I just can't see the characters.   I 
go to the config menu and it bombs and brings up the Visual Studio debugger.  
The computer that I am trying to install it on is a windows xp laptop serv pack 
2.   I have a workstation here that I am using also with the same os and the 
idle works fine.  Any hints as to what might be interfering with the idle 
config.

Thanks

Russ

Russell Davis PP, AICP, GISP
GIS Administrator
State of New Jersey Pinelands Commission
Office of Land Use and Technology
GIS Laboratory
Po Box 7
New Lisbon, NJ 08064
Phone 609-894-7300
Fax 609-894-7330
russ.da...@njpines.state.nj.us

-- 
http://mail.python.org/mailman/listinfo/python-list


[issue1559298] test_popen fails on Windows if installed to Program Files

2009-07-03 Thread Russ Gibson

Russ Gibson ru...@rnstech.com added the comment:

What is needed is separate quoting for the command and the argument. 
Right now, test_popen only surrounds the entire command line with quotes:

c:\Program Files\Python2.6\Python.exe -u c:\Documents and Settings\Russ
Gibson\cgi-bin\cgi.py

It needs to the above as thus:

c:\Program Files\Python2.6\Python.exe -u c:\Documents and
Settings\Russ Gibson\cgi-bin\cgi.py

From the command line, the second case works, but the first doesn't. 
Neither work from os.popen in 2.6.2.

To make sure that popen works in all cases under windows, test_popen*
need to test with separate quotes around the command and argument.  That
will show the real problem with the current os.popen* implementation(s).

(yeah, I know, shut up and provide a patch...)

--
nosy: +squeegee

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue1559298
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1475] test_popen fails when the directory contains a space

2009-07-03 Thread Russ Gibson

Russ Gibson ru...@rnstech.com added the comment:

(Same comment I added to 1559298:)
What is needed is separate quoting for the command and the argument. 
Right now, test_popen only surrounds the entire command line with quotes:

c:\Program Files\Python2.6\Python.exe -u c:\Documents and Settings\Russ
Gibson\cgi-bin\cgi.py

It needs to test the above as thus:

c:\Program Files\Python2.6\Python.exe -u c:\Documents and
Settings\Russ Gibson\cgi-bin\cgi.py

From the command line, the second case works, but the first doesn't.
Neither work from os.popen in 2.6.2.  I have been unable to get popen*
to work with a command and an argument that both contain spaces.

To make sure that popen works in all cases under windows, test_popen*
needs to test with separate quotes around the command and argument. 
That will show the real problem with the current os.popen*
implementation(s).

(yeah, I know, shut up and provide a patch...)

--
nosy: +squeegee

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue1475
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Is Psyco good for Python 2.6.1?

2009-07-02 Thread Russ P.
I need to speed up some Python code, and I discovered Psyco. However,
the Psyco web page has not been updated since December 2007. Before I
go to the trouble of installing it, does anyone know if it is still
good for Python 2.6.1? Thanks.
-- 
http://mail.python.org/mailman/listinfo/python-list


Why am I getting [10263 refs]?

2009-03-24 Thread Russ P.
I am running 2.5.2 on Red Hat 5. I am getting many printouts of
reference counts, such as

[10263 refs]

I do not recall ever seeing this until recently. Why am I getting
this? Thanks.
--
http://mail.python.org/mailman/listinfo/python-list


[issue2636] Regexp 2.7 (modifications to current re 2.2.2)

2009-02-05 Thread Russ Cox

Russ Cox r...@swtch.com added the comment:

 Named Unicode characters eg \N{LATIN CAPITAL LETTER A}

These descriptions are not as stable as, say, Unicode code
point values or language names.  Are you sure it is a good idea
to depend on them not being adjusted in the future?
It's certainly nice and self-documenting, but it doesn't seem
better from a future-proofing point of view than \u0041.

Do other languages implement this?

Russ

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue2636
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



Re: is python Object oriented??

2009-02-04 Thread Russ P.
On Feb 4, 5:35 am, Luis Zarrabeitia ky...@uh.cu wrote:
 Quoting Russ P. russ.paie...@gmail.com:

  Imagine you own a company, and you decide to lease an office building.
  Would you expect the office doors to have locks on them? Oh, you
  would? Why? You mean you don't trust your co-workers? What are locks
  but enforced access restriction?

 This analogy is nonsense. There is no way you will execute code on my system 
 if
 I don't authorize it, regardless of how public are the variables declared in
 my code. No one will execute code on _your_ system either, without your
 authorization. That puts you in a different position: you can easily _check_
 that everything is alright before executing, whereas in the office example, it
 cannot be done.

I don't follow your point, but I think you are reading too much into
the analogy. Obviously, an office building cannot be copied in a few
seconds as a software library can, so the analogy obviously cannot be
taken too far.

The locks on the doors are analogous to enforced access restrictions.
When you lease the building, you are presumably given a complete set
of keys, including master keys. The keys are analogous to the source
code, which allows you to trivially disable the access restrictions.

People like you are saying that keys are not enough. You don't want to
be bothered with keys. You want the office doors to come with no locks
on them at all, because you don't intend to lock them anyway, and
someone could possibly get locked out someday. You are saying that
locks are unnecessary because you trust your co-workers (aren't you
lucky!), and you can just put keep-out signs on the doors (leading
underscores).

Well, that may be reasonable for a small group of developers working
on a small, cool project. It is inappropriate, however, for a large,
safety-critical project with dozens or hundreds of developers that are
hired off the street in accordance with current labor laws. Now, if
you concede that Python is just not intended for such projects, then
fine, but please don't claim that access restrictions are useless for
all applications and domains. That's just ridiculous.
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-03 Thread Russ P.
On Feb 3, 12:45 am, Steven D'Aprano
ste...@remove.this.cybersource.com.au wrote:

 Another extreme position is that enforced data hiding is useless, that
 there is *never* any need for it *at all*, and therefore Python doesn't
 need it, there's no reason except stupid PHB's belief in cargo-cult
 coding why Python couldn't be used for controlling nuclear reactors or
 the Space Shuttle. There's been some claims remarkably close to that in
 this or the previous thread.

My recollection is that several people have said exactly that in no
uncertain terms, if not in this thread then in the one a few days ago.

 I trust that nobody really believes this
 extreme position -- it's not that far off claiming that procedures and
 functions are pointless and stupid because we have GOTO.

If nobody believes it, several participants here could have fooled me.
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-03 Thread Russ P.
On Feb 3, 4:05 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
 On Tue, 03 Feb 2009 08:45:23 -, Steven D'Aprano

 ste...@remove.this.cybersource.com.au wrote:
  I find this extreme position is rather incoherent. If I may paraphrase
  the argument as I see it:
  Enforced data hiding is useless, because it is utterly trivial to bypass
  it, AND it's wicked, because it makes it unbelievably painful and
  difficult to bypass it when you need to.
  If it is trivial to bypass, surely it can't be that painful to bypass?

 I think you haven't noticed which of the parties is shifting their ground.
 I'm very much of the second opinion; it was Russ who did the sudden volte
 face and declared that it was trivial to circumvent.

Whoa! Hold on a minute here. Your failure to understand a simple idea
does not constitute a sudden volte (whatever that is) on my part.

Let me try to explain again what should be fairly obvious.

If the user of the library has the source code (and the right to
modify it), disabling access restrictions is trivial. You simply
delete the private keyword (or equivalent) wherever necessary.

If you are working with a team, however, you cannot just do that
unilaterally unless you have the authority to do so. In other words,
you may be required to conform to the APIs established by the team. In
that case, disabling access restrictions may not be impossible (or
even difficult), but it is no longer trivial.
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-03 Thread Russ P.
On Feb 3, 4:14 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
 On Tue, 03 Feb 2009 05:37:57 -, Russ P. russ.paie...@gmail.com wrote:
  On Feb 2, 7:48 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
  On Tue, 03 Feb 2009 02:16:01 -, Russ P. russ.paie...@gmail.com
  wrote:
   Here we go again. If you have access to the source code (as you nearly
   always do with Python code), then breaking the language-enforced data
   hiding is a trivial matter of deleting the word private (or
   equivalent).

  If it's that trivial to defeat something that its proponents appear to
  want to be close to an iron-clad guarantee, what on earth is the point
  of using private in the first place?

  If a library developer releases the source code of a library, any user
  can trivially defeat the access restrictions. But if a team of
  developers is checking in code for a project, the leader(s) of the
  project can insist that the access restrictions be respected to
  simplify the management of interfaces. The larger the team, the more
  useful that can be. That's why Java, C++, Ada, Scala, and other
  languages have a private keyword.

 Indeed he can.  He can even do that in Python; it just requires a little
 self-discipline from the team, or a validation script on the code
 repository if he really doesn't trust them.  Not only can this be done
 without forcing the rest of the world to play, it makes things a little
 less daunting when those nice clean interfaces turn out to be
 incomplete/too slow/not what you thought.

This has already been refuted several times on this thread alone, so I
will not bother doing it again.

--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-03 Thread Russ P.
On Feb 3, 7:49 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
 On Wed, 04 Feb 2009 01:13:32 -, Russ P. russ.paie...@gmail.com wrote:
  On Feb 3, 4:05 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
  I'm very much of the second opinion; it was Russ who did the sudden  
  volte
  face and declared that it was trivial to circumvent.

  Whoa! Hold on a minute here. Your failure to understand a simple idea
  does not constitute a sudden volte (whatever that is) on my part.

 My apologies.  Volte-face should have had a hyphen in it.

  Let me try to explain again what should be fairly obvious.

 I understood you just fine.  It was how what you described was
 consistent with your previous position that private was needed
 for enforcement purposes, while the leading underscore convention
 relied on team discipline and was therefore insufficient.  Since
 you've clarified that private enforces privacy through... er...
 team discipline, I'm now just very confused as to what you think
 it buys you.

 --
 Rhodri James *-* Wildebeeste Herder to the Masses

You need team discipline either way. The question here is to what
extent the language supports the discipline. If you are going to check
for access violations anyway with third-party tools or code reviews,
why not let the language do the job for you automatically (or at least
take a first cut at it)?

Imagine you own a company, and you decide to lease an office building.
Would you expect the office doors to have locks on them? Oh, you
would? Why? You mean you don't trust your co-workers? What are locks
but enforced access restriction?

What people like you are saying is that you don't need no stinkin'
locks because your co-workers are all consenting adults whom you
trust. Actually, you're saying even more than that. You're saying that
office doors never need locks, because everyone should trust their co-
workers. All you need is a keep-out sign on the door (leading
underscores). And you are presenting as evidence for your position the
fact that people occasionally get locked out of an office that they
need to get into.

I'm saying, fine, if you trust your co-workers, then keep the doors
unlocked, but please don't insist that office doors come without
locks. Yes, locks occasionally cause inconvenience, but they serve a
very useful purpose if used properly.

--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-02 Thread Russ P.
On Feb 2, 9:02 am, thmpsn@gmail.com wrote:
 On Feb 2, 2:55 am, Stephen Hansen apt.shan...@gmail.com wrote:

   This is proven
   by your statement above, whereby you are driving a user away,
   simply because the language, in one small aspect, does not
   give him what he wants, and the tenor of this thread has been
   very much: That's how it is - like it or lump it, and no amount
   of careful explanation of why people want the feature has cut
   any ice -

  I'm missing the careful explanation. What I've heard is that the lack
  of enforced encapsulation is a danger. What I've heard is that
  people want it because they've been told they should want it and
  believe that. Why?

 Who has said the latter? Are you just trying to spread FUD?

  There have been no careful explanations to answer that, in my mind.
  And thus my response is: the practical possibility of needing access
  vastly outweights the theoretical situation that might go bad if
  encapsulation wasn't there. Why? Because in any real situation, IMHO,
  *forced* encapsulation is pointless.

 I think you've gotten too subjective on this matter. You might as well
 say that we don't need no stinkin' OOP, we could all just be
 programming with goto's.

 Sure, hey, let's do OOP in C, using structs, POD STRUCTS (), and
 PLAIN FUNCTIONS () 

 Heck, why do we even need OOP?? Long live procedural!!

 We don't even need no stinkin programming languages, we could just
 program using 1's and 0's!

 What's with this luddite attitude, Python community?

   It has all the time been countered with statements
   about how the proponents of private attributes don't need it,
   (as if they are plain dumb),

  They don't need it. No one has shown a *real* reason why. The only
  reasons provided are its a DANGER that someone MIGHT DO BAD.
  That's not a real reason. If its your project that someone is doing
  bad in, this is a situation which can be *clearly* specified in a
  projects policy and coding standards and can be *trivially* tested for
  with simple static analysis in nearly all cases. The problem is the
  person and not the code then. There's *countless* other ways that
  person can do bad if you're allowing them to commit blindly anything
  into your project.

 Aha! I see this attitude quite often among C/C++ people, regarding
 buffer overflows and uninitialized pointer dereferences: someone will
 say C and C++ are unsafe languages because they allow you to overrun
 buffers, then a C/C++ zealot will respond Hire some good
 programmers.

 SAME ATTITUDE.

I couldn't agree more.

As I said before, as an aeronautical engineer I don't know if enforced
access restriction can be added to Python without compromising or
unduly complicating the language. Maybe it can't. If that's the case,
then people should make that argument. But just saying that enforced
access restriction is useless in general is nonsense. Are we supposed
to believe that the designers of C++, Java, Ada, and Scala are all
idiots?

Several participants here keep repeating that the leading-underscore
convention is perfectly adequate. Aside from the aesthetic problem of
littering code with leading underscores, let me try to explain the
problem with leading underscores.

Suppose a library developer (or a module developer on a large team)
uses leading underscores. Now suppose that, for whatever reason
(pressure from the users, perhaps), the library developer decides to
change a private attribute to public. Now all occurrences of the
identifier need to be changed. If an assignment to the previously
private attribute is missed, no warning will be issued (because
Python allows new attributes to be added anywhere, even completely
outside the class definition itself). And if the library is widely
used, the probability of such bugs occurring is very high.

If a private keyword (or equivalent) were available, then the change
would need to be made in only one location rather than at every
occurrence off the identifier. That is much less error prone. Sure,
you can argue (as I'm sure someone will) that the users of the library
should be more careful. Yes they should, but why not let the language
help with such low-level details. That's what high-level languages are
for.

Several people have argued that an advantage of the leading-underscore
convention is that it tells you at every occurrence of the identifier
that it is private. Of course, the leading-underscore convention could
still be used even in combination with enforced access restriction.
But the larger point is this: that is like saying that global
parameters should be repeated as literal numbers at every occurrence
so the user can see the value instantly. Sure, that saves you the
trouble of looking up the value when you need to know it, but it also
requres that any change must be carefully made at every location. No
competent programmer would argue in favor of that.
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-02 Thread Russ P.
On Feb 2, 2:46 pm, Tim Rowe digi...@gmail.com wrote:
 2009/2/2 Russ P. russ.paie...@gmail.com:

  Are we supposed
  to believe that the designers of C++, Java, Ada, and Scala are all
  idiots?

 No, we're supposed to believe that the designers of C++, Java, Ada,
 and Scala are all designers of languages that are not Python. If all
 languages had the same philosophy what would be the point of different
 languages? Is it worth mentioning (again) that Python is not Java?

 --
 Tim Rowe

I am not sure why people keep mentioning that Python is not Java.
As a slogan, it is rather misleading. Python is not C++, Ada, or Scala
either. All of those languages have enforced access restriction. Why
only mention Java?

For the record, I have never used Java, nor do I have any desire to
ever use it. That is why I am intrigued by the apparent obsession with
it here. I suspect that many programmers are forced to use against
their wishes. If that's the case, you have my sympathies, but let's
not pretend that Java is the only popular OO language with enforced
access restrictions.
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-02 Thread Russ P.
On Feb 2, 4:35 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:

 This really, really, *really* isn't a tangent.  It's the heart of
 the matter.  You are advocating a change that doesn't fit with
 Python's consenting adults approach to programming.  It's trivial
 to enforce hiding using static checking tools if you really feel the
 need to not trust yourself; it's much harder (though by no means
 impossible) to break language-enforced hiding when (not if) an
 interface turns out to be inadequate.

Here we go again. If you have access to the source code (as you nearly
always do with Python code), then breaking the language-enforced data
hiding is a trivial matter of deleting the word private (or
equivalent).

I know ... changing one word constitutes a fork. Yeah, right. You
can't be bothered to change one word, but the library developer should
be required to litter his code with leading underscores everywhere,
and large development teams should depend on labor intensive code
reviews for checks that could be automated by the language. (And,
please ... I am not suggesting that enforced access restrictions would
render code reviews unnecessary, but it could certainly simplify
them.)
--
http://mail.python.org/mailman/listinfo/python-list


Re: is python Object oriented??

2009-02-02 Thread Russ P.
On Feb 2, 7:48 pm, Rhodri James rho...@wildebst.demon.co.uk wrote:
 On Tue, 03 Feb 2009 02:16:01 -, Russ P. russ.paie...@gmail.com wrote:
  Here we go again. If you have access to the source code (as you nearly
  always do with Python code), then breaking the language-enforced data
  hiding is a trivial matter of deleting the word private (or
  equivalent).

 If it's that trivial to defeat something that its proponents appear to
 want to be close to an iron-clad guarantee, what on earth is the point
 of using private in the first place?

 --
 Rhodri James *-* Wildebeeste Herder to the Masses

If a library developer releases the source code of a library, any user
can trivially defeat the access restrictions. But if a team of
developers is checking in code for a project, the leader(s) of the
project can insist that the access restrictions be respected to
simplify the management of interfaces. The larger the team, the more
useful that can be. That's why Java, C++, Ada, Scala, and other
languages have a private keyword.
--
http://mail.python.org/mailman/listinfo/python-list


Re: what IDE is the best to write python?

2009-02-02 Thread Russ P.
On Feb 2, 9:09 pm, a...@pythoncraft.com (Aahz) wrote:

 You favor bleeding eyes?

If I am going to bleed anywhere, I'd actually prefer it be somewhere
other than the eyes. Well, maybe not the gonads either. That's a tough
call. In any case, I use xemacs, and I've always liked color
highlighting. Not that it really helps much, but it spices up the
code and stimulates the eyes and brain. When I see the same code
without color highlighting, it just seems bland, like something is
missing. It seems like just text rather than code.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Function Application is not Currying

2009-01-28 Thread Russ P.
On Jan 28, 1:32 pm, Xah Lee xah...@gmail.com wrote:
 Function Application is not Currying

 Xah Lee, 2009-01-28

 In Jon Harrop's book Ocaml for Scientist 
 athttp://www.ffconsultancy.com/products/ocaml_for_scientists/chapter1.html

 It says:

     Currying

     A curried function is a function which returns a function as its
 result.

 LOL. That is incorrect.

What does that have to do with the price of bananas in Costa Rica?
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-27 Thread Russ P.
On Jan 26, 6:09 am, Steve Holden st...@holdenweb.com wrote:

 Quite. Python is a language for consenting adults. It has perceived
 deficiencies for certain software engineering environments. Can we drop
 the subject now? This horse was flogged to death long ago, and it's
 pointless and cruel to keep on beating the remains.

Judging from this thread, not everyone got the memo yet. At least
three or four people on this thread alone have argued that enforced
data hiding is of no value whatsoever for any application or domain.
And more than one of them has argued that Python is perfectly
appropriate for even the largest and most safety-critical projects.

We are moving into an era of increasing dependence on computers and
software for safety-critical, mission-critical, and  financial
systems. If people who do not understand the principles  necessary for
ultra-reliable software get in charge of developing these systems, we
will have serious problems that could have been avoided.

I suggested that maybe -- maybe! -- the versatility of Python could be
enhanced with enforced data hiding. I was careful to say several times
that I don't know if that can even be done in Python (with all its
introspection and so forth). And it would always be optional, of
course (as far as I know, no language forces anyone to declare
anything private).

Several people here seem to take that suggestion as an assault on
Python and, by projection, an assault on their worldview. We all know
that Python is a fantastic language for many purposes, but it is only
a language, and failing to recognize and address its limitations
serves no useful purpose.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-27 Thread Russ P.
On Jan 27, 11:40 am, Luis Zarrabeitia ky...@uh.cu wrote:

 I think you still fail to see that what we are objecting is not that the
 original writer can optionally use the enforced data hiding (which, as
 someone pointed out before me, can be done with tools like pylint). The
 objection is about the _user_ of the library. If you don't force it into the
 _user_, how is it different from the current situation? And if you do force
 it, how can you say that it is optional?

As I have pointed out several times, the user cannot be forced to
respect data hiding if he has access to the source code (and the right
to modify it). If Python had a private keyword (or equivalent), for
example, the user would only need to delete it wherever necessary to
gain the desired access.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-26 Thread Russ P.
On Jan 26, 1:07 am, Bruno Desthuilliers bruno.
42.desthuilli...@websiteburo.invalid wrote:

 No. I can change the *team's* code. Please *read*. team's ownership,
 ok ? Or do I have to spell it out loud ? TEAM'S OWNERSHIP. Uh. You get
 the message, now ?

Team ownership doesn't necessarily mean that you can just change code
at will. In industry, teams usually have a leader that you need to
check with before you can change an interface. A language with
enforced access restriction merely provides language support for such
coordination. That was my only point.

  Would you give all those developers your password to get into the
  system? No? Wait a minute ... you mean you wouldn't trust them with
  your password? But what about openness? Are you some sort of fascist
  or what?

 Goodwin point. You loose. Good bye again, Mr P.

You missed the point once again. In asking if you are a fascist, I
was *parodying* your attitude that languages with enforced access
restrictions are for fascists who don't trust their co-workers or
employees. [I don't recall if you actually used that word or if it was
someone else, but you did use BD, which carries the same general
impression.]

So I parodied your hyperbole, and you dismiss me for it. Without
realizing it, you just dismissed yourself, sir. Thanks for saving me
the trouble.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-25 Thread Russ P.
On Jan 25, 10:04 am, Mark Wooding m...@distorted.org.uk wrote:
 Russ P. russ.paie...@gmail.com writes:
  Calling a one-word change a fork is quite a stretch, I'd say.

 I wouldn't.  I've forked a project P if I've made a different version of
 it which isn't going to be reflected upstream.  Now I've got to maintain
 my fork, merging in changes from upstream as they happen, and upgrading
 all the things which use my new version; if I want to distribute my
 program M to other people, they'll also need my forked version of
 whatever.  Now suppose that two programs A and B both require one-word
 changes in P: there's a combinatorial explosion of little patches which
 need to be managed.

 A fork is a fork, regardless of how big the change is.  The problem with
 a fork is the maintenance problem it entails.

Not really. A fork is something that *diverges* from the original.
That means the differences *grow* over time. In this case, the
differences will not grow over time (unless you access more private
attributes).

As I pointed out before, you don't even need to keep track of the
changes you made. You will be automatically reminded as soon as you
get a new version of the library and try to use it (again, assuming
that your tests provide sufficient coverage and the attribute is not
changed to public).

   Has it occurred to you that some users might actually *want* access
   controls? Maybe some users want to actually use the library as the
   author intended it to be used. What a bizarre concept!

  Huh?
  Then... use it as the author intended. I am _not_ forcing you to use the
  obj._protected attributes!

  But what if I want an automatic check to verify that I am using it as
  the author intended? Is that unreasonable?

 You mean that you can't /tell/ whether you typed mumble._seekrit?
 You're very strange.  It's kind of hard to do by accident.  I'd have

If I have a team of 200 programmers, I can't easily tell if one of
them did that somewhere. Why do people like you have such a hard time
understanding that I'm not talking here about smallish programs with
one or a few developers?

And even with only one programmer, he might access mumble._seekrit
for a debugging test, then forget to take it out.

 thought that you could do that with grep, err...

         git grep '\._' | sed 's/self\._//g' | grep '\._'

 ought to do as a rough start.

 If you can't trust your programmers to make it clear when they're doing
 something dubious, I think you have bigger problems.

Yes, I think I have bigger problems. But I like the challenge. I don't
think I'd be happy working on small problems, but to each his own.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-25 Thread Russ P.
On Jan 25, 10:04 am, Mark Wooding m...@distorted.org.uk wrote:

  But what if I want an automatic check to verify that I am using it as
  the author intended? Is that unreasonable?

 You mean that you can't /tell/ whether you typed mumble._seekrit?
 You're very strange.  It's kind of hard to do by accident.

But what if you type mumble._seekrit in several places, then the
library implementer decides to give in to your nagging and makes it
public by changing it to mumble.seekrit. Now suppose you forget to
make the corresponding change somewhere in your code, such as

mumble._seekrit = zzz

You will get no warning at all. You will just be inadvertently
creating a new private attribute -- and the assignment that you
really want will not get done.

For that matter, the library implementer himself could make the same
mistake and get no warning.

When you think about it, you soon realize that the leading underscore
convention violates the spirit if not the letter of one of the first
principles of programming 101: if you have a constant parameter that
appears in several places, assign the literal value in one place
rather than repeating it everywhere. Then if you need to change the
value, you only need to change it in one place. That reduces effort,
but more importantly it reduces the potential for error.

The same principle applies to declaring an attribute private. If
that declaration is encoded in every occurrence of its identifier,
then if you decide to change it to public, you need to change the
identifier at each and every location. But if a private or priv
keyword were available, you would only need to make the change in one
location.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-25 Thread Russ P.
On Jan 25, 5:31 pm, Steven D'Aprano st...@remove-this-
cybersource.com.au wrote:

 It seems to me that Russ' latest objection to _private names is not
 specific to _private names. The same problem:

 You will get no warning at all. You will just be inadvertently
 creating a new private attribute -- and the assignment that you
 really want will not get done.

 occurs with public names as well.

That is true. Any name change could cause that sort of problem. But I
brought it up specifically in reply to Mr. Wooding, who pointed out
that it is hard to accidentally type a name with a leading
underscore without realizing what you are doing.

You may fully understand what you are doing when you type it, but you
may not realize what has happened later when you forget to change it
to be consistent with the new version of the library (or another
module in an application).

To change an attribute from private to public, the leading-underscore
convention requires that every occurrence of the name be changed. That
is more error prone than if the change only needs to be done in one
place. And the fact that Python allows you to create new attributes on
the fly also contributes to this problem, of course. That makes
renaming and refactoring riskier in general in Python than in
statically typed languages with enforced access restrictions. More
care and attention to detail is needed to do it right in Python.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-25 Thread Russ P.
On Jan 25, 7:56 pm, Mark Wooding m...@distorted.org.uk wrote:
 Russ P. russ.paie...@gmail.com writes:

 [snip stuff I don't disagree with]

  That makes renaming and refactoring riskier in general in Python than
  in statically typed languages with enforced access restrictions. More
  care and attention to detail is needed to do it right in Python.

 In fact, I don't disagree with this statement either.  It's just that I
 think there's a legitimate tradeoff between the assurances you can get
 from a language designed for static analysis and strictness, and the
 freedom and dynamicness of languages like Python.  It's just that I
 rather like where Python is now on this continuum, and disagree that
 shifting it is necessarily a good idea.

 -- [mdw]

I would like to have the option to use Python either way, if possible
-- and I honestly don't know if it is possible. The new type
annotations are a step in that direction. They are optional, but if
used they could make refactoring safer and facilitate static analysis.
Enforced access restrictions, if they can be added to Python, would be
optional too -- as they are in any language.
--
http://mail.python.org/mailman/listinfo/python-list


Re: I'm a python addict !

2009-01-24 Thread Russ P.
On Jan 24, 4:03 pm, Robert Kern robert.k...@gmail.com wrote:
 On 2009-01-23 22:25, Aahz wrote:

  In articlemailman.7865.1232765899.3487.python-l...@python.org,
  Linuxguy123linuxguy...@gmail.com  wrote:
  I just started using python last week and I'm addicted.

  Welcome!  Just be aware that excessive Perl-bashing is considered
  somewhat tasteless on this newsgroup, but the occasional snide comment
  should be fine.  ;-)

 Or bash-bashing for that matter.  :-)

 but-zsh-really-is-better'ly yrs,

 --
 Robert Kern

 I have come to believe that the whole world is an enigma, a harmless enigma
   that is made terrible by our own mad attempt to interpret it as though it 
 had
   an underlying truth.
    -- Umberto Eco

Come to think of it, when I use bash to run a series of python
scripts, I could call it bashing Python.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-24 Thread Russ P.
On Jan 24, 4:17 pm, Luis Zarrabeitia ky...@uh.cu wrote:
 Quoting Russ P. russ.paie...@gmail.com:

  On Jan 23, 6:36 pm, Luis Zarrabeitia ky...@uh.cu wrote:

Makes *no* sense? There's *no* good reason *at all* for the original
author to hide or protect internals?

   My bad, sorry.
   It makes sense... if the original author is an egotist who believes he
  must
   control how I use that library.

  If the original author provides you with the source code and the right
  to modify it, he cannot possibly control how you use the library. You
  can trivially disable any access controls. But for some reason that's
  not enough for you.

 No, I'm not satisfied with forking python just to use sys._getframe.

Calling a one-word change a fork is quite a stretch, I'd say.

  Has it occurred to you that some users might actually *want* access
  controls? Maybe some users want to actually use the library as the
  author intended it to be used. What a bizarre concept!

 Huh?
 Then... use it as the author intended. I am _not_ forcing you to use the
 obj._protected attributes!

But what if I want an automatic check to verify that I am using it as
the author intended? Is that unreasonable? Think of enforced access
restriction as an automatic assert every time an attribute is
accessed that it is not a private attribute.

I may want this automatic verification in my own code just for peace
of mind. More importantly, a project manager may want it to verify
that no one on the development team is accessing private attributes.
Sure, he could do that with code reviews, but code reviews are far
more expensive (and less reliable in some ways) than a simple check
enforced by the language itself.

Without enforced access protection, depending on code reviews to
detect the use of private attributes is a bit like depending on
security guards to keep doors closed without putting locks on the
doors. You don't need a lock on a door if you can afford to post a
security guard there full time, but doesn't it make more sense to put
a lock on the door and have a security guard check it only
occasionally?
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-24 Thread Russ P.
On Jan 24, 5:09 pm, Luis Zarrabeitia ky...@uh.cu wrote:

 I didn't say at all. Those were your words, not mine.
 I said that it makes no sense that the power lies on _you_ instead of on _my
 team_. And, when I said that, I recall we were talking about the python
 language, not C.

Once again, if you have the source code for the library (and the right
to modify it), how does the power lie with the library implementer
rather than you the user?

You say you don't want to fork the library. Let's stipulate for the
sake of argument that a one-line change is indeed a fork. Think
about what you are saying. You are saying that you should dictate how
the producer of the library should implement it because you don't want
to be bothered to fork it. If you don't like his design decisions,
shouldn't the onus be on *you* to make the trivial change necessary to
get access to what you want?

Imagine a person who repairs computers. He is really annoyed that he
constantly has to remove the cover to get at the guts of the computer.
So he insists that computers cases should be made without covers.
After all, manufacturers put covers on computers only because they
don't trust us and think we're too stupid to safely handle an
uncovered computer box.

That is logically equivalent to your position on enforced access
restrictions in software.

 And, FYI, when programming in java, C++ or C#, I do use private and
 protected variables, not becasue I want to forbid others from using it, but
 because it is [rightly?] assumed that everything marked as public is safe to 
 use
 - and I consider that a strong enough external reason to do it.

You could just use leading underscores and note their meaning in the
documentation. If that's such a great approach, why not do it? Yes, I
know, it's not a widely used convention in those other languages. Fair
enough. But you could still do it if it's such a good idea.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-24 Thread Russ P.
On Jan 24, 9:54 pm, Luis Zarrabeitia ky...@uh.cu wrote:
 Quoting Russ P. russ.paie...@gmail.com:

  Once again, if you have the source code for the library (and the right
  to modify it), how does the power lie with the library implementer
  rather than you the user?

  You say you don't want to fork the library. Let's stipulate for the
  sake of argument that a one-line change is indeed a fork.

 It is. For starters, I'd lose the information of this attribute was intended 
 to
 be internal and I'm accessing it anyway.

Not really. When you get a new version of the library and try to use
it, you will quickly get a reminder about the change (assuming your
tests provide sufficient converage, and also assuming that the
attribute is not made public in the new version). So you don't really
even need to keep track of the change.

  Think
  about what you are saying. You are saying that you should dictate how
  the producer of the library should implement it because you don't want
  to be bothered to fork it.

 No. I am not dictating _anything_. The beauty of it, you don't have to do
 _anything_ for this to happen.

You are trying to dictate that the library implementer not be allowed
to use enforced access restriction. And, in the larger sense, you are
trying to dictate that access restrictions not be enforced in Python.

 Now, you may say that I'm trying to force you to relax and do nothing instead 
 of
 complaining because the language I use doesn't put enough restrictions on me.

And you are trying to put restrictions on anyone who might prefer to
enforce access restrictions. If you don't allow them to do that, you
are restricting them.

  If you don't like his design decisions,
  shouldn't the onus be on *you* to make the trivial change necessary to
  get access to what you want?

 Or contacting him about it and maybe send him a patch, sure, why not. But this
 has nothing to do with enforced data hiding. Having obj._public_var is just as
 badly designed as having private public_var.

Sure, go ahead and contact him. If he agrees that a private attribute
should be public, then the problem is solved. But if he does not
agree, he should not be forced to bend to your desire.

  Imagine a person who repairs computers. He is really annoyed that he
  constantly has to remove the cover to get at the guts of the computer.
  So he insists that computers cases should be made without covers.
  After all, manufacturers put covers on computers only because they
  don't trust us and think we're too stupid to safely handle an
  uncovered computer box.

  That is logically equivalent to your position on enforced access
  restrictions in software.

 Do you realize that most computer cases are trivially easy to open? (Nevermind

That was exactly my point. Deleting the word private (or whatever)
is also trivially easy if you have access to the source code.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 23, 1:54 am, Bruno Desthuilliers bruno.
42.desthuilli...@websiteburo.invalid wrote:
 Steven D'Aprano a écrit :



  On Thu, 22 Jan 2009 19:10:05 +, Mark Wooding wrote:

  Steven D'Aprano st...@remove-this-cybersource.com.au writes:

  On Thu, 22 Jan 2009 15:12:31 +0100, Bruno Desthuilliers wrote:
  Steven D'Aprano a écrit :
  But if you have free access to attributes, then *everything* is
  interface.
  Nope.
  How could anyone fail to be convinced by an argument that detailed and
  carefully reasoned?
  Well, your claim /was/ just wrong.  But if you want to play dumb: the
  interface is what's documented as being the interface.

  But you miss my point.

  We're told Python doesn't have private attributes.

 Yes.

  We're told that we're
  allowed to mess with the internals,

 Given that we're willing and able to cope with possible consequences.

  we're *encouraged* to do so

 Certainly not.

  Python
  gives you the freedom to do so, and any suggestion that freedom might be
  reduced even a tiny bit is fought passionately.

 Won't comment on this.

  When people ask how to
  implement private attributes, they're often told not to bother even using
  single-underscore names.

 often ? Not as far as I can tell. I think you're confusing this with
 the advice to not use getters/setters for no good reason, given Python's
 support for computed attributes - which is not exactly the same thing.

  When it is suggested that Python should become
  stricter, with enforced data hiding, the objections come thick and fast:
  people vehemently say that they like Python just the way it is, that they
  want the ability to mess with the internals.

 Indeed. There's no shortage of BD languages, and well, Python is OSS,
 so if you want a BD Python (now that's an oxymoron), please feel free
 to implement it. But by all mean, leave my favorite language alone. Thanks.

  You even argued that you disliked data structures implemented in C and
  preferred those written in Python because you have more ability to mess
  with the private attributes.
  In context, I had just mentioned that lists'
  internals were inaccessible from Python code. I neglected to give an
  example at the time, but a good example is the current length of the
  list. Consider the experience of Microsoft and Apple.

 Yes, two great examples of freedom champions.

  No matter how often
  they tell people not to mess with the internals, people do it anyway, and
  always believe that their reason is a good reason.

 And who are *you* to pronounce any judgement about that ?

  And Python culture encourages that behaviour (albeit the consequences are
  milder: no buffer overflows or core dumps).

  Add to that the culture of Open Source that encourages reading the source
  code.

 Indeed. A *very* good thing FWIW.

  You don't need to buy a book called Undocumented Tips and Tricks
  for Python to discover the internals. You just need to read the source
  code.

 Exactly.

  And then you have at least two places in the standard library where
  _attributes are *explicitly* public:

 http://bugs.python.org/issue3152

  Given this permissive culture, any responsible

 For your personal definition of responsible.

  library writer must assume
  that if he changes his so-called private attributes, he will break
  other people's code.

 You still don't get the point. If someone's code breaks because he
 messed with my implementation code, then *he* is responsible. The
 contract is very clear : warranty void if unsealed.



  In principle it could break just as much code as if
  he didn't even bother flagging them with a leading underscore, which is
  probably why many people don't even bother with _names.

  In other words, if you make it easy for people to mess with your
  internals, if you have a culture that allows and even encourages them to
  mess with your internals, then you don't have internals. Everything is de
  facto public.

 Now that you've exposed your opinions, let's face reality (I mean,
 *facts*): Python developpers very rarely mess with implementation,
 usually do so for very good (and documented) reasons, and from what I've
 seen usually tend to get in touch with the library author to explain
 their case and find a better solution.

 Funny enough, it looks that the more you treat programmers as
 responsible, normally intelligent adult person, the more they tend to
 behave as such. And the other way around, too.

 Now, you comprehensively exposed your personnal distaste for Python's
 and more generally OSS philosophy. So I can only - as I already did way
 before in this thread - wonder *why* are you using Python ?

 I mean, is it because your bosses forces you to do so ? If yes, then,
 I'm truly sorry for you - I sometimes have to work with languages I
 really dislike so I can feel your pain (but OTHO, I never complained on
 these languages newsgroups about how wrong they were nor how they should
 IMHO be).

 Else, well, I just don't get 

Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 22, 9:22 pm, Russ P. russ.paie...@gmail.com wrote:

 code. You can play around with the internals all you want in your own
 little world, but as when you are working with a team, you need to
 adhere to the interfaces they define (if any).

The word as should not be there:

... but when you are working with a team, ...

Sorry, but that was bothering me. I sure wish these posts could be
edited after they are submitted.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 23, 4:30 am, Mark Wooding m...@distorted.org.uk wrote:

 Suppose that you write a Python library module and release it.  I find
 that it's /almost/ the right thing for some program of mine, but it
 doesn't quite work properly unless I hack about like so... perfect!  I'm
 a happy bunny; you've gained a user (maybe that's a good thing, maybe it
 isn't!).  Now, I've hacked about in your module's internal stuff: how
 has this affected you?  Answer: not at all; you probably didn't feel a
 thing.  You release a new version with improved internal structure and
 my program breaks: how has this affected you?  Answer: still not at all.
 How did it affect me?  Quite a bit, but then again, I knew what I was
 getting into.  I gambled and lost; oh, well, that happens sometimes.

Was this library module released in source form?

If so, then why would you care that it has enforced access
restrictions? You can just take them out, then do whatever you would
have done had they not been there to start with. I don't see how that
is any more work than figuring out what internals you need to access.
Either way you need to read and understand the code.

Wait ... it wasn't released in source form? Then how would you even
know what internals you need to access? And why would you use
something that goes against your philosophy of openness anyway?
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 23, 4:57 am, Bruno Desthuilliers bruno.
42.desthuilli...@websiteburo.invalid wrote:
 Russ P. a écrit :

  As I said before, if you have the source code you can always change
  private attributes to public in a pinch if the language enforces
  encapsulation.

 And then have to maintain a fork. No, thanks.

For crying out loud, how many private attributes do you need to
access? If it's a dozen, then you and your library developer are
obviously not on the same page. If it's one or two, then it's hardly a
fork. Just take note of the one or two places where you needed to
remove the access restriction and you're done. Heck, you don't even
need to do that, because you will be warned automatically anyway when
you get the new version of the library (unless those private
attributes are changed to public).

  But if you are working on a team project, you can't
  change the code that another member of a team checks in.

 Why on earth couldn't I change the code of another member of my team if
 that code needs changes ? The code is the whole team's ownership.

OK, fine, you can change the code of another member of the team. Are
you going to check with him first, or just do it? The point is that
changing an interface requires agreement of the team members who use
that interface, whether on the calling or the implementation side of
it. If you change interfaces without getting agreement with the other
team members, you probably won't be on the team for long. And without
access restrictions, accessing _private is equivalent to changing the
interface.

 Now and FWIW,  in this case (our own code), I just don't need to mess
 with internals - I just just change what needs to be changed.

  That is how
  enforced data hiding helps teams of developers manage interfaces.

 I totally fails to find any evidence of this assertion in the above
 demonstration.

  The
  bigger the team and the bigger the project, the more it helps.

 Your opinion.

  Mr. D'Aprano gave an excellent example of a large banking program.
  Without enforced encapsulation, anyone on the development team has
  access to the entire program and could potentially sneak in fraudulent
  code much more easily than if encapsulation were enforced by the
  language.

 My my my. If you don't trust your programmers, then indeed, don't use
 Python. What can I say (and what do I care ?). But once again, relying
 on the language's access restriction to manage *security* is, well, kind
 of funny, you know ?

Are you seriously saying that if you were managing the production of a
major financial software package with hundreds of developers, you
would just trust them all to have free access to the most sensitive
and critical parts of the program? Now *that's*, well, kind of funny,
you know?

Would you give all those developers your password to get into the
system? No? Wait a minute ... you mean you wouldn't trust them with
your password? But what about openness? Are you some sort of fascist
or what?
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 23, 6:21 am, Steve Holden st...@holdenweb.com wrote:

 I have to say that I thought the example was somewhat bogus. Any
 development team that is even slightly concerned about the possibility
 of logic bombs in the code will try to mitigate that possibility by the
 use of code inspections.

Of course they would, but that does not mean that access restrictions
enforced by the language are not prudent. Consider a corporation that
needs to maintain the physical security of their buildings. You can
say that locks on the doors are not sufficient. Of course they're not.
Security guards are needed too -- but that doesn't mean the locks  are
not needed too. The locks may be *insufficient* by themselves, but
they are certainly not *unnecessary*. Ditto for the enforced
encapsulation for large financial or safety-critical projects.

 I'm not sure that there's much to be gained by this level of dogmatism
 on either side. Enforced encapsulation has been implemented in both
 C++ and Java, and both have proved to be circumventable. Just the same,
 talk of clueless pointy-haired bosses is unlikely to be convincing.
 Even the pointy-haired types never recognize themselves as such.

Do you think the designers of C++, Java, Ada, and Scala would
eliminate the enforced encapsulation if they had it to do over again?
Of course not. The vast majority of the users of those languages
consider it a major plus. And those who don't wish to use it aren't
forced to use it except perhaps by their bosses or their customers.

Again, I am not saying that Python necessarily needs enforced access
restriction. I'm just saying it would be a plus if it can be added
without compromising the language in some way.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Does Python really follow its philosophy of Readability counts?

2009-01-23 Thread Russ P.
On Jan 23, 6:36 pm, Luis Zarrabeitia ky...@uh.cu wrote:

  Makes *no* sense? There's *no* good reason *at all* for the original
  author to hide or protect internals?

 My bad, sorry.
 It makes sense... if the original author is an egotist who believes he must
 control how I use that library.

If the original author provides you with the source code and the right
to modify it, he cannot possibly control how you use the library. You
can trivially disable any access controls. But for some reason that's
not enough for you.

Has it occurred to you that some users might actually *want* access
controls? Maybe some users want to actually use the library as the
author intended it to be used. What a bizarre concept!

Oh, but only a paranoid fool could possibly want access controls, eh?
Who's the egotist here?
--
http://mail.python.org/mailman/listinfo/python-list


Re: I'm a python addict !

2009-01-23 Thread Russ P.
On Jan 23, 6:58 pm, Linuxguy123 linuxguy...@gmail.com wrote:

 I will never write another Perl or Bash script again.

I still use bash for orchestrating the execution of a series of other
scripts and/or programs (including python programs). I know you can do
that in python, but I find bash simpler to use for that purpose. Then
again, that may be just because I learned bash before I learned python.
--
http://mail.python.org/mailman/listinfo/python-list


  1   2   3   4   5   >