Re: Is print thread safe?

2014-08-12 Thread Cameron Simpson

On 12Aug2014 08:01, Marko Rauhamaa ma...@pacujo.net wrote:

Steven D'Aprano steve+comp.lang.pyt...@pearwood.info:

Personally, I believe that print ought to do its own locking. And
print is a statement, although in this case there's no need to support
anything older than 2.6, so something like this ought to work:

from __future__ import print_function

_print = print
_rlock = threading.RLock()
def print(*args, **kwargs):
with _rlock:
_print(*args, **kwargs)


Could this cause a deadlock if print were used in signal handlers?


At the C level one tries to do as little as possible in q signal handler.  
Typically setting a flag or putting something on a queue for later work.


In Python that may be a much smaller issue, since I imagine the handler runs in 
the ordinary course of interpretation, outside the C-level handler context.


I personally wouldn't care if this might deadlock in a handler (lots of things 
might; avoid as many things as possible). Also, the code above uses an RLock; 
less prone to deadlock than a plain mutex Lock.


Cheers,
Cameron Simpson c...@zip.com.au

A host is a host from coast to coast
 no one will talk to a host that's close
Unless the host (that isn't close)
is busy, hung or dead
- David Lesher, wb8...@skybridge.scl.cwru.edu
--
https://mail.python.org/mailman/listinfo/python-list


Re: Is print thread safe?

2014-08-12 Thread Cameron Simpson

On 12Aug2014 09:56, Steven D'Aprano steve+comp.lang.pyt...@pearwood.info 
wrote:

Cameron Simpson wrote:

On 12Aug2014 02:07, Steven D'Aprano steve+comp.lang.pyt...@pearwood.info 
wrote:

Is this documented somewhere?


In python/2.7.6/reference/simple_stmts.html#index-22, print is described
in terms of a write for each object, and a write for the separators.
There is no mention of locking.


Ah, thanks!


On that basis, I would find the interleaving described normal and
expected. And certainly not broken.


I personally didn't describe it as broken,


Yes, sorry.


but it is, despite the
documentation. I just ran a couple of trials where I collected the output
of sys.stdout while 50 threads blasted Spam ABCD EFGH (plus the implicit
newline) to stdout as fast as possible using print. The result was that out
of 248165 lines[1], 595 were mangled. Many of the mangled lines were the
expected simple run-ons:

   Spam ABCD EFGHSpam ABCD EFGH\n\n

which makes sense given the documentation, but there were lots of anomalies.

Mysterious spaces appearing in the strings:

   Spam ABCD EFGH Spam ABCD EFGH\n\n
   Spam ABCD EFGH Spam ABCD EFGH\n Spam ABCD EFGH\n

occasional collisions mid-string:

   Spam ABSpam ABCD EFGH\nCD EFGH\n

letters disappearing:

   Spam AB\nD EFGH\n

and at least one utterly perplexing (to me) block of ASCII NULs appearing in
the middle of the output:

   \x00\x00\x00...\x00\x00\n

This is with Python 2.7.2 on Linux.


Sounds like print is not thread safe. Which it does not promise to be. But I 
would normally expect most file.write methods to be thread safe. Naively.



Just use a lock! And rebind print! Or use the logging system!


Personally, I believe that print ought to do its own locking.


I don't, but I kind of believe files should have thread safe write calls.  
Again, not guarrenteed AFAIR.



And print is a
statement, although in this case there's no need to support anything older
than 2.6, so something like this ought to work:

from __future__ import print_function

_print = print
_rlock = threading.RLock()
def print(*args, **kwargs):
   with _rlock:
   _print(*args, **kwargs)

Sadly, using print as a function alone isn't enough to fix this problem, but
in my quick tests, using locking as above does fix it, and with no
appreciable slowdown.


I would expect file.write to be fast enough that the lock would usually be 
free. With no evidence, just personal expectation. Taking a free lock should be 
almost instant.



[1] Even the number of lines of output demonstrates a bug. I had fifty
threads printing 5000 times each, which makes 25 lines, not 248165.


Sounds like the file internals are unsafe. Ugh.

Cheers,
Cameron Simpson c...@zip.com.au

If it ain't broken, keep playing with it.
--
https://mail.python.org/mailman/listinfo/python-list


Captcha identify

2014-08-12 Thread Wesley
Hi guys,
  These days I got a small task to identify Captcha characters.
I googled a lot and find some way to do verification code identify.
However, most are for general captcha.

And, for simple captcha, I can use Pytesser.

However, what about those advanced pictures.
I mean:
1.including number and alpha
2.letters might be rotated
3.letters might be deformed

I don't know why I cannot insert picture attachment here...

But I think you guys can think out what the captcha looks like:-)

So, any suggestions?

Thanks.
Wesley
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Linux distros w/o Python in base installation

2014-08-12 Thread Ned Deily
In article 
captjjmpfyoxnp-1w2-_8riaoz30w2lsz5q7ky4fbpc-bpmv...@mail.gmail.com,
 Chris Angelico ros...@gmail.com wrote:
 Well, it only *became* contrary to recommended practice in response to
 Arch doing it and everyone seeing the issues it caused :) Personally,
 I'm glad they did. Lets those of us who follow slower distros (I'm
 running Debian) get the benefit of someone else's hindsight.

Well, many people thought that the problems caused by changing python 
to mean python3 at this stage in its lifecycle were so obvious that 
there was no need to formalize them in a PEP.  Arch proved us wrong, 
hence PEP 394.

http://legacy.python.org/dev/peps/pep-0394/

-- 
 Ned Deily,
 n...@acm.org

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


Python in financial services

2014-08-12 Thread Rustom Mody
Ive been asked to formulate a python course for financial services folk.

If I actually knew about the subject, I'd have fatter pockets!
Anyway heres some thoughts. What I am missing out?

[Apart from basic python -- contents typically needs tailoring to the audience] 
the following:

- Libraries -- Decimal?
- scripts -- philosophy and infrastructure eg argparse, os.path
- Pandas
- Numpy Scipy (which? how much?)
- ipython + matplotlib + ??
- Database interfacing
- Excel interfacing (couple of libraries.. which?)
- C(C++?) interfacing paradigms -- ranging from ctypes, cython to classic 
lo-level
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Linux distros w/o Python in base installation

2014-08-12 Thread David Palao
2014-08-11 23:36 GMT+02:00 Ned Deily n...@acm.org:
 In article lsb84u$21c$1...@reader1.panix.com,
  Grant Edwards invalid@invalid.invalid wrote:
 Apparently.  Perhaps theres an enable LSB compliance option
 somewhere in the Arch install docs, but I didn't see it...

 Also beware that, unlike most other distributions and contrary to
 recommended practice, Arch has chosen to make Python 3 its default, that
 is, when everything is installed, `python` invokes `python3`, rather
 than `python2`.  So you may need to change shebang lines in scripts, etc.

 https://wiki.archlinux.org/index.php/python

 --
  Ned Deily,
  n...@acm.org

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

Also Gentoo uses Python3 by default for some months now. The positive
side effect for me has been that I started seriously to switch to
python3.

Best
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Linux distros w/o Python in base installation

2014-08-12 Thread Fabien

On 12.08.2014 09:59, David Palao wrote:

Also Gentoo uses Python3 by default for some months now. The positive
side effect for me has been that I started seriously to switch to
python3.


it's a matter of months for debian/ubuntu to rely only on python3 code 
too, while still respecting PEP 394:


https://wiki.ubuntu.com/Python/3


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


Re: Linux distros w/o Python in base installation

2014-08-12 Thread Chris “Kwpolska” Warrick
On Mon, Aug 11, 2014 at 8:53 PM, Grant Edwards invalid@invalid.invalid wrote:
 I just installed Arch Linux for the first time, and was surprosed to
 find that Python isn't installed as part of a base system.  It's
 also not included in the 'base-devel' package group.  It's trivial to
 install, but I'd still pretty surprised it's not there by default.  I
 guess I've spent too much time with Gentoo, Debian, and RedHat
 derivitives which require Python be installed.

 I've probably used at least a dozen Linux distros over the years, and
 this is the first time I've noticed that Python wasn't installed by
 default.

Arch has a different idea of “base system”.  The base group contains
the most crucial packages needed to run an Arch Linux system, and that
is all.  And you do not need Python to do so.  Nevertheless, most
people will likely install Python by themselves, or with a package
that depends on Python.

On Mon, Aug 11, 2014 at 9:02 PM, Chris Rebert c...@rebertia.com wrote:
 It would seem that such distros are opting to not be LSB-compliant?:
 http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Languages/LSB-Languages/pylocation.html

Arch does not really care about LSB, AFAIK.

-- 
Chris “Kwpolska” Warrick http://chriswarrick.com/
PGP: 5EAAEA16
stop html mail | always bottom-post | only UTF-8 makes sense
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread alister
On Tue, 12 Aug 2014 00:21:28 -0700, wxjmfauth wrote:

 Math:
 
 Try to formalize with mathematics the Flexible String Representation.
 You should quickly realize, it is a logical mathematical absurdity.
 Unbelievable.
 
 jmf

Mathematicians work with numbers (Algebra is a abstraction of numerical 
concepts) strings are concerned with characters (Arabic numerals are just 
characters commonly used to represent numbers )
therefore even trying to rationalise any string representation with 
mathematics is a logical absurdity in itself.




-- 
Someone on IRC was very sad about the uptime of his machine wrapping
from 497 days to 0.
-- linux-kernel
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to write file into my android phone?

2014-08-12 Thread Anssi Saari
Chris “Kwpolska” Warrick kwpol...@gmail.com writes:

 2) the phone isn't necessarily visible on a pc as a drive at all.
  For example the Samsung gs4.

 This is actually true for ALL android devices, starting with Android 3.0.

There was just a guy on comp.mobile.android saying his Android 4.2 phone
(BLU Dash or something like that, extremely Chinese) presents its
external SD card as a USB Mass Storage drive to a PC when connected over
USB. Exactly the thing Google hates and fears and has tried to kill
off... But it's not like Google can force anything on phones running
AOSP Android without Google services and that's China and a few other
large emerging markets. So it's just our small market here in the
western countries where Google has some control...
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Chris Angelico
On Tue, Aug 12, 2014 at 8:40 PM, alister
alister.nospam.w...@ntlworld.com wrote:
 On Tue, 12 Aug 2014 00:21:28 -0700, wxjmfauth wrote:
 [ chomp ]

 Mathematicians work with numbers (Algebra is a abstraction of numerical
 concepts) strings are concerned with characters (Arabic numerals are just
 characters commonly used to represent numbers )
 therefore even trying to rationalise any string representation with
 mathematics is a logical absurdity in itself.

Don't bother responding to jmf; he doesn't listen. Also, his posts
don't survive the jump to python-list, so we see them only when
someone quotes him like that... as far as I'm concerned, his posts are
now on par with those trying to sell us solution manuals or herbal
remedies.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Is print thread safe?

2014-08-12 Thread Chris Angelico
On Tue, Aug 12, 2014 at 2:31 PM, Cameron Simpson c...@zip.com.au wrote:
 I would expect file.write to be fast enough that the lock would usually be
 free.

Until the day when it becomes really REALLY slow, because your
program's piped into 'less' and the user's paging through it. But even
apart from that, writing to stdout can take a notable amount of time.
Expecting the lock to usually be free will depend on the nature of the
program - how much of it is spent in silent computation and how much
in production of output. If that ratio is sufficiently skewed, then
sure, the lock'll usually be free.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Captcha identify

2014-08-12 Thread Denis McMahon
On Tue, 12 Aug 2014 00:04:33 -0700, Wesley wrote:

 These days I got a small task to identify Captcha characters.

Several of us code websites. Some of our websites may even use captcha. 
We use captcha to stop software posting spam to websites.

What makes you think we have any inclination to help you defeat captchas?

-- 
Denis McMahon, denismfmcma...@gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to write file into my android phone?

