A critic of Guido's blog on Python's lambda

176 views
Skip to first unread message

Xah Lee

unread,
May 5, 2006, 8:26:26 PM5/5/06
to
Python, Lambda, and Guido van Rossum

Xah Lee, 2006-05-05

In this post, i'd like to deconstruct one of Guido's recent blog about
lambda in Python.

In Guido's blog written in 2006-02-10 at
http://www.artima.com/weblogs/viewpost.jsp?thread=147358

is first of all, the title “Language Design Is Not Just Solving
Puzzles”. In the outset, and in between the lines, we are told that
“I'm the supreme intellect, and I created Python”.

This seems impressive, except that the tech geekers due to their
ignorance of sociology as well as lack of analytic abilities of the
mathematician, do not know that creating a language is a act that
requires little qualifications. However, creating a language that is
used by a lot people takes considerable skill, and a big part of that
skill is salesmanship. Guido seems to have done it well and seems to
continue selling it well, where, he can put up a title of belittlement
and get away with it too.

Gaudy title aside, let's look at the content of his say. If you peruse
the 700 words, you'll find that it amounts to that Guido does not like
the suggested lambda fix due to its multi-line nature, and says that he
don't think there could possibly be any proposal he'll like. The
reason? Not much! Zen is bantered about, mathematician's impractical
ways is waved, undefinable qualities are given, human's right brain is
mentioned for support (neuroscience!), Rube Goldberg contrivance
phraseology is thrown, and coolness of Google Inc is reminded for the
tech geekers (in juxtaposition of a big notice that Guido works
there.).

If you are serious, doesn't this writing sounds bigger than its
content? Look at the gorgeous ending: “This is also the reason why
Python will never have continuations, and even why I'm uninterested in
optimizing tail recursion. But that's for another installment.”. This
benevolent geeker is gonna give us another INSTALLMENT!

There is a computer language leader by the name of Larry Wall, who said
that “The three chief virtues of a programmer are: Laziness,
Impatience and Hubris” among quite a lot of other ingenious
outpourings. It seems to me, the more i learn about Python and its
leader, the more similarities i see.

So Guido, i understand that selling oneself is a inherent and necessary
part of being a human animal. But i think the lesser beings should be
educated enough to know that fact. So that when minions follow a
leader, they have a clear understanding of why and what.

----

Regarding the lambda in Python situation... conceivably you are right
that Python lambda is perhaps at best left as it is crippled, or even
eliminated. However, this is what i want: I want Python literatures,
and also in Wikipedia, to cease and desist stating that Python supports
functional programing. (this is not necessarily a bad publicity) And, I
want the Perl literatures to cease and desist saying they support OOP.
But that's for another installment.

----
This post is archived at:
http://xahlee.org/UnixResource_dir/writ/python_lambda_guido.html

    Xah
    x...@xahlee.org
http://xahlee.org/

Ken Tilton

unread,
May 5, 2006, 9:16:50 PM5/5/06
to

I think this is what you missed in your deconstruction. The upshot of
what he wrote is that it would be really hard to make semantically
meaningful indentation work with lambda. Guido did not mean it, but the
Rube Goldberg slam is actually against indentation as syntax. "Yes,
print statements in a while loop would be helpful, but..." it would be
so hard, let's go shopping. ie, GvR and Python have hit a ceiling.

That's OK, it was never meant to be anything more than a scripting
language anyway.

But the key in the whole thread is simply that indentation will not
scale. Nor will Python.

> and coolness of Google Inc is reminded for the
> tech geekers (in juxtaposition of a big notice that Guido works
> there.).
>
> If you are serious, doesn't this writing sounds bigger than its
> content? Look at the gorgeous ending: “This is also the reason why
> Python will never have continuations, and even why I'm uninterested in
> optimizing tail recursion. But that's for another installment.”. This
> benevolent geeker is gonna give us another INSTALLMENT!
>
> There is a computer language leader by the name of Larry Wall, who said
> that “The three chief virtues of a programmer are: Laziness,
> Impatience and Hubris” among quite a lot of other ingenious
> outpourings. It seems to me, the more i learn about Python and its
> leader, the more similarities i see.
>
> So Guido, i understand that selling oneself is a inherent and necessary
> part of being a human animal. But i think the lesser beings should be
> educated enough to know that fact. So that when minions follow a
> leader, they have a clear understanding of why and what.

