Re: Question regarding DNS resolution in urllib2
On Wed, Jun 15, 2011 at 4:23 PM, saurabh verma wrote: > But in the case of https , I can do above because https handshake is based on > the domain i am trying to connect , so lets say I want to following inside a > python script using libcurl2 but without touching /etc/hosts , > > curl “https://something.com” , now something.com will try to connect to > either IPA or IPB which I don’t have control over , I know internally it must > be calling a DNS resolver libarary of python , I want to control over that , > may be libcurl2 exposing a function to do some DNS altering . If you edit your hosts file, it will affect where something.com points - you can force it to be IPA and then test, then force it to IPB and test. You'll still be downloading https://something.com so the HTTPS handshake should work exactly the same way. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Question regarding DNS resolution in urllib2
On 15-Jun-2011, at 6:13 AM, Chris Angelico wrote: > On Wed, Jun 15, 2011 at 4:34 AM, saurabh verma wrote: >> hi , >> >> I trying to use urllib2 in my script , but the problem is lets say a domains >> resolves to multiple IPs , If the URL is served by plain http , I can add >> “Host: domain” header and check whether all IPs are returning proper >> responses or not , but in case of https , I have to trust on my local >> machines dns resolver and I can’t apply host header in the request . > > Regarding Host: headers, experimentation showed that urllib2 did > indeed send one (I tested using Python 2.7.1 on Windows, talking to a > snooping HTTPS server running on a Linux box beside me - source code > available if you're curious, but it's not Python). Ok thats informative , thanks :) . But my problem lies in testing https based virtual served by nginx when the domain is load balanced by DNS . Example , I have “http://something.com” and “https://something.com” both served by two servers and something.com resolves to two ips IPA,IPB . lets say i want to test both servers on http i can do the following curl “http://IPA/” -H “Host: something.com" curl “http://IPB/” -H “Host: something.com” But in the case of https , I can do above because https handshake is based on the domain i am trying to connect , so lets say I want to following inside a python script using libcurl2 but without touching /etc/hosts , curl “https://something.com” , now something.com will try to connect to either IPA or IPB which I don’t have control over , I know internally it must be calling a DNS resolver libarary of python , I want to control over that , may be libcurl2 exposing a function to do some DNS altering . Is it worth hacking libcurl2 code for something like , Also i’m just not more than 1 week exprienced in python , but i do enjoy your mailing list , awesome participation . Thanks , Saurabh Verma -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
On 6/14/2011 2:37 PM, MRAB wrote: On 14/06/2011 18:48, Zach Dziura wrote: [snip] I just have one quick question. On the line where you have zip(*arr), what is the * for? Is it like the pointer operator, such as with C? Or is it exactly the pointer operator? [snip] The * in the argument list of a function call unpacks the following list as arguments for the call, for example, zip(*[0, 1, 2]) becomes zip(0, 1, 2), so zip(*arr) becomes zip(arr[0], arr[1], ...). There's also **, which unpacks a dict as keyword arguments. * and ** in a function call, which distribute arguments, are essentially the inverse of * and ** in function definitions, where they say to collect arguments. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Wed, Jun 15, 2011 at 06:00, rusi wrote: > For keyboarding (in the piano/organ sense) the weakest finger is not > the fifth/pinky but the fourth. > Because for the fifth you will notice that the natural movement is to > stiffen the finger and then use a slight outward arm-swing; for thumb, > index and middle, they of course have their own strength. > > The fourth has neither advantage. IOW qwerty is not so bad as it > could have been if it were qewrty (or asd was sad) > Thank you rusi! Tell me, where can I read more about the advantages of each finger? Googling turns up nothing. My intention is to improved the Noah ergonomic keyboard layout. Thanks! -- Dotan Cohen http://gibberish.co.il http://what-is-what.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Dynamic URL shortening
On Wed, Jun 15, 2011 at 2:03 PM, Littlefield, Tyler wrote: > Hello all: > I started working on a project with someone else quite recently, and he has > a request. The project requires an URL shortener, and he would like it to be > dynamic for both users and developers. Apparently some applications on the > mac allow for the user to input some data on a URL shortener and use that > specific service to shorten URLS. So I'm curious if anyone has had any > experience with this in python/can recommend a library to look at. In my MUD client, RosMud, there's a URL shortener that's designed for people playing a text RPG. The client itself isn't open source (but is free to download), but the URL shortener is. It's all written in C++, so it may not be of much use to you, but feel free to grab it from my rather ugly web site: http://www.kepl.com.au/esstu/rosmud.html The code is Windows-specific, but the TinyURL code is mostly just network work, so by the time you've ported it to Python it will be cross-platform. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Dynamic URL shortening
Hello all: I started working on a project with someone else quite recently, and he has a request. The project requires an URL shortener, and he would like it to be dynamic for both users and developers. Apparently some applications on the mac allow for the user to input some data on a URL shortener and use that specific service to shorten URLS. So I'm curious if anyone has had any experience with this in python/can recommend a library to look at. Secondly, my requirement to make this dynamic for developers. The way I did this was to use a metaclass that the base URLShortener will inherit, which will add itself to a shortener registry. This works well enough, and all I really need to do is something like: shortener = factory.getShortener("bitly") url = shortener.shorten("http://google.com";) How viable is this solution? It seems like it's nice enough, are there other approaches to handling something like this? -- Take care, Ty my website: http://tds-solutions.net my blog: http://tds-solutions.net/blog skype: st8amnd127 My programs don't have bugs; they're randomly added features! -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
On 01/-10/-28163 02:59 PM, Eric Snow wrote: Unfortunately not. Most of this line of thinking is the result of looking at import functionality in different ways, including with regards to the problem of modules getting imported twice (once as __main__). I've been doing work on multi-file modules, custom module Watch out for that importing of the original script. Doing that has many risks, only one of which is the problem of the two names. In fact, any time you have mutual imports, you run a certain risk, if the modules involved have any code that's not inside defs. It's not well defined what order the initialisation happens, so you may wind up calling code in another module that's not really there yet. The module import tree should be strictly hierarchical, without cycles. if you need stuff from the __main__, pass it to the other module, don't let the other module peek back over your shoulder. In the case of a module importing things from your script, the solution is pretty simple. Move the needed code elsewhere, and import it both from your script and from the other module. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Jun 15, 5:11 am, Chris Angelico wrote: > On Wed, Jun 15, 2011 at 12:50 AM, Dotan Cohen wrote: > > And disproportionate usage of fingers. On QWERTY the weakest fingers > > (pinkies) do almost 1/4 of the keypresses when modifier keys, enter, > > tab, and backspace are taken into account. > > That's true on a piano too, though. My pinkies are quite accustomed to > doing the extra work now, so whether I'm playing the church organ or > typing a post here, they're put to good use. It's the longer fingers > in the middle that aren't pulling their weight... For keyboarding (in the piano/organ sense) the weakest finger is not the fifth/pinky but the fourth. Because for the fifth you will notice that the natural movement is to stiffen the finger and then use a slight outward arm-swing; for thumb, index and middle, they of course have their own strength. The fourth has neither advantage. IOW qwerty is not so bad as it could have been if it were qewrty (or asd was sad) -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
On 14Jun2011 18:51, Eric Snow wrote: | On Tue, Jun 14, 2011 at 5:51 PM, Erik Max Francis wrote: | > Ethan Furman wrote: | >> | >> To me, too -- too bad it doesn't work: | >> | >> c:\temp>\python32\python early_abort.py | >> File "early_abort.py", line 7 | >> return | >> ^ | >> SyntaxError: 'return' outside function | > | > Nor should it. There's nothing to return out of. | > | | Perhaps we have a misunderstanding then. The contents of a module | file are the body of the module definition. Like the body of any | other complex statement, that body is going to get executed [1]. One might argue that a module is not a statement. | Some of the complex statements have keywords that let you break out of | that execution, like break and continue in loops. Some do not. | However, there is most certainly something out of which to return, the | execution of the module body. Ok... | That fact that the functionality is not there does not mean it has to | stay that way. It may just be that no one has thought to add it. I | don't agree that it's a bad idea. I have a use case. The alternative | is unappealing to me. That's how new features are born. One litmus test may be whether such a statement buys you much. You say you have a use case, but so far it seems rather vague to me. Speaking for myself, my modules tend to be a heap of class or function definitions (cheap - a linear parse of the file) and a few as-simple-as-possible initialisations of any supporting global data structures. Actual examples of global data structures are hard to find, but of the few I make, here's one: __seq = 0 __seqLock = allocate_lock() def seq(): ''' Allocate a new sequential number. Useful for creating unique tokens. ''' global __seq global __seqLock __seqLock.acquire() __seq += 1 n = __seq __seqLock.release() return n to support a free gimme-a-unique-number in other code: from cs.misc import seq ... n = seq() | I apologize if my example was unclear. I kept it pretty simple. Too simple, IMO. Please present a real module excerpt from your own code where significant "not a class or function definition" code is executed so we can see what ind of stuff you do that would benefit. | I | expect using __main__ was misleading. However, this is by no means | the only use case. In general it would be nice to do some checks up | front and decide whether or not to continue executing the module, | rather than waiting until the end to decide: | | if condition_1: | ... | return | if condition_2: | ... | return | | # now do my expensive module stuff | | # finally handle being run as a script | if __name__ == "__main__": | ... I think many people don't think of a module as something "to execute". Of course, it _is_ executed but for most modules the stuff executed is unconditional and single pass class and function definitions, "constant" definitions (such as the symbolic logging level of the logging module etc). All such stuff is usually unconditional (or trivially conditional, eg "only define this on MacOSX" etc). In my own case, the only counter example I can recall is stuff like a main() function. In those cases my modules take the form: import stuff ... def main(argv): xit = 0 ... main program top level logic here ... return xit ... classes, functions etc ... if __name__ == __'main__': sys.exit(main(sys.argv)) This keeps the top level logic at the top where it is easy to find. That covers the case where running the module becomes a little utility (typically a basic tool to manipulate an instance of whatever facility the module provides). For the other common case in tension with this, to run unit tests, we just call the unittests at the bottom or if both modes make sense I tend to make main() accept a "selftest" argument to run the unittests. So my own code doesn't cry out for what you seem to be asking. Please make it more clear what you're doing that I'm not. | The only ways that I know of to accomplish this currently is either by | putting everything inside if-else blocks, or raise some kind of | ImportBreak exception and catch it in an import hook. I would rather | not use either one. The more levels of indentation in a module, the | harder it is to follow. And exceptions really should not be involved | in execution flow control, but in the handling of abnormal situations | instead. | | Considering that other complex statements have special flow control | statements, I don't see why modules shouldn't either. Basicly because, in my experience, an approach like havig a main() function often covers it. Counter/other examples needed! Cheers, -- Cameron Simpson DoD#743 http://www.cskk.ezoshosting.com/cs/ The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong, it usually turns
Re: break in a module
On Tue, Jun 14, 2011 at 7:33 PM, Ben Finney wrote: > > I have never seen code that needs this, and can't imagine why the above > would be a good design for a module. Is there real code online somewhere > that we can see which serves as a real example for your use case? > Unfortunately not. Most of this line of thinking is the result of looking at import functionality in different ways, including with regards to the problem of modules getting imported twice (once as __main__). I've been doing work on multi-file modules, custom module objects, and custom import hooks lately, so I have been exploring a lot of the import related features. The situation came up where I was trying to actually apply some of that across a large package. The use case I originally gave is the real-life one that got me thinking about module flow control statements. However, the situation that led me there is not particularly wide-spread. Keep in mind that initially I was looking to see if there was something like return or break for modules, and not asking that they be added. That "expensive module stuff" example I gave was purely hypothetical, and I haven't really seen real code like it either. Like I said, my main motivation is to reduce my levels of indentation somewhat. I was trying to see if I could apply a pattern I use in functions and loops to modules. Things like "I have never seen..." are really helpful to hear, by the way, so thanks! -eric > -- > \ “There is no reason anyone would want a computer in their | > `\ home.” —Ken Olson, president, chairman and founder of Digital | > _o__) Equipment Corp., 1977 | > Ben Finney > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 01/-10/-28163 02:59 PM, kafooster wrote: On 15 Cze, 01:25, Dave Angel wrote: On 01/-10/-28163 02:59 PM, kafooster wrote: On 14 Cze, 22:26, MRABwrote: Multiply the numpy array by a scaling factor, which is float(max_8bit_value) / float(max_16bit_value). could you please explain it a little? I dont understand it. like multiplying each element? You said in an earlier message to ignore the RAW format. However, if your file matches a typical camera's raw file, there are several problems: 1) the data is typically 12 to 14 bits per pixel, only rarely 16 (very expensive cameras) 2) the data does not have R, G and B values for each pixel, but only one of these. The others are generated by Bayer interpolation. 3) the data is linear (which is what the hardware produces), and traditional image data wants to be in some non-linear color space. For example, most jpegs are sRGB 8*3 bits per pixel. The first would mean that you'd need to do a lot of shifting and masking. The second would mean a pretty complex interpolation algorithm. And the third would require an exponential function at the very least. DaveA well, I am only working with grayscale MRI medical images(mainly 8 or 16bits), saved as .raw. I do not need to worry about rgb. Well, since you've already gotten results you like (per another msg from you), the gamma adjustment must already be made. So they're an entirely different meaning of raw than used by DSLR's, for example. Glad it's working for you. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On Tue, 14 Jun 2011 13:13:07 -0700, kafooster wrote: > Ok, I solved the problem with matplotlib > > fileobj = open("hand.raw", 'rb') > data = numpy.fromfile(fileobj,dtype=np.uint16) > data = numpy.reshape(data,(96,470,352)) > imshow(data[:,:,40],cmap='gray') > show() > > the error was caused by different order of data, however it still > reads the dataset as half of it size. whatever. > > please leave the part about .raw, lets just start thinking of it from > level of numpy array. > > I would like to visualize this data with PIL, but PIL works only with > 8bit data. How could I resample my array from 16bit to 8bit? Why bother? NumPy is a much better image-processing library than PIL. The only reason I use PIL is for its import/export routines. If you are going to use PIL, apply any corrections (gamma correction, histogram equalisation, etc) before reducing the data to 8 bits. -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
Eric Snow writes: > I apologize if my example was unclear. I kept it pretty simple. That's a good goal, but unfortunately in this case it means the purpose is opaque. > In general it would be nice to do some checks up front and decide > whether or not to continue executing the module, rather than waiting > until the end to decide: > > if condition_1: > ... > return > if condition_2: > ... > return > > # now do my expensive module stuff I have never seen code that needs this, and can't imagine why the above would be a good design for a module. Is there real code online somewhere that we can see which serves as a real example for your use case? -- \ “There is no reason anyone would want a computer in their | `\ home.” —Ken Olson, president, chairman and founder of Digital | _o__)Equipment Corp., 1977 | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
On Wed, Jun 15, 2011 at 10:51 AM, Eric Snow wrote: > if condition_1: > ... > return > if condition_2: > ... > return > > # now do my expensive module stuff > > # finally handle being run as a script > if __name__ == "__main__": > ... > The best way I can think of is: def expensive_stuff_1(): ... def expensive_stuff_2(): ... if not condition_1: expensive_stuff_1() if not condition_2: expensive_stuff_2() Depending on what exactly you're doing, this might make perfect sense, or might be a useless indentation level of its own. If the expensive stuff divides nicely into units, where each unit is governed by one condition, it might work out well that way; you could use the same functions to build your 'if __main__' section too. ChrisA -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On Tue, 14 Jun 2011 19:25:32 -0400, Dave Angel wrote: > You said in an earlier message to ignore the RAW format. However, if > your file matches a typical camera's raw file It doesn't. He's dealing with a raw array of fixed-size integers (i.e. what you would get if you took a C array and wrote the memory directly to a file). -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On 2011.06.14 07:18 PM, Chris Angelico wrote: > There are many different designs of laptop keyboard. Tiny netbooks > seem to have the very worst, leaving it nearly impossible to get any > decent work done (there may be exceptions to that, but I've seen a lot > of bad netbook keyboards). My current laptop is an IBM T60, one of the > last of the IBMs (now they're all Lenovos); prior to him, I've had > various other 14" or 15" laptops, all with the keyboards using most of > the available room. I thought that might be the case. I can take a picture of mine if you're keeping a collection of bad laptop keyboards. :D Seriously, I have a 17.1" display, and the keyboard is almost small enough for a large tablet. It takes up no more than 30% of the area available. Also, the left shift and left control keys don't want to work most of the time, but that's another issue. -- http://mail.python.org/mailman/listinfo/python-list
Re: Paramiko Threading Error
On Jun 10, 3:47 am, David <71da...@libero.it> wrote: > Il Tue, 7 Jun 2011 19:25:43 -0700 (PDT), mud ha scritto: > > > > > > > > > > > Hi All, > > > Does anybody know what the following error means with paramiko, and > > how to fix it. > > > I don't know what is causing it and why. I have updated paramiko to > > version 1.7.7.1 (George) but still has the same issue. > > > Also I can not reproduce the problem and therefore debugging is harder > > for me. > > > Exception in thread Thread-4 (most likely raised during interpreter > > shutdown): > > Traceback (most recent call last): > > File "/usr/lib64/python2.6/threading.py", line 532, in > > __bootstrap_inner > > File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line > > 1574, in run > > : 'NoneType' object has no attribute > > 'error' > > if I remember rightly, I got that kind of error when I tried to use a > transport without setting up the paramiko's logging subsystem. > Try to put in head of your code the line: > > pk.util.log_to_file("log file name.txt") > > D. Hi David, I have tried that already because I though that the logging might indicate what the issue is. What I have found is that paramiko seems to be using threading which is not %100 thread safe in python. So it seems that when the script exits, the interpreter is failing to close the threads running and therefor giving the exception. What I have tried now is to go through all the connections objects that I have opened, close them first if they are open before the script exists. It appears to be working so far but only time will tell. -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
On Tue, Jun 14, 2011 at 5:51 PM, Erik Max Francis wrote: > Ethan Furman wrote: >> >> To me, too -- too bad it doesn't work: >> >> c:\temp>\python32\python early_abort.py >> File "early_abort.py", line 7 >> return >> ^ >> SyntaxError: 'return' outside function > > Nor should it. There's nothing to return out of. > Perhaps we have a misunderstanding then. The contents of a module file are the body of the module definition. Like the body of any other complex statement, that body is going to get executed [1]. Some of the complex statements have keywords that let you break out of that execution, like break and continue in loops. Some do not. However, there is most certainly something out of which to return, the execution of the module body. That fact that the functionality is not there does not mean it has to stay that way. It may just be that no one has thought to add it. I don't agree that it's a bad idea. I have a use case. The alternative is unappealing to me. That's how new features are born. I apologize if my example was unclear. I kept it pretty simple. I expect using __main__ was misleading. However, this is by no means the only use case. In general it would be nice to do some checks up front and decide whether or not to continue executing the module, rather than waiting until the end to decide: if condition_1: ... return if condition_2: ... return # now do my expensive module stuff # finally handle being run as a script if __name__ == "__main__": ... The only ways that I know of to accomplish this currently is either by putting everything inside if-else blocks, or raise some kind of ImportBreak exception and catch it in an import hook. I would rather not use either one. The more levels of indentation in a module, the harder it is to follow. And exceptions really should not be involved in execution flow control, but in the handling of abnormal situations instead. Considering that other complex statements have special flow control statements, I don't see why modules shouldn't either. -eric [1] During import the module gets compiled and the result is exec'ed in the context of the __dict__ of a new ModuleType object. That module object is then placed in sys.modules and bound to the name you have in the import statement in the module from which you issued that statement. Remember, the module is executed once, when the import statement is executed. That is when the module flow control would happen. > -- > Erik Max Francis && m...@alcyone.com && http://www.alcyone.com/max/ > San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis > There is _never_ no hope left. Remember. > -- Louis Wu > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
Eric Snow writes: > When you want to stop execution of a statement body early, for flow > control, there is a variety ways you can go, depending on the context. > Loops have break and continue. Functions have return. Generators > have yield (which temporarily stops execution). Exceptions sort of > work for everything, but have to be caught by a surrounding scope, and > are not necessarily meant for general flow control. > > Is there a breaking flow control mechanism for modules? Since your nominated use case is only to do it when ‘__name__ == '__main__'’, you could call ‘sys.exit()’. > With modules I sometimes have code at the beginning to do some small > task if a certain condition is met, and otherwise execute the rest of > the module body. I don't see how your use case needs to skip executing the rest of the module code. > Here's my main use case: > > """some module""" > > import sys > import importlib > import util # some utility module somewhere... > > if __name__ == "__main__": > name = util.get_module_name(sys.modules[__name__]) > module = importlib.import_module(name) > sys.modules[__name__] = module > else: > # do my normal stuff at 1 indentation level What “normal stuff” is the module doing that shouldn't be done when the module is ‘__main__’? I can't see what the use case is for. As you're no doubt aware, the normal pattern is to execute all the “normal stuff” for a module unconditionally, which creates all the objects in the module namespace (its imports, classes, functions, and other attributes) without side effects; then check if the module is ‘__main__’ at the *end*. So you'll probably need to be more specific about why your use case differs from that. -- \ “Pinky, are you pondering what I'm pondering?” “I think so, | `\Brain, but if the plural of mouse is mice, wouldn't the plural | _o__) of spouse be spice?” —_Pinky and The Brain_ | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: Question regarding DNS resolution in urllib2
On Wed, Jun 15, 2011 at 4:34 AM, saurabh verma wrote: > hi , > > I trying to use urllib2 in my script , but the problem is lets say a domains > resolves to multiple IPs , If the URL is served by plain http , I can add > “Host: domain” header and check whether all IPs are returning proper > responses or not , but in case of https , I have to trust on my local > machines dns resolver and I can’t apply host header in the request . Regarding Host: headers, experimentation showed that urllib2 did indeed send one (I tested using Python 2.7.1 on Windows, talking to a snooping HTTPS server running on a Linux box beside me - source code available if you're curious, but it's not Python). >>> import urllib2 >>> req=urllib2.Request(url='https://mirlemont/') >>> f=urllib2.urlopen(req) >>> f.read() 'Hello, world!' Meanwhile the snoop server reports: conn = Protocols.HTTP.Server.Request("GET" "/") GET / HTTP/1.1 Accept-Encoding: identity Host: mirlemont Connection: close User-Agent: Python-urllib/2.7 (Yes, my computer's name is Mirlemont. What's yours'? :) ) You could control the selection of IP address using a hosts file. In Unix, that's /etc/hosts; in Windows, c:\windows\system32\drivers\etc\hosts; in OS/2, c:\mptn\etc\hosts; etc. The urllib2 resolver should respect that. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
Thank you for the reply. I should have mentioned where I am hosting the code *doh slap on the wrist. I am hosting the code in google code: http://code.google.com/p/mirandafileorganizer/ There is a link to the user/developer guide on how to get started with the software: https://docs.google.com/document/d/1OGvrS5offb27WlkZ5genMJX2El18AqrnfY0VvTOsPQk/edit?hl=en_US&authkey=CJ_q7Dw Just email me directly if you are interested to join the project and I will add you as a contributor in Google Code Best Wishes -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 15/06/2011 00:59, kafooster wrote: On 15 Cze, 00:06, MRAB wrote: Yes. Something like this: fileobj = open("hand.raw", 'rb') data = numpy.fromfile(fileobj, dtype=numpy.uint16) fileobj.close() data = data * float(0xFF) / float(0x) data = numpy.array(data, dtype=numpy.uint8) data = data.reshape((96, 470, 352)) imshow(data[:, :, 40], cmap='gray') show() thank you very much, it works and now I can display this data even with Image.fromarray(). As I understand, it multiplies data elements by a fraction, so that when we have less levels (in 8uint), it can fit there? Correct. -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Wed, Jun 15, 2011 at 8:29 AM, Andrew Berg wrote: > On 2011.06.13 08:58 PM, Chris Angelico wrote: >> That's one of the reasons I like my laptop keyboard so much. > I find that the terribly tiny keys on a laptop keyboard make them very > evil. I don't see how anyone could type fast on one of them without > making tons of errors. > Then again, maybe I just have a tiny keyboard; you > might have one that actually fills the space on the bottom. There are many different designs of laptop keyboard. Tiny netbooks seem to have the very worst, leaving it nearly impossible to get any decent work done (there may be exceptions to that, but I've seen a lot of bad netbook keyboards). My current laptop is an IBM T60, one of the last of the IBMs (now they're all Lenovos); prior to him, I've had various other 14" or 15" laptops, all with the keyboards using most of the available room. Obviously there's no numeric keypad on a keyboard that small (having one overlaid on the main keyboard doesn't help when you're playing Angband), but other than that, it's a complete keyboard with enough room for the fingers to whack the right keys. There's also a lot of difference in travel. The smaller keyboards have keys that move about half a nanometer, but better keyboards feel right. The worst keyboard of all, in that sense, would have to be the virtual laser keyboard, no longer available on ThinkGeek but seems to be here http://www.virtual-laser-devices.com/ - it's an incredibly cool concept, but I can't imagine actually using one long-term. Typing on concrete is not my idea of productivity. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Wed, Jun 15, 2011 at 12:50 AM, Dotan Cohen wrote: > And disproportionate usage of fingers. On QWERTY the weakest fingers > (pinkies) do almost 1/4 of the keypresses when modifier keys, enter, > tab, and backspace are taken into account. That's true on a piano too, though. My pinkies are quite accustomed to doing the extra work now, so whether I'm playing the church organ or typing a post here, they're put to good use. It's the longer fingers in the middle that aren't pulling their weight... Chis Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 15 Cze, 01:25, Dave Angel wrote: > On 01/-10/-28163 02:59 PM, kafooster wrote: > > > On 14 Cze, 22:26, MRAB wrote: > > >> Multiply the numpy array by a scaling factor, which is > >> float(max_8bit_value) / float(max_16bit_value). > > > could you please explain it a little? I dont understand it. like > > multiplying each element? > > You said in an earlier message to ignore the RAW format. However, if > your file matches a typical camera's raw file, there are several problems: > > 1) the data is typically 12 to 14 bits per pixel, only rarely 16 (very > expensive cameras) > 2) the data does not have R, G and B values for each pixel, but only one > of these. The others are generated by Bayer interpolation. > 3) the data is linear (which is what the hardware produces), and > traditional image data wants to be in some non-linear color space. For > example, most jpegs are sRGB 8*3 bits per pixel. > > The first would mean that you'd need to do a lot of shifting and > masking. The second would mean a pretty complex interpolation > algorithm. And the third would require an exponential function at the > very least. > > DaveA well, I am only working with grayscale MRI medical images(mainly 8 or 16bits), saved as .raw. I do not need to worry about rgb. -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
On Wed, Jun 15, 2011 at 9:40 AM, Ben Finney wrote: > Zachary Dziura writes: > >> What I want to know is how I can print out that information in a >> column, where the header is the first line of the column, with the >> data following underneath, like so: > > I'm glad you got some good replies. It probably reflects badly on me > that my first thought was http://bash.org/?5804>. Well *OBVIOUSLY* the difference is that that snippet is referring to "Ms Access", and on this list we're working with "Montgomery Python", and as we all know, women simply cannot do these things. Chris Angelico /me ducks the slings and arrows of outrageous sexism -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 15 Cze, 00:06, MRAB wrote: > > Yes. Something like this: > > fileobj = open("hand.raw", 'rb') > data = numpy.fromfile(fileobj, dtype=numpy.uint16) > fileobj.close() > data = data * float(0xFF) / float(0x) > data = numpy.array(data, dtype=numpy.uint8) > data = data.reshape((96, 470, 352)) > imshow(data[:, :, 40], cmap='gray') > show() thank you very much, it works and now I can display this data even with Image.fromarray(). As I understand, it multiplies data elements by a fraction, so that when we have less levels (in 8uint), it can fit there? -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
Ethan Furman wrote: MRAB wrote: On 14/06/2011 23:28, Eric Snow wrote: I would rather have something like this: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module break # do my normal stuff at 0 indentation level So, any thoughts? Thanks. To me, the obvious choice would be "return", not "break". To me, too -- too bad it doesn't work: c:\temp>\python32\python early_abort.py File "early_abort.py", line 7 return ^ SyntaxError: 'return' outside function Nor should it. There's nothing to return out of. -- Erik Max Francis && m...@alcyone.com && http://www.alcyone.com/max/ San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis There is _never_ no hope left. Remember. -- Louis Wu -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
Eric Snow wrote: With modules I sometimes have code at the beginning to do some small task if a certain condition is met, and otherwise execute the rest of the module body. Here's my main use case: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module else: # do my normal stuff at 1 indentation level I would rather have something like this: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module break # do my normal stuff at 0 indentation level So, any thoughts? Thanks. The answer would depend on exactly what "normal stuff" you expect your module to do if it's not being run as a script (which is what your `__name__ == '__main__'` check tests for). A typical module will define it's appropriate attributes, functions, classes, and so on at module scope. It will then end with a test to see if it's being run as a script, and then do the appropriate thing. This allows modules to be imported separately from being executed as scripts. Your sample code makes it hard to understand the use case, especially since if you want this hypothetical "module break" to stop executing the module, then your `__name__ == '__main__'` test basically does nothing useful (it fiddles with some modules -- especially since it appears to be they very module that is being executed -- and then quits). At a more general level, the idea of a "module break" doesn't make much sense. Modules are just collections of things; they can include some direct code, but typically consist of mostly definitions. Modules can interact with each other, be called recursively, etc., and so at an arbitrary point saying, "break out of this module" doesn't have a great deal of meaning. -- Erik Max Francis && m...@alcyone.com && http://www.alcyone.com/max/ San Jose, CA, USA && 37 18 N 121 57 W && AIM/Y!M/Skype erikmaxfrancis There is _never_ no hope left. Remember. -- Louis Wu -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
Zachary Dziura writes: > What I want to know is how I can print out that information in a > column, where the header is the first line of the column, with the > data following underneath, like so: I'm glad you got some good replies. It probably reflects badly on me that my first thought was http://bash.org/?5804>. -- \ “In case of fire, do your utmost to alarm the porter.” —hotel, | `\Vienna | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 01/-10/-28163 02:59 PM, kafooster wrote: On 14 Cze, 22:26, MRAB wrote: Multiply the numpy array by a scaling factor, which is float(max_8bit_value) / float(max_16bit_value). could you please explain it a little? I dont understand it. like multiplying each element? You said in an earlier message to ignore the RAW format. However, if your file matches a typical camera's raw file, there are several problems: 1) the data is typically 12 to 14 bits per pixel, only rarely 16 (very expensive cameras) 2) the data does not have R, G and B values for each pixel, but only one of these. The others are generated by Bayer interpolation. 3) the data is linear (which is what the hardware produces), and traditional image data wants to be in some non-linear color space. For example, most jpegs are sRGB 8*3 bits per pixel. The first would mean that you'd need to do a lot of shifting and masking. The second would mean a pretty complex interpolation algorithm. And the third would require an exponential function at the very least. DaveA -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
MRAB wrote: On 14/06/2011 23:28, Eric Snow wrote: I would rather have something like this: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module break # do my normal stuff at 0 indentation level So, any thoughts? Thanks. To me, the obvious choice would be "return", not "break". To me, too -- too bad it doesn't work: c:\temp>\python32\python early_abort.py File "early_abort.py", line 7 return ^ SyntaxError: 'return' outside function ~Ethan~ -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
Hi Chris, Thank you for the reply. I should have mentioned where I am hosting the code *doh slap on the wrist. I am hosting the code in google code: http://code.google.com/p/mirandafileorganizer/ There is a link to the user/developer guide on how to get started with the software: https://docs.google.com/document/d/1OGvrS5offb27WlkZ5genMJX2El18Aqrnf... I look forward to hear more from you =) Best Wishes, Zainul Franciscus On Jun 15, 9:48 am, Chris Angelico wrote: > On Wed, Jun 15, 2011 at 3:33 AM, geremy condra wrote: > >> My suggestion: Cruftbuster > > > 'Phile' > > Or 'Philtre'. A philtre is a very useful thing to have around a > house... just ask Aline Sangazure. > > I'd like to join this project, as a tester. > > Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
Hi Chris, Thank you for the reply. I should have mentioned where I am hosting the code *doh slap on the wrist. I am hosting the code in google code: http://code.google.com/p/mirandafileorganizer/ There is a link to the user/developer guide on how to get started with the software: https://docs.google.com/document/d/1OGvrS5offb27WlkZ5genMJX2El18AqrnfY0VvTOsPQk/edit?hl=en_US&authkey=CJ_q7Dw&pli=1 I look forward to hear more from you =) Best Wishes, Zainul Franciscus On Jun 15, 9:48 am, Chris Angelico wrote: > On Wed, Jun 15, 2011 at 3:33 AM, geremy condra wrote: > >> My suggestion: Cruftbuster > > > 'Phile' > > Or 'Philtre'. A philtre is a very useful thing to have around a > house... just ask Aline Sangazure. > > I'd like to join this project, as a tester. > > Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
On Jun 15, 10:43 am, Redcat wrote: > > The chief geek has given his nod of approval to publish Miranda through > > how-to geek, and I can pitch any of your software to him, and write an > > article about it - provided that the chief geek approve the software. > > I wouldn't mind contributing some time to this project. Thank you all for the replies; I really appreciate it. I should have mentioned in my original message that I am hosting the code in Google Code: http://code.google.com/p/mirandafileorganizer/ The home page has a link to a developer/user guide: http://code.google.com/p/mirandafileorganizer/ -- http://mail.python.org/mailman/listinfo/python-list
Re: break in a module
On 14/06/2011 23:28, Eric Snow wrote: [snip] With modules I sometimes have code at the beginning to do some small task if a certain condition is met, and otherwise execute the rest of the module body. Here's my main use case: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module else: # do my normal stuff at 1 indentation level I would rather have something like this: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module break # do my normal stuff at 0 indentation level So, any thoughts? Thanks. To me, the obvious choice would be "return", not "break". -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
> The chief geek has given his nod of approval to publish Miranda through > how-to geek, and I can pitch any of your software to him, and write an > article about it - provided that the chief geek approve the software. I wouldn't mind contributing some time to this project. -- http://mail.python.org/mailman/listinfo/python-list
Re: Rant on web browsers
Chris Angelico wrote: > I've just spent a day coding in Javascript, and wishing browsers > supported Python instead (or as well). All I needed to do was take two > dates (as strings), figure out the difference in days, add that many > days to both dates, and put the results back into DOM Input objects > (form entry fields). Pretty simple, right? Javascript has a Date > class, it should be fine. But no. First, the date object can't be > outputted as a formatted string. The only way to output a date is "Feb > 21 2011". So I have to get the three components (oh and the month is > 0-11, not 1-12) and emit those. And Javascript doesn't have a simple > format function that would force the numbers to come out with leading > zeroes, so I don't bother with that. Actually there is not Date class. There are not any classes in ECMAScript. > What if I want to accept any delimiter in the date - slash, hyphen, or > dot? Can I just do a simple translate, turn all slashes and dots into > hyphens? Nope. Have to go regular expression if you want to change > more than the first instance of something. There's no nice string > parse function (like sscanf with "%d-%d-%d"), so I hope every browser > out there has a fast regex engine. When all you have is a half-ton > sledgehammer, everything looks like a really REALLY flat nail... function formatDate(date) { return ('000' + date.getFullYear()).slice(-4) + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2); } formatDate(new Date()); > Plus, Javascript debugging is annoyingly difficult if you don't have > tools handy. I need third-party tools to do anything other than code > blind? Thanks. It depends on the environment. It is good idea to read c.l.js and JSMentors. -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On 2011.06.13 08:58 PM, Chris Angelico wrote: > That's one of the reasons I like my laptop keyboard so much. I find that the terribly tiny keys on a laptop keyboard make them very evil. I don't see how anyone could type fast on one of them without making tons of errors. I constantly have to fix typos (the 'o' key is the worst) when writing with this thing, and I'm not typing fast at all. I suppose if you have really small hands, the compact layout might be more comfortable, but I hate my keyboard. Then again, maybe I just have a tiny keyboard; you might have one that actually fills the space on the bottom. -- http://mail.python.org/mailman/listinfo/python-list
break in a module
When you want to stop execution of a statement body early, for flow control, there is a variety ways you can go, depending on the context. Loops have break and continue. Functions have return. Generators have yield (which temporarily stops execution). Exceptions sort of work for everything, but have to be caught by a surrounding scope, and are not necessarily meant for general flow control. Is there a breaking flow control mechanism for modules? Regardless of the context, I've found it cleaner to use flow control statements, like break, continue, and return, to stop execution under some condition and then leave the rest of my code at the smaller indentation level. For example: for i in range(5): if i % 2: print("odd: %s" % i) continue print("even: %s" % i) This could be written with if-else for control flow: for i in range(5): if i % 2: print("odd: %s" % i) else: print("even: %s" % i) Or, for functions: def f(arg): if not arg: return None print("found something: %s" % arg) return arg vs: def f(arg): if not arg: result = None else: print("found something: %s" % arg) result = arg return result The more levels of indentation the harder it becomes to read. However, with the breaking flow control statements, you can mitigate the nesting levels somewhat. One nice thing is that when doing this you can have your default behavior stay at the smallest indentation level, so the logic is easier to read. With modules I sometimes have code at the beginning to do some small task if a certain condition is met, and otherwise execute the rest of the module body. Here's my main use case: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module else: # do my normal stuff at 1 indentation level I would rather have something like this: """some module""" import sys import importlib import util # some utility module somewhere... if __name__ == "__main__": name = util.get_module_name(sys.modules[__name__]) module = importlib.import_module(name) sys.modules[__name__] = module break # do my normal stuff at 0 indentation level So, any thoughts? Thanks. -eric p.s. I might just handle this with a PEP 302 import hook regardless, but it would still be nice to know if there is a better solution than basically indenting my entire module. -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 14/06/2011 22:20, kafooster wrote: On 14 Cze, 22:26, MRAB wrote: Multiply the numpy array by a scaling factor, which is float(max_8bit_value) / float(max_16bit_value). could you please explain it a little? I dont understand it. like multiplying each element? Yes. Something like this: fileobj = open("hand.raw", 'rb') data = numpy.fromfile(fileobj, dtype=numpy.uint16) fileobj.close() data = data * float(0xFF) / float(0x) data = numpy.array(data, dtype=numpy.uint8) data = data.reshape((96, 470, 352)) imshow(data[:, :, 40], cmap='gray') show() -- http://mail.python.org/mailman/listinfo/python-list
Re: Rant on web browsers
On Wed, Jun 15, 2011 at 12:11 AM, Patty wrote: > Hi Chris - I am just learning JavaScript and this was helpful to me, not a > rant. I am reading JavaScript: The Good Parts so he is jumping around in > topic and I can just use this when learning about dates and ints coming up. Hehe. Just that it was helpful doesn't make it not-a-rant, but I'm glad there was some value in it. There's probably more value in people's offered suggestions than in my original moan, though. I'm going to have to start looking into a few of them; there's probably one that I can sell to my boss as "Hey, we need this". CoffeeScript looks interesting, but I'm somewhat worried that it's only going to add its own restrictions on top of Javascript's, changing syntax without really improving very much. It does look cool, though. (But I disagree with it (and Python) on points such as non-declared variables.) Since it's a new language (we don't use Ruby here yet), I don't think I can justify it to my boss - any new language would have to be learned by more people than just me. On the flip side, I might play around with it for my own web site at some point. Thanks for the tips, all. This is what makes a good mailing list - helpful people! Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
On Wed, Jun 15, 2011 at 3:33 AM, geremy condra wrote: >> My suggestion: Cruftbuster > > 'Phile' Or 'Philtre'. A philtre is a very useful thing to have around a house... just ask Aline Sangazure. I'd like to join this project, as a tester. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 14 Cze, 22:26, MRAB wrote: > > Multiply the numpy array by a scaling factor, which is > float(max_8bit_value) / float(max_16bit_value). could you please explain it a little? I dont understand it. like multiplying each element? -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On Tue, Jun 14, 2011 at 1:26 PM, MRAB wrote: > On 14/06/2011 21:13, kafooster wrote: > >> >> I would like to visualize this data with PIL, but PIL works only with >> 8bit data. How could I resample my array from 16bit to 8bit? >> > > Multiply the numpy array by a scaling factor, which is > float(max_8bit_value) / float(max_16bit_value). I don't know PIL specifics at all, but often 8 bit graphics formats are palette-based, and 16 bit graphics are often a compressed form of 24 bit rgb graphics that take advantage of how much the human eye sees various colors. IOW, for some formats I'm sure scaling will help, but for others I'm sure it won't. The O.P. could try rawtopgm and rawtoppm, after attempting the scaling thing, assuming scaling doesn't help - and hopefully it will. I believe PIL understands these NetPBM formats. -- http://mail.python.org/mailman/listinfo/python-list
Re: pkg_resources ?
In article , km wrote: > I am trying to look at the source code of a python script (run.py). But > it reads > ###code - run.py > #!/usr/bin/env python > # EASY-INSTALL-SCRIPT: 'pbpy==0.1','run.py' > __requires__ = 'pbpy==0.1' > import pkg_resources > pkg_resources.run_script('pbpy==0.1', 'run.py') > ##code # > > What are the advantages of using pkg_resources stuff ? What you are seeing is boiler-plate code automatically generated by setuptools (or the Distribute clone of setuptools) when a script is installed with easy_install. The main reason for the wrapper is to allow multiple versions of a Python "package" (in the PyPi sense) to be installed in one Python instance. There's more information here: http://peak.telecommunity.com/DevCenter/setuptools -- Ned Deily, n...@acm.org -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 14/06/2011 21:13, kafooster wrote: Ok, I solved the problem with matplotlib fileobj = open("hand.raw", 'rb') data = numpy.fromfile(fileobj,dtype=np.uint16) data = numpy.reshape(data,(96,470,352)) imshow(data[:,:,40],cmap='gray') show() the error was caused by different order of data, however it still reads the dataset as half of it size. whatever. please leave the part about .raw, lets just start thinking of it from level of numpy array. I would like to visualize this data with PIL, but PIL works only with 8bit data. How could I resample my array from 16bit to 8bit? Multiply the numpy array by a scaling factor, which is float(max_8bit_value) / float(max_16bit_value). -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
Ok, I solved the problem with matplotlib fileobj = open("hand.raw", 'rb') data = numpy.fromfile(fileobj,dtype=np.uint16) data = numpy.reshape(data,(96,470,352)) imshow(data[:,:,40],cmap='gray') show() the error was caused by different order of data, however it still reads the dataset as half of it size. whatever. please leave the part about .raw, lets just start thinking of it from level of numpy array. I would like to visualize this data with PIL, but PIL works only with 8bit data. How could I resample my array from 16bit to 8bit? -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
On 14/06/2011 18:48, Zach Dziura wrote: [snip] I just have one quick question. On the line where you have zip(*arr), what is the * for? Is it like the pointer operator, such as with C? Or is it exactly the pointer operator? [snip] The * in the argument list of a function call unpacks the following list as arguments for the call, for example, zip(*[0, 1, 2]) becomes zip(0, 1, 2), so zip(*arr) becomes zip(arr[0], arr[1], ...). There's also **, which unpacks a dict as keyword arguments. -- http://mail.python.org/mailman/listinfo/python-list
Question regarding DNS resolution in urllib2
hi , I trying to use urllib2 in my script , but the problem is lets say a domains resolves to multiple IPs , If the URL is served by plain http , I can add “Host: domain” header and check whether all IPs are returning proper responses or not , but in case of https , I have to trust on my local machines dns resolver and I can’t apply host header in the request . Is it possible to override dns resolver in urllib2 or something else ? >>> req = urllib2.Request(url='https://google.com/') >>> f = urllib2.urlopen(req) >>> print f.read() I wanted to control the IPs which urllib2 is trying to connect . I Hope I am some sense out of my question , Thanks in advance. ~saurabh -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
On 06/14/2011 05:29 PM, Zachary Dziura wrote: I have a dict that I would like to print out in a series of columns, rather than as a bunch of lines. Normally when you do print(dict), the output will look something like this: {'Header2': ['2', '5', '8'], 'Header3': ['3', '6', '9'], 'Header1': ['1', '4', '7'], 'Header4': ['10', '11', '12']} I can then iterate through (in this case) a list of the headers in order to produce something similar to this: Header1 = ['1', '4', '7'] Header2 = ['2', '5', '8'] Header3 = ['3', '6', '9'] Header4 = ['10', '11', '12'] What I want to know is how I can print out that information in a column, where the header is the first line of the column, with the data following underneath, like so: Header1Header2Header3Header4 1 2 3 4 5 6 7 8 9 1011 12 Over alternative that only costs 2 lines of code, use pretty print (not in columns but crystal clear): import pprint pprint.pprint(my_dict) or in a file: pprint.pprint(my_dict, open("output.dat", "wb")) Cheers karim -- http://mail.python.org/mailman/listinfo/python-list
Re: Infinite recursion in __reduce__ when calling original base class reduce, why?
On 14-6-2011 2:40, Chris Torek wrote: > > Nonetheless, there is something at least slightly suspicious here: [... snip explanations...] Many thanks Chris, for the extensive reply. There's some useful knowledge in it. My idea to call the base class reduce as the default fallback causes the problems: return return super(TestClass, self).__reduce__() If, following your suggestion, I replace that with: return self.__class__, (self.name,) it works fine. By the way, in the meantime I've played around with copyreg.pickle, and that code worked in all Python implementations I've tried it in. This code feels better too, because it is possible to simply use return self.__reduce__() as a fallback in it, because we're not touching the object's own __reduce__ in any way. Anyway thanks again Irmen -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
On Mon, 13 Jun 2011 20:55:54 -0700, zainul franciscus wrote: > I started an open source file organizer called Miranda. Miranda is > inspired by Belvedere written by Adam Pash of Lifehacker (http:// > lifehacker.com/341950/belvedere-automates-your-self+cleaning-pc). I know > you guys must be thinking "Hmm, Miranda, isn't that an IM application > ?"; Yep I hear you, I'll change the name once I get a good name. I am > open for any suggestions. > > Miranda is written in Python, meant for Ubuntu, but hopefully it can be > tested for every Linux Flavour. I have nothing much to offer in return > for the software,but I will acknowledge your contribution in the > software, and give credit to anyone helping when I feature Miranda in > How-To Geek : http://www.howtogeek.com/ > > I am a beginner in python, so the code may look a bit messy, and I am > open to rewrite the code if I can get a mentor whom I can pair with for > coding the application. I do have 7+ years of programming, web > development, database, desktop, you name it. So I am not totally blind > of programming, but it will be great to get an experienced python > programmer who has the passion for coding, and the patience to mentor a > beginner python. > > The chief geek has given his nod of approval to publish Miranda through > how-to geek, and I can pitch any of your software to him, and write an > article about it - provided that the chief geek approve the software. So where can I get a copy or have i missed something (Fedora user so thats one more distro for you) -- Boy, that crayon sure did hurt! -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
> d={'Header2': ['2', '5', '8'], 'Header3': ['3', '6', '9'], > 'Header1': ['1', '4', '7'], 'Header4': ['10', '11', '12']} > > arr = [] > for key,value in d.items(): > line = ['{:>10s}'.format(key)] > for num in value: > line.append('{:>10s}'.format(num)) > arr.append(line) > > for line in zip(*arr): > for item in line: > print(item, end='') > print() # newline > >>> > Header2 Header3 Header1 Header4 > 2 3 1 10 > 5 6 4 11 > 8 9 7 12 > > For zip(*arr) to work properly, each line of arr should have the same > length, which means that either each value of d has the same length or > that you find the max length and pad lines with blanks up to the max > length. The code above assumes the first. > > If the items in each value of d are not strings, more fiddling is > needed. The printed field size is also arbitrary. It needs adjusting for > the actual max length. You might want to adjust it for each key-value > pair in the dict, which is to say, each column of the resulting table. > > -- > Terry Jan Reedy I just have one quick question. On the line where you have zip(*arr), what is the * for? Is it like the pointer operator, such as with C? Or is it exactly the pointer operator? Otherwise, thank you for the example! This isn't homework, but I'm working on something at work, and I was wondering how to properly format the output from CSV files into another file. It's all a part of an analyzer script for database tables, and the table wherein. Thank you a bunch for the help! -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
On Tue, Jun 14, 2011 at 7:54 AM, Matt Chaput wrote: > On 13/06/2011 11:55 PM, zainul franciscus wrote: >> >> Iknow you guys must be thinking "Hmm, Miranda, isn't that an IM >> application ?"; Yep I hear you, I'll change the name once I get a good >> name. I am open for any suggestions. > > Actually I was thinking "isn't that a functional programming language?" Same here. > My suggestion: Cruftbuster 'Phile' Geremy Condra -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
Steve Crook wrote: > Whilst certainly more compact, I'd be interested in views on how > pythonesque this method is. Instead of calling function you could use: d = {} d[key] = (key in d and d[key]) + 1 Regards. -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
On 6/14/2011 3:49 AM, Martin De Kauwe wrote: what is a .raw file, do you mean a flat binary? Perhaps tiff-like. https://secure.wikimedia.org/wikipedia/en/wiki/Raw_image_format "Providing a detailed and concise description of the content of raw files is highly problematic. There is no single raw format; formats can be similar or radically different. Different manufacturers use their own proprietary and typically undocumented formats, which are collectively known as raw format. Often they also change the format from one camera model to the next. Several major camera manufacturers, including Nikon, Canon and Sony, encrypt portions of the file in an attempt to prevent third-party tools from accessing them.[2]" A real mess. '.raw' is used (among others) by Panasonic and Leica. Not clear if .raw is the same for both. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
On 6/14/2011 11:29 AM, Zachary Dziura wrote: I have a dict that I would like to print out in a series of columns, rather than as a bunch of lines. Normally when you do print(dict), the output will look something like this: {'Header2': ['2', '5', '8'], 'Header3': ['3', '6', '9'], 'Header1': ['1', '4', '7'], 'Header4': ['10', '11', '12']} I can then iterate through (in this case) a list of the headers in order to produce something similar to this: Header1 = ['1', '4', '7'] Header2 = ['2', '5', '8'] Header3 = ['3', '6', '9'] Header4 = ['10', '11', '12'] What I want to know is how I can print out that information in a column, where the header is the first line of the column, with the data following underneath, like so: Header1Header2Header3Header4 1 2 3 4 5 6 7 8 9 1011 12 You did not specify how much can be assumed about the dict and built in to the program and how much needs to be discovered with code. Assuming that this is not homework, here is a start: d={'Header2': ['2', '5', '8'], 'Header3': ['3', '6', '9'], 'Header1': ['1', '4', '7'], 'Header4': ['10', '11', '12']} arr = [] for key,value in d.items(): line = ['{:>10s}'.format(key)] for num in value: line.append('{:>10s}'.format(num)) arr.append(line) for line in zip(*arr): for item in line: print(item, end='') print() # newline >>> Header2 Header3 Header1 Header4 2 3 110 5 6 411 8 9 712 For zip(*arr) to work properly, each line of arr should have the same length, which means that either each value of d has the same length or that you find the max length and pad lines with blanks up to the max length. The code above assumes the first. If the items in each value of d are not strings, more fiddling is needed. The printed field size is also arbitrary. It needs adjusting for the actual max length. You might want to adjust it for each key-value pair in the dict, which is to say, each column of the resulting table. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
> On Jun 13, 11:55 pm, zainul franciscus wrote: > I started an open source file organizer called Miranda. Miranda is > inspired by Belvedere written by Adam Pash of Lifehacker (http:// > lifehacker.com/341950/belvedere-automates-your-self+cleaning-pc). I > know you guys must be thinking "Hmm, Miranda, isn't that an IM > application ?"; Yep I hear you, I'll change the name once I get a good > name. I am open for any suggestions. > > Miranda is written in Python, meant for Ubuntu, but hopefully it can > be tested for every Linux Flavour. I have nothing much to offer in > return for the software,but I will acknowledge your contribution in > the software, and give credit to anyone helping when I feature Miranda > in How-To Geek :http://www.howtogeek.com/ > > I am a beginner in python, so the code may look a bit messy, and I am > open to rewrite the code if I can get a mentor whom I can pair with > for coding the application. I do have 7+ years of programming, web > development, database, desktop, you name it. So I am not totally blind > of programming, but it will be great to get an experienced python > programmer who has the passion for coding, and the patience to mentor > a beginner python. > > The chief geek has given his nod of approval to publish Miranda > through how-to geek, and I can pitch any of your software to him, and > write an article about it - provided that the chief geek approve the > software. Where is this code hosted? I'd be more than happy to (hopefully) lend a hand wherever I can. I'm not that savvy (yet) with Python, but I'm knowledgeable with a lot of computer science algorithms and such for both sorting and searching, which I assume will help greatly! -- http://mail.python.org/mailman/listinfo/python-list
Wing IDE 4.0.3 released
Hi, Wingware has released version 4.0.3 of Wing IDE, an integrated development environment designed specifically for the Python programming language. Wing IDE is a cross-platform Python IDE that provides a professional code editor with vi, emacs, and other key bindings, auto-completion, call tips, refactoring, a powerful graphical debugger, version control, unit testing, search, and many other features. **Changes in Version 4.0.3** This is a maintenance release with the following changes: * Added ability to save and load test results * Added ability to run unittest tests from the command line and save the results for loading into Wing * Allow access to the search engine and source analysis from the scripting API * Provide optional reminder when Support+Upgrades is expiring * Added copy-selection-or-line command * About 36 bug fixes for source analysis, refactoring, and other features See the change log for details. **New Features in Version 4.0** Version 4.0 adds the following new major features: * Refactoring -- Rename/move symbols, extract to function/method, and introduce variable * Find Uses -- Find all points of use of a symbol * Diff/Merge -- Graphical file and repository comparison and merge * Django Support -- Debug Django templates, run Django unit tests, and more * matplotlib Support -- Maintains live-updating plots in shell and debugger * Simplified Licensing -- Includes all OSes and adds Support+Upgrades subscriptions Complete change log: http://wingware.com/pub/wingide/4.0.3/CHANGELOG.txt Details on licensing changes: http://wingware.com/news/2011-02-16 **About Wing IDE** Wing IDE is an integrated development environment designed specifically for the Python programming language. It provides powerful editing, testing, and debugging features that help reduce development and debugging time, cut down on coding errors, and make it easier to understand and navigate Python code. Wing IDE can be used to develop Python code for web, GUI, and embedded scripting applications. Wing IDE is available in three product levels: Wing IDE Professional is the full-featured Python IDE, Wing IDE Personal offers a reduced feature set at a low price, and Wing IDE 101 is a free simplified version designed for teaching beginning programming courses with Python. Version 4.0 of Wing IDE Professional includes the following major features: * Professional quality code editor with vi, emacs, and other keyboard personalities * Code intelligence for Python: Auto-completion, call tips, find uses, goto-definition, error indicators, refactoring, smart indent and rewrapping, and source navigation * Advanced multi-threaded debugger with graphical UI, command line interaction, conditional breakpoints, data value tooltips over code, watch tool, and externally launched and remote debugging * Powerful search and replace options including keyboard driven and graphical UIs, multi-file, wild card, and regular expression search and replace * Version control integration for Subversion, CVS, Bazaar, git, Mercurial, and Perforce * Integrated unit testing with unittest, nose, and doctest frameworks * Django support: Debugs Django templates, provides project setup tools, and runs Django unit tests * Many other features including project manager, bookmarks, code snippets, diff/merge tool, OS command integration, indentation manager, PyLint integration, and perspectives * Extremely configurable and may be extended with Python scripts * Extensive product documentation and How-Tos for Django, matplotlib, Plone, wxPython, PyQt, mod_wsgi, Autodesk Maya, and many other frameworks Please refer to http://wingware.com/wingide/features for a detailed listing of features by product level. System requirements are Windows 2000 or later, OS X 10.3.9 or later (requires X11 Server), or a recent Linux system (either 32 or 64 bit). Wing IDE supports Python versions 2.0.x through 3.2.x and Stackless Python. For more information, see the http://wingware.com/ **Downloads** Wing IDE Professional and Wing IDE Personal are commercial software and require a license to run. A free trial can be obtained directly from the product when launched. Wing IDE Pro -- Full-featured product: http://wingware.com/downloads/wingide/4.0 Wing IDE Personal -- A simplified IDE: http://wingware.com/downloads/wingide-personal/4.0 Wing IDE 101 -- For teaching with Python: http://wingware.com/downloads/wingide-101/4.0 **Purchasing and Upgrading** Wing 4.0 requires an upgrade for Wing IDE 2.x and 3.x users at a cost of 1/2 the full product pricing. Upgrade a license: https://wingware.com/store/upgrade Purchase a new license: https://wingware.com/store/purchase Optional Support+Upgrades subscriptions are available for expanded support coverage and free upgrades to new major releases: http://wingware.com/support/agreement Thanks! -- The Wingware Team Wingware | Python IDE Advancing Software Develo
What is the Most Efficient Way of Printing A Dict's Contents Out In Columns?
I have a dict that I would like to print out in a series of columns, rather than as a bunch of lines. Normally when you do print(dict), the output will look something like this: {'Header2': ['2', '5', '8'], 'Header3': ['3', '6', '9'], 'Header1': ['1', '4', '7'], 'Header4': ['10', '11', '12']} I can then iterate through (in this case) a list of the headers in order to produce something similar to this: Header1 = ['1', '4', '7'] Header2 = ['2', '5', '8'] Header3 = ['3', '6', '9'] Header4 = ['10', '11', '12'] What I want to know is how I can print out that information in a column, where the header is the first line of the column, with the data following underneath, like so: Header1Header2Header3Header4 1 2 3 4 5 6 7 8 9 1011 12 -- http://mail.python.org/mailman/listinfo/python-list
Python Pickle Problems (Ellipsis + Other Objects)
See more details in my forum post: http://www.python-forum.org/pythonforum/viewtopic.php?f=18&t=26724 I'm trying to pickle a bunch of functions (mostly built-in) and pickle keeps giving me errors. I have no Ellipsis in my data at all, and for some reason, pickle seems to think I do. Here is an error I once received: Traceback (most recent call last): File "C:/Sunjay/My Website/projects/sunjay.ca/build/domath", line 132, inmain() File "C:/Sunjay/My Website/projects/sunjay.ca/build/domath", line 127, in main actions[action](form) File "C:/Sunjay/My Website/projects/sunjay.ca/build/domath", line 107, in do_math print SESSION.output() File "C:\Python27\lib\site-packages\session.py", line 207, in output self.commit() File "C:\Python27\lib\site-packages\session.py", line 152, in commit dump(data, f, HIGHEST_PROTOCOL) PicklingError: Can't pickle : attribute lookup __builtin__.ellipsis failed As well as the data structure which I am pickling: user_session = {'math_user': {'scope': {'int': , 'DEGREE': 'DEGREE', 'atan': , 'pow': , 'fsum': , 'cosh': , 'ldexp': , 'hypot': , 'acosh': , 'tan': , 'asin': , 'isnan': , 'log': , 'fabs': , 'floor': , 'atanh': , 'sqrt': , '__package__': None, 'frexp': , 'factorial': , 'abs': , 'degrees': , '_': 123, 'fib': , 'pi': 3.141592653589793, 'log10': , '__doc__': 'This module is always available. It provides access to mathematical\nfunctions for complex numbers.', 'mode': , 'polar': , 'asinh': , 'float': , 'fmod': , 'CALC_MODE': 'RADIAN', '__builtins__': {}, 'copysign': , 'cos': , 'ceil': , 'atan2': , 'isinf': , 'sinh': , 'phase': , '__name__': 'cmath', 'rect': , 'trunc': , 'expm1': , 'e': 2.718281828459045, 'tanh': , 'radians': , 'sin': , 'lgamma': , 'erf': , 'Vector': , 'erfc': , 'RADIAN': 'RADIAN', 'modf': , 'Ans': 123, 'exp': , 'acos': , 'log1p': , 'round': , 'gamma': }, 'history': [('123', 123)]}, '__date_loaded__': '2011-06-11'} The above data structure can be simply put as so: user_session = { "math_user": { "scope": {dictionary of all python math functions plus other types and functions}, "history": [list of previous commands], "__date_loaded__": timestamp of today's date } } Please help me find out why this code is failing: >>> from cPickle import dump, HIGHEST_PROTOCOL >>> dump(user_session, open("C:\\Session.dump", "wb"), HIGHEST_PROTOCOL) Traceback (most recent call last): File "", line 1, in dump(SESSION.data, open("C:\\Session.dump", "wb"), HIGHEST_PROTOCOL) PicklingError: Can't pickle : attribute lookup __builtin__.ellipsis failed Thanks for your help, Sunjay V. - www.sunjay.ca-- http://mail.python.org/mailman/listinfo/python-list
Re: Looking for Coders or Testers for an Open Source File Organizer
On 13/06/2011 11:55 PM, zainul franciscus wrote: Iknow you guys must be thinking "Hmm, Miranda, isn't that an IM application ?"; Yep I hear you, I'll change the name once I get a good name. I am open for any suggestions. Actually I was thinking "isn't that a functional programming language?" My suggestion: Cruftbuster -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Mon, Jun 13, 2011 at 10:21, Elena wrote: > On 13 Giu, 06:30, Tim Roberts wrote: >> Studies have shown that even a >> strictly alphabetical layout works perfectly well, once the typist is >> acclimated. > > Once the user is acclimated to move her hands much more (about 40% > more for Qwerty versus Dvorak), that is. > And disproportionate usage of fingers. On QWERTY the weakest fingers (pinkies) do almost 1/4 of the keypresses when modifier keys, enter, tab, and backspace are taken into account. I'm developing a QWERTY-based layout that moves the load off the pinkies and onto the index fingers: http://dotancohen.com/eng/noah_ergonomic_keyboard_layout.html There is a Colemak version in the works as well. -- Dotan Cohen http://gibberish.co.il http://what-is-what.com -- http://mail.python.org/mailman/listinfo/python-list
Re: Rant on web browsers
- Original Message - From: "Chris Angelico" To: Sent: Monday, June 13, 2011 11:31 PM Subject: Rant on web browsers Random rant and not very on-topic. Feel free to hit Delete and move on. I've just spent a day coding in Javascript, and wishing browsers supported Python instead (or as well). All I needed to do was take two dates (as strings), figure out the difference in days, add that many days to both dates, and put the results back into DOM Input objects (form entry fields). Pretty simple, right? Javascript has a Date class, it should be fine. But no. First, the date object can't be outputted as a formatted string. The only way to output a date is "Feb 21 2011". So I have to get the three components (oh and the month is 0-11, not 1-12) and emit those. And Javascript doesn't have a simple format function that would force the numbers to come out with leading zeroes, so I don't bother with that. What if I want to accept any delimiter in the date - slash, hyphen, or dot? Can I just do a simple translate, turn all slashes and dots into hyphens? Nope. Have to go regular expression if you want to change more than the first instance of something. There's no nice string parse function (like sscanf with "%d-%d-%d"), so I hope every browser out there has a fast regex engine. When all you have is a half-ton sledgehammer, everything looks like a really REALLY flat nail... Plus, Javascript debugging is annoyingly difficult if you don't have tools handy. I need third-party tools to do anything other than code blind? Thanks. Oh, and "int i" is illegal in Javascript. Whoops. That one is my fault, though. Javascript's greatest strength is that it exists in everyone's browser. That is simultaneously it's worst failing, because it becomes nigh impossible to improve it. If Chrome's V8 starts supporting new features and everyone else's JS engines don't, we can't use those features. Even if they're added to the standard, there'll still be old browsers that don't support things. The only way to add to the language is to dump stuff into a .js file and include it everywhere. But if anyone feels like writing an incompatible browser, please can you add Python scripting? Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list Hi Chris - I am just learning JavaScript and this was helpful to me, not a rant. I am reading JavaScript: The Good Parts so he is jumping around in topic and I can just use this when learning about dates and ints coming up. Patty -- http://mail.python.org/mailman/listinfo/python-list
Re: Binding was Re: Function declarations ?
- Original Message - From: "Ethan Furman" To: Sent: Monday, June 13, 2011 10:55 PM Subject: Re: Binding was Re: Function declarations ? Patty wrote: So I am wondering if you learned this in Computer Science or Computer Engineering?, on the job? I learned it on this list. :) ~Ethan~ -- http://mail.python.org/mailman/listinfo/python-list Smarty - I guess I can say the same thing - I understand it or was I supposed to add '+1' ? I learned that on this list ;) Patty -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
On Tue, 14 Jun 2011 12:53:11 +, Steve Crook wrote: > On Tue, 14 Jun 2011 05:37:45 -0700 (PDT), AlienBaby wrote in Message-Id: > <078c5e9a-8fad-4d4c-b081-f69d0f575...@v11g2000prk.googlegroups.com>: > >> How do those methods compare to the one I normally use; >> >> try: >> dict[key]+=1 >> except: >> dict[key]=1 > > This is a lot slower in percentage terms. You should also qualify the > exception: except KeyError Not necessarily. It depends on how often you have KeyError. By my measurements, if the key is usually present, it is faster to use try...except. Only if the key is frequently missing does it become faster to test first. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Leo 4.9 b4 released
Leo 4.9 b4 is now available at: http://sourceforge.net/projects/leo/files/ If you have trouble downloading, please do try an alternate mirror. Unless serious problems are reported, expect Leo 4.9 rc1 this Friday, June 17 and 4.9 final on Tuesday, June 21. Leo is a text editor, data organizer, project manager and much more. See: http://webpages.charter.net/edreamleo/intro.html **The highlights of Leo 4.9:** - The Qt gui completely replaces the Tk gui--Qt gui now has all essential features of Tk, including plugins. - Completed Leo's autocompleter. - The rendering pane can now display movies, html, svg images, etc. - The scrolledmessage plugin can now use the rendering pane. - Nodes may contain multiple @language directives. - Leo highlights URL's everywhere. Ctrl-click URL's opens them in your web browser. - Leo uses an @file node's extension by default if there is no @language directive in effect. - Unified extract and import commands. - Leo can now colorize multiple @language directives in a single node. - Plain up/down arrow keys in headline-editing mode select a new node. - New commands to insert, delete, change or print uA's. - Added namespace directive to .leo files. - Fixed many bugs, some important, others merely annoying. Links: -- Leo: http://webpages.charter.net/edreamleo/front.html Forum:http://groups.google.com/group/leo-editor Download: http://sourceforge.net/projects/leo/files/ Bzr: http://code.launchpad.net/leo-editor/ Quotes: http://webpages.charter.net/edreamleo/testimonials.html Edward K. Ream June 14, 2011 -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
On Tue, 14 Jun 2011 10:57:44 +, Steve Crook wrote: > Hi all, > > I've always done key creation/incrementation using: > > if key in dict: > dict[key] += 1 > else: > dict[key] = 1 > > Today I spotted an alternative: > > dict[key] = dict.get(key, 0) + 1 > > Whilst certainly more compact, I'd be interested in views on how > pythonesque this method is. Either version is perfectly fine. There's no reason to avoid either other than personal preference. The "if key in dict" version does up to three item lookups (first to see if the key is in the dict, then to fetch the value, then to assign it), the version with dict.get only does two. If the key has an expensive hash function, the version using dict.get will be much faster: >>> key = ("abcdefgh"*1, 5**30, frozenset(range(1))) * 30 >>> >>> from timeit import Timer >>> >>> t1 = Timer("""if key in d: ... d[key] += 1 ... else: ... d[key] = 1 ... """, "from __main__ import key; d = {key: 0}") >>> >>> t2 = Timer("d[key] = d.get(key, 0) + 1", ... "from __main__ import key; d = {key: 0}") >>> >>> min(t1.repeat()) 8.739075899124146 >>> min(t2.repeat()) 6.425030946731567 but that will rarely be a problem in practice. For "normal" keys which are small strings or ints, the "if key in dict" version will usually be faster. Unless there are lots of missing keys, in which case the version using dict.get may be faster. Either way, the difference is unlikely to be significant except for the tightest of tight loops. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
On Tue, 14 Jun 2011 13:16:47 +0200, Peter Otten wrote in Message-Id: : > Your way is usually faster than > >> dict[key] = dict.get(key, 0) + 1 Thanks Peter, ran it through Timeit and you're right. It's probably also easier to read the conditional version, even if it is longer. > You may also consider > > http://docs.python.org/library/collections.html#collections.defaultdict > http://docs.python.org/library/collections.html#collections.Counter Useful functions, thanks again. -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
On Tue, 14 Jun 2011 05:37:45 -0700 (PDT), AlienBaby wrote in Message-Id: <078c5e9a-8fad-4d4c-b081-f69d0f575...@v11g2000prk.googlegroups.com>: > How do those methods compare to the one I normally use; > > try: > dict[key]+=1 > except: > dict[key]=1 This is a lot slower in percentage terms. You should also qualify the exception: except KeyError -- http://mail.python.org/mailman/listinfo/python-list
Re: Rant on web browsers
CoffeeScript maybe? http://jashkenas.github.com/coffee-script -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
On Jun 14, 12:16 pm, Peter Otten <__pete...@web.de> wrote: > Steve Crook wrote: > > I've always done key creation/incrementation using: > > > if key in dict: > > dict[key] += 1 > > else: > > dict[key] = 1 > > Your way is usually faster than > > > dict[key] = dict.get(key, 0) + 1 > > > Whilst certainly more compact, I'd be interested in views on how > > pythonesque this method is. > > You may also consider > > http://docs.python.org/library/collections.html#collections.defaultdicthttp://docs.python.org/library/collections.html#collections.Counter How do those methods compare to the one I normally use; try: dict[key]+=1 except: dict[key]=1 -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On 13 Giu, 11:22, Chris Angelico wrote: > On Mon, Jun 13, 2011 at 6:42 PM, Yang Ha Nguyen wrote: > > > Could you show which studies? Do they do research just about habit or > > other elements (e.g. movement rates, comfortablility, ...) as well? > > Have they ever heard of RSI because of repetitive movements? > > And did any of the studies take into account the fact that a lot of > computer users - in all but the purest data entry tasks - will use a > mouse as well as a keyboard? The classic "grasp mouse" sitting to the > right of the keyboard mandates either a one-handed typing style (left > hand on keyboard, right hand on mouse) or constant re-aiming and > re-grasping. Or you can use a touchpad; what are the consequences of > that on typing speed? And my personal favorite, the IBM TrackPoint - a > stick mouse between the G/H/B keys, a design which other manufacturers > have since copied (although IMHO the IBM/Lenovo type still beats the > others hands down) - keep your hands where you want them and just > reach out to grab the mouse with your index finger, or slide your > fingers one key over (works fine if you're used to it). > > Typing speed depends on a lot more than just your layout, and it's > going to be nearly impossible to narrow it down viably. > > Chris Angelico Moreover, I've seen people move the mouse faster than I could achieve the same task by keyboard. To me, the advantage of ergonomic layout is not about speed - I'm sure there will always be people able to type blazingly fast on any random layout - but about comfort. Even when typing slowly, I don't want my fingers and my hands neither moving much more nor contorting much more than necessary. -- http://mail.python.org/mailman/listinfo/python-list
Re: Dictionaries and incrementing keys
Steve Crook wrote: > I've always done key creation/incrementation using: > > if key in dict: > dict[key] += 1 > else: > dict[key] = 1 Your way is usually faster than > dict[key] = dict.get(key, 0) + 1 > > Whilst certainly more compact, I'd be interested in views on how > pythonesque this method is. You may also consider http://docs.python.org/library/collections.html#collections.defaultdict http://docs.python.org/library/collections.html#collections.Counter -- http://mail.python.org/mailman/listinfo/python-list
pkg_resources ?
Hi all, I am trying to look at the source code of a python script (run.py). But it reads ###code - run.py #!/usr/bin/env python # EASY-INSTALL-SCRIPT: 'pbpy==0.1','run.py' __requires__ = 'pbpy==0.1' import pkg_resources pkg_resources.run_script('pbpy==0.1', 'run.py') ##code # What are the advantages of using pkg_resources stuff ? Thanks Regards, KM -- http://mail.python.org/mailman/listinfo/python-list
Dictionaries and incrementing keys
Hi all, I've always done key creation/incrementation using: if key in dict: dict[key] += 1 else: dict[key] = 1 Today I spotted an alternative: dict[key] = dict.get(key, 0) + 1 Whilst certainly more compact, I'd be interested in views on how pythonesque this method is. -- http://mail.python.org/mailman/listinfo/python-list
Python-URL! - weekly Python news and links (Jun 14)
[Originally drafted by Gabriel Genellina.] QOTW: "Well, it's incompatible with the Python compiler I keep in my head. Have these developers no consideration for backward-thinking- compatibility?" (Ben Finney, 2011-06-10, on certain old but not-so-obvious change) Python versions 2.7.2 and 3.1.4 (final) have been released! http://www.python.org/news/ Formatting numbers with dynamic width and padding: http://groups.google.com/group/comp.lang.python/t/52810ad96a5e759b/ How good is security via hashing? http://groups.google.com/group/comp.lang.python/t/2bfe26882f3de56f/ Is it possible to omit the parentheses when writing a decorator accepting optional arguments? http://groups.google.com/group/comp.lang.python/t/3adbb4ec23b38b31/ Inheriting docstrings http://groups.google.com/group/comp.lang.python/t/af47222fd9188506/ virtualenv has extremely powerful capabilities. How will they reach Python? http://mail.python.org/pipermail/python-dev/2011-June/111903.html The "regular expressions" culture: http://groups.google.com/group/comp.lang.python/t/4df6669917ef2bfd/ How and when metaclasses are actually used: http://groups.google.com/group/comp.lang.python/t/a48f5efafc287c68/ Unicode handling when stdout is not a tty: http://groups.google.com/group/comp.lang.python/t/293dab4db766b68a/ http://thread.gmane.org/gmane.comp.python.general/692355 The difference between dot and bracket notation: http://groups.google.com/group/comp.lang.python/t/e0ea54b326d14c6e/ Everything Python-related you want is probably one or two clicks away in these pages: Python.org's Python Language Website is the traditional center of Pythonia http://www.python.org Notice especially the master FAQ http://www.python.org/doc/FAQ.html Just beginning with Python? This page is a great place to start: http://wiki.python.org/moin/BeginnersGuide/Programmers Planet Python: you want to visit there: http://planet.python.org But don't confuse it with Planet SciPy: http://planet.scipy.org And don't confuse *that* with SciPyTip, a high-quality daily (!) tip for the numerically-inclined: http://twitter.com/SciPyTip Python Insider is the official blog of the Python core development team: http://pyfound.blogspot.com/2011/03/python-dev-launches-python-insider-blog.html The Python Software Foundation (PSF) has replaced the Python Consortium as an independent nexus of activity. It has official responsibility for Python's development and maintenance. http://www.python.org/psf/ Among the ways you can support PSF is with a donation. http://www.python.org/psf/donations/ Keep up with the PSF at "Python Software Foundation News": http://pyfound.blogspot.com The Python Papers aims to publish "the efforts of Python enthusiasts": http://pythonpapers.org/ Doug Hellman's "Module of the week" is essential reading: http://www.doughellmann.com/PyMOTW/ comp.lang.python.announce announces new Python software. Be sure to scan this newsgroup weekly. http://groups.google.com/group/comp.lang.python.announce/topics Python411 indexes "podcasts ... to help people learn Python ..." Updates appear more-than-weekly: http://www.awaretek.com/python/index.html The Python Package Index catalogues packages. http://www.python.org/pypi/ Much of Python's real work takes place on Special-Interest Group mailing lists http://www.python.org/sigs/ Python Success Stories--from air-traffic control to on-line match-making--can inspire you or decision-makers to whom you're subject with a vision of what the language makes practical. http://www.pythonology.com/success The Summary of Python Tracker Issues is an automatically generated report summarizing new bugs, closed ones, and patch submissions. http://search.gmane.org/?author=status%40bugs.python.org&group=gmane.comp.python.devel&sort=date nullege is an interesting search Web application, with the intelligence to distinguish between Python code and comments. It provides what appear to be relevant results, and demands neither Java nor CSS be enabled: http://www.nullege.com Although unmaintained since 2002, the Cetus collection of Python hyperlinks retains a few gems. http://www.cetus-links.org/oo_python.html The Cookbook is a collaborative effort to capture useful and interesting recipes: http://code.activestate.com/recipes/langs/python/ Many Python conferences around the world are in preparation. Watch this space for links to them. Among several Python-oriented RSS/RDF feeds available, see: http://www.python.org/channews.rdf For more, see: http://www.syndic8
UPnP client
Hi. Recently i needed some code to be able to listen on the public IP address outside my modem router. Eventually, i came up with a minimal UPnP implementation and because it seems to work and i'm happy about it, i've decided to post it here at clpy in case anybody else may have a use for it. You never know # NAT Traversal via UPnP Port Mapping # Written by Nikos Fotoulis # This code is public domain. # # Tested on Thomsom TG858v7 modem router. # UPnP is hairy. May not work with other routers # Feedback is welcome. import re, thread, socket, traceback as tb, random from time import sleep from urlparse import urlparse from urllib import urlopen import urllib2 VERBOSE = VVERBOSE = False DEFAULT_ADDR = UPNPS = None # regexes rWANIP = re.compile (r"ST:[^\n]*(WAN(IP|PPP)Connection:\d+)", re.I).search rLOCATION = re.compile (r"LoCaTiON:([^\n]+)", re.I).search def rTAG (t): return re.compile ("<%s>(.+?)"%(t, t), re.I|re.DOTALL) rSERVICE = rTAG ("service").findall for tag in ["controlURL", "URLBase", "NewExternalIPAddress", "NewLeaseDuration", "NewProtocol", "NewInternalClient", "NewExternalPort", "NewInternalPort"]: def f (txt, r=rTAG (tag).search): x = r (txt) if x: return x. groups ()[0].strip () if tag.startswith ("New"): tag = tag [3:] globals () ["r" + tag.upper ()] = f # multicast and discover UPnP gateways # Returns a dictionary where the keys are our "external IP" addresses def DiscoverUPnP (): global UPNPS, DEFAULTGW, DEFAULTIFACE, DEFAULT_ADDR S = {} UPNPS = {} s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt (socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) #s.setsockopt (socket.SOL_SOCKET, socket.SO_BROADCAST, 1) R = "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: ssdp:discover\r\nMX: 10\r\nST: ssdp:all\r\n\r\n" try: s.sendto (R, ("239.255.255.250", 1900)) except: print "UPnP gateways unreachable" return timeout = 5 while 1: s.settimeout (timeout) try: data, addr = s.recvfrom (4096) except: break timeout = max (timeout * 0.5, 0.01) r = rWANIP (data) if r: service = r.groups ()[0] r = rLOCATION (data) if r: location = r.groups () [0].strip () if VERBOSE: print "server:", addr, "supports", service, "at", location S [addr] = service, location if VVERBOSE: print "+" for userver, (service, location) in S.items (): up = urlparse (location) netloc = up.netloc if ":" in netloc: server, _, port = netloc.partition (":") else: server, port = netloc, "80" data = urlopen (location).read () URLBase = rURLBASE (data) or "http://%s:%s"%(server, port) controlURL = None for x in rSERVICE (data): if service in x: controlURL = rCONTROLURL (x) break if controlURL: addr = GetExternalIP (service, URLBase + controlURL) if addr: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((server, int (port))) thishost = s.getsockname () [0] s.close () UPNPS [server] = addr, service, URLBase + controlURL, thishost if VERBOSE: print "for server:", server, "controlURL:", controlURL else: print "No controlURL found for server:", server # set defaults if len (UPNPS) == 1: k = UPNPS.items ()[0] DEFAULT_ADDR, DEFAULTGW, DEFAULTIFACE = k [1][0], k [0], k [1][3] else: print "Multiple UPnP gateways!" return UPNPS # generic request POST data def envelope (request, service, **kw): return """ http://schemas.xmlsoap.org/soap/envelope/"; s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";> """%(request, service) + "\n".join (["<%s>%s"%(k,v,k) for k, v in kw.items ()]) + """ """%request def Request (service, URL, request, **kw): req = urllib2.Request (URL) req.add_header ("content-type",'text/xml; charset="utf-8"') req.add_header ("SOAPACTION", '"urn:schemas-upnp-org:service:%s#%s"'%(service, request))
Re: Rant on web browsers
On Tue, Jun 14, 2011 at 6:39 PM, Martin P. Hellwig wrote: > On 14/06/2011 07:31, Chris Angelico wrote: > >> >> But if anyone feels like writing an incompatible browser, please can >> you add Python scripting? > > You might find that Pyjamas already fill your needs python/javascript wise. > It is truly great to just write python, translate it, and then have it work > in the browser. I had a (very) quick glance at that; it entails a fairly large library that has to get loaded. It still comes down to "the only way to improve this is to dish out a huge helping of .js to everyone who comes", which imho is unideal. That said, though, my context for this job was "tiny thing, just do the same as you're doing on the back-end". For something larger, I may well give Pyjamas a whirl. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Re: Rant on web browsers
On 14/06/2011 07:31, Chris Angelico wrote: But if anyone feels like writing an incompatible browser, please can you add Python scripting? You might find that Pyjamas already fill your needs python/javascript wise. It is truly great to just write python, translate it, and then have it work in the browser. -- mph -- http://mail.python.org/mailman/listinfo/python-list
ftplib: Software caused connection abort, how I solved it
My program polls FTP servers at intervals for jobs to process. Its running as a service on Windows server 2000 or 2003 :-(. About 13% of times the retrbinary and less often the nlst calls would fail with "Software caused connection abort". I could find no relevant solution on the intertubes. I added blocksize=2048 to the retrbinary call which lowerd the failures to about 2% but that was still unsatisfactory for me. When I added: socket.setdefaulttimeout(60) to the setup stuff in order to solve a different problem, the connection abort errors went away completely. Even when I restored retrbinary to use the default blocksize it still worked. HTH -- http://mail.python.org/mailman/listinfo/python-list
Re: working with raw image files
what is a .raw file, do you mean a flat binary? -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs. Colemak: is it Worthwhile to Improve the Dvorak Layout?
for some reason, was unable to post the previous message. (but can post others) So, the message is rot13'd and it works. Not sure what's up with Google groups. (this happened a few years back once. Apparantly, the message content might have something to do with it because rot13 clearly works. Yet, the problem doesnt seem to be my name or embedded url, since it only happens with the previous message) -- http://mail.python.org/mailman/listinfo/python-list
Re: I want this to work. [[]] * n
Thanks. This works. :) Regards, Sherjil Ozair -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs. Colemak: is it Worthwhile to Improve the Dvorak Layout?
Ba Wha 13, 7:23 nz, Ehfgbz Zbql 〔ehfgbzcz...@tznvy.pbz〕 jebgr: │ Qibenx -- yvxr djregl naq nal bgure xrlobneq ynlbhg -- nffhzrf gur │ pbzchgre vf n glcrjevgre. │ Guvf zrnaf va rssrpg ng yrnfg gjb pbafgenvagf, arprffnel sbe gur │ glcrjevgre ohg abg sbe gur pbzchgre: │ │ n. Gur glcvfg pna glcr bayl 1 xrl ng n gvzr │ o. Bar (xrl)fgebxr trarengrf rknpgyl 1 yrggre │ │ Rkprcgvbaf gb [n] ner Fuvsg (Pgey) rgp ohg pyrneyl va ehaavat hfr gurl │ ner gur rkprcgvba abg gur ehyr. │ │ │ Jurer fcrrq ernyyl vf ivgny, fhpu nf sbe pbheg fgrabtencuref, fcrpvny zrpunavpny │ │ fubegunaq znpuvarf fhpu nf fgrabglcrf ner hfrq, pbfgvat gubhfnaqf bs qbyynef ohg nyybjvat │ │ gur glcvfg gb ernpu fcrrqf bs bire 300 jcz. │ │ Lrf, vafgehzragf yvxr fgrabglcrf fcrrq hc glcvat ol hanffhzvat [n] │ Yvxrjvfr cvnavfgf pna or fnvq (naq frra) gb qb zber ng gur cvnab guna │ glcvfgf ng n pbzchgre orpnhfr pubeqf ner cneg bs gur 'nyybjrq │ ynathntr'. │ │ Nffhzcgvba [o] yvxrjvfr vf haarprffnevyl erfgevpgvir ba n pbzchgre. │ Guvax bs nyy gur 'nooeri/favccrg/fubegsbez/grzcyngr' flfgrzf yvxr │ lnfavccrg, grkgzngr-favccrgf, rznpf/iv nooerif rgp. │ │ Sbe beqvanel Ratyvfu gurer ner guvatf yvxr xrlfpevcguggc://jjj.serrjrof.pbz/pnfflwnarx │ │ Sbe rknzcyr gur zbfg pbzzba jbeqf (rfgvzngrq gb or nebhaq 40% bs │ Ratyvfu) ner fubegsbezrq nf: │ o = ohg │ p = jvgu │ q = unq │ r = guvf │ s = bs │ t = gung │ u = gur │ w = juvpu │ a = naq │ ...rgp rgp hcgb │ m = jnf │ │ gura pbzzba cuenfrf │ noyr gb = po │ unq orra = qa │ qb abg = qk │ qvq abg = rk │ qbrf abg = qfk │ │ rgp │ │ Pyrneyl, sbe cebtenzzref guvf vf hayvxryl gb or zhpu hfr -- │ cebtenzzvat ynathntrf ner abg Ratyvfu. │ │ Ohg ohg vg vf pregnvayl na bcra dhrfgvba jurgure vs gur ercrngvat │ cnggreaf va cebtenzzvat ynathntrf ner pncgherq vagb fbzr flfgrz, gur │ erfhygvat orarsvg jbhyq or n zrer zvpeb-bcgvzvmngvba be fbzrguvat zber │ fvtavsvpnag. V unir frra fbzr tbbq cebtenzzref fjrne ol │ rznpf-lnfavccrgf, grkgzngr-favccrgf rgp. gurer'f fcrpvny vachg qrivprf qrfvtarq sbe pubeqvat, pnyyrq pubeqvat xrlobneq. Gurer'f qngnunaq. Ybbx hc Jvxvcrqvn sbe n yvfg. gurer'f nyfb xvarfvf naq bguref gung jbexf jvgu sbbg crqnyf. Fb, vg'f yvxr pubeqvat jvgu lbhe srrg gbb. Rire frra gubfr penml betnavfg jvgu srrg ohfl ba 30 crqnyf? unir lbh gevrq ibvpr vachg? Jvaqbjf pbzrf jvgu vg. Cerggl tbbq. Gubhtu, qbrfa'g jbex fb jryy jvgu nccf vzcyrzragrq bhgfvqr bs ZF'f senzrjbex, fhpu nf rznpf. fbzr cebtenzre'f fbyhgvbaf: 〈Pryroevgl Cebtenzref jvgu EFV (Ercrgvgvir Fgenva Vawhel)〉 uggc://knuyrr.bet/rznpf/rznpf_unaq_cnva_pryroevgl.ugzy Knu -- http://mail.python.org/mailman/listinfo/python-list
Re: Keyboard Layout: Dvorak vs Colemak: is it Worthwhile to Improve the Dvorak Layout?
On Jun 13, 6:19 am, Steven D'Aprano 〔steve +comp.lang.pyt...@pearwood.info〕 wrote: │ I don't know if there are any studies that indicate how much of a │ programmer's work is actual mechanical typing but I'd be surprised if it │ were as much as 20% of the work day. The rest of the time being thinking, │ planning, debugging, communicating with customers or managers, reading │ documentation, testing, committing code, sketching data schemas on the │ whiteboard ... to say nothing of the dreaded strategy meetings. you can find the study on my site. URL in the first post of this thread. Xah -- http://mail.python.org/mailman/listinfo/python-list