2014-08-12 Thread Grant Edwards
On 2014-08-11, Grant Edwards invalid@invalid.invalid wrote:

 What MTP allows is parallel access between the MTP protocol server in
 the phone and the rest of the phone (OS and apps).  In order to mount
 a partition as a USB mass storage device, it has to first be unmounted
 by the Android system.  That's OK for an SD card that doesn't contain
 anything important required by the Android system, but it means that
 you can't mount the system partition without shutting down the phone
 completely.

Another important reason for not presenting the phone's built-in flash
as a USB mass storage device is that it requires you to use a
brain-dead broken-as-designed Microsoft filesystem left over from the
days of 360K floppy disk drives -- otherwise Windows won't know what
to do with it.

It's _possible_ to build an Android phone tht runs an DOS file system
(and IIRC people have done it) but it introduces all sorts of
security, reliability, and performance problems.

-- 
Grant Edwards   grant.b.edwardsYow! I wonder if I ought
  at   to tell them about my
  gmail.comPREVIOUS LIFE as a COMPLETE
   STRANGER?
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Linux distros w/o Python in base installation

2014-08-12 Thread Grant Edwards
On 2014-08-12, Chris “Kwpolska” Warrick kwpol...@gmail.com wrote:
 On Mon, Aug 11, 2014 at 8:53 PM, Grant Edwards invalid@invalid.invalid 
 wrote:
 I just installed Arch Linux for the first time, and was surprosed to
 find that Python isn't installed as part of a base system.  It's
 also not included in the 'base-devel' package group.  It's trivial to
 install, but I'd still pretty surprised it's not there by default.  I
 guess I've spent too much time with Gentoo, Debian, and RedHat
 derivitives which require Python be installed.

 I've probably used at least a dozen Linux distros over the years, and
 this is the first time I've noticed that Python wasn't installed by
 default.

 Arch has a different idea of “base system”.  The base group contains
 the most crucial packages needed to run an Arch Linux system, and that
 is all.

That's true of Gentoo as well, but it includes Python.

 And you do not need Python to do so.

That's the part that surprised me.  It's been a _long_ time since I've
run a Linux distro that didn't require Python as a crucial system
package.

-- 
Grant Edwards   grant.b.edwardsYow! Those people look
  at   exactly like Donnie and
  gmail.comMarie Osmond!!
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Captcha identify

2014-08-12 Thread Wesley

Here is captcha link:
https://drive.google.com/folderview?id=0B33_p7UnVqoyd09mT3V0aWFxRmcusp=sharing