Oh, my, you are preaching to the herd (?!) of lemmings?! Please tell me
you are aware that lemmings do not have ears. You should just do Lisp
all day and add to the open source libraries to speed Lisp's ascendance.
The lemmings will be liberated the day Wired puts John McCarthy on the
cover, and not a day sooner anyway.

kenny (wondering what to call a flock (?!) of lemmings)

--
Cells: http://common-lisp.net/project/cells/

"Have you ever been in a relationship?"
Attorney for Mary Winkler, confessed killer of her
minister husband, when asked if the couple had
marital problems.

Alex Martelli

unread,
May 5, 2006, 9:53:53 PM5/5/06
to
Ken Tilton <kent...@gmail.com> wrote:
...

> But the key in the whole thread is simply that indentation will not
> scale. Nor will Python.

Absolutely. That's why firms who are interested in building *seriously*
large scale systems, like my employer (and supplier of your free mail
account), would never, EVER use Python, nor employ in prominent
positions such people as the language's inventor and BDFL, the author of
the most used checking tool for it, and the author of the best-selling
reference book about that language; and, for that matter, a Director of
Search Quality who, while personally a world-renowned expert of AI and
LISP, is on record as supporting Python very strongly, and publically
stating its importance to said employer.

Obviously will not scale. Never.

Well... hardly ever!


Alex

I V

unread,
May 5, 2006, 9:59:39 PM5/5/06
to
On Fri, 05 May 2006 17:26:26 -0700, Xah Lee wrote:
> Regarding the lambda in Python situation... conceivably you are right
> that Python lambda is perhaps at best left as it is crippled, or even
> eliminated. However, this is what i want: I want Python literatures,
> and also in Wikipedia, to cease and desist stating that Python supports
> functional programing. (this is not necessarily a bad publicity) And, I

What does lambda have to do with supporting or not supporting functional
programming?

David Hopwood

unread,
May 5, 2006, 10:28:12 PM5/5/06
to
Ken Tilton wrote:
> [...] The upshot of what [Guido] wrote is that it would be really hard to make

> semantically meaningful indentation work with lambda.

Haskell manages it.

--
David Hopwood <david.nosp...@blueyonder.co.uk>

Ken Tilton

unread,
May 5, 2006, 10:44:59 PM5/5/06
to

You are talking about being incredibly popular. I was talking about
language expressivity. COBOL in its day was incredibly popular and
certainly the language of choice (hell, the only language) for the
biggest corporations you can imagine. But it did not scale as a
language. I hope there are no doubts on that score (and I actually am a
huge fan of COBOL).

The problem for Python is its success. meant to be a KISS scripting
language, it has caught on so well that people are asking it to be a
full-blown, OO, GC, reflexive, yada, yada, yada language. Tough to do
when all you wanted to be when you grew up was a scripting language.

kenny (who is old enough to have seen many a language come and go)

Ken Tilton

unread,
May 5, 2006, 10:50:53 PM5/5/06
to

David Hopwood wrote:
> Ken Tilton wrote:
>
>>[...] The upshot of what [Guido] wrote is that it would be really hard to make
>>semantically meaningful indentation work with lambda.
>
>
> Haskell manages it.
>

To be honest, I was having a hard time imagining precisely how
indentation broke down because of lambda. does text just sail out to the
right too fast?

kenny

Steve R. Hastings

unread,
May 5, 2006, 11:56:03 PM5/5/06
to
On Fri, 05 May 2006 21:16:50 -0400, Ken Tilton wrote:
> The upshot of
> what he wrote is that it would be really hard to make semantically
> meaningful indentation work with lambda.

Pretty much correct. The complete thought was that it would be painful
all out of proportion to the benefit.

See, you don't need multi-line lambda, because you can do this:


def make_adder(x):
def adder_func(y):
sum = x + y
return sum
return adder_func

add5 = make_adder(5)
add7 = make_adder(7)

print add5(1) # prints 6
print add5(10) # prints 15
print add7(1) # prints 8


Note that make_adder() doesn't use lambda, and yet it makes a custom
function with more than one line. Indented, even.

You could also do this:


