ANN: SciPy 2006 Schedule/Early Registration Reminder
Greetings, The SciPy 2006 Conference (http://www.scipy.org/SciPy2006) is August 17-18 this year. The deadline for early registration is *today*, July 14, 2006. The registration price will increase from $100 to $150 after today. You can register online at https://www.enthought.com/scipy06 . We invite everyone attending the conference to also attend the Coding Sprints on Monday-Tuesday , August 14-15 and also the Tutorials Wednesday, August 16. There is no additional charge for these sessions. A *tentative* schedule of talks has now been posted. http://www.scipy.org/SciPy2006/Schedule We look forward to seeing you at CalTech in August! Best, Travis -- http://mail.python.org/mailman/listinfo/python-announce-list Support the Python Software Foundation: http://www.python.org/psf/donations.html
Re: Hard time with installing MySQLdb for Python on Linux
In article [EMAIL PROTECTED], gmax2006 [EMAIL PROTECTED] wrote: I am having hard time with installing MySQLdb on Linux. ... My Linux is Red Hat Enterprise Linux ES release 4 (Nahant) Why don't you just use yum to install python-mysql or whatever the package is called, and have it automatically work out what else is needed? -- http://mail.python.org/mailman/listinfo/python-list
Re: printing raw postscript data on windows
In article [EMAIL PROTECTED], Uwe Schmitt [EMAIL PROTECTED] wrote: I am trying to print raw postscript data on windows. win32print should do the work like this: h=win32print.OpenPrinter(name) win32print.StartDocPrinter(h, 1, (, , RAW)) win32print.WritePrinter(h, file(p.ps).read()) win32print.EndDocPrinter(h) win32print.ClosePrinter(h) This works for some printers, but not for all. One possibility is that the printer itself is doing some kind of auto-emulation-sensing. My experience is that this kind of thing never works reliably when PostScript is involved. 1) Can you check the printer settings, to ensure its personality (or whatever it's called) is set to PostScript and not auto? 2) Failing that, what if you make sure the first line of your PostScript is always a comment beginning with %! or %!PS-? -- http://mail.python.org/mailman/listinfo/python-list
Re: stderr, stdout, and errno 24
In article [EMAIL PROTECTED], Wesley Henwood [EMAIL PROTECTED] wrote: I've checked and double checked my code and I am closing all files explicitly after opening them. If you're running your program under Linux, a very easy way to confirm this is to look in the directory /proc/pid/fd where pid is the PID of your running program. In here you will see a symlink to every file your program has open, the name of the link being the file descriptor number. To make it easier to watch, you may want to stick in a sleep of a few seconds in-between iterations of the code that executes the Python script. If you see the entries piling up in this directory, that will confirm that you're not closing those files. -- http://mail.python.org/mailman/listinfo/python-list
Re: Is there a limit to os.popen()?
In article [EMAIL PROTECTED], Steve Holden [EMAIL PROTECTED] wrote: If you are seeing alot of error messages you shoudl really redirect the standard error to a file to avoid them cluttering up your console. Surely a better technique would be to fix the errors causing the messages. -- http://mail.python.org/mailman/listinfo/python-list
Re: CPU or MB Serial number
In article [EMAIL PROTECTED], Sybren Stuvel [EMAIL PROTECTED] wrote: Bayazee enlightened us with: How can I get CPU Serial number , or motherboard serial number with python . I need an idetification of a computer Not sure if that'll be sufficient. My serial numbers (according to 'lshw' on Linux): Hey, that's pretty cool, I didn't know about lshw before. It doesn't come with my SuSE 10.0 system, but it is available under Gentoo. I tried on my Shuttle SN25P box, and it didn't report serial numbers for anything except the onboard Ethernet. In general, the OP isn't going to get anything like a universally-usable serial number, apart from Ethernet MAC addresses. By the way, lshw seems to think there's a second CPU on my box, but it's marked as DISABLED and has no capabilities. Is it really there, or just a figment of someone's imagination? :) -- http://mail.python.org/mailman/listinfo/python-list
Re: math symbols not displaying
In [EMAIL PROTECTED], Andrew Dabrowski wrote: I'm working on a simple Python program, with Tkinter, and I need to display the math symbols for set union and intersection, in unicode \N{N-ARY UNION} and \N{N-ARY INTERSECTION}. Everything was displaying correctly (when I ran the program) until I changed my OS distribution from SuSE to Ubuntu. Now those two symbols are not being displayed. I'm not getting any error messages, there are simply blank spaces where the symbols should be. Any ideas what the problem could be? I'm using Gnome under Ubuntu 6.06. The glyphs have to be present in the font that is used. Fonts that should contain almost all mathematical characters are in the `latex-xft-fonts` package. Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list
Re: Python on RedHat AS 2.1?
Jeremy Winters wrote: Installable package? Any ideas? is RedHat no longer providing pre-built packages for their distributions ? /F -- http://mail.python.org/mailman/listinfo/python-list
Re: How can get button's name when cursor move over the button ona web page?
Steve Holden [EMAIL PROTECTED] wrote: 8(snip)- |Questions nowadays have no idea which groups they belong to. When *I* |was a lad questions had to know their place. A question that appeared in ||the wrong group would be torched with flames that could be guaranteed to |burn through asbestos. But you tell these young people and they just |don't believe you. | |A Yorkshireman - You were lucky... - in *my* day, we did not even have fuel for flames, because we had no internet We actually had to use the local library - and *horrors* - you had to learn to read, and to solve your own queries... These youngsters just don't know how easy they have it... - Hendrik van Rooyen (not a Yorkshireman) -- http://mail.python.org/mailman/listinfo/python-list
PyQT installation /configuration
Hi there. I've been trying to get PyQT working on W2K, but have not yet found a sufficiently detailed walk-through for my somewhat command-line-challenged sensibilities. I did find this page: http://www.diotavelli.net/PyQtWiki/GPLPyQtWindows , but I'm not sure about installing the whole of Visual Studio .NET as a prerequisite. Can anyone tell me if the passing of the years has made this process any more approachable? -- http://mail.python.org/mailman/listinfo/python-list
Re: PyQT installation /configuration
On Saturday 15 July 2006 9:25 am, [EMAIL PROTECTED] wrote: Hi there. I've been trying to get PyQT working on W2K, but have not yet found a sufficiently detailed walk-through for my somewhat command-line-challenged sensibilities. I did find this page: http://www.diotavelli.net/PyQtWiki/GPLPyQtWindows , but I'm not sure about installing the whole of Visual Studio .NET as a prerequisite. Can anyone tell me if the passing of the years has made this process any more approachable? For Qt4 use the binary installer from... http://www.trolltech.com/developer/downloads/qt/windows For PyQt4 use the binary installer from... http://www.riverbankcomputing.co.uk/pyqt/download.php Phil -- http://mail.python.org/mailman/listinfo/python-list
Re: attaching debugger to runinng python program
You may try winpdb. I find it to be a comfortable debugger that also can attach to running programs. (You need to add a line in your code where the program should stop and wait for the debugger to attach.) I am satisfied with it, but I did not debug a multi theaded app. However, it can handle threads. I'd be glad to later hear whether it did what you need, or not: http://www.digitalpeers.com/pythondebugger/threads.htm Regards, Ruben -- http://mail.python.org/mailman/listinfo/python-list
Re: Augument assignment versus regular assignment
Gerhard Fiedler [EMAIL PROTECTED] (GF) wrote: GF On 2006-07-14 16:07:28, Piet van Oostrum wrote: AP 2a) In case you answer yes to question (1). Can you explain me how AP I have to read the language reference in order to deduce this AP is indeed the way things should be understood. Just read what it says. `It is only evaluated once' is quite clear I would say. Your problem is that you thought __setitem__ is part of evaluation, but it isn't. It is part of assignment, while __getitem__ is part of evaluation. See the definitions of __getitem__ and __setitem__ in the language reference manual. GF Sorry to butt in here... I really don't know much more about this than I GF read in this thread :) GF But wasn't stated earlier that one of the differences between a += b and a GF = a + b is that a gets evaluated once in the first case and twice in the GF second case? If __getitem__ was part of the evaluation (as you seem to GF say), shouldn't it be called twice in the second case? It doesn't seem to GF get called twice; see this snippet from an earlier message: t['a'] = t['a'] + 1 GF __getitem__, key = a GF __setitem__, key = a t['a'] += 1 GF __getitem__, key = a GF __setitem__, key = a GF Seems like the __get/setitem__ thing has not much to do with what the GF manual calls evaluation, but rather with what the name implies: setting and GF getting the value of the item. And therefore, since in both the a += b case GF and the a = a + b case the value of a is gotten once and set once, GF __getitem__ gets called once and __setitem__ gets called once. No? Yes, in both cases you get the value once, and you set the value once. In an assignment, the lefthand side is evaluated differently from the righthand side, of course. Because in the righthand side you need the value of the object, but in the lefthand side you need only the 'location' (this is not a Python term). Therefore in the righthand side __getitem__ is part of the evaluation. In the lefthand side when it is a[i], only a and i are evaluated, but then the evaluation stops. Next the assignment is done with __setitem__. Now if it is an augmented assignment like a[i]+=b, It is only evaluated once. But we need it both as a lefthand side and a righthand side. So this means that a and i are evaluated (but only once!). For the lefthand side this completes the evaluation. And then the results of these are used as parameters to __getitem__ to complete the evaluation of the righthand side. Assuming b had already been evaluated, next the assignment is performed by calling __setitem__. Your example above doesn't show any difference because t['a'] doesn't have any side effects. But if you use for both t and the index a function that prints something you will see the difference. -- Piet van Oostrum [EMAIL PROTECTED] URL: http://www.cs.uu.nl/~piet [PGP 8DAE142BE17999C4] Private email: [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Carl J. Van Arsdall [EMAIL PROTECTED] Wrote: To: python-list@python.org Sent: Friday, July 14, 2006 7:36 PM Subject: Re: Python for Embedded Systems? | Grant Edwards wrote: | On 2006-07-14, Jack [EMAIL PROTECTED] wrote: | | Is there a Python packaging that is specifically for | embedded systems? ie, very small and configurable so the | user gets to select what modules to install? | | For Linux-based embedded systems in particular? | | I'm thinking of running it on the Linksys's Linux-based open | source router WRT54G. It has 4MB flash and 16MB RAM. I think | another model has 16MB flash. Any possibilities of running | Python on these systems? | | | A few years back there was a deeply embedded python project, | but it's been dead for quite a while: | | http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy | http://mail.python.org/pipermail/python-announce-list/1999-August/000157.html | | | This raises a good question. Is there a need for python to change | somewhat to work better in an embedded profile? Are there many people | in the community interested in using python for embedded projects? | I for one would be interested in using it - if it can be made small enough - I do not see it helping me with the nitty gritty of getting a system running on bare metal, as the low level stuff in a small system is still best done in assembler - but if there is a display and some sort of keyboard and you can stick to character based stuff it will ease the application part of the work a lot - its a natural for doing things like logging and simple transactions - and if the hardware is strong enough to get IP running - then it will open up the systems to be web based... It will also be of use as you could prototype on a PC - emulators and simulators of small systems are mostly a pain as it takes a lot of effort to describe the actual hardware before these are useful... Small in this context is an eight bit processor (like an 80x1 | x = 3, 5 ) with some tricks done in the hardware to expand the native 16 bit address space to address say half a Meg of battery backed up static ram as data space, with about 62k of code space available for the interpreter and the custom OS to run in - (Harvard architecture, not von Neumann) - These processors have lately been improved from the original about half a MIP to now give sustained performance of better than 10 MIPS - So they may just be able to cripple along doing the interpreting - But its *Quite a Challenge* to fit the interpreter in, though... It is easily possible to expand these processor's address space to 24 bits - that is 16 Meg - and it may be a better approach to make a 'Virtual Processor' to run the python stuff - is there a definition for that sort of thing, akin to Java's Virtual Processor? - It would be a better approach, as the resultant higher level work would be more portable - to port to another class of processor, you need merely write the Virtual Machine - in whatever Language takes your fancy... What is the minimum set of instructions and structure needed to make a simplistic Python? - does anybody know? Might just be a pipe dream... - Hendrik van Rooyen -- http://mail.python.org/mailman/listinfo/python-list
Re: Accessors in Python (getters and setters)
On State and Behavior: To understand objects in terms of state and behavior you need to absolve yourself from implementation details of languages and think at an abstract level. Take a button object, for example. It has state and behavior. Possible states may include, is_active, is_focused, is_mapped, etc. Behavior is what the button does when it responds to events, (e.g when you click on it, or drag it, or position a pointer over it.) If you've done any form of event based programming (GUI/Games/Simulation), this method of thinking becomes natural. As you can see, when I'm designing a button object, I don't care what Python does with is_active. I don't care how it accesses. I don't care what is_active means to Python. I don't care about Python's __get__ /__set__ special/latent functions or implementation details. is_active to me and every other developer is a state of the button object. And at that level that's all that matters. Python can tell me it's just ones and zeros for all I care. In very well designed systems, the state of an object should only be changed by the object. For example, a third party randomly changing is_active, (which Python lets you do freely and easily) from False to True may crash your GUI. And I'm not making this up. Things like this do really happen depending on the whackyness of your toolkit. So sometimes, it is my duty to protect the state of an object. Especially if its state cannot afford to be corrupted rendering the system unstable. And situations like this are found a plenty in event based programming. Which is programming objects based almost entirely on state and behavior. As you can see this has nothing to do with Python vs Java's vs X's implementation of accessors and how using them sucks, or how they aren't Pythonic. Some domains just require this stuff. One of the requirements for designing robust object systems is ensuring the state of objects aren't easily contaminated. That state is the objects data (read: stuff the object needs to do something reliably). And this is why many overzealous OO languages do force you to use accessors. It's not because they hate you or aren't aware of the convenience of having direct access to an object's attributes. It's just because these languages convenience/robustness ratios are different. Thinking in terms of callable vs non-callable is not helpful for me, because it isn't high level enough. Thinking in terms of state and behavior is, because it works regardless of programming language or implementations. This is the reason I like working with Python. I wanted a language that didn't bore me with it semantics and allowed me to focus on design. Let me reiterate, I'm not obsessing over language semantics, I just need practical, not religious, solutions for my problem domain. Bruno Desthuilliers wrote: mystilleef wrote: (snip) Okay, I feel I need to make myself clear. I certainly I'm not blaming Python for my mistakes. And I don't think language X is better than Python or vice-versa. Okay scrap the vice-versa. It was silly of me to name the variable tmp regardless of whatever excuses I have. This also doesn't mean in the future I wouldn't use shitty names for my attributes. :-) I most likely will. But at least now I know how to minimize its impact of such carelessness. I mentioned them above but I repeat it hear again. 1). Make all attributes of a class private/protected . Please re-read my answer to your previous mention of this and my other remarks in this thread (and below in this thread) about the profound differences between Python and Java wrt/ object model and attribute access semantics. 2). If a non-callable attribute is going to be used outside a class, think about making it a property Unless you don't need to. and name the property well, Indeed !-) Other than that we are just arguing semantics of language. For example, your view of objects is by categorizing its attributes in callable and non-callable. And also API/implementation. These are to orthogonal problems - even in Java FWIW !-) However, my categorization is state(data) and behavior(methods). If properties are an equivalent of getters/setters, are properties state or behaviour ? According to your views, they are behaviour, if I understood you. In that case, what's the difference between 'directely' (which in fact implies going thru __getattribute__) accessing a public data attribute and accessing an implementation attribute by the mean of a descriptor (property or custom) ? * before: # mylib.py class Knight(object): def __init__(self, name): self.name = name def sayHello(self): print hello, I'm %s % self.name # mymain.py from mylib import Knight k = Knight(Robin) print k.name k.sayHello() k.name = Lancelot k.sayHello() * after # mylib.py class Knight(object): def __init__(self, name): self.name = name @apply def name(): def
Re: PyQT installation /configuration
Phil Thompson wrote: On Saturday 15 July 2006 9:25 am, [EMAIL PROTECTED] wrote: Hi there. I've been trying to get PyQT working on W2K, but have not yet found a sufficiently detailed walk-through for my somewhat command-line-challenged sensibilities. I did find this page: http://www.diotavelli.net/PyQtWiki/GPLPyQtWindows , but I'm not sure about installing the whole of Visual Studio .NET as a prerequisite. Can anyone tell me if the passing of the years has made this process any more approachable? For Qt4 use the binary installer from... http://www.trolltech.com/developer/downloads/qt/windows For PyQt4 use the binary installer from... http://www.riverbankcomputing.co.uk/pyqt/download.php Ah thanks, I'm a dork. Why didn't I see that before mutter? -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Jack a écrit : If Python is not the best candidate for embedded systems because of the size, what (scripting) language would you recommend? PHP may fit but I don't quite like the language. Anything else? Loa is small but it does not seem to be powerful enough. You mean Lua ? Not powerful enough ? What do you mean by that ? Lua is great IMHO. Sure it does not come with thousands of libraries, but the language design is extremely clean, the language constructs powerful and the footprint very small. 16kloc of C code can't hurt your embedded device can they ? ;) Please tell us what kind of limitation you find in Lua ... Cheers, SB -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
H J van Rooyen [EMAIL PROTECTED] writes: What is the minimum set of instructions and structure needed to make a simplistic Python? - does anybody know? There have been lots of Lisps for the PDP-11 and comparable machines. Python's runtime semantics are close enough to Lisp that you could probably get something Python-like running in that kind of machine, maybe not exactly Python. You would probably want to use small-Lisp implementation techniques like BIBOP (big bag of pages, Google for it) memory organization. But I don't think any of those Lisps were really all that useful. They were written mostly as toys. SIOD was a well known very small Scheme interpreter that you might like to play with: http://en.wikipedia.org/wiki/SIOD -- http://mail.python.org/mailman/listinfo/python-list
Re: Configuring IDLE on Linux
On Friday 14 July 2006 04:26, Satya Kiran wrote: Hello, I have upgraded to Python2.4 on my Red Hat 9.0 Linux box. I want to work with IDLE and ran a search to check it's presence. Here is what I get. [EMAIL PROTECTED] bin]# find / -iname idlelib /usr/local/lib/python2.4/idlelib [EMAIL PROTECTED] bin]# cd /usr/local/lib/python2.4/idlelib [EMAIL PROTECTED] idlelib]# python PyShell.py ** IDLE can't import Tkinter. Your Python may not be configured for Tk. ** How do I resolve this and get IDLE working? thanks in advance, Kiran Satya You need to install python's tkinter functionality separately in some RPM-based distros (suse and redhat off the top of my head). Search your package repository for the package called python-tkinter (it may be named slightly differently on redhat - ie: python_tkinter, but whichever, that's the one) HTH Ten -- There are 10 types of people in this world, those who understand binary, and those who don't. -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Paul Rubin http://[EMAIL PROTECTED] writes: SIOD was a well known very small Scheme interpreter that you might like to play with: http://en.wikipedia.org/wiki/SIOD Here's another one that I like. I haven't actually used it but studied it for possible integration in an embedded project that I worked on but that got cancelled. It seems very good for this type of thing. The runtime system is just 20k bytes or so: http://hedgehog.oliotalo.fi/ Picolisp is also pretty neat but maybe not aimed the same way: http://software-lab.de/down.html Take the challenge: it is very impressive. Of course they tailored it to Pico Lisp's capabilities, but you can see the challenge problem is very sensible, and the Pico Lisp solution is much easier to get to than a Python solution: http://software-lab.de/succ.html -- http://mail.python.org/mailman/listinfo/python-list
NB question on global/local variables in functions
Hi all, I've started to write some functions but I have some problems with common variables in that functions. So I have some variables which should be accessible by all my functions but not accessible by the rest of my code. How can I do this? Thanks Wolfgang ###function.py: c1=123.0 c2=134.0 def fun(temp): return temp+c1-c2 def fun1(temp): return temp-c1 ### caller.py from function import * print fun(10.0) print c1 -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
Wolfgang So I have some variables which should be accessible by all my Wolfgang functions but not accessible by the rest of my code. How can I Wolfgang do this? Wolfgang ###function.py: Wolfgang c1=123.0 Wolfgang c2=134.0 Wolfgang def fun(temp): Wolfgang return temp+c1-c2 Wolfgang def fun1(temp): Wolfgang return temp-c1 Wolfgang ### caller.py Wolfgang from function import * Wolfgang print fun(10.0) Wolfgang print c1 First, avoid from function import * as it pollutes your namespace. Either import specific symbols or just the module: from function import fun, fun1 import function Second, if you really must, add an __all__ list to function.py, generally right at the top: __all__ = ['fun', 'fun1'] (Note that __all__ is a list of strings.) The from star import will only import the names in the __all__ list. You can also hide individual names from a from star import by prefixing them with a single underscore (e.g., _c1 instead of c1). Third, one of Python's key concepts is we're all adults here. You can't really and truly hide c1 and c2, so just act responsibly and don't mess with them from outside the function module. Skip -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
First, avoid from function import * as it pollutes your namespace. Either import specific symbols or just the module: from function import fun, fun1 import function thanks for the hint! But what is the difference between from module import * and import module ? Second, if you really must, add an __all__ list to function.py, generally right at the top: __all__ = ['fun', 'fun1'] I've read this already, but to keep the example short I've skipped that part. (Note that __all__ is a list of strings.) The from star import will only import the names in the __all__ list. You can also hide individual names from a from star import by prefixing them with a single underscore (e.g., _c1 instead of c1). the _ before the variable did the trick! Thanks a lot! Third, one of Python's key concepts is we're all adults here. You can't really and truly hide c1 and c2, so just act responsibly and don't mess with them from outside the function module. It is more to prevent myself from my own stupidness by changing global variables incidentally. Wolfgang -- http://mail.python.org/mailman/listinfo/python-list
[ANN] XPN 0.5.7 released
XPN (X Python Newsreader) is a multi-platform newsreader with Unicode support. It is written with Python+GTK. It has features like scoring/actions, X-Face and Face decoding, muting of quoted text, newsrc import/export, find article and search in the body, spoiler char/rot13, random taglines and configurable attribution lines. You can find it on: http://xpn.altervista.org/index-en.html or http://sf.net/projects/xpn Changes in this release: * fixed a bug that caused XPN not to open empty articles * fixed a bug that occurs with newer GTK releases that caused XPN not to show bold face fonts in Groups Pane and Threads Pane * added a key-combo that lets you scroll up the article * fixed an issue with orderings save. * reorganized and changed the appearance of the Config Window * changed the appearance of the Score Window * changed the way article headers and X-Face are shown in the Article Pane * added a groups context menu * added some new voices in the threads context menu XPN is translated in Italian French and German, if you'd like to translate it in your language and you are familiar with gettext and po-files editing please contact me ([EMAIL PROTECTED]). -- Never run after buses or women: you'll always get left behind. |\ | |HomePage : http://nem01.altervista.org | \|emesis |XPN (my nr): http://xpn.altervista.org -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
Wolfgang schrieb: First, avoid from function import * as it pollutes your namespace. Either import specific symbols or just the module: from function import fun, fun1 import function thanks for the hint! But what is the difference between from module import * and import module ? I've figured it out! when I use from module import * then I can call my functions directly when I use import module I need module.function -- http://mail.python.org/mailman/listinfo/python-list
Re: ctypes wrapping libpam.so on FreeBSD 6.1 - Python Bus Error
Frederik Ganesan, Thanks for the explanation, it did me realize that I should learn some C first before I'm going to start wrapping something :-) At least I got a reason now to do something with C, though it should take me some time. But again, thanks! Martin -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
Wolfgang thanks for the hint! But what is the difference between Wolfgang from module import * Wolfgang and Wolfgang import module Wolfgang ? Try it and see. I happen to have a.py laying about: import atexit def work(): print whew! work is hard def exit(): print module a is cleaned up atexit.register(exit) At the top level there are three names, atexit, work and exit. When I first start the interpreter I don't have much available: vars().keys() ['__builtins__', '__name__', '__doc__'] If I import the module a, a reference to a is added to the namespace, but not (directly) the objects it contains: import a vars().keys() ['__builtins__', '__name__', '__doc__', 'a'] I can still get at the objects in a though: dir(a) ['__builtins__', '__doc__', '__file__', '__name__', 'atexit', 'exit', 'work'] a.work function work at 0x3c9570 Get rid of a: del a vars().keys() ['__builtins__', '__name__', '__doc__'] Now import everything in a: from a import * vars().keys() ['__builtins__', 'work', 'atexit', 'exit', '__name__', '__doc__'] There are two practical differences to importing names from a module vs. just importing the module. As I indicated in my previous note, the from star import pollutes your namespace. It might not seem like much if you're only grabbing three objects you are interested in, but imagine if a contained a lot of names, many of which you weren't going to use in your program: from Tkinter import * vars().keys() ['getdouble', 'MULTIPLE', 'TypeType', 'mainloop', 'Canvas', 'AtSelLast', 'CodeType', 'TRUE', 'getboolean', 'LAST', 'TclVersion', 'BOTTOM', 'Wm', 'NUMERIC', 'Toplevel', 'DictProxyType', 'ObjectType', 'DictType', 'EXTENDED', 'OFF', 'SEL', 'LongType', 'CURRENT', 'CallWrapper', 'Scrollbar', 'ListType', 'X', 'GeneratorType', 'FIRST', 'ON', 'image_names', 'ClassType', 'YES', 'LambdaType', 'GROOVE', 'XRangeType', 'Scale', 'NORMAL', 'SW', 'BUTT', 'Label', 'ROUND', 'image_types', 'AtInsert', 'StringType', 'NONE', 'CENTER', 'FloatType', 'Spinbox', 'UnicodeType', 'Checkbutton', 'Grid', 'StringTypes', 'ModuleType', 'FileType', 'FLAT', 'END', 'VERTICAL', '__builtins__', 'MITER', 'Widget', 'DISABLED', 'S', 'COMMAND', 'EllipsisType', 'W', 'ACTIVE', '__name__', 'EW', 'FrameType', 'BASELINE', 'CHORD', 'tkinter', 'FunctionType', 'Image', 'BitmapImage', 'Event', 'RADIOBUTTON', 'SliceType', 'Place', 'HIDDEN', 'PAGES', 'NoDefaultRoot', 'ANCHOR', 'CHAR', 'SEPARATOR', 'BooleanType', 'HORIZONTAL', 'TclError', 'MOVETO', 'WORD', 'SUNKEN', 'NO', 'DictionaryType', 'NotImplementedType', 'READABLE', 'NE', 'CHECKBUTTON', 'Variable', 'Pack', '__doc__', 'NW', 'RAISED', 'AtEnd', 'RIDGE', 'BooleanVar', 'Tributton', 'SOLID', 'N', 'CASCADE', 'SEL_FIRST', 'TkVersion', 'UNDERLINE', 'UNITS', 'TupleType', 'OptionMenu', 'ALL', 'NS', 'FALSE', 'Text', 'Frame', 'SEL_LAST', 'Misc', 'OUTSIDE', 'LabelFrame', 'getint', 'Radiobutton', 'LEFT', 'Listbox', 'wantobjects', 'SE', 'EXCEPTION', 'IntType', 'Menu', 'TOP', 'DoubleVar', 'DOTBOX', 'SINGLE', 'Tk', 'IntVar', 'AtSelFirst', 'UnboundMethodType', 'PanedWindow', 'INSERT', 'BuiltinMethodType', 'BROWSE', 'Tcl', 'BuiltinFunctionType', 'BaseWidget', 'PROJECTING', 'MethodType', 'TracebackType', 'BEVEL', 'E', 'InstanceType', 'BOTH', 'PIESLICE', 'Button', 'sys', 'Y', 'Entry', 'Message', 'PhotoImage', 'RIGHT', 'BufferType', 'Studbutton', 'INSIDE', 'Menubutton', 'WRITABLE', 'StringVar', 'ARC', 'At', 'ComplexType', 'NSEW', 'SCROLL', 'NoneType'] The chance that one of those names would rebind an already existing name in your namespace is much higher. The second practical difference is that if the object referenced by a name is immutable (say, an integer), the name in the current namespace doesn't get rebound if the module modifies the value. Consider b.py: total_work = 0 def work(): global total_work print not as hard as it might be total_work += 1 If I execute from b import total_work, work names are created in my current namespace that reference the objects bound to those names *at that moment* in the b module's namespace. If I then call work(), it rebinds the name total_work in b's namespace (because integers are immutable), however, I don't see the effect, because the name total_work in my namespace is still bound to the object 0: from b import total_work, work total_work 0 work() not as hard as it might be total_work 0 work() not as hard as it might be total_work 0 Apparently work is really pretty easy... If, on the other hand, I import b, I get the expected behavior: import b b.total_work 0 b.work() not as hard as it might be b.total_work 1 b.work() not as hard as it might be b.total_work 2 because
Re: Accessors in Python (getters and setters)
On 2006-07-15 06:55:14, mystilleef wrote: In very well designed systems, the state of an object should only be changed by the object. IMO that's not quite true. Ultimately, the state always gets changed by something else (user interaction, physical events); very few objects are completely self-contained in their behavior. In most systems (and you possibly have written some of them) are objects whose state gets changed by other objects -- possibly through the intermediation of setter methods that do nothing else but set the state. There's no conceptual difference between directly setting the state or calling a setter function that does nothing else but directly setting the state -- except for one unnecessary level of indirection in the latter. For example, a third party randomly changing is_active, (which Python lets you do freely and easily) from False to True may crash your GUI. And I'm not making this up. Things like this do really happen depending on the whackyness of your toolkit. That's quite true, but a setter that does nothing but change is_active doesn't prevent this. If there is logic necessary to prevent state changes in certain situations, this should be implemented. But whether you then call this a part of the behavior (looking at the implementation as being a setter method) or a part of the state (looking at the implementation as being an added feature of the attribute) doesn't really make an objective difference. So sometimes, it is my duty to protect the state of an object. Of course. Which is programming objects based almost entirely on state and behavior. As you can see this has nothing to do with Python vs Java's vs X's implementation of accessors and how using them sucks, or how they aren't Pythonic. Some domains just require this stuff. Yes, but you seem to still be stuck in the paradigm that setting the state is behavior if it comes from the outside -- probably because some languages implement that way. I'm not (yet) a Python programmer. To be honest, the one single feature that attracted me to Python is the structuring by indenting... I never understood why we have to indent (to be able to read) /and/ brace (to make the compiler happy) in other languages -- I always thought that if indenting helps me to understand the structure, the compiler should be able to read exactly that :) I come from a mostly C/C++/Java/PHP background, apparently similar to yours. GUI, embedded, whatever. But I can understand that the difference you are making is not based in a concept, it is based in an implementation. It is an artificial difference to say that o.is_active = true is modifying state, whereas o.set_active( true ) is dealing with behavior. Either way you are changing the state. Behavior, that is, doing something, implies state change, one way or another, sometimes relevant, sometimes not. There are (often embedded) systems, and well-designed ones, that basically don't deal with what you call behavior at all and handle everything through state change (of signals). Such systems can be rock-solid and quite complex, and have a lot of behavior. And there are systems that do everything through what you call behavior (e.g. getter/setter type implementations). Both types can work, both can achieve the exactly same; this is just an implementation detail. And this is why many overzealous OO languages do force you to use accessors. I'm not sure why you keep on harping on this. It seems to have been clearly stated that in Python, every attribute /is/ an implied getter/setter pair -- it's up to you to just let the language use the default (simple) implementation, or override it with your own logic. It is also up to you to call this added logic then a feature of behavior or of state. Thinking in terms of state and behavior is, because it works regardless of programming language or implementations. Agreed. But the distinction is not universal, objective, it is subjective. Where you make it is your choice. As the examples above show, there are well-working solid systems out there that work on both ends of your spectrum: only behavior is exposed, or only state is exposed. Both can achieve the same. It is a subjective choice to call this o.is_active = true state or behavior... the underlying setter implementation for is_active can do everything you want your behavior to be -- or it can be the simple straightforward default setter. It's just a subjective thing to say that this is in the realm of behavior or of state. Didn't you say that state changes can crash a system? That's behavior, as far as I am concerned :) And there is little if any behavior that doesn't change the state -- especially setters are known to do that :) Gerhard -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
Thanks! I've learned a lot today! Wolfgang -- http://mail.python.org/mailman/listinfo/python-list
Re: NB question on global/local variables in functions
Wolfgang wrote: First, avoid from function import * as it pollutes your namespace. Either import specific symbols or just the module: from function import fun, fun1 import function thanks for the hint! But what is the difference between from module import * and import module ? http://effbot.org/zone/import-confusion.htm#many-ways /F -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie graphing recommendations ?
Adam wrote: Where should a py newbie start to do some 2D graphs on screen ? PythonGraphApi, Gato, looks interesting pygraphlib, matplotlib, is there a best native Python place to start ? If you are going to be in wxPython try the 'PyPlot.py' examples in the wxDemo. You will need to read the source cos' there is no official documentation. Matlibplot is also good but difficult because of all the options and lack of documentation API. -- http://mail.python.org/mailman/listinfo/python-list
Re: Getting focused window of another app
Never mind ... wHnd = win32gui.GetForegroundWindow() Caption = win32gui.GetWindowText (wHnd) -- http://mail.python.org/mailman/listinfo/python-list
Re: dict = no ordered keys = no slicing
On 2006-07-14, Nick Vatamaniuc [EMAIL PROTECTED] wrote: I have a tree class, a tree acts like a dictionary, but when you iterate over it, it always iterates over the keys in order. Antoon, First of all there is a distinction between ordered and un-ordered data types. You can only slice ordered data types. Lists and tuples are ordered while the keyset (note the _set_ part) of a dictionary is a set - it is un-ordered and consists of unique elements, the keys. That doesn't has to be. Let as talk about a mapping. A mapping is a way to associate a key with a value. Now one way to implement a mapping is a hash table, this is how python dictionaries are implemented. Now I have an other mapping implementation, look at: http://www.pardon-sleeuwaegen.be/antoon/avltree.html Now this mapping type has as a property that the order of the keys is somehow stored with it, so that each time you call the keys, values, or items methods, you will get a list according the order of the keys. (The same goes for the itervariants). Besides, I don't really understand what you mean by saying a tree acts like a dictionary? You don't really iterate over the dictionary because the keys are not in order! Remeber that. The confusing part is that ks=dic.keys() will return a list so that makes you think ks[0] is somehow first for some reason, but it shouldn't be. My module is implemented to have that property. It is called a tree because the implementation is a tree. May be with the API provided you think a tree is not a good name for this class and you may have a point there, but that is not what this discussion is about. You see, dictionaries were there in Python before sets(), that is why when sets are supposed to be used a dictionary or list is used. keys() is one of these example. Hopefully this will change in P3K so that the key_set_ of a dictionary is a set() so people don't get confused. And what do you think should be the result of keys of my Tree class? -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list
Re: Accessors in Python (getters and setters)
Gerhard Fiedler wrote: On 2006-07-15 06:55:14, mystilleef wrote: In very well designed systems, the state of an object should only be changed by the object. IMO that's not quite true. Ultimately, the state always gets changed by something else (user interaction, physical events); very few objects are completely self-contained in their behavior. Then in those cases the system becomes a victim of high coupling. In most systems (and you possibly have written some of them) are objects whose state gets changed by other objects -- possibly through the intermediation of setter methods that do nothing else but set the state. There's no conceptual difference between directly setting the state or calling a setter function that does nothing else but directly setting the state -- except for one unnecessary level of indirection in the latter. It depends. If certain conditions need to be met before changing the state of an object, then arbitrarily changing it can be dangerous. I gave an example earlier. For example, a third party randomly changing is_active, (which Python lets you do freely and easily) from False to True may crash your GUI. And I'm not making this up. Things like this do really happen depending on the whackyness of your toolkit. That's quite true, but a setter that does nothing but change is_active doesn't prevent this. If there is logic necessary to prevent state changes in certain situations, this should be implemented. But whether you then call this a part of the behavior (looking at the implementation as being a setter method) or a part of the state (looking at the implementation as being an added feature of the attribute) doesn't really make an objective difference. Of course using setters for the sake of just using them is pointless. The reason to use them is if pre-conditions or post-conditions need to be met. Or to control access to an objects states. So sometimes, it is my duty to protect the state of an object. Of course. Which is programming objects based almost entirely on state and behavior. As you can see this has nothing to do with Python vs Java's vs X's implementation of accessors and how using them sucks, or how they aren't Pythonic. Some domains just require this stuff. Yes, but you seem to still be stuck in the paradigm that setting the state is behavior if it comes from the outside -- probably because some languages implement that way. Not at all. Behaviors are just methods of an object. They are behaviors whether they are called internally or externally. I'm not (yet) a Python programmer. To be honest, the one single feature that attracted me to Python is the structuring by indenting... I never understood why we have to indent (to be able to read) /and/ brace (to make the compiler happy) in other languages -- I always thought that if indenting helps me to understand the structure, the compiler should be able to read exactly that :) I come from a mostly C/C++/Java/PHP background, apparently similar to yours. GUI, embedded, whatever. But I can understand that the difference you are making is not based in a concept, it is based in an implementation. It is an artificial difference to say that o.is_active = true is modifying state, whereas o.set_active( true ) is dealing with behavior. Either way you are changing the state. Behavior, that is, doing something, implies state change, one way or another, sometimes relevant, sometimes not. There are (often embedded) systems, and well-designed ones, that basically don't deal with what you call behavior at all and handle everything through state change (of signals). Such systems can be rock-solid and quite complex, and have a lot of behavior. And there are systems that do everything through what you call behavior (e.g. getter/setter type implementations). Both types can work, both can achieve the exactly same; this is just an implementation detail. If all set_active does is change is_active's state, then set_active is pointless. See above for my point on the issue. And this is why many overzealous OO languages do force you to use accessors. I'm not sure why you keep on harping on this. It seems to have been clearly stated that in Python, every attribute /is/ an implied getter/setter pair -- it's up to you to just let the language use the default (simple) implementation, or override it with your own logic. It is also up to you to call this added logic then a feature of behavior or of state. Thinking in terms of state and behavior is, because it works regardless of programming language or implementations. Agreed. But the distinction is not universal, objective, it is subjective. Where you make it is your choice. As the examples above show, there are well-working solid systems out there that work on both ends of your spectrum: only behavior is exposed, or only state is exposed. Both can achieve the same. It is a subjective choice
Re: EuroPython 2006 and Py3.0
On 2006-07-14, Lawrence Oluyede [EMAIL PROTECTED] wrote: Antoon Pardon [EMAIL PROTECTED] wrote: I have a tree class, a tree acts like a dictionary, but when you iterate over it, it always iterates over the keys in order. This makes it usefull to iterate over a slice. So it would be usefull if methods like keys, values and items could take a slice as an argument and use the same notation for it. Something like for k, v in t.items('a':'b'): Which would iterate over all items where the key starts with an 'a'. I keep thinking that means changing the meaning of slice Why? This doesn't need any new functionality of slice. I already can have this behaviour, but just would have to write it as follows: for k, v in t.items(slice('a','b')): This is just a question of literal slice notation. Do we limit the notation of a:b to indexing and for the slice(a,b) notation everywhere else or do we allow the a:b notation for a slice in other places where it seems usefull. -1. First: you have to introduce new syntax for an old thing. That syntax already exists, it just is only available as an index. Slicing and indexing is inside square brackets. (start:stop) seems confusing to me. The notation is just start:stop the parenthesis will in practice be added often to avoid disambiguities, like with the compound statements when the colon is also used to start a suite, a bit like tuples where parenthesis are often added too, although they are not really needed to form a tuple literal. And I seriously doubt that Guido or someone on his behalf will go through introducing another syntax for something that can be already done in one way. I came to Python because of it's clean syntax and I've always tought one good way to do one thing is better than Perlish style. That's why I don't like powering up slice objects to do that. My proposal will make the python syntax cleaner. Now you have slices in python. The general way to have a slice is: slice(start, stop, step) But in one particular place, when used as an index you are allowed to write that slice as: start:stop:step lst[start:stop:step] is just another way of writing lst[slice(start,stop,step)] In my opionion that is not very clean. The first part of my proposal entail no powering up whatsoever. It is just a proposal to make the syntax of python more clean, so that the start:stop:step notation for a literal slice is available everywhere, where a literal can occur, instead of only in one particular place. Need is such a strong word. In the end we don't need python, but it seems very usefull to have it around. I understand that should this be introduced it could make people uneasy, but I also think it could be very usefull. I'm not the person in charge to make decisions about Python syntax, power and limitations but I really don't see a useful use case to have a slice++. Even decorators (that few people really understand) have a lot of use cases more than slice++ You should look at my points as different proposals. I think each proposal is usefull in its own way. Allow the priveleged synax for indexing anywhere is usefull even if nothing else is accepted. Allowing slice to be subclassed is usefull even of nothing else is accepted. It is not a package deal that is to be accpeted or rejected as a whole. Because it would have made things a lot of easier for me in a number of cases. I have a table class that is like a list but can start at any index, it sure would have been easier to write with some of the possibilities above. I though to just write my own slice class, but slice is not subclassable, and when I just wrote my own from scratch, with a start, stop and step attribute I got an error that it wasn't an integer so couldn't be used as an index. So much for duck taping. I understand. So maybe asking for subclassable slices is better :-) Well that was one of the things I proposed. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list
Re: Letting a Python application phone home
Am Freitag, 14. Juli 2006 15:26 schrieb Dieter Vanderelst: This is surely possible. You need to define a protocol for the communication between client and server. As you are planning to send data over the internet you should build it on top of tcp. Look at the python module socket resp. SocketServer for low level tcp functions. As the data should not be visible to everyone you need some kind of encryption. Either you rely on the ssl capabilities of the socket module, this way securing the transport layer (tcp) or you build encryption into your newly designed application layer protocol. For the latter have a look at the python cryptography toolkit. Sorry I have no url at hand, simply google. Concerning the question of stopping the program when the internet connection breaks: let your program contact the server periodically. If this fails quit the program. Regards Nils -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Jack wrote: Is there a Python packaging that is specifically for embedded systems? ie, very small and configurable so the user gets to select what modules to install? You might also look at the gumstix embedded system, Linux running on an ARM processor in an extremely small form factor. (http://www.gumstix.net/) And here is a page with a link to a gumstix Python binary: http://cs.gmu.edu/~eclab/projects/robots/flockbots/pmwiki.php?n=Main.Python I'm trying this out as soon as I get home! -- Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Jack wrote: Is there a Python packaging that is specifically for embedded systems? ie, very small and configurable so the user gets to select what modules to install? For Linux-based embedded systems in particular? I'm thinking of running it on the Linksys's Linux-based open source router WRT54G. It has 4MB flash and 16MB RAM. I think another model has 16MB flash. Any possibilities of running Python on these systems? Here's another recently announced hobbyist microcontroller system: http://makezine.com/controller/ Uses Atmel SAM7X processor, ARM7, 32-bit, 256K Flash, 64K SRAM, up to 55MHz. On-board Ethernet and CAN (Controller Area Network - wireless) Various I/O blocks and on-board sensors ~US$150 Start shipping Aug 1st. No Python binary yet, but cross-platform tools are available. The guys at this magazine could really get a jump with a Python build. Here's a related site for this kit: www.uCHobby.com -- Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
On-board Ethernet and CAN (Controller Area Network - wireless) Ooops, my bad - CAN is not wireless, it is a serial network specifically for linking with other ucontroller boards. I was thinking of the onboard Bluetooth of the gumstix boards. -- Paul -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
Yes, I mean Lua, not Loa :-p Lua is a nice language. Like you said, it doesn't have many libraries as Python does. Plus, it's still evolving and the libraries are changing. I found a few functions not working last time I tried kepler libraries. It's good for embedded systems though because of its small footprint. Extensions implemented in C makes it possible that the installation size doesn't blow up when new stuff is added, like in Python. But I still like Python better for its power and for the style of the language itself. And I was hoping to find a Python implementation that bears the principles of Lua to make it suitable for embedded systems :) PHP may fit but I don't quite like the language. Anything else? Loa is small but it does not seem to be powerful enough. You mean Lua ? Not powerful enough ? What do you mean by that ? Lua is great IMHO. Sure it does not come with thousands of libraries, but the language design is extremely clean, the language constructs powerful and the footprint very small. 16kloc of C code can't hurt your embedded device can they ? ;) Please tell us what kind of limitation you find in Lua ... Cheers, SB -- http://mail.python.org/mailman/listinfo/python-list
Re: Detecting socket connection failure
[EMAIL PROTECTED] writes on 10 Jul 2006 08:42:11 -0700: I've tried to RTFM this and am having no luck.First off, I am using Mac OSX 10.4.7 with python 2.4.2 from fink. I am trying to connect to a server that should be rejecting connections and I was surprised when it did not throw an exception or do something otherwise equally nasty. It just connects and never returns any data. First, the proof that something is there and rejecting the connection (or is it that this thing actually accepts the connection and then drops it?)... telnet localhost 31414 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. What you see here is that the connection was opened successfully (the connect succeeded) and then closed again. ... In [1]: import socket, select In [2]: remote = socket.socket(socket.AF_INET,socket.SOCK_STREAM) In [3]: remote.connect(('localhost',31414)) In [4]: remote.recv(200) Out[4]: '' The means, that you see the same in Python: recv returning an empty string indicates that the connection was closed. In [5]: r,w,e=select.select([remote],[remote],[remote],1) In [6]: print r,w,e [socket._socketobject object at 0x7e48d0] [socket._socketobject object at 0x7e48d0] [] I have seen something similar recently: I can write (send to be precise) to a socket closed by the foreign partner without error (but of course, the written data does not arrive at the remote side). Only the second send raises an exception. I expect this is a TCP bug. -- Dieter -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie graphing recommendations ?
Adam wrote: Where should a py newbie start to do some 2D graphs on screen ? PythonGraphApi, Gato, looks interesting pygraphlib, matplotlib, is there a best native Python place to start ? The only good and simple way I have found so far to do some free graphics with Python in a Window is using PyGame. (You can also use TKinter, but it's slower). MatPlotLib is very good to graph functions, datasets, etc. and to save them to an image file. There are other good libs if/when you want 3D graphics. Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? The only time I see [A[B on Linux in a console is when I am not logged in. Check to see if you're logged in and then try again. AFAIK, Linux does support console history. I hope this helps :) -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
vbgunz wrote: Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? The only time I see [A[B on Linux in a console is when I am not logged in. Check to see if you're logged in and then try again. AFAIK, Linux does support console history. I hope this helps :) Sorry, I missed code.InteractiveConsole *but* maybe being logged in has something to do with it? -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
Chris Spencer wrote: Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? Be sure that the readline module is installed. -- 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 -- http://mail.python.org/mailman/listinfo/python-list
Re: What is a type error?
Joachim Durchholz wrote: You can have aliasing without pointers; e.g. arrays are fully sufficient. If i = j, then a [i] and a [j] are aliases of the same object. Marshall [EMAIL PROTECTED] writes: I am having a hard time with this very broad definition of aliasing. Would we also say that a[1+1] and a[2] are aliases? It seems to me, above, that we have only a, and with only one variable there can be no aliasing. As you can see from the replies, all these things which you do not consider aliasing are considered aliasing (by most everyone else, in fact these are exactly what is meant by aliasing). There is good reason for this. Let us explain this by looking again at the SQL example that has been kicked around some. SELECT * FROM persons WHERE name = John and SELECT * FROM persons WHERE surname = Doe Some set of records are shared by both select clauses. Those records are the aliased records. If the set is empty there is no problem. If we do not update the records from one of the select clauses, we also have no problem. However, if we update the records for one of the select clauses and the set of aliased records is not empty, the records returned by the other select clause have changed. Therefore, everything we knew to be true about the other select clause may or may not still be true. It's the may not case we are worried about. For example, in the imperative Mi-5 Q asks Moneypenny to run the first query (name = John) to get a list of agents for infiltrating Spectre. In another department, they're doing sexual reassignments and updating the database with the second query (surname = Doe) and making the name become Jane (along with other changes to make the transformation correct). So, when Q select John Doe from the first list and sends that agent on a mission Q is really sending Jane Doe and Spectre realizes that the agent is one and kills her. Not a happy result. In the functional Mi-5, the sexual reassignment group, makes clones of the agents reassigned, so that there is now both a John Doe and a Jane Doe. Of course, the payroll is a little more bloated, so that when Q says John Doe isn't needed for any further assignments, the Garbage Collection department does a reduction in force and gets rid of John Doe. The good news is that they didn't send Jane Doe to her death. The problem with aliasing, we want the things we knew true in one part of our program, i.e. the Johns on Q's list are still Johns and not Janes, to be true after we've run another part of our program. If the second part of our program can change what was true after the first part of our program, we can't depend on the results from the first part of our program, i.e. Q can send Jane Doe into certain death. The problem is compounded by the complexities of our programs. When Q selected his list, he didn't know of the department doing the reassignments (and couldn't know because they were part of a top-secret project). So, since bureaucracies grow to meet the increasing needs of the bureaucracy, often the solution is increased complexity, more regulations and paperwork to fill out, semaphores and locks to hold on critical data, read-only data, status requests, etc. All to keep Q from killing Jane by accident. Sometimes they work. the reassignment department has to wait 30-days for the clearance to perform their operation in which time John Doe completes the infiltration of Spectre saves the world from destruction and is ready for his next assignment. The key point is that each record (and even each field in each record) if it can be known by two names, is an alias. It is not sufficient to talk about whole variables as not being aliased if there is some way to refer to some part of the variable and change that part of the variable. Thus, a[1+1] is an alias for a[2] if you can have one part of the code talking about one and another part of the code talking about the other. To put it one still final way, consider the following code; assert(sorted(array a)); a[1] = 2; assert(sorted(array a)); // is this still true? Because a[1] is an alias of array a, you cannot be certain that the 2nd assert will not fire (fail) without additional analysis. assert(sorted(array a)); assert(a[0] = 2); assert(2 = a[2]); a[1] = 2; assert(sorted(array a)); // this is still true! -Chris -- http://mail.python.org/mailman/listinfo/python-list
reading specific lines of a file
Hi All, I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. Yi Xing -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
If the line number of the first line is 0 : source=open('afile.txt') for i,line in enumerate(source): if i == line_num: break print line Pierre -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
Yi Xing [EMAIL PROTECTED] (YX) wrote: YX Hi All, YX I want to read specific lines of a huge txt file (I know the line #). Each YX line might have different sizes. Is there a convenient and fast way of YX doing this in Python? Thanks. Not fast. You have to read all preceding lines. If you have to do this many times while the file does not change, you could build an index into the file. -- Piet van Oostrum [EMAIL PROTECTED] URL: http://www.cs.uu.nl/~piet [PGP 8DAE142BE17999C4] Private email: [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list
Package organization
I've been playing around with Python for a few months now, and I just recently started looking at packages to organize my growing project. So far, I've been organizing my application into one class per module. This has been working pretty well. For example, I simply import timer, then use t = timer.Timer() to allocate a new Timer object, . Unfortunately, this is yielding some pretty odd syntax when I use packages. Here is a sample of my package structure: /engine /graphics /input /world /timer timer.py # contains Timer class main.py Let's say I want to create a Timer object in main.py. I would need to do something like this: import engine.timer.timer.Timer t = engine.timer.timer.Timer() Maybe I shouldn't have a module and package with the same name, but it seems the most logical design. Unfortunately, the code is a bit ugly with timer included in the import three times. Is there a better way to do this? How do you guys organize your packages and modules? -- http://mail.python.org/mailman/listinfo/python-list
How to lock files (the easiest/best way)?
Is there something better than using fnctl? It seems a bit intimidating with a quick look. -- http://mail.python.org/mailman/listinfo/python-list
Re: What is a type error?
Joachim Durchholz wrote: Marshall schrieb: In some cases, you need an additional level of conceptual indirection - instead of *doing* the updates, you write a function that *describes* them. But then what do you do with that function? I pass it to an engine that's imperative. However, that engine doesn't need to do aliasing anymore. In other words, I'm separating mutability and aliasing, so that they can't combine and explode. This would seem to be identical to what I am proposing. Let's say I have an employee database. John Smith just got hired on 1/1/2006 with a salary of $10,000. I need to record this fact somewhere. How do I do that without variables? Current-employees is a variable. Even if I have the space to keep all historical data, so I'm not deleting anything, I still have to have a variable for the latest version of the accumulated data. I can solve this without pointers, but I can't solve it without variables. As I said elsewhere, the record has an identity even though it isn't explicit in SQL. H. What can this mean? In general, I feel that records are not the right conceptual level to think about. In any event, I am not sure what you mean by non-explicit identity. I would say, records in SQL have value, and their identity is exactly their value. I do not see that they have any identity outside of their value. We can uniquely identify any particular record via a key, but a table may have more than one key, and an update may change the values of one key but not another. So it is not possible in general to definitely and uniquely assign a mapping from each record of a table after an update to each record of the table before the update, and if you can't do that, then where is the record identity? (The situation is even more dire when one considers that SQL actually uses bag semantics and not set semantics.) [...] I should like to learn more about these. I have some vague perception of the existence of linear logic, but not much else. However, I also already have an excellent solution to the pointer aliasing problem, so I'm less motivated. Pointers are just the most obvious form of aliasing. As I said elsewhere, there are others: array indexing, by-reference parameters, or even WHERE clauses in SQL statements. In fact, anything that selects an updatable piece of data from a collection is an alias, and incurs the same problems as pointers, though they may come in different disguises. Okay. At this point, though, the term aliasing has become extremely general. I believe i+1+1 is an alias for i+2 under this definition. That is so general that I am concerned it has lost its ability to identify problems specific to pointers. Actually SQL has references - they are called primary keys, but they are references nevertheless. I strongly object; this is quite incorrect. I grant you that from the 50,000 foot level they appear identical, but they are not. To qualify as a reference, there need to be reference and dereference operations on the reference datatype; there is no such operation is SQL. Would you say the relational algebra has references? Yes. Or, consider the classic prolog ancestor query. Let's say we're setting up as follows father(bob, joe). father(joe, john). Is joe a reference, here? After all, when we do the ancestor query for john, we'll see his father is joe and then use that to find joe's father. Keys in SQL are isomorphic to joe in the above prolog. Agreed. They are both references ;-P Again, by generalizing the term this far, I am concerned with a loss of precision. If joe in the prolog is a references, then reference is just a term for data that is being used in a certain way. The conection with a specfic address space has been lost in favor of the full domain of the datatype. (Some SQL dialects also offer synthetic ID fields that are guaranteed to remain stable over the lifetime of a record. Primary keys are updatable; there is nothing special about them. Right - I was wrong with identifying keys and identities. In fact the identity of an SQL record cannot be directly obtained (unless via those ID fields). The records still have identities. It's possible to have two WHERE clauses that refer to the same record, and if you update the record using one WHERE clause, the record returned by the other WHERE clause will have changed, too. Is this any different from saying that an expression that includes a variable will produce a different value if the variable changes? In other words, i+1 will return a different value if we update i. It seems odd to me to suggest that i+1 has identity. I can see that i has identity, but I would say that i+1 has only value. But perhaps the ultimate upshoot of this thread is that my use of terminology is nonstandard. With a repeatable read isolation level, you actually return to a declarative view of the database:
Re: Python for Embedded Systems?
In article [EMAIL PROTECTED], Jack [EMAIL PROTECTED] wrote: Yes, I mean Lua, not Loa :-p Lua is a nice language. Like you said, it doesn't have many libraries as Python does. Plus, it's still evolving and the libraries are changing. I found a few functions not working last time I tried kepler libraries. It's good for embedded systems though because of its small footprint. Extensions implemented in C makes it possible that the installation size doesn't blow up when new stuff is added, like in Python. But I still like Python better for its power and for the style of the language itself. And I was hoping to find a Python implementation that bears the principles of Lua to make it suitable for embedded systems :) PHP may fit but I don't quite like the language. Anything else? Loa is small but it does not seem to be powerful enough. You mean Lua ? Not powerful enough ? What do you mean by that ? Lua is great IMHO. Sure it does not come with thousands of libraries, but the language design is extremely clean, the language constructs powerful and the footprint very small. 16kloc of C code can't hurt your embedded device can they ? ;) Please tell us what kind of limitation you find in Lua ... . . . PHP is about as bad a choice as there is for this domain. Let's talk about it some other time. The usual contestants are Forth, Lua, Tcl, and various Lisps. Python could play quite well at least in some situations, but entirely no one has done much since 1.5.2 times (which doesn't seem to me like a long time). If you're to the point of sniffing at Lua's relative poverty of libraries, you need to detail your requirements more pre- cisely. What's small and embedded to some people is a full-featured host to others. Generally speaking, yes, Lua is still advancing significantly, or, from a different per- spective, it hasn't stabilized yet. The point is that there's necessarily no Pareto optimizer which is simultaneously smallest, fastest, newest, most mature, most Unicode-aware, most featureful, lowest-level, highest-level, ... That's why there's a point to the engineering we do here. -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
In article [EMAIL PROTECTED], Carl J. Van Arsdall [EMAIL PROTECTED] wrote: . . . This raises a good question. Is there a need for python to change somewhat to work better in an embedded profile? Are there many people in the community interested in using python for embedded projects? . . . Yes and no. Python could thrive for the next decade while utterly surrendering the small-and-embedded domain to Forth, Lua, Tcl, Scheme, and so on, so, no, there's no *need* for a TinyPython. On the other hand, yes, there are at least several of us with an interest and occasional opportunities for Python in such applications. While URL: http://www.engcorp.com/acf/RecentChanges looks dormant, it was set up to serve just such constituencies, and we might yet breathe life into it--just as any of the other several TinyPython initiatives might, or might not, revivify. -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
Yi Xing wrote: I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. #!/usr/bin/env python import os,sys line = int(sys.argv[1]) path = sys.argv[2] os.system(sed -n %dp %s%(line,path)) Some might argue that this is not really doing it in Python. In fact, I would argue that! But if you're at a command prompt and you want to see line 7358, it's much easier to type % sed -n 7358p than it is to write the python one-liner. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to lock files (the easiest/best way)?
On Sat, 15 Jul 2006 23:28:21 +0200, Sybren Stuvel wrote: Elmo Mäntynen enlightened us with: Is there something better than using fnctl? It seems a bit intimidating with a quick look. Locking files is a complex business. What do you want to lock? Why? Lock it with respect to what? It's easier to lock a file for local use, compared to when the file also has to be locked from, say, use via the network. Sybren Only locally. I want to be able to read/write to a single file from multiple possibly parallel processes. Would 'touch lock' (or something like that) work reliably (this just occured to me)? -- http://mail.python.org/mailman/listinfo/python-list
Re: How to lock files (the easiest/best way)?
On Sat, 15 Jul 2006 23:52:10 +0200, Sybren Stuvel wrote: Elmo Mäntynen enlightened us with: Only locally. I want to be able to read/write to a single file from multiple possibly parallel processes. Would 'touch lock' (or something like that) work reliably (this just occured to me)? I use a lock directory for that, os.mkdir('/var/lock/somedir'). If you use a file, you need two steps: 1) Check whether the lock-file exists 2) Create the lock-file This is not atomic. With a directory, creating it will fail if it already exists. This means you can atomically check for the lock, and if it doesn't exist already, you've immediately created it too. Sybren Thanks. Is that what atomic basically means? -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
Yi Xing wrote: Hi All, I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. Yi Xing I once had to do a lot of random access of lines in a multi gigabyte log file. I found that a very fast way to do this was to build an index file containing the int offset in bytes of each line in the log file. I could post the code if you're interested. Peace, ~Simon -- http://mail.python.org/mailman/listinfo/python-list
Re: What is a type error?
Marshall schrieb: Joachim Durchholz wrote: As I said elsewhere, the record has an identity even though it isn't explicit in SQL. H. What can this mean? In general, I feel that records are not the right conceptual level to think about. They are, when it comes to aliasing of mutable data. I think it's justified by the fact that aliased mutable data has a galling tendency to break abstraction barriers. (More on this on request.) In any event, I am not sure what you mean by non-explicit identity. The identity isn't visible from inside SQL. (Unless there's an OID facility available, which *is* an explicit identity.) I would say, records in SQL have value, and their identity is exactly their value. Definitely not. You can have two equal records and update just one of them, yielding non-equal records; by my definition (and by intuition), this means that the records were equal but not identical. I do not see that they have any identity outside of their value. We can uniquely identify any particular record via a key, but a table may have more than one key, and an update may change the values of one key but not another. So it is not possible in general to definitely and uniquely assign a mapping from each record of a table after an update to each record of the table before the update, and if you can't do that, then where is the record identity? Such a mapping is indeed possible. Simply extend the table with a new column, number the columns consecutively, and identify the records via that column. But even if you don't do that, there's still identity. It is irrelevant whether the programs can directly read the value of the identity field; the adverse effects happen because updates are in-place. (If every update generated a new record, then we'd indeed have no identity.) Okay. At this point, though, the term aliasing has become extremely general. I believe i+1+1 is an alias for i+2 under this definition. No, i+1+1 isn't an alias in itself. It's an expression - to be an alias, it would have to be a reference to something. However, a[i+1+1] is an alias to a[i+2]. Not that this is particularly important - 1+1 is replacable by 2 in every context, so this is essentially the same as saying a[i+2] is an alias of a[i+2], which is vacuously true. There's another aspect here. If two expressions are always aliases to the same mutable, that's usually easy to determine; this kind of aliasing is usually not much of a problem. What's more of a problem are those cases where there's occasional aliasing. I.e. a[i] and a[j] may or may not be aliases of each other, depending on the current value of i and j, and *that* is a problem because the number of code paths to be tested doubles. It's even more of a problem because testing with random data will usually not uncover the case where the aliasing actually happens; you have to go around and construct test cases specifically for the code paths that have aliasing. Given that references may cross abstraction barriers (actually that's often the purpose of constructing a reference in the first place), this means you have to look for your test cases at multiple levels of software abstraction, and *that* is really, really bad. That is so general that I am concerned it has lost its ability to identify problems specific to pointers. If the reference to pointers above means references, then I don't know about any pointer problems that cannot be reproduced, in one form or the other, in any of the other aliasing mechanisms. Again, by generalizing the term this far, I am concerned with a loss of precision. If joe in the prolog is a references, then reference is just a term for data that is being used in a certain way. The conection with a specfic address space has been lost in favor of the full domain of the datatype. Aliasing is indeed a more general idea that goes beyond address spaces. However, identity and aliasing can be defined in fully abstract terms, so I welcome this opportunity to get rid of a too-concrete model. The records still have identities. It's possible to have two WHERE clauses that refer to the same record, and if you update the record using one WHERE clause, the record returned by the other WHERE clause will have changed, too. Is this any different from saying that an expression that includes a variable will produce a different value if the variable changes? Yes. Note that the WHERE clause properly includes array indexing (just set up a table that has continuous numeric primary key, and a single other column). I.e. I'm not talking about how a[i] is an alias of a[i+1] after updating i, I'm talking about how a[i] may be an alias of a[j]. It seems odd to me to suggest that i+1 has identity. It doesn't (unless it's passed around as a closure, but that's irrelevant to this discussion). i does have identity. a[i] does have identity. a[i+1] does have identity. Let me say that for
Re: Accessors in Python (getters and setters)
On 2006-07-15 12:04:20, mystilleef wrote: State - behavior is not something I made up, so it isn't subjective. It is a common term used in OO literature. In fact, the only reason I used it is because I thought is was common knowledge. Of course. But your association of state with attributes and behavior with methods is arbitrary to a specific implementation. Of course you probably will have always something like attributes to store state, but you may trigger behavior just as well through state changes as you may trigger it through method calls or other means. (Remember, this is about the public API, not about implementation details.) Gerhard -- http://mail.python.org/mailman/listinfo/python-list
Re: How to lock files (the easiest/best way)?
On 2006-07-15 18:52:10, Sybren Stuvel wrote: Elmo Mäntynen enlightened us with: Only locally. I want to be able to read/write to a single file from multiple possibly parallel processes. Would 'touch lock' (or something like that) work reliably (this just occured to me)? I use a lock directory for that, os.mkdir('/var/lock/somedir'). If you use a file, you need two steps: 1) Check whether the lock-file exists 2) Create the lock-file cvsnt for example used to use lock files. Now it uses a lock server: a server app that just sits there and allows different processes to acquire, check for and release locks on files. More implementation work, probably, but more efficient. Gerhard -- http://mail.python.org/mailman/listinfo/python-list
Re: Package organization
Mike Wyatt wrote: I've been playing around with Python for a few months now, and I just recently started looking at packages to organize my growing project. So far, I've been organizing my application into one class per module. This has been working pretty well. For example, I simply import timer, then use t = timer.Timer() to allocate a new Timer object, . Unfortunately, this is yielding some pretty odd syntax when I use packages. Here is a sample of my package structure: /engine /graphics /input /world /timer timer.py # contains Timer class main.py Let's say I want to create a Timer object in main.py. I would need to do something like this: import engine.timer.timer.Timer t = engine.timer.timer.Timer() Maybe I shouldn't have a module and package with the same name, but it seems the most logical design. Unfortunately, the code is a bit ugly with timer included in the import three times. Is there a better way to do this? How do you guys organize your packages and modules? One class per module? Sounds like you've been programming in Java (or C#) for too long :) But skipping the package structure for a moment you can simplify your use of the Timer class by changing your imports: from engine.timer.timer import Timer t = Timer() OR from engine.timer import timer t = timer.Timer() Ok, back to package structure. In Python putting 1 class per module basically means you're adding an extra level of nesting beyond the equivalent structure in languages like Java and C# that require you to create a new file per-class. In Java defining engine/timer/Timer.java you'd get an engine.timer.Timer class. As you saw in Python defining Timer in engine/timer/timer.py the class is now engine.timer.timer.Timer. Dropping that extra level by combining the classes in engine.timer into a single module will simplify things. -- Matt Good -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
In [EMAIL PROTECTED], Yi Xing wrote: I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. Don't know how efficient the `linecache` module in the standard library is implemented but you might have a look at it. Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list
Re: Letting a Python application phone home
On 2006-07-15 12:45:16, Nils Oliver Kröger wrote: This is surely possible. You need to define a protocol for the communication between client and server. As you are planning to send data over the internet you should build it on top of tcp. Look at the python module socket resp. SocketServer for low level tcp functions. You may consider using https and html forms for sending your data. The advantage is that code for the server part is readily available, and a server often already running on a target server system. Gerhard -- http://mail.python.org/mailman/listinfo/python-list
Using MapPoint with Python
New article on using Python scripting to automate map-making with example code, see screenshots. [MP2K Magazine] Using Python to Control MapPoint, Part 2 «Second of a two-part article by Richard Marsden on scripting MapPoint using Python.» http://www.mp2kmag.com/a134--python.winwaed.automation.mappoint.html Eric Frost http://www.mp2kmag.com - The Magazine for MapPoint -- http://mail.python.org/mailman/listinfo/python-list
Re: Accessors in Python (getters and setters)
On 2006-07-15, Gerhard Fiedler [EMAIL PROTECTED] wrote: On 2006-07-15 06:55:14, mystilleef wrote: In very well designed systems, the state of an object should only be changed by the object. IMO that's not quite true. Ultimately, the state always gets changed by something else (user interaction, physical events); very few objects are completely self-contained in their behavior. In most systems (and you possibly have written some of them) are objects whose state gets changed by other objects -- possibly through the intermediation of setter methods that do nothing else but set the state. There's no conceptual difference between directly setting the state or calling a setter function that does nothing else but directly setting the state -- except for one unnecessary level of indirection in the latter. The conceptual difference is that a function call is more like an event, a variable is more like a process. An object that provides a setter is a process that is prepared to engage in this set event. An object that exposes a variable is a process that interacts with this variable which the user is also invited to interact with concurrently. So with a setter in the API, conceptually, there are two processes sharing the set event: the object itself, and the process that's calling the setter. With an exposed variable, there are three: the object, the variable in between, and the calling process. Restricting yourself to setters and getters is a bit like saying we build a machine that only has touch-keys and lights on the outside. Shared variables are more like a machine with levers and dials you set, and bits that pop up, like the numbers on mechanical cash-registers. They have state on the outside, not just on the inside. Such designs can be less tolerant of unsympathetic input-- think how easy it is to jam up an old-fashioned typewriter if you just press a few keys at the same time. There isn't any practical difference, as you say, if all the setter does is set. But it might easily do a few other subtle things, in particular wait for a good moment to actually effect the change. -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
Pierre Quentel: If the line number of the first line is 0 : source=open('afile.txt') for i,line in enumerate(source): if i == line_num: break print line I don't know if something like this can be called an improvement: from itertools import islice afile = file('data.txt') line_n = 10 print islice(afile, line_n, line_n+1).next() Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list
Re: automatic debugger?
[EMAIL PROTECTED] writes: hi is there something like an automatic debugger module available in python? Say if i enable this auto debugger, it is able to run thru the whole python program, print variable values at each point, or print calls to functions..etc...just like the pdb module, but now it's automatic. thanks pydb (http://bashdb.sourceforge.net) has a linetrace option sort of like what's done in POSIX shells. Here's an example: #!/usr/bin/python Towers of Hanoi import sys,os def hanoi(n,a,b,c): if n-1 0: hanoi(n-1, a, c, b) print Move disk %s to %s % (a, b) if n-1 0: hanoi(n-1, c, b, a) i_args=len(sys.argv) if i_args != 1 and i_args != 2: print *** Need number of disks or no parameter sys.exit(1) n=3 if i_args 1: try: n = int(sys.argv[1]) except ValueError, msg: print ** Expecting an integer, got: %s % repr(sys.argv[1]) sys.exit(2) if n 1 or n 100: print *** number of disks should be between 1 and 100 sys.exit(2) hanoi(n, a, b, c) $ pydb --basename --trace hanoi.py (hanoi.py:2): + Towers of Hanoi (hanoi.py:3): + import sys,os (hanoi.py:5): + def hanoi(n,a,b,c): (hanoi.py:12): + i_args=len(sys.argv) (hanoi.py:13): + if i_args != 1 and i_args != 2: (hanoi.py:17): + n=3 (hanoi.py:19): + if i_args 1: (hanoi.py:26): + if n 1 or n 100: (hanoi.py:30): + hanoi(n, a, b, c) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:7): hanoi +hanoi(n-1, a, c, b) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:7): hanoi +hanoi(n-1, a, c, b) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk a to b (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:9): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk a to c (hanoi.py:9): hanoi + if n-1 0: (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk b to c (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk a to b (hanoi.py:9): hanoi + if n-1 0: (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:7): hanoi +hanoi(n-1, a, c, b) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk c to a (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:9): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk c to b (hanoi.py:9): hanoi + if n-1 0: (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) --Call-- (hanoi.py:5): hanoi + def hanoi(n,a,b,c): (hanoi.py:6): hanoi + if n-1 0: (hanoi.py:8): hanoi + print Move disk %s to %s % (a, b) Move disk a to b (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:9): hanoi + if n-1 0: --Return-- (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) --Return-- (hanoi.py:10): hanoi +hanoi(n-1, c, b, a) --Return-- (hanoi.py:30): + hanoi(n, a, b, c) --Return-- (string:1): + (bdb.py:366): run + exec cmd in globals, locals -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
[EMAIL PROTECTED] (Cameron Laird) writes: Yes and no. Python could thrive for the next decade while utterly surrendering the small-and-embedded domain to Forth, Lua, Tcl, Scheme, and so on, so, no, there's no *need* for a TinyPython. On the other hand, yes, there are at least several of us with an interest and occasional opportunities for Python in such applications. I think we should see what happens with PyPy, which might be easier to target at embedded platforms than CPython is. Main thing needed would be a static compiler--I haven't followed PyPy enough to know if it relies on having Psyco at runtime. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to lock files (the easiest/best way)?
Sybren Stuvel [EMAIL PROTECTED] writes: I use a lock directory for that, os.mkdir('/var/lock/somedir'). If you use a file, you need two steps: 1) Check whether the lock-file exists 2) Create the lock-file This is not atomic. With a directory, creating it will fail if it already exists. This means you can atomically check for the lock, and if it doesn't exist already, you've immediately created it too. The classic way in Unix was to make a link: 1) link('some_other_file', 'lockfile') This was atomic and would fail if lockfile already existed. I'm not sure whether it can still be reliable, in current environments that can involve remote file systems etc. But I'm not sure if the mkdir approach works either. Maybe you want to use something like shm or posh? -- http://mail.python.org/mailman/listinfo/python-list
Re: PyQT installation /configuration
[EMAIL PROTECTED] wrote: Phil Thompson wrote: For Qt4 use the binary installer from... http://www.trolltech.com/developer/downloads/qt/windows For PyQt4 use the binary installer from... http://www.riverbankcomputing.co.uk/pyqt/download.php Ah thanks, I'm a dork. Why didn't I see that before mutter? Waitaminute, didn't you write it? Oh dear. I've got another problem, I'm afraid - I've installed Qt 4.1.4 and PyQt GPL v4.0 over Python 2.4, and the demos for both run happily enough, but when I try to run the first example (in IDLE) from Boudewijn Rempt's GUI Programming with Python: QT Edition I just get ImportError: No module named qt. Is there something I need to add to my sys.path here? Sorry to bother you with the newbie questions. -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie graphing recommendations ?
[EMAIL PROTECTED] wrote: Adam wrote: Where should a py newbie start to do some 2D graphs on screen ? PythonGraphApi, Gato, looks interesting pygraphlib, matplotlib, is there a best native Python place to start ? The only good and simple way I have found so far to do some free graphics with Python in a Window is using PyGame. (You can also use TKinter, but it's slower). MatPlotLib is very good to graph functions, datasets, etc. and to save them to an image file. There are other good libs if/when you want 3D graphics. Bye, bearophile do you think that pygame would be a good alternative to matplotlib to create some graphs such simple bar and line graphs? i want to animate them as new data comes comes in. i would also like to have the bars and graphs have nice shading if possible to give it a really attractive look. also, do you know if a pygame windows can be embedded in a wxPython app? thanks, bryan -- http://mail.python.org/mailman/listinfo/python-list
Re: PyQT installation /configuration
[EMAIL PROTECTED] wrote: I've got another problem, I'm afraid - I've installed Qt 4.1.4 and PyQt GPL v4.0 over Python 2.4, and the demos for both run happily enough, but when I try to run the first example (in IDLE) from Boudewijn Rempt's GUI Programming with Python: QT Edition I just get ImportError: No module named qt. Is there something I need to add to my sys.path here? The module structures for PyQt3 and PyQt4 are quite different: the monolithic qt module from PyQt3 has been replaced by a number of modules in PyQt4. Despite this, there is a similar way to import qt in PyQt4: from PyQt4 import Qt However, you will have difficulty using the examples in that book because it was written for PyQt3. Work is underway to port the book to PyQt4, but it will take some time. (You can help with this and learn about PyQt4 at the same time, if you want.) In the meantime, the set of slides from a talk at EuroPython 2006 is probably the only learning material on the web for PyQt4: http://indico.cern.ch/contributionDisplay.py?contribId=33amp;sessionId=41amp;confId=44 There's plenty of learning material for Qt 4; the official documentation at http://doc.trolltech.com/4.1 contains examples and overviews that are readable if you already know C++. Those of us who use PyQt4 are still catching up! All the best, David -- http://mail.python.org/mailman/listinfo/python-list
Re: Python for Embedded Systems?
In article [EMAIL PROTECTED], Paul Rubin http://[EMAIL PROTECTED] wrote: [EMAIL PROTECTED] (Cameron Laird) writes: Yes and no. Python could thrive for the next decade while utterly surrendering the small-and-embedded domain to Forth, Lua, Tcl, Scheme, and so on, so, no, there's no *need* for a TinyPython. On the other hand, yes, there are at least several of us with an interest and occasional opportunities for Python in such applications. I think we should see what happens with PyPy, which might be easier to target at embedded platforms than CPython is. Main thing needed would be a static compiler--I haven't followed PyPy enough to know if it relies on having Psyco at runtime. PyPy indeed presents exciting prospects. -- http://mail.python.org/mailman/listinfo/python-list
Re: PyQT installation /configuration
David Boddie wrote: The module structures for PyQt3 and PyQt4 are quite different: the monolithic qt module from PyQt3 has been replaced by a number of modules in PyQt4. Despite this, there is a similar way to import qt in PyQt4: from PyQt4 import Qt However, you will have difficulty using the examples in that book because it was written for PyQt3. Ah yes, it doesn't recognise QApplication now. Never mind. Work is underway to port the book to PyQt4, but it will take some time. (You can help with this and learn about PyQt4 at the same time, if you want.) Er...you might be overestimating my potential unless there's some *really* entry-level material to be dealt with there. Though they do say it's a good way to learn. Is there a forum? In the meantime, the set of slides from a talk at EuroPython 2006 is probably the only learning material on the web for PyQt4: http://indico.cern.ch/contributionDisplay.py?contribId=33amp;sessionId=41amp;confId=44 There's plenty of learning material for Qt 4; the official documentation at http://doc.trolltech.com/4.1 contains examples and overviews that are readable if you already know C++. One of the reasons I chose Python was so I wouldn't have to, alas. Thanks! -- http://mail.python.org/mailman/listinfo/python-list
Re: What is a type error?
Joachim Durchholz wrote: Marshall schrieb: Joachim Durchholz wrote: As I said elsewhere, the record has an identity even though it isn't explicit in SQL. H. What can this mean? In general, I feel that records are not the right conceptual level to think about. They are, when it comes to aliasing of mutable data. I think it's justified by the fact that aliased mutable data has a galling tendency to break abstraction barriers. (More on this on request.) I can see how pointers, or other kinds of aliasing (by my more restricted definition) break abstraction barries; it is hard to abstract something that can change out from under you uncontrollably. In any event, I am not sure what you mean by non-explicit identity. The identity isn't visible from inside SQL. (Unless there's an OID facility available, which *is* an explicit identity.) Agreed about OIDs. I would say, records in SQL have value, and their identity is exactly their value. Definitely not. You can have two equal records and update just one of them, yielding non-equal records; by my definition (and by intuition), this means that the records were equal but not identical. This sort of thing comes up when one has made the mistake of not defining any keys on one's table and needs to rectify the situation. It is in fact considered quite a challenge to do. My preferred technique for such a situation is to create a new table with the same columns and SELECT DISTINCT ... INTO ... then recreate the original table. So that way doesn't fit your model. How else might you do it? I suppose there are nonstandard extensions, such as UPDATE ... LIMIT. And in fact there might be some yucky thing that made it in to the standard that will work. But what you descrbe is certainly *not* possible in the relational algebra; alas that SQL doesn't hew closer to it. Would you agree? Would you also agree that if a language *did* adhere to relation semantics, then relation elements would *not* have identity? (Under such a language, one could not have two equal records, for example.) [The above paragraph is the part of this post that I really care about; feel free to ignore the rest if it's naive or annoying or whatever, but please do respond to this.] I do not see that they have any identity outside of their value. We can uniquely identify any particular record via a key, but a table may have more than one key, and an update may change the values of one key but not another. So it is not possible in general to definitely and uniquely assign a mapping from each record of a table after an update to each record of the table before the update, and if you can't do that, then where is the record identity? Such a mapping is indeed possible. Simply extend the table with a new column, number the columns consecutively, and identify the records via that column. That doesn't work for me. It is one thing to say that for all tables T, for all elements e in T, e has identity. It is a different thing to say that for all tables T, there exists a table T' such that for all elements e in T', e has identity. But even if you don't do that, there's still identity. It is irrelevant whether the programs can directly read the value of the identity field; the adverse effects happen because updates are in-place. (If every update generated a new record, then we'd indeed have no identity.) Okay. At this point, though, the term aliasing has become extremely general. I believe i+1+1 is an alias for i+2 under this definition. No, i+1+1 isn't an alias in itself. It's an expression - to be an alias, it would have to be a reference to something. However, a[i+1+1] is an alias to a[i+2]. Not that this is particularly important - 1+1 is replacable by 2 in every context, so this is essentially the same as saying a[i+2] is an alias of a[i+2], which is vacuously true. To me, the SQL with the where clause is like i+2, not like a[2]. A query is simply an expression that makes mention of a variable. However I would have to admit that if SQL table elements have identity, it would be more like the array example. (The model of SQL I use in my head is one with set semantics, and I am careful to avoid running in to bag semantics by, for example, always defining at least one key, and using SELECT DISTINCT where necessary. But it is true that the strict set semantics in my head are not the wobbly bag semantics in the standard.) There's another aspect here. If two expressions are always aliases to the same mutable, that's usually easy to determine; this kind of aliasing is usually not much of a problem. What's more of a problem are those cases where there's occasional aliasing. I.e. a[i] and a[j] may or may not be aliases of each other, depending on the current value of i and j, and *that* is a problem because the number of code paths to be tested doubles. It's even more of a problem because testing with random data will
about Python types and objects
Hi everyone: I have read the booth python types and objects. I think its book for clearificating types and objects in python. It says there will be a book named python attributes and methods. Do you know any information about this book. I am interested in it. Thanks -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
vbgunz wrote: vbgunz wrote: Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? The only time I see [A[B on Linux in a console is when I am not logged in. Check to see if you're logged in and then try again. AFAIK, Linux does support console history. I hope this helps :) Sorry, I missed code.InteractiveConsole *but* maybe being logged in has something to do with it? Heh, how could I run Python if I weren't logged in :P -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
Robert Kern wrote: Chris Spencer wrote: Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? Be sure that the readline module is installed. Yeah, import readline works just fine. My problem isn't hard to replicate. Can anyone else on Linux get command history to work with the following code? Note, it should be saved and run from a file. from code import InteractiveConsole i = InteractiveConsole(globals()) i.interact() -- http://mail.python.org/mailman/listinfo/python-list
Re: InteractiveConsole History on Linux
Chris Spencer wrote: Robert Kern wrote: Chris Spencer wrote: Why does code.InteractiveConsole support command history on Windows, but not in a Gnome terminal (all I get is ^[[A^[[B)? Or does it not support history at all, and the Windows console is implementing it's own? Is there any way to get command history working with InteractiveConsole on Linux? Be sure that the readline module is installed. Yeah, import readline works just fine. My problem isn't hard to replicate. Can anyone else on Linux get command history to work with the following code? Note, it should be saved and run from a file. from code import InteractiveConsole i = InteractiveConsole(globals()) i.interact() You will also have to make sure that you import readline, too. This works for me: import readline from code import InteractiveConsole i = InteractiveConsole(globals()) i.interact() -- 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 -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
Yi, Use the linecache module. The documentation states that : The linecache module allows one to get any line from any file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. import linecache linecache.getline('/etc/passwd', 4) 'sys:x:3:3:sys:/dev:/bin/sh\012' Please note that you cannot really skip over the lines unless each has a fixed known size. (and if all lines have a fixed, known size then they can be considered as 'records' and you can use seek() and other random access magic. That is why sometimes it is a lot faster to use fixed length rows in a database = increase the speed of search but at the expense of wasted space! - but this is a another topic for another discussion...). So the point is that you won't be able to jump to line 15000 without reading lines 0-14999. You can either iterate over the rows by yourself or simply use the 'linecache' module like shown above. If I were you I would use the linecache, but of course you don't mention anything about the context of your project so it is hard to say. Hope this helps, Nick Vatamaniuc Yi Xing wrote: Hi All, I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. Yi Xing -- http://mail.python.org/mailman/listinfo/python-list
Re: reading specific lines of a file
On 16/07/2006 2:54 PM, Nick Vatamaniuc top-posted: Yi, Use the linecache module. Yi, *don't* use the linecache module without carefully comparing the documentation and the implementation with your requirements. You will find that you have the source code on your computer -- mine (Windows box) is at c:\Python24\Lib\linecache.py. When you read right down to the end (it's not a large file, only 108 lines), you'll find this: try: fp = open(fullname, 'rU') lines = fp.readlines() fp.close() except IOError, msg: ## print '*** Cannot open', fullname, ':', msg return [] size, mtime = stat.st_size, stat.st_mtime cache[filename] = size, mtime, lines, fullname Looks like it's caching the *whole* of *each* file. Not unreasonable given it appears to have been written to get source lines to include in tracebacks. It might just not be what you want if as you say you have a huge txt file. How many megabytes is huge? Cheers, John The documentation states that : The linecache module allows one to get any line from any file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. import linecache linecache.getline('/etc/passwd', 4) 'sys:x:3:3:sys:/dev:/bin/sh\012' Please note that you cannot really skip over the lines unless each has a fixed known size. (and if all lines have a fixed, known size then they can be considered as 'records' and you can use seek() and other random access magic. That is why sometimes it is a lot faster to use fixed length rows in a database = increase the speed of search but at the expense of wasted space! - but this is a another topic for another discussion...). So the point is that you won't be able to jump to line 15000 without reading lines 0-14999. You can either iterate over the rows by yourself or simply use the 'linecache' module like shown above. If I were you I would use the linecache, but of course you don't mention anything about the context of your project so it is hard to say. Hope this helps, Nick Vatamaniuc Yi Xing wrote: Hi All, I want to read specific lines of a huge txt file (I know the line #). Each line might have different sizes. Is there a convenient and fast way of doing this in Python? Thanks. Yi Xing -- http://mail.python.org/mailman/listinfo/python-list
[ python-Bugs-1519069 ] incorrect locale.strcoll() return in Windows
Bugs item #1519069, was opened at 2006-07-08 05:04 Message generated for change (Comment added) made by loewis You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1519069group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Windows Group: Python 2.4 Status: Open Resolution: None Priority: 5 Submitted By: Brian Matherly (pez4brian) Assigned to: Nobody/Anonymous (nobody) Summary: incorrect locale.strcoll() return in Windows Initial Comment: Python 2.4.2 in Windows (English locale): import locale locale.setlocale(locale.LC_ALL,'C') 'C' locale.setlocale(locale.LC_ALL,'') 'English_United States.1252' locale.strcoll(M,m) 1 locale.strcoll(Ma,mz) -1 It appears that when a string has one character, M is greater than m, but when it has more than one string, M is equal to m -- Comment By: Martin v. Löwis (loewis) Date: 2006-07-15 09:37 Message: Logged In: YES user_id=21627 You should ask these questions in some Win32 programmer newsgroup. I don't know whether this sorting is correct or not, I'm not a native English speaker. -- Comment By: Brian Matherly (pez4brian) Date: 2006-07-15 05:14 Message: Logged In: YES user_id=726294 Thanks for your response. That is simply unacceptable. Who at Microsoft needs to be flogged? More likely, this shows my lack of understanding of strings and locale in general. Your explanation does explain the results I get, but wouldn't you admit that the results *seem* wrong? By the definition given, the strings Ma, mb, Mc, md would actually sort in that order! So the list of sorted strings would have alternating capitalization! However, the list of strings M, m, M, m would sort as M, M, m, m - no alternating capitalization - as I would expect. Would there happen to be some way to sort the strings using the locale, but also using the case earlier in the computation order? Basically, I want the sort to be case sensitive. Thanks again for your response. If you have any suggestions that might help me achieve what I want, it would be greatly appreciated. -- Comment By: Martin v. Löwis (loewis) Date: 2006-07-14 17:55 Message: Logged In: YES user_id=21627 Why do you think this is a bug? We pass the string as-is to the C library, which passes it nearly as-is to CompareStringW. This function then decides how they collate; in Microsoft's definition of the English_United States locale, these strings do have the order you get. In case you wonder how the order is computed: essentially, the strings are compared case insensitive, without diacritics. If they then compare equal, the diacritics are considered. If this still compares equal, Case weights are considered. If this still compares equal, Special weights are considered. (Note: I obtained this indirectly by looking at the LCMapString documentation, assuming that CompareString uses LCMapString with LCMAP_SORTKEY|SORT_STRINGSORT). -- Comment By: Brian Matherly (pez4brian) Date: 2006-07-08 05:35 Message: Logged In: YES user_id=726294 I see the same problem in python 2.4.3 -- Comment By: Brian Matherly (pez4brian) Date: 2006-07-08 05:08 Message: Logged In: YES user_id=726294 Correction: It appears that when a string has one character, M is greater than m, but when it has more than one character, M is equal to m -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1519069group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1513617 ] IDLE fails to launch after 46272
Bugs item #1513617, was opened at 2006-06-27 17:18 Message generated for change (Settings changed) made by kbk You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1513617group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: IDLE Group: None Status: Open Resolution: None Priority: 7 Submitted By: John Bollinger (bbands) Assigned to: Kurt B. Kaiser (kbk) Summary: IDLE fails to launch after 46272 Initial Comment: As of revision 46805 IDLE fails silently on launch. If launched from a command prompt the following output is seen. D:\Python24\Lib\idlelibpython idle.py Traceback (most recent call last): File idle.py, line 2, in ? import idlelib.PyShell File D:\Python24\lib\idlelib\PyShell.py, line 27, in ? from EditorWindow import EditorWindow, fixwordbreaks File D:\Python24\lib\idlelib\EditorWindow.py, line 42, in ? class EditorWindow(object): File D:\Python24\lib\idlelib\EditorWindow.py, line 47, in EditorWindow import Bindings File D:\Python24\lib\idlelib\Bindings.py, line 109, in ? default_keydefs = idleConf.GetCurrentKeySet() File D:\Python24\lib\idlelib\configHandler.py, line 499, in GetCurrentKeySet result = self.GetKeySet(self.CurrentKeys()) File D:\Python24\lib\idlelib\configHandler.py, line 519, in GetKeySet activeExtns=self.GetExtensions(active_only=1) File D:\Python24\lib\idlelib\configHandler.py, line 377, in GetExtensions extns=self.RemoveKeyBindNames( File D:\Python24\lib\idlelib\configHandler.py, line 410, in RemoveKeyBindNames if name.endswith(('_bindings', '_cfgBindings')): TypeError: expected a character buffer object -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1513617group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1518772 ] ext/win-cookbook.html has a broken link to distutils
Bugs item #1518772, was opened at 2006-07-07 23:02 Message generated for change (Comment added) made by quiver You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1518772group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Documentation Group: Python 2.5 Status: Closed Resolution: None Priority: 5 Submitted By: Johannes Gijsbers (jlgijsbers) Assigned to: Fred L. Drake, Jr. (fdrake) Summary: ext/win-cookbook.html has a broken link to distutils Initial Comment: http://docs.python.org/ext/win-cookbook.html has a link to distutils which points to http://docs.python.org/ext/module-distutils.html. It should point to http://docs.python.org/lib/module-distutils.html. -- Comment By: George Yoshida (quiver) Date: 2006-07-16 01:21 Message: Logged In: YES user_id=671362 Fixed in revision 50664 50664. Thanks for the report. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1518772group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Feature Requests-592047 ] Add syntax coloring to Mac IDE
Feature Requests item #592047, was opened at 2002-08-07 09:14 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=355470aid=592047group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Dan Grassi (dgrassi) Assigned to: Just van Rossum (jvr) Summary: Add syntax coloring to Mac IDE Initial Comment: I suggest including syntax coloring (AdvancedEditor.py) into the Mac IDE. Syntax coloring is now expected and it can be disabled easily. I would be willing to do the work. Also the default font need to change or be installed. Not all fonts handle bold-ing and with the default missing a font that does not work ends up as default. Dan -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 12:56 Message: Logged In: YES user_id=139309 The Mac IDE is deprecated in preference of IDLE. -- Comment By: Jack Jansen (jackjansen) Date: 2002-08-07 09:58 Message: Logged In: YES user_id=45365 This is a request for the Mac IDE, not for tkinter-based IDLE. Also, assigning it to Just. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=355470aid=592047group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Feature Requests-779160 ] Enhance PackageManager functionality
Feature Requests item #779160, was opened at 2003-07-28 16:52 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=355470aid=779160group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Bob Ippolito (etrepum) Assigned to: Jack Jansen (jackjansen) Summary: Enhance PackageManager functionality Initial Comment: PackageManager should probably let you choose a tarball/ zip/folder on disk (or drag + drop) and look for a setup.py that it would do the Usual Thing with. Perhaps also let you choose an arbitrary .py file and scan for 'distutils' -- but I've only seen a called-something-other-than-setup.py distutils installer in one package (it had multiple setup-prefixed installers that installed different related modules, and an annoying no-op setup.py.. so I would say this is a bug on his part). PackageManager should be refactored to be responsive and non-blocking (i.e. threaded or forking). -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 12:57 Message: Logged In: YES user_id=139309 PackageManager is deprecated in favor of Cheese Shop + easy_install and bdist_mpkg + pythonmac.org/packages -- Comment By: has (hhas) Date: 2004-06-04 14:26 Message: Logged In: YES user_id=996627 PackageManager should probably let you choose a tarball/ zip/folder on disk (or drag + drop) and look for a setup.py that it would do the Usual Thing with. See my PyMod application for a simple standalone solution that fulfills this requirement: http://freespace.virgin.net/hamish.sanderson/PyMod.app.sit Supports building and installing distutils packages, and PyPI registration through a simple GUI. Could use a better name and icon, and needs a bit more user testing (only tested on 10.2.6 so far), but is otherwise ready to roll, and you're welcome to include in the MacPython 2.4 distribution. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=355470aid=779160group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1149804 ] macostools.mkdirs: not thread-safe
Bugs item #1149804, was opened at 2005-02-23 08:26 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1149804group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Open Resolution: None Priority: 5 Submitted By: Jurjen N.E. Bos (jneb) Assigned to: Jack Jansen (jackjansen) Summary: macostools.mkdirs: not thread-safe Initial Comment: Here is an easily fixable semi-bug in macostools: When two threads are creating the same directory structure, one of them will fail as soon as the other thread made a directory. This is trivially fixable by ignoring the error, but I'm not sure if it is worth it, like this: def mkdirs(dst): Make directories leading to 'dst' if they don't exist yet if dst == '' or os.path.exists(dst): return head, tail = os.path.split(dst) if os.sep == ':' and not ':' in head: head = head + ':' mkdirs(head) try: os.mkdir(dst, 0777) except OSError, err: if err.errno==17: #file exists #someone else has created the directory in the meantime. That's fine with me! pass else: raise - Jurjen -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:04 Message: Logged In: YES user_id=139309 Most Python functions aren't intended to be thread-safe, this is what locks are for. I don't think this should be fixed, not even in os.makedirs. -- Comment By: Just van Rossum (jvr) Date: 2005-03-01 03:49 Message: Logged In: YES user_id=92689 Oops, disregard that portability remark, it does work correctly in non-OS9 Python as well. I _think_ macostools.mkdirs() predates os.makedirs(), it's probably best considered deprecated. -- Comment By: Just van Rossum (jvr) Date: 2005-03-01 03:40 Message: Logged In: YES user_id=92689 Hm, macostools.mkdirs() also isn't portable: it only works on OS9 MacPython. Why don't you use os.makedirs() instead? (Which appears to have the same threads issue, though.) -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1149804group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-776600 ] PIL binary package missing jpeg support (pimp)
Bugs item #776600, was opened at 2003-07-23 19:54 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=776600group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: Python 2.3 Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Bob Ippolito (etrepum) Assigned to: Jack Jansen (jackjansen) Summary: PIL binary package missing jpeg support (pimp) Initial Comment: Binary installation of PIL should be compiled with a static libjpeg. -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:07 Message: Logged In: YES user_id=139309 Repository no longer maintained, irrelevant. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=776600group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-735110 ] Mach-O gcc optimisation flag can boost performance up to 10%
Bugs item #735110, was opened at 2003-05-09 05:02 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=735110group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: Feature Request Status: Open Resolution: None Priority: 5 Submitted By: Just van Rossum (jvr) Assigned to: Jack Jansen (jackjansen) Summary: Mach-O gcc optimisation flag can boost performance up to 10% Initial Comment: This article: http://www.unsanity.org/archives/44.php says that the -mdynamic-no-pic gcc flag can boost performance of statically linked apps around 10%. Testing this with a non-framework build of Python shows this is indeed the case. -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:09 Message: Logged In: YES user_id=139309 This isn't really relevant, Mac OS X builds of Python are built as a shared library or framework (same thing, basically). Both cases require PIC. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=735110group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-711991 ] IDE needs easy access to builtin help()
Bugs item #711991, was opened at 2003-03-29 18:33 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=711991group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Jack Jansen (jackjansen) Assigned to: Just van Rossum (jvr) Summary: IDE needs easy access to builtin help() Initial Comment: Just, I'm assigning this to you for feedback. Feel free to assign back after providing it. I think we need access to the help()-style documentation in the IDE, especially when browsing objects and such it would be very helpful. What I'm thinking of at the moment is a window called quot;Help for Selectionquot; (any better ideas?), and if that window is opened it will display the help() text for the current selection. It would follow focus, i.e. when you select a different window or a different object in the same window it would change. An alternative design would be that you would have to use a command quot;Show Help for Selectionquot; which would bring up a static window with the help() contents. A third possibility (best of both worlds?) would be a window that has a checkbox quot;Follow Selectionquot;, initially true. If you deselect it the window would stay open statically, and a subsequent quot;Show Help for Selectionquot; command would bring up a new window with the checkbox checked. -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:09 Message: Logged In: YES user_id=139309 IDE is deprecated in favor of IDLE. -- Comment By: Just van Rossum (jvr) Date: 2003-04-11 04:56 Message: Logged In: YES user_id=92689 I would just go for quot;Show Help for Selectionquot;. I'm not so sure how useful following the selection would be (thinking of a scenenario where you lookup some info based on the selection, then continue editing, following the help. It would be irritating if the help would disappear or change then. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=711991group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-710374 ] Raise IDE output window over splash screen on early crash
Bugs item #710374, was opened at 2003-03-26 17:33 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=710374group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Jack Jansen (jackjansen) Assigned to: Just van Rossum (jvr) Summary: Raise IDE output window over splash screen on early crash Initial Comment: This one was also submitted by macrulezatsofthomedotnet, but I'm not so sure about it. What do you think, would changing the DLOG resource for the splash screen have other, unforeseen side effects? The effect of the change I would dearly like: how often have I cursed the %#$ spalsh screen being in front of the error message I would really love to see... Sometimes the script short-circuits while Python IDE is starting actually, I haven't fixed that yet, but I did get around the problem of it preventing Python from starting (which is a problem because the user then cannot quit). I ResEdited the Python IDE and changed the 'DLOG' resource, such that the 'About' dialogue (the splash screen) is a window, rather than an actual dialogue. thus, when the lt;interruptedgt; window appears (showing a traceback), it moves to the frontmost instead of remaining behind the splash where it can't be read. -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:10 Message: Logged In: YES user_id=139309 IDE is deprecated in favor of IDLE. -- Comment By: Jack Jansen (jackjansen) Date: 2003-03-27 15:55 Message: Logged In: YES user_id=45365 Much better idea! -- Comment By: Just van Rossum (jvr) Date: 2003-03-27 04:20 Message: Logged In: YES user_id=92689 Perhaps the splash screen stuff should be in a try/finally so it's guaranteed to get closed? -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=710374group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-710373 ] IDE stdin doesn't have readlines
Bugs item #710373, was opened at 2003-03-26 17:30 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=710373group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: None Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Jack Jansen (jackjansen) Assigned to: Just van Rossum (jvr) Summary: IDE stdin doesn't have readlines Initial Comment: This was submitted by email by macrulezatsofthomedotnet. It looks reasonable, but please have a look too. SimpleStdin doesn't provide a readlines method some scripts call sys.stdin.readlines(). the default stdin does not support this behaviour. I added it by copying and pasting the readlines method from StringIO, and adapting the indentation to fit. works beautifully: it asks the user for a line of input repeatedly until the user clicks 'Cancel'. not perfect UI, but it's something. -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:10 Message: Logged In: YES user_id=139309 IDE is deprecated in favor of IDLE. -- Comment By: Just van Rossum (jvr) Date: 2003-03-27 04:18 Message: Logged In: YES user_id=92689 Hm, I find the stdin.readline() emulation already a big pain, and I'm hesitant to add an even uglier kludge to support readlines(). The IDE is simply not well suited for stdin-based scripts, they are _much_ better run from the command line. But: an actual patch might still make it in... -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=710373group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-573174 ] Mac IDE behaviour (output to console)
Bugs item #573174, was opened at 2002-06-24 11:40 Message generated for change (Comment added) made by etrepum You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=573174group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Macintosh Group: Platform-specific Status: Closed Resolution: Wont Fix Priority: 5 Submitted By: Carl Hagelberg (chagel) Assigned to: Just van Rossum (jvr) Summary: Mac IDE behaviour (output to console) Initial Comment: On woensdag, juni 5, 2002, at 05:15 , Carl Hagelberg wrote: gt; Hi Jack, gt; gt; There's a difference between the result of the following gt; example when using gt; the interactive window and a 'program window' using the quot;Run gt; allquot; button gt; (OSX): gt; gt; a, b = 0, 1 gt; while b lt; 1000: gt; print b, gt; a, b = b, a+b gt; gt; gt; With out the quot;,quot; after 'print b' they both work the same. With gt; the comma gt; only the interactive window works. Is there a syntax issue in gt; the program gt; window? Carl, this is a quot;known issuequot;, but unfortunately one that is difficult to fix. The IDE flushes output to the console window on end-of-line only. It has no knowledge of the print statement, it just sees a stream of characters, and it can flush either (a) at ever character or (b) at every end-of-line. The first would make it horrendously inefficient, so it does the latter. Put one quot;printquot; without the comma at the end and everything will be printed. But: this bug should be noted in the sourceforge bug list. Could you please add it (category Macintosh, assign it to me or Just (jvr))? -- - Jack Jansenlt;[EMAIL PROTECTED]gt; http://www.cwi.nl/~jack - - If I can't dance I don't want to be part of your revolution -- Emma Goldman - -- Comment By: Bob Ippolito (etrepum) Date: 2006-07-15 13:10 Message: Logged In: YES user_id=139309 IDE is deprecated in favor of IDLE. -- Comment By: Just van Rossum (jvr) Date: 2002-07-24 14:22 Message: Logged In: YES user_id=92689 I just looked at Idle's OutputWindow.py, and that doesn't do any buffering at all. So I wonder whether we should do that, too. Or maybe autoflush if the buffer is longer than X bytes. -- Comment By: Jack Jansen (jackjansen) Date: 2002-07-10 16:26 Message: Logged In: YES user_id=45365 Just, I'm assigning this to you (should have done so weeks ago:-). It might be worthwhile to check out whether Idle has a workaround for this. Maybe something like doing a sys.stdout.flush() at a strategic point in the event loop is a solution (if it isn't too expensive), and otherwise at least such a flush when IDE goes idle (no pun intended). And if it's too difficult just mark it quot;won't fixquot;:-) -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=573174group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1523136 ] incorrect tcp checksum
Bugs item #1523136, was opened at 2006-07-15 18:49 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1523136group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Python Library Group: Python 2.4 Status: Open Resolution: None Priority: 5 Submitted By: ecir hana (ecirhana) Assigned to: Nobody/Anonymous (nobody) Summary: incorrect tcp checksum Initial Comment: hi, when using 'socket' library for a simple web server 'ethereal' reports incorrect checksum in transmission control protocol. on ubuntu dapper drake and firefox -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1523136group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1517996 ] IDLE (macosx): Class and Path browsers show Tk menu
Bugs item #1517996, was opened at 2006-07-06 04:34 Message generated for change (Comment added) made by kbk You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1517996group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: IDLE Group: Python 2.5 Status: Open Resolution: None Priority: 5 Submitted By: Ronald Oussoren (ronaldoussoren) Assigned to: Nobody/Anonymous (nobody) Summary: IDLE (macosx): Class and Path browsers show Tk menu Initial Comment: I've done some work on fixing the menus for IDLE before 2.5b1, but recently found more toplevel windows that don't have their own menu. Both the Path Browser and Class Browser don't have a menubar of their own. The Tk implementation on MacOSX won't accept an empty menubar, but will replace that by a generic Tk menubar. -- Comment By: Kurt B. Kaiser (kbk) Date: 2006-07-15 15:51 Message: Logged In: YES user_id=149084 I suppose this is also true for the debugger? I'd consider this a bug in OSX Tk, it should be reported there. Without a specific need for a menubar, all it does is take up valuable vertical space. And continuing to add OSX special casing clutters up the IDLE code; IMO it should be limited to situations where functionality is compromised. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1517996group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[ python-Bugs-1512814 ] Incorrect lineno's in code objects
Bugs item #1512814, was opened at 2006-06-26 09:01 Message generated for change (Comment added) made by nnorwitz You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1512814group_id=5470 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Parser/Compiler Group: Python 2.5 Status: Closed Resolution: Fixed Priority: 7 Submitted By: Thomas Wouters (twouters) Assigned to: Neal Norwitz (nnorwitz) Summary: Incorrect lineno's in code objects Initial Comment: The 2.5 compiler forgets how to count linenumbers in certain situations: s255 = .join([\n] * 255 + [spam]) s256 = .join([\n] * 256 + [spam]) exec s255 Traceback (most recent call last): File stdin, line 1, in module File string, line 256, in module NameError: name 'spam' is not defined exec s256 Traceback (most recent call last): File stdin, line 1, in module File string, line 1, in module NameError: name 'spam' is not defined Notice the 'line 1' linenumber in the case of 256 blank lines. The same happens for 'pass' statements or 'if 0' blocks instead of blank lines. The problem is in the actual code objects created: dis.disco(compile(s255, , exec)) 256 0 LOAD_NAME0 (spam) 3 POP_TOP 4 LOAD_CONST 0 (None) 7 RETURN_VALUE dis.disco(compile(s256, , exec)) 1 0 LOAD_NAME0 (spam) 3 POP_TOP 4 LOAD_CONST 0 (None) 7 RETURN_VALUE -- Comment By: Neal Norwitz (nnorwitz) Date: 2006-07-15 18:51 Message: Logged In: YES user_id=33168 Committed revision 50673. Hopefully I'm really done this time. :-) -- Comment By: Thomas Wouters (twouters) Date: 2006-07-13 02:58 Message: Logged In: YES user_id=34209 Yep, the patch seems to work, also for the other case someone pointed out to me, that was still broken after the last fix: exec import os\ns=''' + \n*256 + '''\n1/0\n Traceback (most recent call last): File stdin, line 1, in module File string, line 1, in module ZeroDivisionError: integer division or modulo by zero I tried a couple of other ways to get large linenumbers and complex(er) parsing structures, and they all seem to work right. -- Comment By: Neal Norwitz (nnorwitz) Date: 2006-07-12 22:59 Message: Logged In: YES user_id=33168 Try the attached patch on for size. Let me know if you can find any other holes. -- Comment By: Thomas Wouters (twouters) Date: 2006-07-12 06:11 Message: Logged In: YES user_id=34209 Unfortunately, it isn't quite fixed. It's fixed for code in the global scope, but not for functions: s255 = def foo():\n + .join([\n ] * 254 + [ spam\n]) exec s255 dis.dis(foo) .256 0 LOAD_GLOBAL 0 (spam) . 3 POP_TOP . 4 LOAD_CONST 0 (None) . 7 RETURN_VALUE s256 = def foo():\n + .join([\n ] * 255 + [ spam\n]) exec s256 dis.dis(foo) . 1 0 LOAD_GLOBAL 0 (spam) . 3 POP_TOP . 4 LOAD_CONST 0 (None) . 7 RETURN_VALUE I haven't tried figuring out for what else it's broken like this, sorry :) -- Comment By: Neal Norwitz (nnorwitz) Date: 2006-07-09 17:04 Message: Logged In: YES user_id=33168 Committed revision 50500. -- You can respond by visiting: https://sourceforge.net/tracker/?func=detailatid=105470aid=1512814group_id=5470 ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com