在 2014年8月12日星期二UTC+8下午8时59分11秒,Dennis Lee Bieber写道:
 On Tue, 12 Aug 2014 00:04:33 -0700 (PDT), Wesley nisp...@gmail.com
 
 declaimed the following:
 
 
 
 Hi guys,
 
   These days I got a small task to identify Captcha characters.
 
 
 
   In other words, you have a task to make a robot that can break the
 
 procedures put in place to prevent robots from posting to web sites...
 
 
 
   The whole purpose of the CAPTCHA scheme is that computer AI systems
 
 aren't advanced enough to process them, whereas a human mind can almost do
 
 it in the subconscious.
 
 
 
 
 
 (as for picture attachments? comp.lang.python is a text newsgroup --
 
 binaries aren't wanted in it; c.l.p is also gatewayed to a mailing list;
 
 and that mailing list is gatewayed to gmane.comp.python.general where it is
 
 made available as a news group (after spam filtering). Google Groups links
 
 to c.l.p (and many of us wish it didn't)
 
 -- 
 
   Wulfraed Dennis Lee Bieber AF6VN
 
 wlfr...@ix.netcom.comHTTP://wlfraed.home.netcom.com/

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


Re: Captcha identify

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 12:57 AM, Wesley nisp...@gmail.com wrote:
 Here is captcha link:
 https://drive.google.com/folderview?id=0B33_p7UnVqoyd09mT3V0aWFxRmcusp=sharing

You seem to have misunderstood how grossly offensive your request is.
I am now the third person to do you the courtesy of a response, but
there are lots more who are simply deleting your post and moving on,
or possibly marking you as a spammer, because that's about the only
reason for wanting a program to solve CAPTCHAs.

Let me spell it out for you: NO WE WILL NOT do this for you. And if
you do it yourself, we will not be happy. Just don't.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Python in financial services

2014-08-12 Thread Johann Hibschman
Rustom Mody rustompm...@gmail.com writes:

 Ive been asked to formulate a python course for financial services
 folk.

 If I actually knew about the subject, I'd have fatter pockets!
 Anyway heres some thoughts. What I am missing out?

Good luck!  It's a pretty broad field, so everyone probably has
different needs.

 - Libraries -- Decimal?

I've never seen decimal used, even though it makes sense for
accounting-style finance.  I've mostly been looking at forecasts,
trading, and risk, where floats are fine.  So maybe mention that it
exists, so people know where to look if they need it, but don't stress
it.

 - scripts -- philosophy and infrastructure eg argparse, os.path

Basic argparse is very handy, but, again, I wouldn't spend too much time
on it.

 - Pandas
 - Numpy Scipy (which? how much?)

For me, pandas is huge, numpy is a nice fundamental substrate, while
only bits and pieces of scipy are used (mostly optimization).
statsmodels may also be worth a mention, as the answer to how do I do a
regression.

 - ipython + matplotlib + ??

Ipython notebook + matplotlib is great.  At least show that it exists.
pandas plots may be enough, though.

 - Database interfacing

Definitely mention.

 - Excel interfacing (couple of libraries.. which?)

Meh, maybe.  At least give a strategy.  It always seems like a fool's
errand, though: I end up just dumping data to CSV and using that.

 - C(C++?) interfacing paradigms -- ranging from ctypes, cython to
   classic lo-level

Probably not, but it depends on the audience.  The overview, like
ctypes will link to C-like libraries, cython lets you write python-like
code that runs fast, and there's SWIG and Boost.Python if you want to
write your own modules is about all you need.

Hope that helps,
Johann
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Captcha identify

2014-08-12 Thread Denis McMahon
On Wed, 13 Aug 2014 01:06:47 +1000, Chris Angelico wrote:

 Let me spell it out for you: NO WE WILL NOT do this for you. And if you
 do it yourself, we will not be happy. Just don't.

Chris, I suspect he's a codemonkey in a chinese or similar asian spamhaus. 
We should probably be thankful that he's so dumb.

-- 
Denis McMahon, denismfmcma...@gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Linux distros w/o Python in base installation

2014-08-12 Thread Ian Kelly
On Tue, Aug 12, 2014 at 8:12 AM, Grant Edwards invalid@invalid.invalid wrote:
 On 2014-08-12, Chris “Kwpolska” Warrick kwpol...@gmail.com wrote:
 On Mon, Aug 11, 2014 at 8:53 PM, Grant Edwards invalid@invalid.invalid 
 wrote:
 I just installed Arch Linux for the first time, and was surprosed to
 find that Python isn't installed as part of a base system.  It's
 also not included in the 'base-devel' package group.  It's trivial to
 install, but I'd still pretty surprised it's not there by default.  I
 guess I've spent too much time with Gentoo, Debian, and RedHat
 derivitives which require Python be installed.

 I've probably used at least a dozen Linux distros over the years, and
 this is the first time I've noticed that Python wasn't installed by
 default.

 Arch has a different idea of “base system”.  The base group contains
 the most crucial packages needed to run an Arch Linux system, and that
 is all.

 That's true of Gentoo as well, but it includes Python.

Because Portage is written in Python. Otherwise Gentoo would probably
omit it from the base system as well.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Captcha identify

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 1:38 AM, Denis McMahon denismfmcma...@gmail.com wrote:
 On Wed, 13 Aug 2014 01:06:47 +1000, Chris Angelico wrote:

 Let me spell it out for you: NO WE WILL NOT do this for you. And if you
 do it yourself, we will not be happy. Just don't.

 Chris, I suspect he's a codemonkey in a chinese or similar asian spamhaus.
 We should probably be thankful that he's so dumb.

Yeah, that is the most likely scenario. If I'm courteous, I'll assume
that he has no idea what the rest of the world thinks of this kind of
thing.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Python in financial services

2014-08-12 Thread Denis McMahon
On Tue, 12 Aug 2014 00:33:11 -0700, Rustom Mody wrote:

 Ive been asked to formulate a python course for financial services folk.

I wouldn't worry too much about c or c++ interfacing paradigms.

-- 
Denis McMahon, denismfmcma...@gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list


Using asyncio workers in a `concurrent.futures` interface

2014-08-12 Thread cool-RR
Hello everybody! I have a question. 

I have a Django app running on Heroku. I need to run about 100 worker threads 
there to do uploads/downloads simultaneously. A Heroku Dyno has only 512MB of 
memory, so I'm reluctant to run 100 worker threads. (I've had Dynos crash from 
lack of memory when using 6 threads before.) 

I heard that the asyncio module is mature and ready for usage, and I was happy 
because I kept hearing about it in the last year, and I saw Guido's lecture 
about it. If I understand correctly it would let me run multiple uploads and 
downloads efficiently in one thread, which would conserve more resources than 
using threads. (Please correct me if I'm wrong.) 

Now, I am a little clueless about the whole way it's built, using coroutines 
and tricky usage of `yield from`. I figured that since this is eventually a 
library for concurrency, i.e. doing many tasks at the same time, there will be 
an API in a style of Here are 100 tasks for you to do concurrently, let me 
know when they're done.

I looked at the asyncio documentation page and saw that it does mention futures 
and executors, which is my favorite interface for doing concurrency. I was 
happy and I skimmed the docs. But, I couldn't find a simple way to use these. I 
don't want to learn how to define coroutines and use `yield from` to switch 
between them. (I use `yield from` regularly and fully understand how it works, 
I just don't write my programs that way.)

What I'm expecting is something like this: 

download_file = lambda url: requests.get(url).content
urls = ['http://google.com/file1.jpg', 'http://google.com/file2.jpg', 
'http://google.com/file3.jpg'] # etc.

with AsyncIOExecutor() as asyncio_executor:
files = asyncio_executor.map(download_file, urls)

And that's it, no coroutines, no `yield from`. Since, if I understand 
correctly, asyncio requires a mainloop, it would make sense for the 
AsyncIOExecutor to have a thread of its own in which it could run its mainloop.

Is this possible? Did someone implement this? 


Thanks for your help,
Ram.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Neil D. Cerutti

On 8/10/2014 2:14 PM, Roy Smith wrote:

In article 154cc342-7f85-4d16-b636-a1a953913...@googlegroups.com,
  Rustom Mody rustompm...@gmail.com wrote:


l= [6,2,9,12,1,4]
sorted(l,reverse=True)[:5]

[12, 9, 6, 4, 2]

No need to know how sorted works nor [:5]

Now you (or Steven) can call it abstract.

And yet its
1. Actual running code in the interpreter
2. Its as close as one can get to a literal translation of your
Find the 5 largest numbers in a list
[...]
All the above are clearer than loops+assignments and can be
taught before them


I disagree.  For a beginner, you want to be able to break things down
into individual steps and examine the result at each point.  If you do:


l= [6,2,9,12,1,4]
l2 = sorted(l,reverse=True)


you have the advantage that you can stop after creating l2 and print it
out.  The student can see that it has indeed been sorted.  With the
chained operations, you have to build a mental image of an anonymous,
temporary list, and then perform the slicing operation on that.  Sure,
it's the way you or I would write it in production code, but for a
beginner, breaking it down into smaller pieces makes it easier to
understand.


l2[:5]


Yes, and that teaching technique is supported by research.

Beginners are particularly poor, in relation to experts, at noticing the 
applicability of idea, and at combining ideas together. Breaking things 
into component parts has multiple benefits:


1. The applicability of individual ideas becomes obvious. It's one thing 
to know about [].sort, and another thing to know when it's appropriate 
to sort something.


2. The expert specifically shows how and why the ideas are combined. 
This helps build the connection for the beginner, whose knowledge is not 
stored as an expert stores it; i.e, in broad categories with multiple 
connections; but as disorganized data with very few connections.


http://www.amazon.com/How-Learning-Works-Research-Based-Principles/dp/0470484101

I bought the book based on a recommendation from SciPy talk, and it's 
really great. As an autodidact, it'll help me teach *myself* better, too.


--
Neil Cerutti

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


Re: Python in financial services

2014-08-12 Thread Rustom Mody
On Tuesday, August 12, 2014 9:05:44 PM UTC+5:30, Johann Hibschman wrote:
 Rustom Mody writes:

  - Pandas
  - Numpy Scipy (which? how much?)

 For me, pandas is huge, numpy is a nice fundamental substrate, while
 only bits and pieces of scipy are used (mostly optimization).
 statsmodels may also be worth a mention, as the answer to how do I do a
 regression.

statsmodels seems like something useful -- thanks for the pointer
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Python in financial services

2014-08-12 Thread Rustom Mody
On Tuesday, August 12, 2014 9:20:16 PM UTC+5:30, Denis McMahon wrote:
 On Tue, 12 Aug 2014 00:33:11 -0700, Rustom Mody wrote:

  Ive been asked to formulate a python course for financial services folk.

 I wouldn't worry too much about c or c++ interfacing paradigms.

And I dont like teaching that stuff either :-) [especially on windows!]

However those folks have thousands of lines of C/C++ which they are porting to 
python.

So...

Thanks anyway
-- 
https://mail.python.org/mailman/listinfo/python-list



Re: how to get the ordinal number in list

2014-08-12 Thread Rustom Mody
On Tuesday, August 12, 2014 11:10:48 PM UTC+5:30, Neil D. Cerutti wrote:
 On 8/10/2014 2:14 PM, Roy Smith wrote:
Rustom Mody  wrote:
  l= [6,2,9,12,1,4]
  sorted(l,reverse=True)[:5]
  [12, 9, 6, 4, 2]
  No need to know how sorted works nor [:5]
  Now you (or Steven) can call it abstract.
  And yet its
  1. Actual running code in the interpreter
  2. Its as close as one can get to a literal translation of your
  Find the 5 largest numbers in a list
  [...]
  All the above are clearer than loops+assignments and can be
  taught before them
  I disagree.  For a beginner, you want to be able to break things down
  into individual steps and examine the result at each point.  If you do:
  l= [6,2,9,12,1,4]
  l2 = sorted(l,reverse=True)
  you have the advantage that you can stop after creating l2 and print it
  out.  The student can see that it has indeed been sorted.  With the
  chained operations, you have to build a mental image of an anonymous,
  temporary list, and then perform the slicing operation on that.  Sure,
  it's the way you or I would write it in production code, but for a
  beginner, breaking it down into smaller pieces makes it easier to
  understand.
  l2[:5]

 Yes, and that teaching technique is supported by research.


Yes and I as said to Roy I dont see any disagreement at least on this account.



 Beginners are particularly poor, in relation to experts, at noticing the 
 applicability of idea, and at combining ideas together. Breaking things 
 into component parts has multiple benefits:

 1. The applicability of individual ideas becomes obvious. It's one thing 
 to know about [].sort, and another thing to know when it's appropriate 
 to sort something.

 2. The expert specifically shows how and why the ideas are combined. 
 This helps build the connection for the beginner, whose knowledge is not 
 stored as an expert stores it; i.e, in broad categories with multiple 
 connections; but as disorganized data with very few connections.

Nice!

And how do we lead the beginners towards expertise?
In a way functional programming is to programming creativity 
what lego is to children's spatial creativity.

Specifically there are a bunch of pieces that need to fit:

1. Functional Programming: Nothing more than composing functions
   [Maybe a bit simplistic but not unrealistic a defn]
2. Trying this out at the interpreter
3. Introspectable objects

Some things follow from this:

For the lego-game of playing with functions at the REPL to work and be
pleasant and rewarding:

1. functions should be non side-effecting; else same trials giving different
answers adds more confusion than understanding
2. They should be non-printing else:

def foo(x): return x+1
def bar(x): print x+1

look similar when trivially tried but compositionally are utterly different

In effect a printing function breaks the lego bricks

[The P in the REPL is DRY enough that it does not usually need to be
repeated all over]

3. Abstractions (class instances) should be avoided in favor of
concrete data (lists, dicts, scalars) because they add undue mess at little
comprehension advantage. eg take the example of a regex match. It
returns some object and then we have to scratch our heads wondering
whats in the magic box. If instead of match, we use findall, the data
is manifest and obvious.


 http://www.amazon.com/How-Learning-Works-Research-Based-Principles/dp/0470484101

 I bought the book based on a recommendation from SciPy talk, and it's 
 really great. As an autodidact, it'll help me teach *myself* better, too.

Looks interesting. Will take a look.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Using asyncio workers in a `concurrent.futures` interface

2014-08-12 Thread Marko Rauhamaa
cool-RR ram.rac...@gmail.com:

 If I understand correctly [asyncio] would let me run multiple uploads
 and downloads efficiently in one thread, which would conserve more
 resources than using threads.

Asyncio does make it convenient to multiplex event on one or more
threads. Threads have their uses (exploiting multiple CPUs), only you
shouldn't associate threads with every state machine, IMO. Asyncio
allows you to separate your state machines from your threads. For
example, you might have 1,000 state machines (for 1,000 connections) but
only 8 threads for 4 CPUs.

 Now, I am a little clueless about the whole way it's built, using
 coroutines and tricky usage of `yield from`.

Asyncio actively supports (at least) *two* multiplexing models:
callbacks (aka listeners or handlers) and coroutines. Programming with
callbacks involves storing the state explicitly in a state machine
object. The callbacks are supposed to never block but return
immediately. That model is a long-time favorite of many, including me.

The coroutine model is highly analogous with the multithreading model in
that you store the state implicitly in the code. Multithreading marks
the state with blocking function calls. Coroutines mark the state with
yield from statements. Otherwise, a multithreading implementation will
have very much the shape of a coroutine implementation.

The funky aspect of the coroutines is the way they abuse the yield
from statement, whose original purpose is to pass a series of results
from a generator to the caller by chaining lower-level generators.
Coroutines employ a trick: the yield from statement does not pass
any meaningful results. Instead, the statement is used to make the
generator/coroutine pseudoblock and switch context within the same
thread.

There's one crucial advantage coroutines have over threads: you can
multiplex events. If your thread is blocked on, say, reading a byte, you
can't tell it to stop waiting and do something else instead. Coroutines
can be made to wait on alternative stimuli.

 I looked at the asyncio documentation page and saw that it does
 mention futures and executors, which is my favorite interface for
 doing concurrency.

They are there.

My favorite model is the Actor Model, where objects communicate with
each other and the outside world through asynchornous stimuli of sorts.
The thinking goes: something happened, so how do I react to it. The
actor model just needs a class with the member self.state, which
contains the name of the internal state of the object. Then the objects
callback methods receive the inputs send out messages and adjust the
state.

Both the actor model and the coroutines produce somewhat messy code that
somewhat hard to get right. However, that's a reflection of how messy
the reality is. Any attempts to pave it over will ultimately result in
more trouble.

 download_file = lambda url: requests.get(url).content
 urls = ['http://google.com/file1.jpg',
 'http://google.com/file2.jpg', 'http://google.com/file3.jpg'] #
 etc.
 
 with AsyncIOExecutor() as asyncio_executor:
 files = asyncio_executor.map(download_file, urls)

 And that's it, no coroutines, no `yield from`.

I'm not quite following you. However, one feature of the coroutines is
that you must use yield from everywhere. You can't delegate it to a
subroutine and forget about it.

That's my main problem with coroutines. The simple function call syntax:

y = f(x)

is replaced with the weird:

y = yield from f(x)

 Since, if I understand correctly, asyncio requires a mainloop, it
 would make sense for the AsyncIOExecutor to have a thread of its own
 in which it could run its mainloop.

 Is this possible? Did someone implement this? 

Unfortunately, I have not. I have just implemented a toy example to
satisfy my curiosity. All of my code uses callbacks and select.epoll()
-- to great success.

Here's my exploration in the classic dining philosophers problem:

   URL: http://pacujo.net/marko/philosophers.py

I have fixed the faulty protocol by having an assistant break the
deadlock by occasionally nagging the philosophers to drop everything and
get back to thinking.

The main accomplishment of the exercise was that I convinced myself the
coroutines can be used for serious things as coroutines can multiplex
stimuli with asyncio.wait(..., return_when=asyncio.FIRST_COMPLETED).


Marko
-- 
https://mail.python.org/mailman/listinfo/python-list


Begginer in python trying to load a .dll

2014-08-12 Thread c1223
Hi, 
Im working in the development of a program based in python that allow us to 
contrl a spectometer. The spectometer has an .dll file. The idea is to work 
through this dll and operate the spectometer. 
The name of the .dll is AS5216.dll. I've trying with ctype, but it doesn't 
work. 
I'm begginer in python. 
All the comments are useful to me. 
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Using asyncio workers in a `concurrent.futures` interface

2014-08-12 Thread MRAB

On 2014-08-12 18:02, cool-RR wrote:

Hello everybody! I have a question.

I have a Django app running on Heroku. I need to run about 100 worker
threads there to do uploads/downloads simultaneously. A Heroku Dyno
has only 512MB of memory, so I'm reluctant to run 100 worker threads.
(I've had Dynos crash from lack of memory when using 6 threads
before.)

I heard that the asyncio module is mature and ready for usage, and I
was happy because I kept hearing about it in the last year, and I saw
Guido's lecture about it. If I understand correctly it would let me
run multiple uploads and downloads efficiently in one thread, which
would conserve more resources than using threads. (Please correct me
if I'm wrong.)

Now, I am a little clueless about the whole way it's built, using
coroutines and tricky usage of `yield from`. I figured that since
this is eventually a library for concurrency, i.e. doing many tasks
at the same time, there will be an API in a style of Here are 100
tasks for you to do concurrently, let me know when they're done.

I looked at the asyncio documentation page and saw that it does
mention futures and executors, which is my favorite interface for
doing concurrency. I was happy and I skimmed the docs. But, I
couldn't find a simple way to use these. I don't want to learn how to
define coroutines and use `yield from` to switch between them. (I use
`yield from` regularly and fully understand how it works, I just
don't write my programs that way.)

What I'm expecting is something like this:

 download_file = lambda url: requests.get(url).content
 urls = ['http://google.com/file1.jpg', 'http://google.com/file2.jpg', 
'http://google.com/file3.jpg'] # etc.

 with AsyncIOExecutor() as asyncio_executor:
 files = asyncio_executor.map(download_file, urls)

And that's it, no coroutines, no `yield from`. Since, if I understand
correctly, asyncio requires a mainloop, it would make sense for the
AsyncIOExecutor to have a thread of its own in which it could run its
mainloop.

Is this possible? Did someone implement this?


Do you really need to upload/download that many at the same time? I'd
put them into a queue and have only a few of uploading/downloading at
any time.
--
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 4:36 AM, c1223 camiloce...@gmail.com wrote:
 Im working in the development of a program based in python that allow us to 
 contrl a spectometer. The spectometer has an .dll file. The idea is to work 
 through this dll and operate the spectometer.
 The name of the .dll is AS5216.dll. I've trying with ctype, but it doesn't 
 work.
 I'm begginer in python.
 All the comments are useful to me.

What have you tried, exactly? What does it doesn't work mean?

Interfacing with a DLL is a potentially very hard and complex job
(although it might turn out to be really easy - depends what the DLL's
doing). We can't simply give you an answer right here, without knowing
heaps about the DLL you're working with - where it came from, whether
this is homework or a real-world problem, etc, etc, etc.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Skip Montanaro
On Tue, Aug 12, 2014 at 1:36 PM, c1223 camiloce...@gmail.com wrote:
 I've trying with ctype, but it doesn't work.

Can you post a small example of how you're trying to use cypes? I
don't think a full example would be necessary, but knowing the API of
one or two functions and how you're trying to call them from Python
would be useful.

Just as the off-chance your DLL was written in C++... I don't think
you can interface with ctypes directly. I think you would have to
write a little shim DLL which exposes a C-compatible API.

Skip
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread alister
On Tue, 12 Aug 2014 23:39:42 +1000, Chris Angelico wrote:

 On Tue, Aug 12, 2014 at 8:40 PM, alister
 alister.nospam.w...@ntlworld.com wrote:
 On Tue, 12 Aug 2014 00:21:28 -0700, wxjmfauth wrote:
 [ chomp ]

 Mathematicians work with numbers (Algebra is a abstraction of numerical
 concepts) strings are concerned with characters (Arabic numerals are
 just characters commonly used to represent numbers )
 therefore even trying to rationalise any string representation with
 mathematics is a logical absurdity in itself.
 
 Don't bother responding to jmf; he doesn't listen. Also, his posts don't
 survive the jump to python-list, so we see them only when someone quotes
 him like that... as far as I'm concerned, his posts are now on par with
 those trying to sell us solution manuals or herbal remedies.
 
 ChrisA

As you don't see them unless someone replies I will make sure I don't 
reply to any more of his posts.

I would not want to inflict this nonsense on someone who would otherwise 
be spared.


-- 
You will lose an important tape file.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Mark Lawrence

On 12/08/2014 19:36, c1223 wrote:

Hi,
Im working in the development of a program based in python that allow us to 
contrl a spectometer. The spectometer has an .dll file. The idea is to work 
through this dll and operate the spectometer.
The name of the .dll is AS5216.dll. I've trying with ctype, but it doesn't work.
I'm begginer in python.
All the comments are useful to me.



Please help us to help you.  Stating it doesn't work is of no use. 
Show us your code, what you expected to happen and what actually 
happened.  If you get a traceback cut and paste all of it into your 
message.  State what version of Python you have and your OS.  Sure 
seeing dll we can surmise Windows but which one?


For further advice on how to put your question(s) together see The 
SSCCE - Short, Self Contained, Correct (Compilable), Example at 
http://sscce.org/


--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

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


Re: Python in financial services

2014-08-12 Thread Denis McMahon
On Tue, 12 Aug 2014 10:48:14 -0700, Rustom Mody wrote:

 However those folks have thousands of lines of C/C++ which they are
 porting to python.

That begs the question: Why?

Seriously, I'd like to know what benefits they expect to achieve by doing 
so.

-- 
Denis McMahon, denismfmcma...@gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Chris Kaynor
On Tue, Aug 12, 2014 at 11:48 AM, Skip Montanaro s...@pobox.com wrote:

 Just as the off-chance your DLL was written in C++... I don't think
 you can interface with ctypes directly. I think you would have to
 write a little shim DLL which exposes a C-compatible API.


You should be able to use ctypes with a C++ library, you'd just need to
know how your C++ compiler handles name mangling. Typically, changes are
made to accommodate classes, namespaces, and function overloads. Of course,
if you were to change to a different compiler (possibly including a
different version) or made minor tweaks to the functions, you'd have to
update all the Python code to use the new name mangling scheme.

Hmm...On second thought, maybe just only using functions exports with
extern C would be easier - or just using a C compiler.

Chris
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread c1234 py
On Tuesday, August 12, 2014 3:36:17 PM UTC-3, c1234 py wrote:
 Hi, 
 
 Im working in the development of a program based in python that allow us to 
 contrl a spectometer. The spectometer has an .dll file. The idea is to work 
 through this dll and operate the spectometer. 
 
 The name of the .dll is AS5216.dll. I've trying with ctype, but it doesn't 
 work. 
 
 I'm begginer in python. 
 
 All the comments are useful to me.


I'm using this


import ctypes
hllDll=ctypes.WinDLL(C:\\AS5216.dll)


hllApiProto = ctypes.WINFUNCTYPE (ctypes.c_int,ctypes.c_void_p,
ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
hllApiParams = (1, p1, 0), (1, p2, 0), (1, p3,0), (1, p4,0),


hllApi = hllApiProto ((HLLAPI, hllDll), hllApiParams)

p1 = ctypes.c_int (1)
p2 = ctypes.c_char_p (sessionVar)
p3 = ctypes.c_int (1)
p4 = ctypes.c_int (0)
hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4))



Thanks



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


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Rob Gaddi
On Tue, 12 Aug 2014 11:56:37 -0700 (PDT)
c1234 py camiloce...@gmail.com wrote:

 On Tuesday, August 12, 2014 3:36:17 PM UTC-3, c1234 py wrote:
  Hi, 
  
  Im working in the development of a program based in python that allow us to 
  contrl a spectometer. The spectometer has an .dll file. The idea is to work 
  through this dll and operate the spectometer. 
  
  The name of the .dll is AS5216.dll. I've trying with ctype, but it doesn't 
  work. 
  
  I'm begginer in python. 
  
  All the comments are useful to me.
 
 
 I'm using this
 
 
 import ctypes
 hllDll=ctypes.WinDLL(C:\\AS5216.dll)
 
 
 hllApiProto = ctypes.WINFUNCTYPE (ctypes.c_int,ctypes.c_void_p,
 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p)
 hllApiParams = (1, p1, 0), (1, p2, 0), (1, p3,0), (1, p4,0),
 
 
 hllApi = hllApiProto ((HLLAPI, hllDll), hllApiParams)
 
 p1 = ctypes.c_int (1)
 p2 = ctypes.c_char_p (sessionVar)
 p3 = ctypes.c_int (1)
 p4 = ctypes.c_int (0)
 hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4))
 
 

Great.  And that fails in what way, on which line, with what error message?


-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 4:58 AM, Rob Gaddi
rgaddi@technologyhighland.invalid wrote:
 Great.  And that fails in what way, on which line, with what error message?

And, is that the entire program? Because if it is, then I can see at
least one problem, a NameError.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Python in financial services

2014-08-12 Thread Rustom Mody
On Wednesday, August 13, 2014 12:24:12 AM UTC+5:30, Denis McMahon wrote:
 On Tue, 12 Aug 2014 10:48:14 -0700, Rustom Mody wrote:

  However those folks have thousands of lines of C/C++ which they are
  porting to python.

 That begs the question: Why?

 Seriously, I'd like to know what benefits they expect to achieve by doing 
 so.

Heh!
I asked more or less that.
Was told: We want it!

I gather its to do with agility -- faster time to incorporate and
integrate new logic into code etc.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread c1234 py
On Tuesday, August 12, 2014 4:09:13 PM UTC-3, Chris Angelico wrote:
 On Wed, Aug 13, 2014 at 4:58 AM, Rob Gaddi
 
 rgaddi@technologyhighland.invalid wrote:
 
  Great.  And that fails in what way, on which line, with what error message?
 
 
 
 And, is that the entire program? Because if it is, then I can see at
 
 least one problem, a NameError.
 
 
 
 ChrisA

This appear in the terminal:


 runfile('C://Python Scripts')
  File C:\\sitecustomize.py, line 585, in runfile
execfile(filename, namespace)
  File C://Sin título 38.py, line 19, in module
hllApi = hllApiProto ((HLLAPI, hllDll), hllApiParams)
AttributeError: function 'HLLAPI' not found
 Traceback (most recent call last):
  File stdin, line 1, in module
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Mark Lawrence

On 12/08/2014 19:45, alister wrote:

On Tue, 12 Aug 2014 23:39:42 +1000, Chris Angelico wrote:


On Tue, Aug 12, 2014 at 8:40 PM, alister
alister.nospam.w...@ntlworld.com wrote:

On Tue, 12 Aug 2014 00:21:28 -0700, wxjmfauth wrote:
[ chomp ]

Mathematicians work with numbers (Algebra is a abstraction of numerical
concepts) strings are concerned with characters (Arabic numerals are
just characters commonly used to represent numbers )
therefore even trying to rationalise any string representation with
mathematics is a logical absurdity in itself.


Don't bother responding to jmf; he doesn't listen. Also, his posts don't
survive the jump to python-list, so we see them only when someone quotes
him like that... as far as I'm concerned, his posts are now on par with
those trying to sell us solution manuals or herbal remedies.

ChrisA


As you don't see them unless someone replies I will make sure I don't
reply to any more of his posts.

I would not want to inflict this nonsense on someone who would otherwise
be spared.



Thank you, as it saves me from once again losing it in public when his 
latest incarnation of complete dross appears.  Two years he's been at 
it, I wonder how he manages to avoid Sent to jail. Do not pass Go. Do 
not collect £200 or where he gets his supply of Get out of jail free 
cards from?


--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

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


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Christian Gollwitzer

Am 12.08.14 20:36, schrieb c1223:

Hi, Im working in the development of a program based in python that
allow us to contrl a spectometer. The spectometer has an .dll file.
The idea is to work through this dll and operate the spectometer. The
name of the .dll is AS5216.dll. I've trying with ctype, but it
doesn't work. I'm begginer in python. All the comments are useful to
me.


For sure this DLL will come with a header file for C. You could pass it 
through SWIG and see if it generates a useful Python module. You need a 
C compiler for that route, though.


Christian


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


Re: how to get the ordinal number in list

2014-08-12 Thread Neil D. Cerutti

On 8/12/2014 2:20 PM, Rustom Mody wrote:

On Tuesday, August 12, 2014 11:10:48 PM UTC+5:30, Neil D. Cerutti wrote:

Beginners are particularly poor, in relation to experts, at noticing the
applicability of idea, and at combining ideas together. Breaking things
into component parts has multiple benefits:



1. The applicability of individual ideas becomes obvious. It's one thing
to know about [].sort, and another thing to know when it's appropriate
to sort something.



2. The expert specifically shows how and why the ideas are combined.
This helps build the connection for the beginner, whose knowledge is not
stored as an expert stores it; i.e, in broad categories with multiple
connections; but as disorganized data with very few connections.


Nice!

And how do we lead the beginners towards expertise?
In a way functional programming is to programming creativity
what lego is to children's spatial creativity.

Specifically there are a bunch of pieces that need to fit:

1. Functional Programming: Nothing more than composing functions
[Maybe a bit simplistic but not unrealistic a defn]
2. Trying this out at the interpreter
3. Introspectable objects


Functional programming could be particularly hard to teach since it is 
generally made up of numerous small units of work combined in a complex 
way. This is precisely the formula for something that beginners will 
find extremely challenging.


When functional programming is dumbed down enough for a beginner to be 
able to grok it, the programming problems start to look really lame. It 
needn't be that way, of course, but it takes a good deal of creativity 
on the part of the instructor. If Factorial doesn't turn you on, you 
might be screwed. ;)