lst = [] # create empty list
def f(x):
return x + 5
lst.append(f)
del(f) # now that the function ref is in the list, clean up temp name

print lst[0](1) # prints 6


Is this as convenient as the lambda case?

lst.append(lambda x: x + 7)
print lst[1](1) # prints 8


No; lambda is a bit more convenient. But this doesn't seem like a very
big issue worth a flame war. If GvR says multi-line lambda would make
the lexer more complicated and he doesn't think it's worth all the effort,
I don't see any need to argue about it.

> But the key in the whole thread is simply that indentation will not
> scale. Nor will Python.

This is a curious statement, given that Python is famous for scaling well.

I won't say more, since Alex Martelli already pointed out that Google is
doing big things with Python and it seems to scale well for them.
--
Steve R. Hastings "Vita est"
st...@hastings.org http://www.blarg.net/~steveha

Rhino

unread,
May 5, 2006, 11:49:23 PM5/5/06
to

"I V" <wron...@gmail.com> wrote in message
news:pan.2006.05.06...@gmail.com...

What does any of this have to do with Java?

--
Rhino


Ken Tilton

unread,
May 6, 2006, 1:30:04 AM5/6/06
to

<g> Hopefully it can be a big issue and still not justify a flame war.

Mileages will always vary, but one reason for lambda is precisely not to
have to stop, go make a new function for this one very specific use,
come back and use it as the one lambda statement, or in C have an
address to pass. but, hey, what are editors for? :)

the bigger issue is the ability of a lambda to close over arbitrary
lexically visible variables. this is something the separate function
cannot see, so one has to have a function parameter for everything.

but is such lexical scoping even on the table when Ptyhon's lambda comes
up for periodic review?

> If GvR says multi-line lambda would make
> the lexer more complicated and he doesn't think it's worth all the effort,
> I don't see any need to argue about it.

Oh, no, this is just front porch rocking chair BS. But as an enthuiastic
developer I am sensitive to how design choices express themselves in
ways unanticipated. Did the neat idea of indentation-sensitivity doom
pythonistas to a life without the sour grapes of lambda?

If so, Xah's critique missed that issue and was unfair to GvR in
ascribing his resistance to multi-statement lamda to mere BDFLism.

kenny

John Bokma

unread,
May 6, 2006, 1:42:03 AM5/6/06
to
Reported for excessive crossposting.

--
John Bokma Freelance software developer
&
Experienced Perl programmer: http://castleamber.com/

John Bokma

unread,
May 6, 2006, 1:44:47 AM5/6/06
to
"Rhino" <no.offline.c...@nospam.com> wrote:

> What does any of this have to do with Java?

Xah Lee is well known for abusing Usenet for quite some time, report
his posts as excessive crossposts to:

abuse at bcglobal dot net
abuse at dreamhost dot com

IIRC this is his third ISP account in 2 weeks, so it *does* work.

Moreover, his current hosting provider, dreamhost, might drop him soon.

Glyn Millington

unread,
May 6, 2006, 1:10:43 AM5/6/06
to
Ken Tilton <kent...@gmail.com> writes:

> kenny (wondering what to call a flock (?!) of lemmings)

Couldn't find it here:-

http://ojohaven.com/collectives/

So I would propose a "leap" of lemmings :-)


WAY OT! Sorry.

atb

Glyn

Alex Martelli

unread,
May 6, 2006, 3:13:49 AM5/6/06
to
Ken Tilton <kent...@gmail.com> wrote:
...
> > Absolutely. That's why firms who are interested in building *seriously*
> > large scale systems, like my employer (and supplier of your free mail
...

> > Obviously will not scale. Never.
> >
> > Well... hardly ever!
>
> You are talking about being incredibly popular. I was talking about

Who, me? I'm talking about the deliberate, eyes-wide-open choice by
*ONE* firm -- one which happens to more or less *redefine* what "large
scale" computation *means*, along many axes. That's got nothing to do
with Python being "incredibly popular": it has everything to do with
scalability -- the choice was made in the late '90s (and, incidentally,
by people quite familiar with lisp... no less than the reddit.com guys,
you know, the ones who recently chose to rewrite their side from Lisp to
Python...?), based on scalability issues, definitely not "popularity"
(Python in the late '90s was a very obscure, little-known language).

> kenny (who is old enough to have seen many a language come and go)

See your "many a language" and raise you one penny -- besides sundry
Basic dialects, machine languages, and microcode[s], I started out with
Fortran IV and APL, and I have professionally programmed in Pascal (many
dialects), Rexx, Forth, PL/I, Cobol, Lisp before there was a "Common"
one, Prolog, Scheme, Icon, Tcl, Awk, EDL, and several proprietary 3rd
and 4th generation languages -- as well of course as C and its
descendants such as C++ and Java, and Perl. Many other languages I've
studied and played with, I've never programmed _professionally_ (i.e.,
been paid for programs in those languages), but I've written enough
"toy" programs to get some feeling for (Ruby, SML, O'CAML, Haskell,
Snobol, FP/1, Applescript, C#, Javascript, Erlang, Mozart, ...).

Out of all languages I know, I've deliberately chosen to specialize in
Python, *because it scales better* (yes, functional programming is
_conceptually_ perfect, but one can never find sufficiently large teams
of people with the right highly-abstract mathematical mindset and at the
same time with sufficiently down-to-earth pragmaticity -- so, for _real
world_ uses, Python scales better). When I was unable to convince top
management, at the firm at which I was the top programmer, that the firm
should move to Python (beyond the pilot projects which I led and gave
such stellar results), I quit, and for years I made a great living as a
freelance consultant (mostly in Python -- once in a while, a touch of
Pyrex, C or C++ as a vigorish;-).

That's how come I ended up working at the firm supplying your free mail
(as Uber Tech Lead) -- they reached across an ocean to lure me to move
from my native Italy to California, and my proven excellence in Python
was their prime motive. The terms of their offer were just too
incredible to pass by... so, I rapidly got my O1 visa ("alien of
exceptional skills"), and here I am, happily ubertechleading... and
enjoying Python and its incredibly good scalability every single day!


Alex

Alex Martelli

unread,
May 6, 2006, 3:21:03 AM5/6/06
to
Steve R. Hastings <st...@hastings.org> wrote:
...

> > But the key in the whole thread is simply that indentation will not
> > scale. Nor will Python.
>
> This is a curious statement, given that Python is famous for scaling well.

I think "ridiculous" is a better characterization than "curious", even
if you're seriously into understatement.


> I won't say more, since Alex Martelli already pointed out that Google is
> doing big things with Python and it seems to scale well for them.

And of course we're not the only ones. In fact, I believe that we're
not even among the firms which have reported their experiences in the
official "Python Success Stories" -- IBM, Industrial Light and Magic,
NASA, etc, etc, are there, but we arent. I guess we just prefer to play
our cards closer to our chest -- after all, if our competitors choose to
use inferior languages, it's hardly to our advantage to change that;-).


Alex

Kay Schluehr

unread,
May 6, 2006, 3:26:19 AM5/6/06
to
Ken Tilton wrote:

> Oh, my, you are preaching to the herd (?!) of lemmings?! Please tell me
> you are aware that lemmings do not have ears. You should just do Lisp
> all day and add to the open source libraries to speed Lisp's ascendance.
> The lemmings will be liberated the day Wired puts John McCarthy on the
> cover, and not a day sooner anyway.

And then the 12th vanished Lisper returns and Lispers are not
suppressed anymore and won't be loosers forever. The world will be
united in the name of Lisp and Lispers will be leaders and honorables.
People stop worrying about Lispers as psychpaths and do not consider
them as zealots, equipped with the character of suicide bombers. No,
Lisp means peace and paradise.

Bill Atkins

unread,
May 6, 2006, 4:14:28 AM5/6/06
to
"Kay Schluehr" <kay.sc...@gmx.net> writes:

> And then the 12th vanished Lisper returns and Lispers are not
> suppressed anymore and won't be loosers forever. The world will be

The mark of a true loser is the inability to spell 'loser.' Zing!

> them as zealots, equipped with the character of suicide bombers. No,

A very reasonable comparison. Yes, the more I think about it, we Lisp
programmers are a lot like suicide bombers.

Doofus.

--
This is a song that took me ten years to live and two years to write.
- Bob Dylan

Thomas F. Burdick

unread,
May 6, 2006, 4:22:41 AM5/6/06
to
Ken Tilton <kent...@gmail.com> writes:

> <g> Hopefully it can be a big issue and still not justify a flame war.
>
> Mileages will always vary, but one reason for lambda is precisely not
> to have to stop, go make a new function for this one very specific
> use, come back and use it as the one lambda statement, or in C have an
> address to pass. but, hey, what are editors for? :)
>
> the bigger issue is the ability of a lambda to close over arbitrary
> lexically visible variables. this is something the separate function
> cannot see, so one has to have a function parameter for everything.
>
> but is such lexical scoping even on the table when Ptyhon's lambda
> comes up for periodic review?

This is second-hand, as I don't actually follow Python closely, but
from what I've heard, they now have reasonable scoping rules (or maybe
they're about to, I'm not sure). And you can use def as a
Scheme-style inner define, so it's essentially a LABELS that gets the
indentation wrong. This means they have proper closures, just not
anonymous ones. And an egregiously misnamed lambda that should be
fixed or thrown out.