Some things follow from this:

For the lego-game of playing with functions at the REPL to work and be
pleasant and rewarding:

1. functions should be non side-effecting; else same trials giving different
answers adds more confusion than understanding
2. They should be non-printing else:

def foo(x): return x+1
def bar(x): print x+1

look similar when trivially tried but compositionally are utterly different

In effect a printing function breaks the lego bricks


That may be so, but printing stuff to the screen is very natural to 
people. I've downloaded Haskell a few times, but the knowledge that 
getting input and writing output requires something mysterious called 
gonads just frightens me.



[The P in the REPL is DRY enough that it does not usually need to be
repeated all over]


A good REPL does help a lot, though.


3. Abstractions (class instances) should be avoided in favor of
concrete data (lists, dicts, scalars) because they add undue mess at little
comprehension advantage. eg take the example of a regex match. It
returns some object and then we have to scratch our heads wondering
whats in the magic box. If instead of match, we use findall, the data
is manifest and obvious.


I'm with you on regex: match objects suck. That and escaping.

--
Neil Cerutti

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


Re: Begginer in python trying to load a .dll

2014-08-12 Thread c1234 py
El martes, 12 de agosto de 2014 16:16:21 UTC-3, Christian Gollwitzer  escribió:
 Am 12.08.14 20:36, schrieb c1223:
 
  Hi, Im working in the development of a program based in python that
 
  allow us to contrl a spectometer. The spectometer has an .dll file.
 
  The idea is to work through this dll and operate the spectometer. The
 
  name of the .dll is AS5216.dll. I've trying with ctype, but it
 
  doesn't work. I'm begginer in python. All the comments are useful to
 
  me.
 
 
 
 For sure this DLL will come with a header file for C. You could pass it 
 
 through SWIG and see if it generates a useful Python module. You need a 
 
 C compiler for that route, though.
 
 
 
   Christian