If Python gets proper macros it won't matter one bit that they only
have named closures, since you can macro that away in a blink of an
eye.

Bill Atkins

unread,
May 6, 2006, 4:22:02 AM5/6/06
to
ale...@yahoo.com (Alex Martelli) writes:

How do you define scalability?

Kay Schluehr

unread,
May 6, 2006, 5:12:49 AM5/6/06
to
Bill Atkins wrote:
> "Kay Schluehr" <kay.sc...@gmx.net> writes:
>
> > And then the 12th vanished Lisper returns and Lispers are not
> > suppressed anymore and won't be loosers forever. The world will be
>
> The mark of a true loser is the inability to spell 'loser.' Zing!

There is not much lost.

> > them as zealots, equipped with the character of suicide bombers. No,
>
> A very reasonable comparison. Yes, the more I think about it, we Lisp
> programmers are a lot like suicide bombers.

Allah Inschallah

Martin P. Hellwig

unread,
May 6, 2006, 6:24:03 AM5/6/06
to
Bill Atkins wrote:
<cut>

>
> How do you define scalability?
>
http://www.google.com/search?hl=en&q=define%3Ascalability&btnG=Google+Search

;-)

--
mph

Bill Atkins

unread,
May 6, 2006, 6:42:21 AM5/6/06
to

OK, my real question is: what features of Python make it "scalable"?

Tomasz Zielonka

unread,
May 6, 2006, 7:04:56 AM5/6/06
to
Bill Atkins wrote:
> OK, my real question is: what features of Python make it "scalable"?

Let me guess: Python makes it easier to scale the application on
the "features" axis, and the approach to large-scale computation
taken by google makes Python's poor raw performance not so big
an issue, so it doesn't prevent the application from scaling
on the "load" and "amount of data" axes. I also guess that python
is often used to control simple, fast C/C++ programs, or even
to generate such programs.

Best regards
Tomasz

Martin P. Hellwig

unread,
May 6, 2006, 7:27:02 AM5/6/06
to
Bill Atkins wrote:
> "Martin P. Hellwig" <mhel...@xs4all.nl> writes:
>
>> Bill Atkins wrote:
>> <cut>
>>> How do you define scalability?
>>>
>> http://www.google.com/search?hl=en&q=define%3Ascalability&btnG=Google+Search
>>
>> ;-)
>>
>> --
>> mph
>
> OK, my real question is: what features of Python make it "scalable"?
>
Well I'm no expert, but I guess the ease of creating network services
and clients make it quite scalable. For example, I'm creating a
xmlrpcserver that returns a randomized cardlist, but I because of
fail-over I needed some form of scalability , my solution was to first
randomize the deck then marshal it and dump the file on a ZFS partition,
giving back the client a ticket number, the client can then connect with
the ticket number to receive the cardlist (read the file - unmarshal it).

While this is overkill for 1 server, I needed multiple because of
fail-over and load-balancing, in this case I have 3 'crypto' boxes (with
hardware crypto engines using OpenBSD) doing only the randomizing and 4
solaris machines doing the zfs and distribution of the list.

By using xmlrpc and DNS round-robin, I can just add boxes and it scales
without any problem, The ZFS boxes are the front-end listening to the
name 'shuffle' and are connecting to a private network to my crypto
boxes listening to the name 'crypto'.