How can i pass it through a SWIG?, i don't know that and what it mean?
-- 
https://mail.python.org/mailman/listinfo/python-list


Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Simon Evans
Dear Programmers,
I have been looking at the You tube 'Web Scraping Tutorials' of Chris Reeves. I 
have tried a few of his python programs in the Python27 command prompt, but 
altered them from accessing data using links say from the Dow Jones index, to 
accessing the details I would be interested in accessing from the 'Racing Post' 
on a daily basis. Anyhow, the code it returns is not in the example I am going 
to give, is not the information I am seeking, instead of returning the given 
odds on a horse, it only returns a [], which isn't much use. 
I would be glad if you could tell me where I am going wrong. 
Yours faithfully
Simon Evans.

import urllib
import re
htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?

race_id=600048r_date=2014-05-08#raceTabs=sc_)
htmltext = htmlfile.read()
regex = 'strong1a href=http://www.racingpost.com/horses/horse_home.sd?

horse_id=758752onclick=scorecards.send(quot;horse_namequot:):return 
Html.popup(this,

{width:695,height:800})title=Full details about this HORSELively 

Baron/a9/4F/strongbr/'
pattern = re.compile(regex)
odds=re.findall(pattern,htmltext)
print odds
[]


import urllib
import re
htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?

race_id=600048r_date=2014-05-08#raceTabs=sc_)
htmltext = htmlfile.read()
regex = 'a/a'
pattern = re.compile(regex)
odds=re.findall(pattern,htmltext)
print odds
[]

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


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Rob Gaddi
On Tue, 12 Aug 2014 13:00:30 -0700 (PDT)
Simon Evans musicalhack...@yahoo.co.uk wrote:

 Dear Programmers,
 I have been looking at the You tube 'Web Scraping Tutorials' of Chris Reeves. 
 I have tried a few of his python programs in the Python27 command prompt, but 
 altered them from accessing data using links say from the Dow Jones index, to 
 accessing the details I would be interested in accessing from the 'Racing 
 Post' on a daily basis. Anyhow, the code it returns is not in the example I 
 am going to give, is not the information I am seeking, instead of returning 
 the given odds on a horse, it only returns a [], which isn't much use. 
 I would be glad if you could tell me where I am going wrong. 
 Yours faithfully
 Simon Evans.
 
 import urllib
 import re
 htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?
 
 race_id=600048r_date=2014-05-08#raceTabs=sc_)
 htmltext = htmlfile.read()
 regex = 'strong1a href=http://www.racingpost.com/horses/horse_home.sd?
 
 horse_id=758752onclick=scorecards.send(quot;horse_namequot:):return 
 Html.popup(this,
 
 {width:695,height:800})title=Full details about this HORSELively 
 
 Baron/a9/4F/strongbr/'
 pattern = re.compile(regex)
 odds=re.findall(pattern,htmltext)
 print odds
 []
 
 
 import urllib
 import re
 htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?
 
 race_id=600048r_date=2014-05-08#raceTabs=sc_)
 htmltext = htmlfile.read()
 regex = 'a/a'
 pattern = re.compile(regex)
 odds=re.findall(pattern,htmltext)
 print odds
 []
 
 ---

If you want web scraping, you want to use
http://www.crummy.com/software/BeautifulSoup/ .  End of story.

-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Begginer in python trying to load a .dll

2014-08-12 Thread Mark Lawrence

On 12/08/2014 20:25, c1234 py wrote:

El martes, 12 de agosto de 2014 16:16:21 UTC-3, Christian Gollwitzer  escribió:

Am 12.08.14 20:36, schrieb c1223:


Hi, Im working in the development of a program based in python that



allow us to contrl a spectometer. The spectometer has an .dll file.



The idea is to work through this dll and operate the spectometer. The



name of the .dll is AS5216.dll. I've trying with ctype, but it



doesn't work. I'm begginer in python. All the comments are useful to



me.




For sure this DLL will come with a header file for C. You could pass it

through SWIG and see if it generates a useful Python module. You need a

C compiler for that route, though.



Christian



How can i pass it through a SWIG?, i don't know that and what it mean?



Start here http://www.swig.org/ which you could easily have found for 
yourself, as I did by using a search engine.


Also would you please access this list via 
https://mail.python.org/mailman/listinfo/python-list or read and action 
this https://wiki.python.org/moin/GoogleGroupsPython to prevent us

seeing double line spacing and single line paragraphs, thanks.

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

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


Re: Python in financial services

2014-08-12 Thread Larry Martell
On Tue, Aug 12, 2014 at 3:33 AM, Rustom Mody rustompm...@gmail.com wrote:
 Ive been asked to formulate a python course for financial services folk.

 If I actually knew about the subject, I'd have fatter pockets!
 Anyway heres some thoughts. What I am missing out?

 [Apart from basic python -- contents typically needs tailoring to the 
 audience] the following:

 - Libraries -- Decimal?
 - scripts -- philosophy and infrastructure eg argparse, os.path
 - Pandas
 - Numpy Scipy (which? how much?)
 - ipython + matplotlib + ??
 - Database interfacing
 - Excel interfacing (couple of libraries.. which?)
 - C(C++?) interfacing paradigms -- ranging from ctypes, cython to classic 
 lo-level

I'm not 100% sure what you're looking for. I work for a hedge fund and
we make extensive use of python. Everything from soup to nuts: ETL,
web scraping, database access (sybase, MySQL, and Oracle), log file
archiving and reaping, wrappers for backups, startup and shutdown
scripts for our C++ servers, GIUs (with wxpython), socket based
communication with C++ servers, just about every problem that comes
up.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Roy Smith
In article a8f10c4f-d4a0-48ed-ae92-2a43e9a09...@googlegroups.com,
 Simon Evans musicalhack...@yahoo.co.uk wrote:

 Dear Programmers,
 I have been looking at the You tube 'Web Scraping Tutorials' of Chris Reeves. 
 I have tried a few of his python programs in the Python27 command prompt, but 
 altered them from accessing data using links say from the Dow Jones index, to 
 accessing the details I would be interested in accessing from the 'Racing 
 Post' on a daily basis. Anyhow, the code it returns is not in the example I 
 am going to give, is not the information I am seeking, instead of returning 
 the given odds on a horse, it only returns a [], which isn't much use. 
 I would be glad if you could tell me where I am going wrong. 

Rather than comment on your specific code (but, thank you for posting 
it), I'll make a couple of more generic suggestions.