So as long as I make DNS aliases (I have a little script that hearbeats
the boxes and when not responding within 10 seconds removes it alias)
and install the right scripts on the box I can scale till I'm round the
earth. Of course when the machine amount gets over a certain degree I
have to add some management functionality.

Now I don't say that I handle this situation well and that its the right
solution, but it worked for me and it was easy and fun to do with
python, but I guess that any language in this sence should be 'scalable'
and perhaps other languages have even better built-in networking
libraries but I'm not a professional programmer and until I learn other
languages (and are comfortable enough to use it) I'll keep on using
python for my projects.

For me python is easy, scalable, fun and by this the 'best' but that is
personal and I simply don't know whether my opinion will change in the
future or not.

--
mph

Xah Lee

unread,
May 6, 2006, 9:15:26 AM5/6/06
to

Ken Tilton wrote:

> kenny (wondering what to call a flock (?!) of lemmings)

Rabble. A rabble of lemmings.

Xah
x...@xahlee.org
http://xahlee.org/

Paddy

unread,
May 6, 2006, 9:27:39 AM5/6/06
to
Also addressing the Python and scaling question is the
kamaelia.sourceforge.net project whos objective is to solve the
problems of putting the BBCs vast archives on the web, and who use
Python.
-- Pad.

Paul Rubin

unread,
May 6, 2006, 10:36:49 AM5/6/06
to
"Martin P. Hellwig" <mhel...@xs4all.nl> writes:
> and clients make it quite scalable. For example, I'm creating a
> xmlrpcserver that returns a randomized cardlist, but I because of
> fail-over I needed some form of scalability , my solution was to first
> randomize the deck then marshal it and dump the file on a ZFS
> partition, giving back the client a ticket number, the client can then
> connect with the ticket number to receive the cardlist (read the file
> - unmarshal it).

This is a weird approach. Why not let the "ticket" by the (maybe
encrypted) PRNG seed that generates the permutation?

> While this is overkill for 1 server, I needed multiple because of
> fail-over and load-balancing, in this case I have 3 'crypto' boxes
> (with hardware crypto engines using OpenBSD) doing only the
> randomizing and 4 solaris machines doing the zfs and distribution of
> the list.

I don't know what good that hardware crypto is doing you, if you're
then writing out the shuffled deck to disk in the clear.

Paul Rubin

unread,
May 6, 2006, 10:52:51 AM5/6/06
to
Paul Rubin <http://phr...@NOSPAM.invalid> writes:
> I don't know what good that hardware crypto is doing you, if you're
> then writing out the shuffled deck to disk in the clear.

Ehhh, I guess you want the crypto hardware to generate physical
randomness for each shuffle. I'm skeptical of the value of this since
a cryptographic PRNG seeded with good entropy is supposed to be
computationally indistinguishable from physical randomness, and if
it's not, we're all in big trouble; further, that hardware engine is
almost certainly doing some cryptographic whitening, which is a
problem if you don't think that cryptography works.

Anyway, if it's just a 52-card deck you're shuffling, there's only
about 226 bits of entropy per shuffle, or 52*6 = 312 bits if you write
out the permutation straightforwardly as a vector. You could use that
as the ticket but if you're generating it that way you may need to
save the shuffle for later auditing.

For practical security purposes I'd be happier generating the shuffles
entirely inside the crypto module (HSM) by cryptographic means, with
the "ticket" just being a label for a shuffle. E.g. let

K1, K2 = secret keys

T(n) = ticket #n = AES(K1, n) to prevent clients from guessing
ticket numbers

shuffle(n) = HMAC-SHA-384(K2, n) truncated to 312 bits, treated as
permutation on 52 cards

You could put some of the card dealing logic into the HSM to get the
cards dealt out only as the game as played, to decrease the likelihood
of any cards getting exposed prematurely.

Martin P. Hellwig

unread,
May 6, 2006, 10:55:23 AM5/6/06
to
Paul Rubin wrote:
> "Martin P. Hellwig" <mhel...@xs4all.nl> writes:
>> and clients make it quite scalable. For example, I'm creating a
>> xmlrpcserver that returns a randomized cardlist, but I because of
>> fail-over I needed some form of scalability , my solution was to first
>> randomize the deck then marshal it and dump the file on a ZFS
>> partition, giving back the client a ticket number, the client can then
>> connect with the ticket number to receive the cardlist (read the file
>> - unmarshal it).
>
> This is a weird approach. Why not let the "ticket" by the (maybe
> encrypted) PRNG seed that generates the permutation?

Because the server that handles the generate request doesn't need to be
the same as the one that handles the request to give the client that
deck. Even more, the server that handles the request calls the crypto
servers to actually do the shuffling. So when the server fails before it
has given the client the ticket, it could be possible that a deck is
already created but not used, no biggie there.
But if the ticket is given to the client, than any other server can
serve back that ticket to give the shuffled deck, unless the ZFS dies of
course but then again thats why I use ZFS so I can mirror them om 4
different machines in 2 different locations.


>
>> While this is overkill for 1 server, I needed multiple because of
>> fail-over and load-balancing, in this case I have 3 'crypto' boxes
>> (with hardware crypto engines using OpenBSD) doing only the
>> randomizing and 4 solaris machines doing the zfs and distribution of
>> the list.
>
> I don't know what good that hardware crypto is doing you, if you're
> then writing out the shuffled deck to disk in the clear.

It's not about access security it's more about the best possible
randomness to shuffle the deck.

--
mph

Ken Tilton

unread,
May 6, 2006, 10:56:28 AM5/6/06
to

Thomas F. Burdick wrote:
> Ken Tilton <kent...@gmail.com> writes:
>
>
>><g> Hopefully it can be a big issue and still not justify a flame war.
>>
>>Mileages will always vary, but one reason for lambda is precisely not
>>to have to stop, go make a new function for this one very specific
>>use, come back and use it as the one lambda statement, or in C have an
>>address to pass. but, hey, what are editors for? :)
>>
>>the bigger issue is the ability of a lambda to close over arbitrary
>>lexically visible variables. this is something the separate function
>>cannot see, so one has to have a function parameter for everything.
>>
>>but is such lexical scoping even on the table when Ptyhon's lambda
>>comes up for periodic review?
>
>
> This is second-hand, as I don't actually follow Python closely, but
> from what I've heard, they now have reasonable scoping rules (or maybe
> they're about to, I'm not sure). And you can use def as a
> Scheme-style inner define, so it's essentially a LABELS that gets the
> indentation wrong.

Cool. And I know how much you like labels/flet. :)

> This means they have proper closures, just not
> anonymous ones. And an egregiously misnamed lambda that should be
> fixed or thrown out.
>
> If Python gets proper macros it won't matter one bit that they only
> have named closures, since you can macro that away in a blink of an
> eye.

Ah, well, there we go again. Without sexpr notation, the lexer/parser
again will be "hard", and "hardly worth it": we get even more sour
grapes, this time about macros not being such a big deal.

One of the hardest things for a technologist to do is admit that a neat
idea has to be abandoned. Initial success creates a giddy
over-commitment to the design choice. After then all difficulties get
brushed aside or kludged.

This would not be a problem for Python if it had stayed a scripting
language... well, maybe "no Macro!s" and "no real lambda!" and "no
continuations!" are GvR's way of keeping Python just a scripting language.

:)

Ken Tilton

unread,
May 6, 2006, 11:04:15 AM5/6/06
to

Damn! Google can do that?! Omigod!!! Not joking, I never knew that,a
lways used dictionary.com. Thx! I meant:

> The ability to add power and capability to an existing system without significant expense or overhead.
> www.yipes.com/care/cc_glossary.shtml

The number of definitions explains why most respondents should save
their breath. Natural language is naturally ambiguous. Meanwhile Usenet
is the perfect place to grab one meaning out of a dozen and argue over
the implications of that one meaning which of course is never the one
originally intended, as any reasonable, good faith reader would admit.

kenny

Ken Tilton

unread,
May 6, 2006, 11:09:18 AM5/6/06
to

"The Twelfth Vanished Lisper"? I love it. Must start a secret society....

:)

Paul Rubin

unread,
May 6, 2006, 1:41:00 PM5/6/06
to
"Martin P. Hellwig" <mhel...@xs4all.nl> writes:
> > This is a weird approach. Why not let the "ticket" by the (maybe
> > encrypted) PRNG seed that generates the permutation?
>
> Because the server that handles the generate request doesn't need to
> be the same as the one that handles the request to give the client
> that deck.