First, if you're doing anything with fetching web pages, install the 
wonderful requests module (http://docs.python-requests.org/en/latest/).  
It's so much easier to work with than urllib.

Second, if you're going to be parsing web pages, trying to use regexes 
is a losing game.  You need something that knows how to parse HTML.  The 
canonical answer is lxml (http://lxml.de/), but Beautiful Soup 
(http://www.crummy.com/software/BeautifulSoup/) is less intimidating to 
use.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Using asyncio workers in a `concurrent.futures` interface

2014-08-12 Thread Ian Kelly
On Tue, Aug 12, 2014 at 11:02 AM, cool-RR ram.rac...@gmail.com wrote:
 And that's it, no coroutines, no `yield from`. Since, if I understand 
 correctly, asyncio requires a mainloop, it would make sense for the 
 AsyncIOExecutor to have a thread of its own in which it could run its 
 mainloop.

I think that putting the event loop in a separate thread would be
necessary if the intention is that the executor be invoked from
outside. I'm not aware of this work having been done, but it sounds
perfectly feasible.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Terry Reedy

On 8/12/2014 1:40 PM, Neil D. Cerutti wrote:

I disagree.  For a beginner, you want to be able to break things down
into individual steps and examine the result at each point.  If you do:


l= [6,2,9,12,1,4]
l2 = sorted(l,reverse=True)


you have the advantage that you can stop after creating l2 and print it
out.  The student can see that it has indeed been sorted.


Or one can put the multiple steps in a file and step through with a 
debugger that shows local name values, like the Idle debugger.


--
Terry Jan Reedy

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


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Simon Evans
On Tuesday, August 12, 2014 9:00:30 PM UTC+1, Simon Evans wrote:
 Dear Programmers,
 
 I have been looking at the You tube 'Web Scraping Tutorials' of Chris Reeves. 
 I have tried a few of his python programs in the Python27 command prompt, but 
 altered them from accessing data using links say from the Dow Jones index, to 
 accessing the details I would be interested in accessing from the 'Racing 
 Post' on a daily basis. Anyhow, the code it returns is not in the example I 
 am going to give, is not the information I am seeking, instead of returning 
 the given odds on a horse, it only returns a [], which isn't much use. 
 
 I would be glad if you could tell me where I am going wrong. 
 
 Yours faithfully
 
 Simon Evans.
 
 
 
 import urllib
 
 import re
 
 htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?
 
 
 
 race_id=600048r_date=2014-05-08#raceTabs=sc_)
 
 htmltext = htmlfile.read()
 
 regex = 'strong1a href=http://www.racingpost.com/horses/horse_home.sd?
 
 
 
 horse_id=758752onclick=scorecards.send(quot;horse_namequot:):return 
 Html.popup(this,
 
 
 
 {width:695,height:800})title=Full details about this HORSELively 
 
 
 
 Baron/a9/4F/strongbr/'
 
 pattern = re.compile(regex)
 
 odds=re.findall(pattern,htmltext)
 
 print odds
 
 []
 
 
 
 
 
 import urllib
 
 import re
 
 htmlfile = urllib.urlopen(http://www.racingpost.com/horses2/cards/card.sd?
 
 
 
 race_id=600048r_date=2014-05-08#raceTabs=sc_)
 
 htmltext = htmlfile.read()
 
 regex = 'a/a'
 
 pattern = re.compile(regex)
 
 odds=re.findall(pattern,htmltext)
 
 print odds
 
 []
 
 
 
 ---
Dear Programmers, Thank you for your responses. I have installed 'Beautiful 
Soup' and I have the 'Getting Started in Beautiful Soup' book, but can't seem 
to make  any progress with it, I am too thick to make much use of it. I was 
hoping I could scrape specified stuff off Web pages without using it. I have 
installed 'Requests' also, is there any code I can use that you can suggest 
that can access the sort of Web page values that I have referred to ?  such as 
odds, names of runners, stuff like that off the 'inspect element' or 'source' 
htaml pages, on www.Racingpost.com. 
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Steven D'Aprano
Simon Evans wrote:

 Dear Programmers, Thank you for your responses. I have installed
 'Beautiful Soup' and I have the 'Getting Started in Beautiful Soup' book,
 but can't seem to make  any progress with it, I am too thick to make much
 use of it. I was hoping I could scrape specified stuff off Web pages
 without using it.

Yes, you can scrape stuff off web pages without programming. What you do is
you open the web page in your browser, then open a notebook and, with a
pencil or pen, copy the bits you read into the notebook.

If you're very skilled, you can avoid the pencil and paper and type directly
into a text editor on the computer.

But other than that, every website is different, so there is no short-cut to
web scraping. You need to customize the scraping code for each website you
scrape, and that means programming. Do you know how to program? Are you
interested in learning? If the answer is No and No, then I suggestion you
pony up some money and pay somebody who already knows how to program to do
the job for you.

If the answer is No and Yes, then start at the beginning. Do some
programming tutorials, learn to program the basics before moving on to
something moderately difficult like web scraping.

If the answer is that you already know how to program, but just don't know
how to do web scraping, then stick with it and you'll get there. Web
scraping is tricky, but possible, and if you work hard at it you'll
succeed. Unless you're an experienced programmer with all the right skills,
don't expect this to be something you do in a few minutes. Depending on
your level of experience, you could expect to spend dozens of hours to
learn how to scrape a single website. (Fortunately, the second website will
probably be a little easier, and the third easier still. By the time you've
done a dozen, you'll wonder what the fuss was about.) 

By studying how other scraping programs work, and studying how your racing
pages store data, you should be able to put the two together and see how to
get the data you want. There's plenty of information to help you learn how
to web scrape, with or without BeautifulSoup:

https://startpage.com/do/search/?q=beautifulsoup+web+scraping

https://ixquick.com/do/search/?q=python+web+scraping+examples

https://duckduckgo.com/html/?q=requests%20python%20web%20scraping%20example

but no alternative to actually writing code.


 I have installed 'Requests' also, is there any code I 
 can use that you can suggest that can access the sort of Web page values
 that I have referred to ?  such as odds, names of runners, stuff like that
 off the 'inspect element' or 'source' htaml pages, on www.Racingpost.com.

Specifically those pages? Doubtful.

If you are really lucky (1) somebody else has already done the programming,
(2) they've made their program available to others, and (3) you can find
that program on the Internet. Use the search engine of your choice to
search for it.



-- 
Steven

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


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Roy Smith
In article 53eaab7d$0$29979$c3e8da3$54964...@news.astraweb.com,
 Steven D'Aprano steve+comp.lang.pyt...@pearwood.info wrote:

 By studying how other scraping programs work, and studying how your racing
 pages store data, you should be able to put the two together and see how to
 get the data you want.

It's also worth mentioning, that some web sites *want* you to have their 
data, and make it easy to do so by exposing it via public APIs or other 
download methods.  Wikipedia.  Many government web sites.  Twitter.  
Facebook.  Reddit.

Whenever you start thinking about web scraping, it's always worth 
spending a little time investigating if such an API exists.  If it does, 
that's where you want to go.  If not, well, there's always Beautiful 
Soup :-)
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Steven D'Aprano
Chris Angelico wrote:

 On Mon, Aug 11, 2014 at 7:44 PM, Steven D'Aprano st...@pearwood.info
 wrote:
 I think this is why both declarative and functional programming idioms
 will remain niche (although important niches). Most tasks are inherently
 imperative to at least some degree, and often a *great* degree.
 
 Maybe that's true as a whole, but there are certainly ways in which
 certain declarative or functional elements can be extremely useful to
 an otherwise-imperative program.

Oh yes! I think that using functional idioms is *very* valuable. List comps
and similar are great, but more than that, the idea of writing idempotent
functions with no side-effects (except IO) is (I believe) vital for good
programming. Relying on argument passing rather communicating by global
variables (or the OO equivalent, instance attributes) is likewise vital.

It's not *quite* impossible to write good, reliable code without functional
idioms, in the same sense that it is conceivable that somebody might write
bug-free unstructured spaghetti code, but I think one of the failures of OO
programming is the over-reliance on methods that communicate via
side-effects. I don't insist that side-effects are completely verboten, as
some functional programming purists do, but I do endeavour to ensure that
any side-effects are limited, encapsulated, and introduce as little
coupling as practical.

(It is my belief that inappropriate coupling is the great evil in
programming. Having too much coupling between parts of your code which
ought to be independent is like Ebola for reliable code, contagious and
deadly. I'm always looking for ways to reduce coupling between parts of my
code, and functional idioms are good for that.)



 Python's (list etc) comprehensions 
 are broadly functional in style, 

No surprise, since list comps were stolen from Haskell :-)


[...]
 I've sometimes done some extremely declarative coding in places; my
 MUD client builds its menus by looking for specially-named functions
 and getting some metadata from them to work out what the menu item
 name should be. An approximate Python equivalent would be:
 
 @filemenu(E_xit)
 def exit():
 prompt(Do you really want to exit?)
 
 where the presence of the function is what causes the menu item to
 exist. In this case, the 'filemenu' decorator is probably imperative
 code that adds the menu item to the File menu, but if you're reading
 through a source file that has a bunch of functions like that, you'd
 have to agree that that's a declarative style of coding. And it's a
 style that works well for this kind of thing.

I don't think I would agree that's declarative style. I think that's a form
of imperative programming, where the syntax is:

@ make menu
def function: ...

rather than:

def function: ...
make menu (function)

but I wouldn't start a Holy War over it :-)

There's a fair amount of overlap between the major programming paradigms,
and hence disagreement as to what falls under which paradigm. For instance,
FOLDOC has a good, simple distinction in its definition for imperative:

[quote]
The Free On-line Dictionary of Computing (20 July 2014) [foldoc]

imperative language
imperative
imperative programming

   language Any programming language that specifies explicit
   manipulation of the state of the computer system, not to be
   confused with a procedural language, which specifies an
   explicit sequence of steps to perform.

   An example of an imperative (but non-procedural) language is a
   data manipulation language for a relational database
   management system.  This specifies changes to the database
   but does not necessarily require anyone to specify a sequence
   of steps.

   Both contrast with declarative languages, which specify
   neither explicit state manipulation nor a sequence of steps.
[end quote]

You'll note that it suggests SQL would count as an imperative language, but
Wikipedia's article on declarative languages gives SQL as a paragon of
declarative languages!

http://en.wikipedia.org/wiki/Declarative_programming


In Python terms, we might consider import to be declarative, since it
specifies what to do (load a name from a module) but not how to perform
it. import spam might find spam anywhere, in any form (source code, byte
code, machine code, in a zip file, somewhere on the disk, inside the Python
executable itself), which to my mind suggests a declarative idiom. Or such
things as test discovery, where unittest and doctest will automatically
locate and run tests. (The tests themselves are typically written in a
procedural paradigm.) Otherwise, Python doesn't really have a lot to offer
in the declarative paradigm.


-- 
Steven

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


Re: Suitable Python code to scrape specific details from web pages.

2014-08-12 Thread Peter Pearson
On Tue, 12 Aug 2014 15:44:58 -0700 (PDT), Simon Evans wrote:
[snip]
 Dear Programmers, Thank you for your responses. I have installed
 'Beautiful Soup' and I have the 'Getting Started in Beautiful Soup'
 book, but can't seem to make any progress with it, I am too thick to
 make much use of it. I was hoping I could scrape specified stuff off
 Web pages without using it.

I've only used BeautifulSoup a little bit, and am no expert, but
with it one can do wonderfully complex things with simple code.
Perhaps you can find some examples online; this newsgroup sometimes
has awesome demonstrations of BS prowess.

At the risk of embarrassing myself in public, I'll show you some
code I wrote that scrapes data from a web page containing a
description of a drug.  The drug's web page contains the desired
data in tags that look like this:

input id=form-widgets-minconcentration name=form.widgets.minconcentration
class=text-widget float-field value=1.0 type=text /

The following code finds all these tags and builds a dict by which you
can lookup the value for any given name.

from BeautifulSoup import BeautifulSoup as BS
...

def dump_drug_data(url):
Fetch data from one drug's URL and print selected fields in columns.

contents = urllib2.urlopen(url=url).read()
soup = BS(contents)
inputs = soup.findAll(input)
input_dict = dict((i.get(name), i.get(value)) for i in inputs)
print( .join(f.format(input_dict[n]) for f, n in (
({0:5s}, form.widgets.absorption_halflife),
({0:5s}, form.widgets.elimination_halflife),
({0:5s}, form.widgets.minconcentration),
({0:5s}, form.widgets.maxconcentration),
({0:13s}, form.widgets.title),
)))

Try giving a more specific picture of your quest, and it's very
likely that people smarter than me will give you good help.

-- 
To email me, substitute nowhere-spamcop, invalid-net.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 10:47 AM, Steven D'Aprano
steve+comp.lang.pyt...@pearwood.info wrote:
 Chris Angelico wrote:

 On Mon, Aug 11, 2014 at 7:44 PM, Steven D'Aprano st...@pearwood.info
 wrote:
 I think this is why both declarative and functional programming idioms
 will remain niche (although important niches). Most tasks are inherently
 imperative to at least some degree, and often a *great* degree.

 Maybe that's true as a whole, but there are certainly ways in which
 certain declarative or functional elements can be extremely useful to
 an otherwise-imperative program.

 Oh yes! I think that using functional idioms is *very* valuable. List comps
 and similar are great, but more than that, the idea of writing idempotent
 functions with no side-effects (except IO) is (I believe) vital for good
 programming. Relying on argument passing rather communicating by global
 variables (or the OO equivalent, instance attributes) is likewise vital.
 ...
 (It is my belief that inappropriate coupling is the great evil in
 programming. Having too much coupling between parts of your code which
 ought to be independent is like Ebola for reliable code, contagious and
 deadly. I'm always looking for ways to reduce coupling between parts of my
 code, and functional idioms are good for that.)

There are times when coupling is unavoidable, but yes, it's usually
detrimental to the code. Sometimes the alternatives are worse, but
coupling is still bad. I have TODOs against certain pieces of code
where I can't think of a clean way to decouple them...

 I've sometimes done some extremely declarative coding in places; my
 MUD client builds its menus by looking for specially-named functions
 and getting some metadata from them to work out what the menu item
 name should be. An approximate Python equivalent would be:

 @filemenu(E_xit)
 def exit():
 prompt(Do you really want to exit?)

 where the presence of the function is what causes the menu item to
 exist. In this case, the 'filemenu' decorator is probably imperative
 code that adds the menu item to the File menu, but if you're reading
 through a source file that has a bunch of functions like that, you'd
 have to agree that that's a declarative style of coding. And it's a
 style that works well for this kind of thing.

 I don't think I would agree that's declarative style. I think that's a form
 of imperative programming, where the syntax is:

 @ make menu
 def function: ...

 rather than:

 def function: ...
 make menu (function)

 but I wouldn't start a Holy War over it :-)

In a sense, yes. That's partly because Python doesn't really have the
concept that I'm using here. Here's the actual code (it's Pike):

constant file_closewindow=E_xit;
int closewindow()
{
... actual body of function isn't significant ...
}

The key here is the module-level constant which is file_ followed by
the name of a function. So a more direct translation into Python would
be:

file_closewindow=E_xit
def closewindow():
... blah blah ...

but since Python code tends to have uppercase constants, this would be
frowned on. Also, it's hard in Python to enumerate constants, as
there's no such thing (Pike's constants are available at a slightly
different level, which makes them easy to find).

What might make it more declarative than imperative, even in Python,
is that the *order* of items on the menu is alphabetical by function
name, and thus has nothing to do with their position in the file. If
the decorator actually added the items to the menu immediately, their
positions would be based on order in the file; to do them
alphabetically by function name, you basically need to collect them
all up and create them all at the end. That's how the code works in
Pike - a quick loop in the initialization code runs over the constants
and adds the menu items, which means the constants are completely
non-executable.

It really is hard to draw the line. Ultimately, the CPU (at least, if
it's of any architecture I've worked with) doesn't execute declarative
or functional code, just as it doesn't execute callbacks or subthread
multiplexing or anything like that. You need to have, somewhere, a bit
of imperative code (usually a simple loop) that deals with the other
types... which might be called an interpreter. In fact, *all* high
level code is, in a sense, declarations to a lower level interpreter -
consider the distinctions between various Python interpreters (even
some that run inside your web browser), and how they all obey the same
declarations, but implement them completely differently.

 [ quoting FOLDOC ]
An example of an imperative (but non-procedural) language is a
data manipulation language for a relational database
management system.  This specifies changes to the database
but does not necessarily require anyone to specify a sequence
of steps.

Both contrast with declarative languages, which specify
neither explicit state manipulation nor a sequence of 

Re: Captcha identify

2014-08-12 Thread Wesley
If my questions make you guys not so happy, I am sorry and please just ignore.
I just wanna a general suggestion here in the beginning.
Why I need to write such program is just having such requirements, and has 
nothing to do with the coding work itself. Don't say something to prove you're 
so noble.

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


Re: Captcha identify

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 11:36 AM, Wesley nisp...@gmail.com wrote:
 If my questions make you guys not so happy, I am sorry and please just ignore.
 I just wanna a general suggestion here in the beginning.
 Why I need to write such program is just having such requirements, and has 
 nothing to do with the coding work itself. Don't say something to prove 
 you're so noble.

The general suggestion you're getting is: Do not do this. Many of us
here use CAPTCHAs and spend time keeping one step ahead of those who
try to break them with software. By writing something to solve
CAPTCHAs, you would be stealing time from those people. Don't do it.

Am I sufficiently clear?

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Roy Smith
In article mailman.12903.1407893523.18130.python-l...@python.org,
 Chris Angelico ros...@gmail.com wrote:

 I like to look at SQL as a language that specifies an end result 
 without specifying how to get there

Well, sure, but sometimes the how to get there is a matter of 10x, or 
100x, or 1000x in performance.

I'm currently migrating a 3 TB database to a new 5 TB RAID array.  Our 
initial guess is it's going to take two weeks to finish :-(
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Captcha identify

2014-08-12 Thread Ben Finney
Wesley nisp...@gmail.com writes:

 If my questions make you guys not so happy, I am sorry and please just
 ignore.

You seek to dismiss the valid concerns by calling them “not so happy”.

You assert it is questions we object to, when we are clearly objecting
to your intentions.

Don't be disingenuous. The responses you get are because there are valid
concerns about the motives you are pursuing.

 Why I need to write such program is just having such requirements

This is a circular statement, almost a tautology. If that is the best
you can present in defense of harmful and deceitful actions, then there
is no good reason for what you're doing.

Stop, please.

-- 
 \“The World is not dangerous because of those who do harm but |
  `\  because of those who look at it without doing anything.” |
_o__) —Albert Einstein |
Ben Finney

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


Re: how to get the ordinal number in list

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 11:45 AM, Roy Smith r...@panix.com wrote:
 In article mailman.12903.1407893523.18130.python-l...@python.org,
  Chris Angelico ros...@gmail.com wrote:

 I like to look at SQL as a language that specifies an end result
 without specifying how to get there

 Well, sure, but sometimes the how to get there is a matter of 10x, or
 100x, or 1000x in performance.

Of course it can! But generally, the how to get there is not
stipulated in the SQL statement. If you say, for instance:

select * from some_table where some_column='some_value';

then an index on some_column will make a huge difference to
performance - without changing this statement at all. In contrast,
taking advantage of an index in BTrieve requires recoding your
program, as the index used is a part of the API call. (At least, this
is true of the particular version of BTrieve that back-ended our
accounting package in the 90s. I was able to turn an overnight job
into a thirty-second job by rewriting it as an external program; the
original is closed-source so I can't be sure, but I suspect most of
that improvement is simply because I used an index.)

SQL itself doesn't even have provision for indexes. The 'CREATE INDEX'
command, found in many databases, is an extension. :)

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Steven D'Aprano
Rustom Mody wrote:

 I guess part of the problem is that evidently you and I use 'concrete'
 and 'abstract' in almost diametrically opposite ways.
[...]
 But now you are turning the tables and saying that the FP types/constructs
 are more abstract than the conventional ones.
[...]
 In my book, FP is easy and pleasant and smooth because (among other
 things) FP types are concrete, whereas OOP types are abstract.

I wrote about how your view of sorted() was an abstraction, not an Abstract
Base Class. I thought that was clear enough: you ignore the concrete
details of how one sorts (bubblesort, quicksort, timsort, ...) and
everything but the result returned. I shouldn't think that is
controversial. Let me repeat what I said at the time:

You are abstracting away the details of the real computer 
implementation into an abstraction of a pure mathematical
function...

I am not talking about *abstract types* in the object-oriented sense.

I then went on to say:

But abstractions leak, and someday someone is going to ask 
Why does it take 45 minutes to find the five largest values
of my list?, and if you persist in insisting that sorted()
is a pure mathematical function you will have no clue on how
to even begin solving this [...]

(I don't actually believe that *you personally* are incapable of thinking
about the implementation of sorted(). It is a hypothetical situation.)

For the record, Wikipedia defines abstract types as:
  
In programming languages, an abstract type is a type in a
nominative type system which cannot be instantiated directly.
Abstract types are also known as existential types.

and contrasts them with concrete types like Python's float, list, str.

I am using abstract in the sense of an abstraction, as opposed to
something concrete and real, not as a mechanism for specifying interfaces in
Java or Python. Python's float is a leaky abstraction of mathematical Real
numbers, and Python's softed() is a leaky abstraction of the concept of
sorting a collection. Both are abstractions, because they are *intended* to
gloss over real world details of Real numbers and sorting, but both leak
because the implementation of the abstraction spoils the abstraction.

http://www.joelonsoftware.com/articles/LeakyAbstractions.html



-- 
Steven

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


Re: how to get the ordinal number in list

2014-08-12 Thread Chris Angelico
On Wed, Aug 13, 2014 at 12:11 PM, Steven D'Aprano
steve+comp.lang.pyt...@pearwood.info wrote:
 both leak
 because the implementation of the abstraction spoils the abstraction.

Can you name *any* nontrivial abstraction that doesn't leak? I can't.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: how to get the ordinal number in list

2014-08-12 Thread Steven D'Aprano
Steven D'Aprano wrote:
[...]
 I am using abstract in the sense of an abstraction, as opposed to
 something concrete and real, not as a mechanism for specifying interfaces
 in Java or Python. Python's float is a leaky abstraction of mathematical
 Real numbers, and Python's softed() is a leaky abstraction of the concept
 of sorting a collection. 

Oh, I forgot to mention... sorting a collection is itself an abstraction
(that is, a generalisation) of concrete examples of sorting, such as
sorting a hand of cards, sorting an unruly crowd of school children into
order of height, sorting out a messy cutlery drawer, or sorting the books
in a library.

Abstractions are good and necessary, being a programmer is about learning to
invent and use abstractions, but both object-oriented and functional
programming circles are prone to over-abstraction and that's why they're a
an ill-fit for teaching beginners.

To a beginner, functions and their return result is an abstraction (and
quite a hard one for many people to learn). The natural tendency is to
write functions like this:

def frobnicate(value):
print (value + spam + eggs)


because they're thinking how do I get the frobnicated value? and the
obvious interface between I (the beginner) and the computer is visual.
They haven't learned the essential abstraction known as returning a value
yet and so they use:

- calculate the frobnicated value
- print it

instead of the generalisation:

- calculate the frobnicated value
- return[1] it to the caller[2]
- which captures that return result somewhere[3]
- and finally prints it

or possibly this one:

- calculate the frobnicated value
- return it to the REPL
- which prints it then throws it away






[1] What does return in the context of functions even mean? Try explaining
it to a beginner who doesn't understand functions. The best I can come up
with is you just keep showing them examples until they draw the connection
themselves.

[2] Who?

[3] Where?




-- 
Steven

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


Re: how to get the ordinal number in list

2014-08-12 Thread Rustom Mody
On Wednesday, August 13, 2014 12:59:35 AM UTC+5:30, Neil D. Cerutti wrote:

  Some things follow from this:
  For the lego-game of playing with functions at the REPL to work and be
  pleasant and rewarding:
  1. functions should be non side-effecting; else same trials giving different
  answers adds more confusion than understanding
  2. They should be non-printing else:
  def foo(x): return x+1
  def bar(x): print x+1
  look similar when trivially tried but compositionally are utterly different
  In effect a printing function breaks the lego bricks

 That may be so, but printing stuff to the screen is very natural to 
 people. I've downloaded Haskell a few times, but the knowledge that 
 getting input and writing output requires something mysterious called 
 gonads just frightens me.

I thought they were quite common wink

But yes...

- Monads in Haskell
- Pointers in C
- Inheritance in Java/Python

all suffer the same problem -- glorification of the failure-mode.

When one uses pointers, especially non-trivial pointer arithmetic in C,
one is essentially blasting a hole in the floor of the hi-level facade
of C and working at machine level.

Inheritance produces coupling whereas the whole intent of modularity is to 
avoid coupling.

Likewise Monads are for imperative programming in Haskell.
Maybe better to just use an imperative language?

 Functional programming could be particularly hard to teach since it is
 generally made up of numerous small units of work combined in a complex
 way. This is precisely the formula for something that beginners will
 find extremely challenging. 

 When functional programming is dumbed down enough for a beginner to be 
 able to grok it, the programming problems start to look really lame. It 
 needn't be that way, of course, but it takes a good deal of creativity 
 on the part of the instructor. If Factorial doesn't turn you on, you 
 might be screwed. ;)

Did you see my example a bit earlier on Catalan numbers?  I believe it
explains them better -- certainly more succinctly -- than the
math+verbiage you can find at:
http://en.wikipedia.org/wiki/Catalan_number

Yes it may be hard to grok but I think its the exact opposite of
'numerous small units'
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Using asyncio workers in a `concurrent.futures` interface

2014-08-12 Thread Marko Rauhamaa
Ian Kelly ian.g.ke...@gmail.com:

 On Tue, Aug 12, 2014 at 11:02 AM, cool-RR ram.rac...@gmail.com wrote:
 And that's it, no coroutines, no `yield from`. Since, if I understand
 correctly, asyncio requires a mainloop, it would make sense for the
 AsyncIOExecutor to have a thread of its own in which it could run its
 mainloop.

 I think that putting the event loop in a separate thread would be
 necessary if the intention is that the executor be invoked from
 outside. I'm not aware of this work having been done, but it sounds
 perfectly feasible.

Multithreading will require normal locking to protect critical sections.
Care must be taken to never yield while holding a threading lock.


Marko
-- 
https://mail.python.org/mailman/listinfo/python-list


[issue21166] Bus error in pybuilddir.txt 'python -m sysconfigure --generate-posix-vars' build step

2014-08-12 Thread koobs

koobs added the comment:

:DDD

This was an awesome experience working with you Ned, thanks for all the help.

Attaching my debugging  isolation steps for additional detail, posterity and 
reference.

--
Added file: 
http://bugs.python.org/file36356/python-buildbot-broken-debugging.txt

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



[issue22184] lrucache should reject maxsize as a function

2014-08-12 Thread Serhiy Storchaka

Changes by Serhiy Storchaka storch...@gmail.com:


--
nosy: +serhiy.storchaka

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



[issue21725] RFC 6531 (SMTPUTF8) support in smtpd

2014-08-12 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Adding new parameter in the middle of positional argument list can break 
existing code. If you want change arguments order, make their keyword-only.

--
nosy: +serhiy.storchaka

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



[issue12954] Multiprocessing logging under Windows

2014-08-12 Thread Ari Koivula

Ari Koivula added the comment:

I encountered this problem on Python 3.2.5 on Windows and don't think a vague 
warning about initializing modules is a proper solution. A better solution 
would be to simply not add multiple handlers, even if log_to_stderr is called 
more than once.

--
nosy: +Ari.Koivula

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



[issue17923] test glob with trailing slash fail on AIX 6.1

2014-08-12 Thread Serhiy Storchaka

Changes by Serhiy Storchaka storch...@gmail.com:


--
assignee:  - serhiy.storchaka
nosy: +serhiy.storchaka
stage: patch review - commit review

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



[issue21725] RFC 6531 (SMTPUTF8) support in smtpd

2014-08-12 Thread Milan Oberkirch

Milan Oberkirch added the comment:

Thanks for your review comments, serhiy.storchaka!
I may be blind right now, but where did I add a positional parameter?

--
Added file: http://bugs.python.org/file36357/issue21725v5.4.patch

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



[issue17923] test glob with trailing slash fail on AIX 6.1

2014-08-12 Thread Roundup Robot

Roundup Robot added the comment:

New changeset e430973149ed by Serhiy Storchaka in branch '2.7':
Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
http://hg.python.org/cpython/rev/e430973149ed

New changeset 5033589a752d by Serhiy Storchaka in branch '3.4':
Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
http://hg.python.org/cpython/rev/5033589a752d

New changeset 6a71d3c79653 by Serhiy Storchaka in branch 'default':
Issue #17923: glob() patterns ending with a slash no longer match non-dirs on
http://hg.python.org/cpython/rev/6a71d3c79653

--
nosy: +python-dev

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



[issue21795] smtpd.SMTPServer should announce 8BITMIME when supported and accept SMTPUTF8 without it

2014-08-12 Thread Milan Oberkirch

Milan Oberkirch added the comment:

Also the server should accept the SMTPUTF8 mail argument completely 
independently of 8BITMIME if both are enabled.

--
title: smtpd.SMTPServer should announce 8BITMIME when supported - 
smtpd.SMTPServer should announce 8BITMIME when supported and accept SMTPUTF8 
without it

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



[issue21725] RFC 6531 (SMTPUTF8) support in smtpd

2014-08-12 Thread Milan Oberkirch

Milan Oberkirch added the comment:

Sorry, I was blind (switching between languages to much)! Anyway there should 
be no existing code using decode_data as it was introduced in this development 
circle.

--

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



[issue19494] urllib2.HTTPBasicAuthHandler (or urllib.request.HTTPBasicAuthHandler) doesn't work with GitHub API v3 and similar

2014-08-12 Thread Matej Cepl

Matej Cepl added the comment:

Which are all reasons why I believe more conservative approach (i.e., new 
separate handler) is better.

It seems to be a little more silly to have 21 lines long module separately in 
PyPI for 2.7, but whatever.

--

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



[issue21448] Email Parser use 100% CPU

2014-08-12 Thread Roundup Robot

Roundup Robot added the comment:

New changeset ba90bd01c5f1 by Serhiy Storchaka in branch '2.7':
Issue #21448: Fixed FeedParser feed() to avoid O(N**2) behavior when parsing 
long line.
http://hg.python.org/cpython/rev/ba90bd01c5f1

New changeset 1b1f92e39462 by Serhiy Storchaka in branch '3.4':
Issue #21448: Fixed FeedParser feed() to avoid O(N**2) behavior when parsing 
long line.
http://hg.python.org/cpython/rev/1b1f92e39462

New changeset f296d7d82675 by Serhiy Storchaka in branch 'default':
Issue #21448: Fixed FeedParser feed() to avoid O(N**2) behavior when parsing 
long line.
http://hg.python.org/cpython/rev/f296d7d82675

--
nosy: +python-dev

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



[issue21448] Email Parser use 100% CPU

2014-08-12 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

 The test_parser.diff file catches the bug in fix_email_parse.diff

I don't see this. But well, it does no harm.

Please commit fix_prepending2.diff yourself.

--
assignee: serhiy.storchaka - rhettinger
versions:  -Python 2.7, Python 3.4

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



[issue22148] frozen.c should #include importlib.h instead of importlib.h

2014-08-12 Thread Brett Cannon

Brett Cannon added the comment:

The key point here is that importlib.h isn't installed with the other header 
files; it's purely for compilation since it doesn't expose any API. I'm not 
sure how you tweaked your build environment to break that assumption, but since 
importlib.h is not expected to be used outside of the build I don't want to 
make it a header that gets installed with the other headers Python provides for 
expressing APIs.

--
resolution:  - not a bug
status: open - closed

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



[issue17923] test glob with trailing slash fail on AIX 6.1

2014-08-12 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Thank you Delhallt.

Mark, yes, you are right, but the code can be simplified even more, to do less 
syscalls.

--
resolution:  - fixed
stage: commit review - resolved
status: open - closed

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



[issue11822] Improve disassembly to show embedded code objects

2014-08-12 Thread Josh Lee

Changes by Josh Lee jlee...@gmail.com:


--
nosy: +jleedev

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



[issue22186] Typos in .py files

2014-08-12 Thread Févry Thibault

New submission from Févry Thibault:

The patch removes several typos found in .py files.

--
assignee: docs@python
components: Documentation
files: spelling.diff
keywords: patch
messages: 225232
nosy: docs@python, iwontbecreative
priority: normal
severity: normal
status: open
title: Typos in .py files
type: enhancement
Added file: http://bugs.python.org/file36358/spelling.diff

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



[issue21448] Email Parser use 100% CPU

2014-08-12 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 71cb8f605f77 by Serhiy Storchaka in branch '2.7':
Decreased memory requirements of new tests added in issue21448.
http://hg.python.org/cpython/rev/71cb8f605f77

New changeset c19d3465965f by Serhiy Storchaka in branch '3.4':
Decreased memory requirements of new tests added in issue21448.
http://hg.python.org/cpython/rev/c19d3465965f

New changeset f07b17de3b0d by Serhiy Storchaka in branch 'default':
Decreased memory requirements of new tests added in issue21448.
http://hg.python.org/cpython/rev/f07b17de3b0d

--

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



[issue22171] stack smash when using ctypes/libffi to access union

2014-08-12 Thread Sean McCully

Sean McCully added the comment:

For what it is worth, I was not able to reproduce, on the current Python 2.7.8 
branch and Mac OS X.

./python2
Python 2.7.8+ (2.7:ba90bd01c5f1, Aug 12 2014, 12:21:58)

gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr 
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

Version:5.1.1 (5B1008)
  Location: /Applications/Xcode.app
  Applications:
  Xcode:5.1.1 (5085)
  Instruments:  5.1.1 (55045)
  SDKs:
  OS X:
  10.8: (12F37)
  10.9: (13C64)
  iOS:
  7.1:  (11D167)
  iOS Simulator:
  7.1:  (11D167)


python2 test.py
True

--
nosy: +seanmccully

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



[issue22187] commands.mkarg() buggy in East Asian locales

2014-08-12 Thread Jakub Wilk

New submission from Jakub Wilk:

This is how shell quoting in commands.mkarg() is implemented:

def mkarg(x):
if '\'' not in x:
return ' \'' + x + '\''
s = ' '
for c in x:
if c in '\\$`':
s = s + '\\'
s = s + c
s = s + ''
return s

This is unfortunately not compatible with the way bash splits arguments in some 
locales.
The problem is that in a few East Asian encodings (at least BIG5, BIG5-HKSCS, 
GB18030, GBK), the 0x5C byte (backslash in ASCII) could be the second byte of a 
two-byte character; and bash apparently decodes the strings before splitting.

PoC:

$ sh --version | head -n1
GNU bash, version 4.3.22(1)-release (i486-pc-linux-gnu)

$ LC_ALL=C python test-mkargs.py
crw-rw-rw- 1 root root 1, 3 Aug 12 16:00 /dev/null
ls: cannot access  ; python -c 'import this' | grep . | shuf | head -n1 | 
cowsay -y ; : No such file or directory

$ LC_ALL=zh_CN.GBK python test-mkargs.py
crw-rw-rw- 1 root root 1, 3 8月  12 16:00 /dev/null
ls: 无法访问乗: No such file or directory
 
 Simple is better than complex. 
 
\   ^__^
 \  (..)\___
(__)\   )\/\
||w |
|| ||
sh: 乗: 未找到命令

--
components: Library (Lib)
files: test-mkargs.py
messages: 225235
nosy: jwilk
priority: normal
severity: normal
status: open
title: commands.mkarg() buggy in East Asian locales
type: security
versions: Python 2.7
Added file: http://bugs.python.org/file36359/test-mkargs.py

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



[issue21795] smtpd.SMTPServer should announce 8BITMIME when supported and accept SMTPUTF8 without it

2014-08-12 Thread Milan Oberkirch

Milan Oberkirch added the comment:

The proposed patch extends process_message with an **kwargs catch-all which is 
filled with 'mail_options' and 'rcpt_options' if decode_data is False. I also 
removed process_smtputf8_message as one can detect the need for supporting 
SMTPUTF8 from kwargs['mail_options'] now.
8BITMIE is accepted if decode_data=False and SMTPUTF8 is accepted if 
enable_SMTPUTF8=True (which implies decode_data=False).

--
keywords: +patch
Added file: http://bugs.python.org/file36360/issue21795.patch

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



[issue22184] lrucache should reject maxsize as a function

2014-08-12 Thread Jakub Wilk

Changes by Jakub Wilk jw...@jwilk.net:


--
nosy: +jwilk

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



[issue22186] Typos in .py files

2014-08-12 Thread Georg Brandl

Georg Brandl added the comment:

Looks good except for this one:

-# Remove the 'Current' link, that way we don't accidentally mess
+# Remove the 'Current' link, that way we don't accidentaly mess

--
nosy: +georg.brandl

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



[issue22186] Typos in .py files

2014-08-12 Thread Févry Thibault

Févry Thibault added the comment:

Right, must have done something wrong at some point.
Here is an updated diff.

--
Added file: http://bugs.python.org/file36361/spelling.diff

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



[issue22187] commands.mkarg() buggy in East Asian locales

2014-08-12 Thread R. David Murray

R. David Murray added the comment:

For the record, neither this module nor this routine exist in python3, so this 
is a python2 only issue.

I'm not sure I fully understand the problem, but perhaps a possible strategy is 
to apply the fixes to python2's pipes.quote that were applied in python3 (where 
the function was further moved to shlex), and use that instead of mkarg.

--
nosy: +r.david.murray

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



[issue22177] Incorrect version reported after downgrade

2014-08-12 Thread Zachary Ware

Zachary Ware added the comment:

'python.exe' in the installation folder doesn't really matter -- it's just a 
tiny executable that embeds python27.dll, which contains the interpreter and is 
installed in C:\Windows\system32.  I suspect the installer didn't downgrade 
python27.dll because the installed version was newer.

As for your issue, such an in-place downgrade isn't quite supported (as you 
see), nor do I think it's a particularly good idea.  You should be able to 
achieve your goals with much less headache by uninstalling 2.7.8 completely 
with its own installer, then installing 2.7.5 where you want it.