Wait a sec, are you giving the entire shuffled deck to the client?
Can you describe the application? I was imagining an online card game
where clients are playing against each other. Letting any client see
the full shuffle is disastrous.

> But if the ticket is given to the client, than any other server can
> serve back that ticket to give the shuffled deck, unless the ZFS dies
> of course but then again thats why I use ZFS so I can mirror them om 4
> different machines in 2 different locations.

> > I don't know what good that hardware crypto is doing you, if you're


> > then writing out the shuffled deck to disk in the clear.
>
> It's not about access security it's more about the best possible
> randomness to shuffle the deck.

Depending on just what the server is for, access security may be a far
more important issue. If I'm playing cards online with someone, I'd
be WAY more concerned about the idea of my opponent being able to see
my cards by breaking into the server, than his being able to
cryptanalyze a well-designed PRNG based solely on its previous
outputs.

Martin P. Hellwig

unread,
May 6, 2006, 2:18:17 PM5/6/06
to
Paul Rubin wrote:
> "Martin P. Hellwig" <mhel...@xs4all.nl> writes:
>>> This is a weird approach. Why not let the "ticket" by the (maybe
>>> encrypted) PRNG seed that generates the permutation?
>> Because the server that handles the generate request doesn't need to
>> be the same as the one that handles the request to give the client
>> that deck.
>
> Wait a sec, are you giving the entire shuffled deck to the client?
> Can you describe the application? I was imagining an online card game
> where clients are playing against each other. Letting any client see
> the full shuffle is disastrous.

Nope I have a front end service that does the client bit, its about this
(in this context, there are more services of course):

crypto - ZFS - table servers - mirror dispatching - client xmlrpc access
- client ( last one has not been written yet )

<cut>


>
> Depending on just what the server is for, access security may be a far
> more important issue. If I'm playing cards online with someone, I'd
> be WAY more concerned about the idea of my opponent being able to see
> my cards by breaking into the server, than his being able to
> cryptanalyze a well-designed PRNG based solely on its previous
> outputs.

Only client xmlrpc access is (should be) accessible from the outside and
since this server is user session based they only see their own card.
However this project is still in it's early development, I'm doing now
initial alpha-tests (and stress testing) and after this I'm going to let
some audit bureau's check for security (probably Madison-Ghurka, but I
haven't asked them yet).

--
mph

Thomas F. Burdick

unread,
May 6, 2006, 3:02:26 PM5/6/06
to
[ I pruned the cross-posting down to a reasonable level ]

Ken Tilton <kent...@gmail.com> writes:

> Thomas F. Burdick wrote:
>
> > This is second-hand, as I don't actually follow Python closely, but
> > from what I've heard, they now have reasonable scoping rules (or maybe
> > they're about to, I'm not sure). And you can use def as a
> > Scheme-style inner define, so it's essentially a LABELS that gets the
> > indentation wrong.
>
> Cool. And I know how much you like labels/flet. :)

Well, I love LABELS but I hate inner defines with an equal passion --
so for me it's a wash :-)

As much as I like nice low-level, close-to-the-machine mechanisms as
labels and lambda, sometimes you just want the high-level
expressiveness of tagbody/go, which Python doesn't have ... which in
my opinion is quite a crime to readability and the ability to
transcribe Knuth algorithms, which any engineer should find offensive
to their sensibilities.

> > This means they have proper closures, just not
> > anonymous ones. And an egregiously misnamed lambda that should be
> > fixed or thrown out.
> > If Python gets proper macros it won't matter one bit that they only
> > have named closures, since you can macro that away in a blink of an
> > eye.
>
> Ah, well, there we go again. Without sexpr notation, the lexer/parser
> again will be "hard", and "hardly worth it": we get even more sour
> grapes, this time about macros not being such a big deal.
>
> One of the hardest things for a technologist to do is admit that a
> neat idea has to be abandoned. Initial success creates a giddy
> over-commitment to the design choice. After then all difficulties get
> brushed aside or kludged.

Y'never know, they could always Greenspun their way to almost-sexps.
What with the way that selective pressure works, it's gonna be that or
die, so it is a possibility.

Thomas F. Burdick

unread,
May 6, 2006, 3:06:00 PM5/6/06