Steve: is this something that would be easy/worthwhile to support in future 2.7 
installers?

--
components: +Installation, Windows
nosy: +steve.dower, zach.ware

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



[issue21308] PEP 466: backport ssl changes

2014-08-12 Thread Jakub Wilk

Changes by Jakub Wilk jw...@jwilk.net:


--
nosy: +jwilk

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



[issue22184] lrucache should reject maxsize as a function

2014-08-12 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 780693490c84 by Raymond Hettinger in branch '3.4':
Issue 22184: Early detection and reporting of missing lru_cache parameters
http://hg.python.org/cpython/rev/780693490c84

--
nosy: +python-dev

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



[issue22184] lrucache should reject maxsize as a function

2014-08-12 Thread Raymond Hettinger

Changes by Raymond Hettinger raymond.hettin...@gmail.com:


--
resolution:  - fixed
stage: patch review - resolved
status: open - closed

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



[issue11822] Improve disassembly to show embedded code objects

2014-08-12 Thread Raymond Hettinger

Changes by Raymond Hettinger raymond.hettin...@gmail.com:


--
stage: needs patch - patch review
versions: +Python 3.5 -Python 3.4

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



[issue20729] mailbox.Mailbox does odd hasattr() check

2014-08-12 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

If there are no objections I'll commit this patch.

--
assignee:  - serhiy.storchaka
versions: +Python 3.5 -Python 3.3

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



[issue22014] Add summary table for OS exception - errno mapping

2014-08-12 Thread Jon Poler

Jon Poler added the comment:

I will give this a shot if it is just hard-coding a table with errno names. 
Dynamically scraping the errno names and inserting them with the exception 
hierarchy might be beyond me since I've never used Sphinx before.

--
nosy: +jon.poler

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



[issue20729] mailbox.Mailbox does odd hasattr() check

2014-08-12 Thread R. David Murray

R. David Murray added the comment:

Committing the patch seems like the right thing to do at this point in time.

--

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



  1   2   >